如何捕获鼠标单击,双击,右击事件?(200分)(200分)

  • 主题发起人 主题发起人 dxpjj
  • 开始时间 开始时间
D

dxpjj

Unregistered / Unconfirmed
GUEST, unregistred user!
当鼠标在屏幕任意位置点击时,如何捕获此事件??
 
这里有现成的。呵呵。

type
TForm1 = class(TForm)
Edit1: TEdit;
private
{ Private declarations }
procedure FORM_WMLBUTTONDOWN(var Message: TMessage);message WM_LBUTTONDOWN;

public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

{ TForm1 }

procedure TForm1.FORM_WMLBUTTONDOWN(var Message: TMessage);
var
aPoint:TPoint;
Msg:TWMLBUTTONDOWN;
begin
inherited;
Msg := TWMMouse(Message);
apoint := Point(Msg.XPos,Msg.YPos);
if (0<aPoint.x)and(aPoint.x<200)and(0<aPoint.y)and(aPoint.y<200) then
postmessage(edit1.handle,WM_KeyDown,65,0);

end;


end.
 
我把后面的续完
if (0〈aPoint.x)and(aPoint.x〈200)and(0〈aPoint.y)and(aPoint.y〈200) then
postmessage(edit1.handle,WM_KeyDown,65,0);
end;
 
上面程序的功能是:
当鼠标在窗体的 X:(0,200) Y:(0,200) 区域内点下
才向edit1的text中添加一个小写的“a”。
 
dxpjj的“屏幕任意位置”不知是否包括了你所做的程序以外的位置呢?如果是的话,那么
可以告诉你,用JIANL的方法我试过,只能在程序的表单范围以内有响应,要想在程序以外
的范围也有响应的话,就要用到HOOK了,这样的例子在这里多的是,在前面搜索一下,就可
找到你想要的了!
 
用消息最好
左击 -〉WM_LBUTTONDOWN、WM_LBUTTONUP、WM_LBUTTONDBLCLK
右击 -〉WM_RBUTTONDOWN、WM_RBUTTONUP、WM_RBUTTONDBLCLK
中击 -〉WM_MBUTTONDOWN、WM_MBUTTONUP、WM_MBUTTONDBLCLK
 
只好用到mousehook了
例程到处都有:)
 
JIANL+cat.yy的方法只能在窗体内有效
外面只好用到mousehook
 
来晚了,的确要用mousehook
 
不必用Hook
只要SetCapture就可以了. 不过只能捕捉一次mouse的按键, 因为按了键后焦点就转移
到其他程序上去了 :)
 
谢谢大家的关注,小弟在此道一声万福!!
谁有mousehook的原代码寄份给我,银子归你了!!e_mail:dxpjj@263.net
 
iamfly2000说得对,要包含自己程序以外的范围也有响应.
 
请看E-MAIL,dxpjj.
 
是否有mousehook的源码??同时,有要在鼠标点击屏幕时的事件中加一段代码。
 
天哪!怎么没有响应,急晕了!
可能大家理解错了,我要在鼠标点击时的事件中加入一此代码,如form1有onmousedown,onmousemove等事件,
但该事件只对form1上有效,若在form1外点击鼠标就不响应事件,如何在任意位置响应呢???
 
那不是已经解决了么?
 
dxpjj:差不多就结束你的问题!
 
多人接受答案了。
 
后退
顶部