我想用仪表替换我的进度条。这是进度条上的版本:
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;
如何在仪表上使用相同的功能作为上面的进度条+定时器的替换?
答案 0 :(得分:4)
同样的道理。只需使用TGauge
的不同属性名称(并从计时器事件中删除MinValue
和MaxValue
的设置):
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
gauge.Progress := gauge.MinValue +
( gauge.Progress + 1 - gauge.MinValue ) mod
( gauge.MaxValue - gauge.MinValue + 1 );