怎么样在窗体外接受到鼠标右键的送开? (50分)

H

huansun

Unregistered / Unconfirmed
GUEST, unregistred user!
当鼠标右键按下后拖动至窗体外部,然后送开,这时将不触发OnMouseUp 事件。
[8D]
问题:怎样用判断鼠标左右键状态的方法来解决。或是其他的什么方法来实现呢?
 
处理WM_MBUTTONUP消息
WM_MBUTTONUP
fwKeys = wParam; // 按键标志
xPos = LOWORD(lParam); // 水平坐标
yPos = HIWORD(lParam); // 垂直坐标
fwKeys值
MK_CONTROL :表示按CTRL键
MK_LBUTTON :表示按鼠标左键
MK_RBUTTON :表示按鼠标右键
MK_SHIFT :表示按SHIFT键
 
谢谢 wangjiankang_71 !

那我直接要知道:怎样判断当前我鼠标的某一个键是否被按下了呢?
该怎样实现呢?
 
这样不行。只需鼠标按下时调用SetCapture API就行了,即使
移出控件,也能得到up事件。
 
对了,别忘了在up事件里releaseCapture
 
抱歉。 Crane!
我还不是很理解你的做法,我在OnMouseDown 里加入一个怎样的调用 GetCapture
的过程,是返回怎样的类型?
在OnMouseUp 里又是怎样来调用 ReleaseCapture 呢.

因为我试验的结果是,我虽然在OnMouseDown 里加入一处调用了GetCapture(方法可能有错)
,但是,这样还是不能在鼠标移出窗体时触发OnMouseDown(尤其时右键,左键总是能触发的)
事件.

困惑太多,我的经验又不足,还请多多指教!谢谢
 
procedure TForm1.Timer1Timer(Sender: TObject);
var keystate:TKeyboardState;
begin
caption:='';
GetKeyboardState(keystate);
if keystate[vk_lbutton] and $80 <>0 then
caption:='lbutton down';
if keystate[vk_rbutton] and $80 <>0 then
caption:='Rbutton down';
end;
 
在OnMouseDown中加入:
SetCapture(Handle);//Handle是窗体名柄
........

在OnMouseUp中加入:
.....你要完成的操作
ReleaseCapture;

天,用TIMER?有点费CPU,不觉得吗?
 
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin

SetCapture(form1.Handle);
ShowMessage('Mouse Down');
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ShowMessage ('Mouse Up');
ReleaseCapture;
end;

一个窗体只有这两个事件!
当我按下右键,触发 OnMouseDown 事件,保持按下状态,拖动至窗体外部松开
不会触发OnMouseUp 事件.
并没有达到预计的效果.
再次请教...
 
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
SetCapture(form1.Handle);
ShowMessage('Mouse Down');//这时你弹出一个MSGBOX,你的窗体己经没有控制权
当然不可能咯。去掉应该就可以了。
end;
 
谢谢 BeginDelphi !
对于窗体的操作我已经知道.
不过,我的程序中使用到的地方是在控件上的事件触发
如:Timage. Panel 上鼠标的事件触发

直接使用在控件上的鼠标事件 是不可以触发的

直接点说:我编了一个扫雷的游戏,现在发现一个问题
就是当我在Image上点了鼠标右键然后拖出窗体,就会有Bug了。

如果您有时间的话,不知能否麻烦您看一下我的源程序,多谢了!

下载地址 :
http://www.delphibox.com/softview.php?type=f&amp;softid=161&amp;page=1

不甚感激!!
My E-mail : luehing@163.com
 
接受答案了.
 
huansun:看来还是喂到嘴边的东西最香呵。
 
顶部