===========鼠标右键问题===============
当鼠标停留在某个按钮或者组件上时,该按钮或组件有自己的鼠标事件代码,此时点击鼠标右键,我不想执行该按钮或组件的鼠标按键代码,而是希望执行其他代码,如何实现啊。
好像老是会被按钮捕捉到,难道用钩子?太麻烦了吧。
问题点数:10、回复次数:13Top
1 楼lovefox_zoe(爱情狐狸)回复于 2005-08-17 11:35:52 得分 0
自己顶下。Top
2 楼jackie168(http://soft.eastrise.net)回复于 2005-08-17 11:39:56 得分 0
button_x.click;Top
3 楼lovefox_zoe(爱情狐狸)回复于 2005-08-17 12:13:16 得分 0
楼上老大,我不想执行组件的鼠标事件啊。Top
4 楼lovefox_zoe(爱情狐狸)回复于 2005-08-17 15:36:47 得分 0
想执行其他事件啊。Top
5 楼lovefox_zoe(爱情狐狸)回复于 2005-08-17 23:31:05 得分 0
比如:有一个panel,上面放了几个button,每个butoon有自己的鼠标Onmousedown事件,不过Onmousedown只实现其中左键事件。我希望,在panel范围内,不管鼠标停留在哪个组件上方,当点击右键的时候都可以执行某个过程或者函数。Top
6 楼decal(我用DELPHI)回复于 2005-08-17 23:56:22 得分 0
对俺这种初学者来说,有点难度!Top
7 楼hangguojun(布丁)回复于 2005-08-18 08:06:03 得分 5
在OnMouseDown事件中
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button=mbRight then
ShowMessage('你按了鼠标右键');
end;
Top
8 楼lovefox_zoe(爱情狐狸)回复于 2005-08-18 08:08:43 得分 0
楼上大哥,你的这个我知道,关键是,当鼠标停留在button1时,我不想执行button的代码啊。我想执行panel的代码啊。如果panel上有好多button,一个个写右键代码,那还不得累死。Top
9 楼lovefox_zoe(爱情狐狸)回复于 2005-08-18 17:51:51 得分 0
procedure TForm1.WndProc(var Message: TMessage);
begin
//WM_RBUTTONDOWN = $0204;
inherited WndProc(Message);
with Message do
if (Msg = WM_RBUTTONDOWN ) then
begin
showmessage('你点击了右键--------------');
end;
end;
我用如上代码,结果,只要鼠标是在原本有鼠标事件的地方点击右键,就会触发两次消息(比如有个BUTTON有鼠标的mousedown事件,不过该button是判断鼠标的双击),在窗体上用右键没有问题。
怎么回事。我不是只判断button的双击嘛,而且是左键双击,为什么会触发消息的右键呢?Top
10 楼lovefox_zoe(爱情狐狸)回复于 2005-08-19 23:07:16 得分 0
还有就是有两个PANEL,我在其中一个PANEL1的ONEXIT写代码PANEL1.hide,表示失去焦点的时候,隐藏自己,可我点击PANEL2,该PANEL2无法获取焦点?
可是PANEL有SETFOCUS的功能啊。为什么点击它无法获取焦点呢?Top
11 楼Idle_(阿呆)回复于 2005-08-20 09:37:10 得分 5
1. 如果你不希望原来事件执行, 那么就截WM_LBUTTONDOWN或WM_RBUTTONDOWN消息直接进入你自己的处理过程,处理完后不要调用inherited。
2. 设置Panel.TabStop:=true,点击Panel就能获得焦点了Top
12 楼lovefox_zoe(爱情狐狸)回复于 2005-08-21 09:47:51 得分 0
to 楼上大哥:
设置TabStop属性后,点击并不能获取焦点啊Top
13 楼lovefox_zoe(爱情狐狸)回复于 2005-08-21 10:02:03 得分 0
还要在panel里面写代码嘛。TabStop应该是用键盘Tab的时候获取焦点吧。Top




