读书人

拦截鼠标单击事件,该如何处理

发布时间: 2012-02-15 12:09:44 作者: rapoo

拦截鼠标单击事件
有一个TForm 上面有些控件.
要求实现当鼠标单击在这个Form上的时候(包括单击Form上的控件上和Form的标题栏上)运行一个过程,怎么实现??注意,包括标题栏.
简单的说一下思路就好.

[解决办法]
procedure TForm1.FormClick(Sender: TObject);
begin

end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin

end;

一个是鼠标单击,一个是鼠标的左键按下
就是上面两个过程,如果是控件的话,对相应的控件添加这两个过程不就行了?
[解决办法]
procedure TForm1.MsgProc(var Msg: TMessage);
begin
if Msg.Msg = WM_SYSCOMMAND then
Caption := Format( '%d,%d;标题 ', [mouse.CursorPos.X, mouse.CursorPos.Y]);
if Msg.Msg = WM_LButtonDown then
Caption := Format( '%d,%d;窗口 ', [mouse.CursorPos.X, mouse.CursorPos.Y]);

WndProc(Msg);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
self.WindowProc := MsgProc;
end;
[解决办法]
在每个控件clicked的事件里写通用性不是很好,可以用截获消息的办法,也可以用actionlist加过程的方法。
[解决办法]
Application.OnMessage
case WM_LBUTTONDOWN,WM_NCLBUTTONDOWN:
if(GetAncestor(MSG.HWMD,GA_ROOT)=MyForm.Handle)
dosth;
[解决办法]
setwindowshookex

读书人网 >.NET

热点推荐