导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
2004/1/14 15:05:24
标题:
高手们,紧急求救!!!! 在线等~~~~~~~~~~
浏览:2425
加入我的收藏
楼主:
问题是这样的:窗体在桌面上自动移动,我想使鼠标放在它上面时,它就停止移动;移开鼠标后窗体继续移动。我发现FORM没有ONMOUSEENTER这个事件!请问,我该怎么实现?!谢谢各位帮助一下小弟!
----------------------------------------------
俺很菜,但俺很执着!!!
作者:
2004/1/14 15:12:19
1楼:
move 事件 试试判定! 多加个中间变量!
----------------------------------------------
寵辱不驚,看庭前花開花落。 去畱無意,望天上雲捲雲舒。 千江有水千江月,万里无云万里天。
作者:
nptch (nptch)
★☆☆☆☆
-
盒子活跃会员
2004/1/14 15:15:13
1楼:
重写wndproc事件 判断WM_MOUSEMOVE消息触发时就是鼠标在FORM上。 Public procedure wndproc(var msg:Tmessage);override; ... procedure Tform1.wndproc(var msg:Tmessage); begin if msg.msg=WM_MOUSEMOVE then begin //do something end else Inherited; end;
----------------------------------------------
-
作者:
2004/1/14 15:15:43
2楼:
在窗体上放一控件,panel或image,align := alClient ;)
----------------------------------------------
-
作者:
2004/1/14 15:17:36
3楼:
谢谢各位,小弟先试一下!
----------------------------------------------
俺很菜,但俺很执着!!!
作者:
2004/1/14 15:21:44
4楼:
十分感谢1楼的师兄!能停下来了!但是我想将鼠标移开的时候,窗体又继续移动,怎么办喃?
----------------------------------------------
俺很菜,但俺很执着!!!
作者:
nptch (nptch)
★☆☆☆☆
-
盒子活跃会员
2004/1/14 15:37:03
5楼:
WM_MOUSELEAVE
----------------------------------------------
-
作者:
2004/1/14 15:48:39
6楼:
哎呀,NPTCH大哥,我真的很笨啊!试了,但是不对,我不知道怎么把这两个事件放在一起哈!
----------------------------------------------
俺很菜,但俺很执着!!!
作者:
2004/1/14 15:53:22
7楼:
NPTCH大哥,又出了一个问题!用WM_MOUSEMOVE来使它停下来,并不是每次都可以哈!这是怎么回事呢?
----------------------------------------------
俺很菜,但俺很执着!!!
作者:
nptch (nptch)
★☆☆☆☆
-
盒子活跃会员
2004/1/14 16:07:52
8楼:
if msg.msg=wm_mousemove then //do if msg.msg=wm_mouseleave then //do 至于有时不行,我没看过你的源码,你发到我的信箱我看看! nptch@mail.china.com
----------------------------------------------
-
作者:
2004/1/14 16:17:38
9楼:
邮件已经发过去了哈! 如果我想自定义一个消息来判断鼠标是否在窗体中,行不行呢?
----------------------------------------------
俺很菜,但俺很执着!!!
作者:
nptch (nptch)
★☆☆☆☆
-
盒子活跃会员
2004/1/14 16:49:23
10楼:
if msg.Msg=Cm_mouseenter then begin timer1.Enabled:=false; end; if msg.Msg=cm_mouseleave then begin timer1.Enabled:=true; end; inherited;
----------------------------------------------
-
作者:
nptch (nptch)
★☆☆☆☆
-
盒子活跃会员
2004/1/14 16:50:12
11楼:
我试了可以!
----------------------------------------------
-
作者:
nptch (nptch)
★☆☆☆☆
-
盒子活跃会员
2004/1/14 17:14:10
12楼:
inherited; case msg.Msg of CM_mouseenter:timer1.Enabled:=false; CM_MOUSELEAVE:begin timer1.Enabled:=true; sendmessage(handle,WM_LBUTTONDOWN,0,0); end; end; 有时移开了也不法再移动是因为事件被锁定了,可以模拟一个数标单击消息,解决问题!
----------------------------------------------
-
作者:
2004/1/14 17:15:39
13楼:
恩,好的,我再试一下!再次感谢你!
----------------------------------------------
俺很菜,但俺很执着!!!
作者:
2004/1/15 15:17:48
14楼:
NPTCH大哥,我试了,还是不行哈! 于是,我这样用的,你看行得通不:? procedure TfrmFly.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin Timer1.Enabled := False; end; 这段代码可以使窗体停下来哈,而且次次能成功(至少我试的几次都可以哈)!但是,怎么才能使它又继续移动喃? 如果有哪位高手知道,请告诉小弟一声,感谢!~~~~~~~~~~~
----------------------------------------------
俺很菜,但俺很执着!!!
作者:
2004/1/15 15:19:47
15楼:
我在 Timer1.Enabled := False;后又加了一句哈: if (x = 0) or (y = 0) then Timer1.Enabled := True; 但是这样只有很少机会才能成功,能解释一下是为什么吗?
----------------------------------------------
俺很菜,但俺很执着!!!
作者:
2004/1/15 15:30:45
16楼:
NPTCH大哥,我又将上面那两句删了,用的是你教我的方法: procedure TfrmFly.WndProc(var Msg: TMessage); begin if Msg.Msg = CM_MOUSELEAVE then Timer1.Enabled := True else inherited; end; 可以成功了哈,不过,为什么鼠标只有从上方离开窗体的时候才能每次都行,若从其它三个方向离开,则不是次次都行哈!WHY????????
----------------------------------------------
俺很菜,但俺很执着!!!
作者:
2004/1/15 15:36:41
17楼:
我又重新试了一下,如果是慢慢将鼠标移出窗体,那么次次都能成功哈!它的原因是不是:鼠标移动过快的话,WNDPROC消息并不能接收到?
----------------------------------------------
俺很菜,但俺很执着!!!
作者:
2004/1/15 15:47:32
18楼:
NPTCH大哥,小弟的问题解决了哈!我是这样实现的: procedure TfrmFly.WndProc(var Msg: TMessage); begin if Msg.Msg = CM_MOUSEENTER then Timer1.Enabled := False; if Msg.Msg = CM_MOUSELEAVE then Timer1.Enabled := True else inherited; end; procedure TfrmFly.WMNCHITTEST(var Msg: TWMNCHitTest); begin inherited; if HTCLIENT = Msg.Result then Msg.Result := HTCAPTION; end; 非常感谢你给的帮助!谢谢,谢谢了哈!
----------------------------------------------
俺很菜,但俺很执着!!!
作者:
2004/1/15 15:57:30
19楼:
但是我觉得我这个方法是不是笨了一点哦?!有没有简单一点的?
----------------------------------------------
俺很菜,但俺很执着!!!