TEdit
(或 TCombo、TButtonedEdit)中的文本始终对齐到顶部。我还没有找到任何属性来更改对齐方式。通常这不是问题,除非我想设置更大的高度。
我用谷歌搜索了一下。有一些解决方案可以通过发送 Windows 消息来调整左右边距。但我不知道如何调整垂直对齐方式。
我不想使用更大的字体。有什么想法吗?
...有什么想法吗?
不幸的是,我没有找到好的解决方案,我不得不在我的项目中使用一个技巧:技巧是,我在编辑下放置一个形状!
只需将 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
解决一个老问题...我在类似的 C++ 问题中找到了解决方案:https://stackoverflow.com/a/51079348/2107791
BorderStyle
设置为bsSingle
,文本自动垂直居中。使用 Delphi 10.3 Rio 为我工作。