首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-02-15 
拦截鼠标单击事件有一个TForm上面有些控件.要求实现当鼠标单击在这个Form上的时候(包括单击Form上的控件上

拦截鼠标单击事件
有一个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

热点排行