home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 February / PCWorld_1999-02_cd.bin / temacd / HotKeys / WComp.pas < prev   
Pascal/Delphi Source File  |  1998-08-11  |  2KB  |  74 lines

  1. unit WComp;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Forms;
  7.  
  8. type
  9.   TWindowedComponent = class(TComponent)
  10.   private
  11.     FHandle : THandle;
  12.     function GetHandle: THandle;
  13.     { Private declarations }
  14.   protected
  15.     procedure WndProc(var Msg : TMessage); virtual;
  16.     { Protected declarations }
  17.   public
  18.     function HandleAllocated: Boolean;
  19.     procedure HandleNeeded;
  20.     procedure DefaultHandler(var Message); override;
  21.     constructor Create(AOwner : TComponent); override;
  22.     destructor Destroy; override;
  23.     property Handle: THandle read GetHandle;
  24.   end;
  25.  
  26.  
  27. implementation
  28.  
  29. { TWindowedComponent }
  30.  
  31. constructor TWindowedComponent.Create(AOwner : TComponent);
  32. begin
  33.   inherited Create(AOwner);
  34.   FHandle := 0;
  35. end;
  36.  
  37. destructor TWindowedComponent.Destroy;
  38. begin
  39.   if HandleAllocated then DeAllocateHWnd(FHandle);
  40.   inherited Destroy;
  41. end;
  42.  
  43. function TWindowedComponent.HandleAllocated: Boolean;
  44. begin
  45.   Result := FHandle<>0;
  46. end;
  47.  
  48. procedure TWindowedComponent.HandleNeeded;
  49. begin
  50.   if not HandleAllocated then FHandle := AllocateHWnd(WndProc);
  51. end;
  52.  
  53. function TWindowedComponent.GetHandle: THandle;
  54. begin
  55.   HandleNeeded;
  56.   Result := FHandle;
  57. end;
  58.  
  59. procedure TWindowedComponent.WndProc(var Msg : TMessage);
  60. begin
  61.   Dispatch(Msg);
  62. end;
  63.  
  64. procedure TWindowedComponent.DefaultHandler(var Message);
  65. begin
  66.   if FHandle <> 0 then
  67.    with TMessage(Message) do
  68.     Result := DefWindowProc(FHandle, Msg, wParam, lParam)
  69.   else
  70.     inherited DefaultHandler(Message);
  71. end;
  72.  
  73. end.
  74.