如何改变progressBar的起始位置

时间:2014-06-09 13:08:12

标签: delphi winapi

如何通过将progressBar的一部分设置为空来更改progressBar的起始位置,例如0 - > 50,并从50开始进度(绿色),那么有没有具体方法呢?

3 个答案:

答案 0 :(得分:5)

进度条的位置由其Position属性决定。因此,假设进度条的限制为0100,并且您希望从中间开始,请将Position设置为50 < / p> <击>

您尝试更改Min,但我怀疑您不了解MinMax做了什么。它们仅定义Position属性的比例。因此,当Position等于Min时,进度条为空,当Position等于Max时,进度条已满。 PositionMin之间Max的值指定了部分完整的进度。

在数学上,进度条的完成比例由以下公式给出:

(Position-Min) / (Max-Max)

因此,MinMax只允许您定义一个方便的比例,以指定比例完成。例如,如果您的进度自然表示为百分比,则可以将Min设置为0,将Max设置为100。或者,如果您要测量文件传输的进度,可以将Min设置为0,将Max设置为要传输的总字节数。


在评论中,您可以通过声明:

来改进问题
  

我想将进度条的第一个中间设置为空,例如0 - &gt; 50,并从50开始进度(绿色)。

使用普通的香草进度条是不可能的。进度条从空白填满。

使用标准控件无法找到您要查找的用户界面。您需要自己绘制进度条,而不是非常难以完成。如果您希望它看起来像本机控件,您可以使用主题API来绘制它。

答案 1 :(得分:2)

您可以使用两个正常进度条构建复合进度条。

将它们放在一起,使左边的一个(PBarEmpty)与右边的重叠(PBarActive)。右边的宽度是左边的一半。

使用以下代码设置位置(0..100)。

enter image description here enter image description here

procedure TForm1.SetProgress(progress: Integer);
begin
  if (progress = 0) then
  begin
    PBarEmpty.Width := 2*PBarActive.Width;
    PBarActive.Position := 0;
  end
  else begin
    if PBarEmpty.Width <> PBarActive.Width then
       PBarEmpty.Width := PBarActive.Width;
    PBarActive.Position := progress;
  end;
end;

答案 2 :(得分:0)

我认为您无法使用任何标准VCL组件执行此操作。

TMS TAdvProgressBar(不是TAdvProgress组件)允许您在进度条上设置级别。例如,0级最高可达50%,1级最高可达70%等。每个级别可以有不同的背景颜色。

我刚试过这里,我将Level0颜色设置为白色,然后将1级百分比设置为50,将颜色设置为石灰。将stacked属性设置为True会产生这种效果:

TAdvProgressBar