如何在turbodelphi中仅使用TLabel而不使用TProgressBar制作进度条

如何在turbodelphi中仅使用TLabel而不使用TProgressBar制作进度条,delphi,progress-bar,vcl,Delphi,Progress Bar,Vcl,这就是逻辑 对于TLabel中的1%=“|”,对于一个“|”,我们需要10次循环 因此,要达到100%=100次“|”,我们需要1000次循环 你能帮我翻译一下代码吗?我不是100%确定我明白你的意思,但我认为是这样的(假设“标签”是TLabel): 我不确定重绘与刷新,以及是否应该重绘/刷新整个表单,但这取决于您 希望对您有所帮助。也许您可以使用StringOfChar函数 大概是这样的: procedure TForm1.Button1Click(Sender: TObject);

这就是逻辑

对于TLabel中的1%=“|”,对于一个“|”,我们需要10次循环

因此,要达到100%=100次“|”,我们需要1000次循环


你能帮我翻译一下代码吗?

我不是100%确定我明白你的意思,但我认为是这样的(假设“标签”是TLabel):

我不确定重绘与刷新,以及是否应该重绘/刷新整个表单,但这取决于您


希望对您有所帮助。

也许您可以使用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;

这是一个变体o 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;
请原谅我英语不好。 问候



内夫塔利-热尔曼·埃斯特维兹-

是的,类似这样。如果我使用一个按钮来开始这个过程,我该怎么做?我解码你的代码以开始标签1。标题:='';对于i:=1到1000,如果i mod 10=0,则开始label1.caption:=label1.caption+'|';label1.repaint();终止终止但“|”似乎显示为fast.。通过双击相关窗格中的“OnClick”,转到按钮的“OnClick”事件。它看起来很快,可能是因为你的处理速度很快(对你有好处!)。。。如果您的整个过程需要一秒钟的时间,那么条形图将显示得很快。如果你想让他们看起来慢一点,你可以每100次只显示一个条(“i mod 100=0”),那么他们就会显得慢一点。这很有效!!最后一件事,我如何在“|”开始后添加百分比,从0%到100%,就像实际进度条一样…添加%符号:初始化标签。标题:='%';然后在循环中,在前面添加“|”,如label.caption:=”|“+label.caption;确保只在必要时重新喷漆,因为重新喷漆成本很高。调查类似“如果X mod 10=0,那么Label1.Repaint”这样的测试是否会提高性能。
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;