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 に答える