<@> 关于 ProcessMessages

hongminghu 2001-07-22 09:04:44
有棵按钮:

procedure TForm1.Button1Click(Sender: TObject);
begin
while(true)do
Application.ProcessMessages;
end;

按下之后,却再也不能关闭窗口,但可以响应其他事件(比如按另外一棵按钮)



请问为什么?
...全文
75 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ch81 2001-07-22
  • 打赏
  • 举报
回复
: hongminghu(洪湖) 
我认为这个问题是:由于Delphi的VCL界面库,每次只允许一个线程
对其进行操作!这是为了同步的问题!防止界面混乱!
而你用两个无限循环对界面操作,而且都加入了application.processmessages
这个可能对于delphi的vcl库,这样的操作也是禁止的!
所以当你启动另一个的时候,前一个被强制禁止!
不知对不对!
tikkypeng 2001-07-22
  • 打赏
  • 举报
回复
关注
hongminghu 2001-07-22
  • 打赏
  • 举报
回复
to ch81:

你再看看:
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.lines.clear;
while(true)do
begin
memo1.lines.add((sender as tbutton).name;
Application.ProcessMessages;
end;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
memo2.lines.clear;
while(true)do
begin
memo2.lines.add((sender as tbutton).name));
Application.ProcessMessages;
end;
end;


点击Button1后memo1 开始刷,,,,

点击button2后memo2 开始刷,而且此时memo1停止刷了,,是不是说明button1click被强行

停止了?要不为什么memo1 不动了?

不管如何都应该能响应WM_CLOSE 才对啊`~~~~~~WHY ?

谢谢
hongminghu 2001-07-22
  • 打赏
  • 举报
回复
OH,ch81(missile,MAY BE

THANKS
ch81 2001-07-22
  • 打赏
  • 举报
回复
while(true)do 因为这是无限循环!
而且application.processmessages是通知程序处理其他的消息!
但你点正常关闭窗口时,程序会等待从button1Click返回再结束程序,
但这里明显button1click不回返回!所以程序不结束!
procedure TForm1.Button2Click(Sender: TObject);
begin
Application.Terminate;//这个试正常结束程序,所以关不掉
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
halt;//这个强制结束,所以关掉程序了!
end;

hongminghu 2001-07-22
  • 打赏
  • 举报
回复
waiting~~~~~~~~~~for you

5,388

社区成员

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

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