我正在玩进度条...尝试在进度条到达行尾时显示消息(100%)(我使用了Raize状态栏和TMS AdvProgressBar) 对于Raize,此代码示例似乎有效:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
rzprogressstatus1.Percent := rzprogressstatus1.Percent +1;
if rzprogressstatus1.Percent = 100 then begin
showmessage('Yo');
application.Terminate;
end;
end;
然而,对于AdvProgressBar,它并不是因为它一直持续发射消息 如果Raize可能遇到麻烦,那让我担心。
procedure TForm1.Timer1Timer(Sender: TObject);
begin
AdvProgressBar1.Position := AdvProgressBar1.Position +1;
if AdvProgressBar1.Position = 100 then begin
showmessage('Yo');
application.Terminate;
end;
end;
编辑: 调试器显示:
$ 00649D6C的首次机会异常。异常类$ C0000005,消息'访问冲突位于0x00649d6c:读取地址0x00000048'。处理Project1.exe(2928)并停止以下代码:
procedure TTimer.SetEnabled(Value: Boolean);
begin
if Value <> FEnabled then begin
FEnabled := Value;
UpdateTimer;
end;
end;
就像我说的那样,我想在栏到达终点时显示一条消息然后终止应用程序。我在这里错过了什么?有没有更好的方法呢?
答案 0 :(得分:2)
如果你需要使用一个计时器并且你需要花费一些时间(显示一个对话框非常耗时),你应该在计时器事件开始时关闭计时器并在结束时再次打开计时器(如果需要)
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False;
AdvProgressBar1.Position := AdvProgressBar1.Position +1;
if AdvProgressBar1.Position = 100 then begin
showmessage('Yo');
application.Terminate;
end;
Timer1.Enabled := True;
end;