![]() |
|
|
#1
|
||||
|
||||
|
Имеется Handle какого-либо элемента (например Panel1 или Form1). Как отловить и обработать WM_MOUSEDOWN, WM_MOUSEMOVE, WM_PAINT этого элемента. Спасибо за ответ.
|
|
#2
|
|||
|
|||
|
Подменой оконной процедуры этого объекта. Читайте тему subclassing в Windows SDK.
____________________ Вот примерчик... Код:
var
Form1: TForm1;
OldPanelProc: Integer;
function NewPanelProc(hndl: HWND; msg: UINT;
wPrm: WPARAM; lPrm: LPARAM): LRESULT; stdcall;
............................
function NewPanelProc(hndl: HWND; msg: UINT;
wPrm: WPARAM; lPrm: LPARAM): LRESULT; stdcall;
begin
case msg of
WM_LBUTTONDOWN: ShowMessage('WM_MOUSEDOWN');
WM_MOUSEMOVE: {Blah-blah};
WM_PAINT: {Blah};
end;
Result := CallWindowProc(Pointer(OldPanelProc), Form1.Panel1.Handle,
msg, wPrm, lPrm);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
OldPanelProc := SetWindowLong(Panel1.Handle, GWL_WNDPROC, Integer(@NewPanelProc));
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SetWindowLong(Panel1.Handle, GWL_WNDPROC, OldPanelProc);
end;Последний раз редактировалось Nyctos Kasignete, 13.08.2009 в 15:36. |