Delphi:如何调整 TEdit 的文本垂直位置

问题描述 投票:0回答:3

TEdit
(或 TCombo、TButtonedEdit)中的文本始终对齐到顶部。我还没有找到任何属性来更改对齐方式。通常这不是问题,除非我想设置更大的高度。

我用谷歌搜索了一下。有一些解决方案可以通过发送 Windows 消息来调整左右边距。但我不知道如何调整垂直对齐方式。

我不想使用更大的字体。有什么想法吗?

delphi controls edit vcl
3个回答
3
投票

如果有这样的选项,它将通过样式应用。

EDIT
控件样式列表 不包含此类样式,因此结论是底层控件不提供此功能。

你必须要么做一个新的控制,要么自己接管这幅画。两者都不是特别吸引人。


0
投票

...有什么想法吗?

不幸的是,我没有找到好的解决方案,我不得不在我的项目中使用一个技巧:技巧是,我在编辑下放置一个形状!

只需将 TEdit 的 AutoSize 设置为 False,根据需要放置和更改 TEdit 的宽度和高度,然后使用以下过程:

procedure PutShapeUnderEdit(edit: TEdit; padding: Integer);
var
  bmp: TBitmap;
  shape: TShape;
  h: Integer;
begin
  bmp := TBitmap.Create;
  try
    bmp.Canvas.Font.Assign(edit.Font);
    h := bmp.Canvas.TextExtent('Some characters: AÄBCDEgjpqy!"$&/|,').cy;
  finally
    bmp.Free;
  end;
  shape := TShape.Create(nil);
  shape.Parent := edit.Parent;
  shape.Brush.Color := edit.Color;
  shape.Pen.Color := edit.Font.Color;
  shape.Left := edit.Left;
  shape.Top := edit.Top;
  shape.Width := edit.Width;
  shape.Height := edit.Height;
  edit.BorderStyle := bsNone;
  edit.Left := edit.Left + padding;
  edit.Width := edit.Width - 2 * padding;
  edit.Top := edit.Top + padding + (edit.Height - h - 2 * padding) div 2;
  edit.Height := h;
end;

要使用它,只需在 FormCreate 中调用一次过程:

procedure TForm1.FormCreate(Sender: TObject);
begin
  PutShapeUnderEdit(Edit1, 10);
end;

这对我有用,但你必须考虑项目中的其他参数,不要盲目使用此代码,看看这个想法是否适合你。

顺便说一下,我在 Delphi 10 Seattle 和 Windows 10 中使用 VCL


-1
投票

解决一个老问题...我在类似的 C++ 问题中找到了解决方案:https://stackoverflow.com/a/51079348/2107791

  • 通过将 TEdit 的属性
    BorderStyle
    设置为
    bsSingle
    ,文本自动垂直居中。
  • 权衡是编辑框周围的边框

使用 Delphi 10.3 Rio 为我工作。

© www.soinside.com 2019 - 2024. All rights reserved.