Подменой оконной процедуры этого объекта. Читайте тему 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;