|
#1
|
||||
|
||||
Message
Имеется 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. |