2009-05-27 11 views

答えて

6

おそらくStringOfChar関数を使用できますか?

このような何か:


    procedure TForm1.Button1Click(Sender: TObject); 
    var 
     X: Integer; 
     Total: Integer; 
     Percent: Integer; 
    begin 
     Total := 1000; 
     for X := 1 to Total do 
     begin 
     Sleep(100); 
     Percent := (X * 100) div Total; 
     Label1.Caption := StringOfChar('|', Percent) + IntToStr(Percent) + '%'; 
     Label1.Repaint; 
     end; 
    end; 
+0

それはexcactly私が話しているものです!あなたは揺れる! – Otip88

+0

必要に応じて再塗りすることを忘れないでください。 "X mod 10 = 0の場合はLabel1.Repaint"のようなテストがパフォーマンスを向上させるかどうかを調べます。 –

3

私は(TLabelである「ラベル」を想定する)私はあなたが何を意味するかを得るが、私はそれがこのようなものだと思う100%わからない:

label.caption := ''; 

for i := 1 to 1000 do 
begin 
    ... do stuff ... 
    if i mod 10 = 0 then 
    begin 
     label.caption = label.caption + '|'; 
     label.repaint(); 
    end; 
end; 

私は再描画の対についてはよく分かりませんフォーム全体を再ペイント/リフレッシュする必要があるかどうかを確認する必要がありますが、それはあなた次第です。

希望に役立ちます。

+0

はい、そのような何か。 ボタンを使用してプロセスを開始する場合、どうすればよいですか? – Otip88

+0

yorコードをデコードして begin label1.caption:= ''; i:= 1〜1000が始まる mod 10 = 0の場合、label1.caption:= label1.caption + '|'; label1.repaint(); end; end; しかし、 "|"ボタンを押すと表示されます。 – Otip88

+0

ボタンの "OnClick"イベントには、該当するウィンドウの "OnClick"をダブルクリックします。あなたの処理が速いのでおそらく速く見えます(あなたのために良い!)...あなたの全体のプロセスが1秒かかる場合、バーは速く見えます。あなたがそれらを遅く見せたいのであれば、100回に1度しかバーを表示しません( "i mod 100 = 0")、それは遅く表示されます。 –

1

そして、これはバーの(中央)内部のパーセンテージを示しビングソリューションO変種、です。

procedure TForm1.Button1Click(Sender: TObject); 
var 
    X: Integer; 
    Total: Integer; 
    Percent: Integer; 
begin 
    Total := 1000; 
    for X := 1 to Total do begin 
    Sleep(5); 
    Percent := (X * 100) div Total; 
    Label1.Caption := StringOfChar('|', Percent DIV 2) + 
         ' ' + IntToStr(Percent) + '% ' + 
         StringOfChar('|', Percent DIV 2); 
    Label1.Repaint; 

    Application.ProcessMessages; 

    end; 
end; 

私の悪い英語については、よろしくです。 よろしくお願いします。


Neftalí - ドイツEstévez-

関連する問題