1

我想用仪表替换我的进度条。这是进度条上的版本:

procedure TForm1.tmr1Timer(sender: TObject);
begin
  pb0.Position := (pb0.Position + 1) mod pb0.Max;
end;

这是正常的

procedure TForm1.tmr1Timer(sender: TObject);
begin
  gauge.MinValue := 0;
  gauge.MaxValue := 100;
  gauge.Progress := gauge.Progress + 1;
end;

每次达到 100 时如何让它重新开始?当我尝试使用按钮进行测试时,我无法让它像在进度条上那样循环。

procedure TForm1.btn6Click(sender: TObject);
begin
  tmr1.Enabled := not tmr1.Enabled;
  begin
    gauge.Progress := 0;
    tmr1.Enabled := True
  end;
  if Form1.gauge.Progress = 100 then // is this correct ?
  // what to do to make it looping ?
end;

如何使仪表上的功能与上面的进度条+计时器的替换相同?

4

1 回答 1

4

一样的方法。只需使用不同的属性名称(并从计时器事件TGauge中删除设置):MinValueMaxValue

procedure TForm1.tmr1Timer(sender: TObject);
begin
  gauge.Progress := (gauge.Progress + 1) mod (gauge.MaxValue - gauge.MinValue);;
end;

@DavidHeffernan 在评论中指出我的计算永远不会达到完整100%值,并提出了一个替代方案:

gauge.Progress := gauge.MinValue + (gauge.Progress + 1) mod 
             (gauge.MaxValue - gauge.MinValue + 1);

它有不同的问题:进度显示不是从 开始0,而是以 2 为增量递增。但是,它确实达到了100%

正如@TLama 在评论中指出的那样,如果MinValue可能是负面的,上述任何一项都不起作用。


这个计算没有问题(从 MinValue 到 MaxValue 的循环,并且两者都可以是负数)如果MinValue < MaxValue

gauge.Progress := gauge.MinValue + 
                  ( gauge.Progress + 1 - gauge.MinValue ) mod 
                  ( gauge.MaxValue - gauge.MinValue + 1 );
于 2013-12-10T20:57:12.803 回答