用计时器循环TGauge

时间:2013-12-10 20:50:15

标签: delphi gauge

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

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;

如何在仪表上使用相同的功能作为上面的进度条+定时器的替换?

1 个答案:

答案 0 :(得分: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 );