标签标题在ProgressBar中的位置

Bia*_*nca 10 delphi label progress-bar

我想在进度条中放置一个标签.这个标签标题是动态的.如何将标签位置始终放在ProgressBar的中心位置?

我尝试过的;

  Label1.Parent := progressBar1;
  Label1Top :=  progressBar1.Height div 2;
  Label1.Left :=  progressBar1.Width div 2
Run Code Online (Sandbox Code Playgroud)

它显示丑陋,而不是像我想要的那样处于中心位置.

进度条内的标签

如果我设置Label1.Left := progresBar1.Width div 2 - xxx它将只在某个标题的中心.我希望将任何标题放在中心位置.

来自@KenWhite的编辑答案工作得很好.来自@DavidHeffernan的解决方案很棒.

ProgressBar with Text

Ken*_*ite 18

将标签的AutoSize属性设置为False.更改Alignment属性taCenterLayouttlCenter.尺寸标签的进度的ClientWidthClientHeight,并设置其Left0.

Label1.Parent := progressBar1;
Label1.AutoSize := False;
Label1.Transparent := True;
Label1.Top :=  0;
Label1.Left :=  0;
Label1.Width := progressBar1.ClientWidth;
Label1.Height := progressBar1.ClientHeight;
Label1.Alignment := taCenter;
Label1.Layout := tlCenter;
Run Code Online (Sandbox Code Playgroud)

这是一个外观的例子:

标准尺寸进度条的图像 双高度进度条的图像

  • 如果不使用主题,你应该也可以制作`Label1.Transparent:= True`.+1 (4认同)
  • @kobik:好主意.我编辑过这样做.谢谢. (2认同)

Dav*_*nan 14

您可能决定派生一个绘制文本本身的进度条控件,而不是依赖于单独的标签.一些示例代码演示:

type
  TProgressBarWithText = class(TProgressBar)
  private
    FProgressText: string;
  protected
    procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
  published
    property ProgressText: string read FProgressText write FProgressText;
  end;

procedure TProgressBarWithText.WMPaint(var Message: TWMPaint);
var
  DC: HDC;
  prevfont: HGDIOBJ;
  prevbkmode: Integer;
  R: TRect;
begin
  inherited;
  if ProgressText <> '' then
  begin
    R := ClientRect;
    DC := GetWindowDC(Handle);
    prevbkmode := SetBkMode(DC, TRANSPARENT);
    prevfont := SelectObject(DC, Font.Handle);
    DrawText(DC, PChar(ProgressText), Length(ProgressText),
      R, DT_SINGLELINE or DT_CENTER or DT_VCENTER);
    SelectObject(DC, prevfont);
    SetBkMode(DC, prevbkmode);
    ReleaseDC(Handle, DC);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

这种方法的优点是您的进度条和文本显示是自包含的.您无需协调两个单独的控件.

  • 虽然,在我看来,使用单个控件比控件和标签更好,但我认为你不应该接受这个答案.如果你接受肯的答案,我会更喜欢它,因为它直接回答了你提出的问题.我只是提供了另一种方法来查看整个问题.在我看来,肯的答案更适合你提出的问题. (7认同)