进度条 - 栏达到100%后显示消息

时间:2013-10-06 23:37:49

标签: delphi delphi-xe4 tms

我正在玩进度条...尝试在进度条到达行尾时显示消息(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;

就像我说的那样,我想在栏到达终点时显示一条消息然后终止应用程序。我在这里错过了什么?有没有更好的方法呢?

1 个答案:

答案 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;