您的位置:首页 > 其它

子类化窗口控件的窗口过程(系统级替换,与直接替换控件的WndProc方法不是一回事)

2015-08-21 17:56 387 查看
要说灵活性,自然是比不上Delphi自带的覆盖WndProc,或者替换WndProc方法。

unit   Unit1;

interface

uses
Windows,   Messages,   SysUtils,   Classes,   Controls,   Forms,   Dialogs,   StdCtrls;

type
TForm1   =   class(TForm)
Edit1:   TEdit;
procedure   FormCreate(Sender:   TObject);
private
FOldWndProc,   FNewWndProc:   TFarProc;
procedure   WindowProc(var   Message:   TMessage);
end;

var
Form1:   TForm1;

implementation

{$R   *.dfm}

procedure   TForm1.WindowProc(var   Message:   TMessage);
begin
Message.Result   :=   CallWindowProc(FOldWndProc,   Edit1.Handle,   Message.Msg,
Message.WParam,   Message.LParam);
end;

procedure   TForm1.FormCreate(Sender:   TObject);
begin
FNewWndProc   :=   MakeObjectInstance(WindowProc);
FOldWndProc   :=   Pointer(GetWindowLong(Edit1.Handle,   GWL_WNDPROC));
SetWindowLong(Edit1.Handle,   GWL_WNDPROC,   LongInt(FNewWndProc));
end;

end.

// 其它消息做默认处理
Result := DefWindowProc(hWnd, uMsg, wParam, lParam);


参考:http://www.cnblogs.com/key-ok/p/3380556.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: