TEdit
(或TCombo,TButtonedEdit)中的文本始终对齐到顶部。我没有找到任何更改对齐方式的属性。通常情况下这不是问题,除非我想要设置一个更大的高度。
我谷歌了一下。有通过发送Windows消息来调整左右边距的解决方案。但是我不知道如何调整垂直对齐方式。
我不想使用更大的字体。有什么想法吗?
TEdit
(或TCombo,TButtonedEdit)中的文本始终对齐到顶部。我没有找到任何更改对齐方式的属性。通常情况下这不是问题,除非我想要设置一个更大的高度。
我谷歌了一下。有通过发送Windows消息来调整左右边距的解决方案。但是我不知道如何调整垂直对齐方式。
我不想使用更大的字体。有什么想法吗?
EDIT
控件样式列表中没有这样的样式,因此可以得出结论,底层控件不提供此功能。BorderStyle
设置为bsSingle
,文本会自动垂直居中。在Delphi 10.3 Rio中对我有效。
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。