OnMouseMove是当鼠标移动到控件时会触发一个事件。如何让鼠标移动到窗口后2秒钟后触发?如果不足2秒就不触发。

ngyxh 2003-08-04 11:05:24

比如:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
showmessage('asdf');
end;
能不能在鼠标移动到TForm1时后两秒钟后触发该事件,而不是移动到TForm1时立即触发。

有的同志告诉我用sleep(2000)来实现,可是这样有一个问题。不足2秒钟时,鼠标离开窗体,事件同样触发,我要的结果与hint的效果差不多。如果不足2秒时就不触发这个事件。再次谢谢大家。

...全文
319 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
duxin 2003-08-07
  • 打赏
  • 举报
回复
查收
duxin 2003-08-06
  • 打赏
  • 举报
回复
你怎么组织的代码


我这里又测试了一下 没问题阿
ngyxh 2003-08-06
  • 打赏
  • 举报
回复
to duxin(小伍) 你的方法不行啊。

当鼠标离开窗口时,事件还是会触发的。
ngyxh 2003-08-06
  • 打赏
  • 举报
回复
to duxin(小伍) 你的方法好像不行啊。
当鼠标离开窗口时,还是会触发事件的。
duxin 2003-08-06
  • 打赏
  • 举报
回复
还没明白?



procedure aaa (var message:Tmessage);message WM_MOUSELEAVE;

截的 就是 离开的消息阿





:)你的分可真难挣
ngyxh 2003-08-06
  • 打赏
  • 举报
回复
可是当鼠标不在窗体上时怎么让timer1.enabled:=false呢。
duxin 2003-08-06
  • 打赏
  • 举报
回复
fuyifan(程序执著者) 解释得对 窗口类的定义部分声明一下
procedure aaa (var message:Tmessage);message WM_MOUSELEAVE;
ngyxh 2003-08-06
  • 打赏
  • 举报
回复
duxin(小伍)
您能把经测试好的程序给我打包发过来吗?
ngyxh@yeah.net
tianwater 2003-08-06
  • 打赏
  • 举报
回复
赞成: failer(独败)
ngyxh 2003-08-06
  • 打赏
  • 举报
回复
up
overtime 2003-08-05
  • 打赏
  • 举报
回复
那你在你的事件你们做个延迟不就的了,判断时间有没有到,如果没有就不触发
duxin 2003-08-05
  • 打赏
  • 举报
回复
var
Form1: TForm1;
z:integer;
implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Interval:=2000 ;
if z= 1 then
showmessage ('aaaa') ;
Timer1.Enabled:=false;


end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
z:=1 ;
timer1.enabled:=true;
end;
procedure Tform1.aaa (var message:Tmessage);
begin
Timer1.enabled:=false;
z:=0
end;

以测试
fuyifan 2003-08-05
  • 打赏
  • 举报
回复
是窗口类自定义的函数
自己在窗口类的定义中加
procedure aaa (var message:Tmessage);
FrameSniper 2003-08-05
  • 打赏
  • 举报
回复
支持一楼的!
ngyxh 2003-08-05
  • 打赏
  • 举报
回复
up
ngyxh 2003-08-05
  • 打赏
  • 举报
回复
procedure Tform1.aaa (var message:Tmessage);是什么意思啊编译不通过啊。
duduwolf 2003-08-05
  • 打赏
  • 举报
回复
你完全可以用windows的hint消息来完成你的要求的,不用onmousemove
ngyxh 2003-08-05
  • 打赏
  • 举报
回复
up
Santos 2003-08-04
  • 打赏
  • 举报
回复
TTimer的internal设为1000(1秒)
Santos 2003-08-04
  • 打赏
  • 举报
回复
OnMouseMove是当鼠标在控件内移动时触发的,因此
定义一个开关变量 int nTime;
Form1MouseMove(...)
{
...
nTime = 0;//-- 一移动就重新计时
...
}

Form1Exit(...)
{
nTime = -1; //-- 光标移出Form就停止计时
}

Timer1Timer(...)
{
if(nTime >= 0)
{
nTime++;
}

if(nTime == 2)
{
//-- 你的处理代码
nTime = -1;
}
}

应该符合你的要求了。
加载更多回复(2)

5,939

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧