程序的执行顺序和事件的响应(200分)

  • 主题发起人 主题发起人 jake502010
  • 开始时间 开始时间
J

jake502010

Unregistered / Unconfirmed
GUEST, unregistred user!
//我在窗体事件
procedure TForm1.FormActivate(Sender: TObject);
begin
涵数1 //我在这里写了好多过程和函数
过程1
函数2
过程2
Button2Click(Sender)//调用了Button2Click事件可是有时不显示

end;

////////然后我在Button1事了了个事件
procedure TForm1.Button1Click(Sender: TObject);
begin
///SSSSSSS;
end;
///////Button2事个事件
procedure TForm1.Button2Click(Sender: TObject);
begin
showmessage('我有时不会被显示');
end;
///如果button1事件执行得快!button2事件有时就执行在后面了!


请高手解释一下为什么会有这种情况!!1
 
窗体处于非激活状态;你直接去点该窗体的button1,就有可能会出现这样的情况!
 
这个也对。
我模仿你的应用,做了这样一个过程,
procedure TForm1.FormActivate(Sender: TObject);
var i:Integer;
begin
for i:=1 to 100000 do
begin
Application.ProcessMessages;
label1.Caption:=IntToStr(i);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Label2.Caption:='asdasd'
end;
在form激活的时候执行label1的计数现实。
我点击Button1的时候,会执行。而此时程序是在执行procedure TForm1.FormActivate(Sender: TObject);这个过程的。
但是,如果我把过程写成这样的,
procedure TForm1.FormActivate(Sender: TObject);
var i:Integer;
begin
for i:=1 to 100000 do
begin
// Application.ProcessMessages;去掉。
label1.Caption:=IntToStr(i);
end;
end;
则需要这个过程执行完,窗口才会出来,此时不会响应任何其他事件。
 
你执行完需要把权限交回系统,否则一次处理大量数据是系统会认为你没有处理完而暂停响应
 
感谢:zywcd

如里程序里有timer事件会不会也会出现像你说的那种现象!

我现在主要是不懂程序的执行的顺序!·
是先执行完这一段再去执行那一段还是。
BEGIN
END;中间可以跳出来,
如果按你的说法

do
begin
Application.ProcessMessages;
label1.Caption:=IntToStr(i);
end;
end;
///那就是可以跳出来响应别的事情那程序的不好控制呀!
请教一了!
 
使用 Application.ProcessMessages;后
程序不会跳出去,还是会继续执行的,只是会同时相应其他的,比如进行窗口显示,或者用户操作。
 
后退
顶部