-1

我正在玩进度条...尝试在进度条到达行尾(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,它不会,因为当位置达到 100 时它会不断发出消息。这让我担心 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;

就像我说的,我想在栏到达末尾时显示一条消息,然后终止应用程序。我在这里想念什么?有更好的方法吗?

4

1 回答 1

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;
于 2013-10-07T07:55:42.583 回答