home *** CD-ROM | disk | FTP | other *** search
- unit example;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- ExtCtrls;
-
- type
- Texample = class(TCustomPanel)
- private
- fNewWindowProc : Pointer; {pointer to our window function}
- fOldWindowProc : Pointer; {previous window function }
- fTargetHandle : hWnd;
- Procedure NewFormFunction(var msg : tmessage);
- protected
- { Protected declarations }
- public
- constructor create(aOwner: tcomponent); override;
- procedure turnOnSubClassing;
- procedure TurnOffSubClassing;
- published
- property Align;
- property Alignment;
- property BevelInner;
- property BevelOuter;
- property BevelWidth;
- property BorderWidth;
- property BorderStyle;
- property DragCursor;
- property DragMode;
- property Enabled;
- property FullRepaint;
- property Caption;
- property Color;
- property Ctl3D;
- property Font;
- property Locked;
- property ParentColor;
- property ParentCtl3D;
- property ParentFont;
- property ParentShowHint;
- property PopupMenu;
- property ShowHint;
- property TabOrder;
- property TabStop;
- property Visible;
- property OnClick;
- property OnDblClick;
- property OnDragDrop;
- property OnDragOver;
- property OnEndDrag;
- property OnEnter;
- property OnExit;
- property OnMouseDown;
- property OnMouseMove;
- property OnMouseUp;
- property OnResize;
- property OnStartDrag;
- end;
-
- procedure Register;
-
- implementation
-
- constructor Texample.create(aOwner: tcomponent);
- begin
- inherited create(aowner);
- bevelInner := bvLowered;
- bevelWidth := 3;
- caption := 'Subclassing off';
- end;
-
- procedure Texample.NewFormFunction(var msg : tmessage);
- begin
- case msg.msg of
- WM_LBUTTONDOWN : color := clLime;
- WM_RBUTTONDOWN : color := clWhite;
- end;
- msg.Result := CallWindowProc(fOldWindowProc, fTargetHandle, msg.Msg, msg.wParam, msg.LParam);
- end;
-
- procedure texample.turnOnSubClassing;
- begin
- fTargetHandle := parent.handle;
- fNewWindowProc := MakeObjectInstance(NewFormFunction);
- fOldWindowProc := Pointer(SetWindowLong(fTargetHandle, GWL_WNDPROC, LongInt(fNewWindowProc)));
- caption := 'Subclassing on';
- end;
-
- procedure tExample.TurnOffSubClassing;
- begin
- SetWindowLong(fTargetHandle, GWL_WNDPROC, longint(fOldWindowProc));
- FreeObjectInstance(fNewWindowProc);
- caption := 'Subclassing off';
- color := clBtnFace;
- end;
-
-
- procedure Register;
- begin
- RegisterComponents('Samples', [Texample]);
- end;
-
- end.
-