Как сделать индикатор в Turbo Delphi, используя ТОЛЬКО TLabel, а не TProgressBar - PullRequest
0 голосов
/ 27 мая 2009

так вот логика

для 1% = "|" в TLabel и за один "|" нам нужно 10 раз зацикливание

так, чтобы достичь 100% = 100 раз "|" нам нужно 1000 раз зацикливание

Можете ли вы помочь мне с кодом?

Ответы [ 3 ]

6 голосов
/ 27 мая 2009

Возможно, вы могли бы использовать функцию 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;
3 голосов
/ 27 мая 2009

Я не уверен на 100%, что понимаю, что вы имеете в виду, но я думаю, что это что-то вроде этого (предположим, "label" - это TLabel):

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;

Я не уверен насчет перекраски или обновления, а также необходимости перекраски / обновления всей формы, но это зависит от вас.

Надеюсь, это поможет.

1 голос
/ 27 мая 2009

И это вариант решения Bing, который показывает процент внутри (в середине) бара.

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;

Извините за мой плохой английский. Привет.


Нефтали-Герман Эстевес-

...