在mousemove的时候,如何知道哪个按钮被按下?(50分)

  • 主题发起人 主题发起人 cAkk
  • 开始时间 开始时间
C

cAkk

Unregistered / Unconfirmed
GUEST, unregistred user!
如题.<br><br>或者说,在程序运行的任何时候,如果我想知道此刻是否有鼠标按钮被按下,<br>怎么知道是哪个按钮?
 
获取WM_NCHITEST事件怎么样?
 
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);<br>begin<br>&nbsp; if ssLeft in Shift then { make sure button is down }<br>&nbsp; begin<br>&nbsp; &nbsp; &nbsp;StatusBar1.Panels[0].Text := 'Top: ' + IntToStr(Y);<br>&nbsp; end<br>end
 
TShiftState:<br>ssShift The Shift key is held down.<br>ssAlt The Alt key is held down.<br>ssCtrl The Ctrl key is held down.<br>ssLeft The left mouse button is held down.<br>ssRight The right mouse button is held down.<br>ssMiddle The middle mouse button is held down.<br>ssDouble The mouse was double-clicked.
 
cAkk想用小分换大分? :)<br>
 
不知道是否误会题目意思了?<br>(提问的可是cAkk呀)
 
type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);<br><br>Value Meaning<br><br>ssShift The Shift key is held down.<br>ssAlt The Alt key is held down.<br>ssCtrl The Ctrl key is held down.<br>ssLeft The left mouse button is held down.<br>ssRight The right mouse button is held down.<br>ssMiddle &nbsp;The middle mouse button is held down.<br>ssDouble &nbsp;The mouse was double-clicked.<br><br>判断右键用以下代码:<br><br>if ssRight in shift then &nbsp;.......
 
当然不是在mousedown中了,而是随时想知道.这样的东西不会直接得到的.
 
是"&lt;font color=red&gt;随时&lt;/font&gt;"想知道,也许题目写得不够准确,所以我在后面已经补充说明了.<br><br>比如: 在timer事件里.<br><br>当然,我不是真的要在timer事件里来捕获鼠标事件,只是举一个例子而已.<br><br>menxin: 怎么换大分? 快告诉我!!
 
你不是为解决某个高分问题而提问的吗? &nbsp;:)
 
你是说那个popmenu+edit吗?<br><br>不是的,那个问题基本上已经归CJ了,他介绍的那个控件已经很完美的解决了问题.<br>现在差的只是研究一下他的源代码而已了. <br><br>哎!让CJ捡了个大便宜.... ;-)<br><br>我这个问题是做一个小程序时突然想起来的,一时没有思路,就提出来了.
 
好吧.看看这个行不行.<br>找一接受事件的控件,如form1.<br>setcapture(form1.handle);<br>此时,鼠标事件被capture到form1,即使到form1外,也可捉到,但有时也无效.如果为<br>了捉mousedown还是没有问题的.<br>然后releasecapture;就行了.至于什么时候开始什么时候结束就看你自己安排了.<br>因为捕捉mouse同时只能有一个.
 
如果我要在timer事件里检测鼠标按钮呢?<br><br>我希望能有一个函数可以随时得到鼠标按健状态,就象GetCursorPos一样.<br>看borland的WIN32 API帮助,有一个函数GetInputState好像可以,但是<br>我没有成功.
 
可用如下语句:<br>var<br>i:integer;<br>for i=0 to last do<br>&nbsp;if (sender as tcompenent(I))is button then <br>begin <br>if button(tcompenent)。tag=1 then <br>showmessage('this is button1');<br>.<br>.<br>.<br>前提是设置好每个 button 的 tag 属性。<br>程序我没编译过。不过应该差不多
 
小阿蒙: 你在说什么呀? 是不是贴错地方了? :-)
 
cakk 你是不是会错意了。当鼠标安在按钮上,是判断是那个按钮。还是你说的<br>建立一个判断鼠标的按钮
 
我的问题里好像没有提到说有什么控件呀?<br><br>仅仅是想随时判断鼠标目前的按钮状态,比如在一个timer里.<br><br>如果你还不理解,我这样说吧: 一个空空的窗口,或者甚至该窗口也是隐藏的,<br>窗口上有一个timer控件,每10秒发生一次中断,我想在该timer事件里判断<br>目前鼠标的按钮状态.
 
这么简单的问题?<br>if GetAsyncKeyState(VK_LBUTTON) &lt;&gt; 0 then<br>&nbsp; // left button down;<br>if GetAsyncKeyState(VK_MBUTTON) &lt;&gt; 0 then<br>&nbsp; // middle button down;<br>if GetAsyncKeyState(VK_RBUTTON) &lt;&gt; 0 then<br>&nbsp; // right button down;
 
kao! 不早说! 等的就是你这个函数!<br><br>我说过了,就是和GetCursorPos类似的一个函数,可大家似乎都没理解意思(除了menxin).<br><br>多谢W.H!
 
后退
顶部