用sleep实现不了的功能

wzyll 2003-08-19 04:52:34
大家好,我想实现如下功能:单击button1后,lable的visible属性为true并持续显示两秒钟,代码如下:
procedure tform1.button1click;
begin
label.visible:=true;
sleep(2000);
showmessage('你可以修改密码了。');
end;
但运行sleep(2000)前label并不显示,当sleep(2000)执行完后label与showmessage才同时显示。不知道什么原因,望大家指点,如能给出详细代码则更加感激不尽。谢谢!



王振亚
2003.08.19
...全文
49 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
timgreen 2003-08-20
  • 打赏
  • 举报
回复
同意 hiflower(花) 这问题就不用application.processmessage了 刷新一下就ok了
不过application.processmessage真的很有用
不过 GetTickCount 怎么用的请讲讲
lonelylight 2003-08-20
  • 打赏
  • 举报
回复
application.processmessage其实是让本进程暂时放弃机器的控制权。在你要独占机器的控制权的时候千万不要使用这条语句。这条语句让出的其实是线程级的,只是在本程序内让出。对于程序间(真正的进程间)的调度,主要是由操作系统控制。如果你在unix下编程,你的控制权的取得,要更容易一些。
hiflower 2003-08-20
  • 打赏
  • 举报
回复
在一个长时间的循环内部安排个 Application.ProcessMessages,可以让程序响应别的事件,不至于让人以为你的程序已经down了。
hiflower 2003-08-20
  • 打赏
  • 举报
回复
不用那么复杂
procedure tform1.button1click;
begin
label.visible:=true;
label.Refresh;//搞定
sleep(2000);
showmessage('你可以修改密码了。');
end;
lw549 2003-08-19
  • 打赏
  • 举报
回复
Application.ProcessMessage是用来处理窗口消息的。

Do You Understand?

郭三少爷的方法是最合理的。
wzyll 2003-08-19
  • 打赏
  • 举报
回复
谢谢大家,问题已解决,但我不知道application.processmessages在这里到底起什么作用。我以前在循环中这样用过:
sleep(100);
application.processmessages;
但具体为什么用、在什么地方用application.processmessages,我一直迷惑不解,请大家作一个详细解释。
王振亚
2003.08.19
qiume 2003-08-19
  • 打赏
  • 举报
回复
楼上的都可以用
gytyl 2003-08-19
  • 打赏
  • 举报
回复
procedure tform1.button1click;
var
t_temp:TDateTime;
begin
label.visible:=true;
showmessage('你可以修改密码了。');
t_temp:=now;
while now-t_temp<2/(24*60*60) do
begin
Application.ProcessMessages;
end;
end;
kl2000 2003-08-19
  • 打赏
  • 举报
回复
procedure tform1.button1click;
begin
label.visible:=true;
application.ProcessMessages;
sleep(2000);
showmessage('你可以修改密码了。');
end;
在原有代码加上 application.ProcessMessages;应该也行
xzhifei 2003-08-19
  • 打赏
  • 举报
回复
太简单了,分太少了

Procedure Delay(MSecs: DWORD);
Var
BeginTime: DWORD;
Begin
BeginTime := GetTickCount;
Repeat
Application.ProcessMessages;
Until GetTickCount - BeginTime >= MSecs;
End;

procedure tform1.button1click;
begin
label.visible:=true;
Delay(2000);
showmessage('你可以修改密码了。');
end;

5,379

社区成员

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

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