如何在TEdit控件中设置textalignment 我使用Turbo C++资源管理器版本(免费版)。是否有人知道如何设置TEdit控件的文本对齐方式?
要设置对齐方式属性(显示左对齐、中对齐或右对齐的文本),请设置对齐方式属性,例如,对于名为Edit1的编辑控件,它是表单对象的指针成员,要将对齐方式设置为右对齐方式,您可以使用:如何在TEdit控件中设置textalignment 我使用Turbo C++资源管理器版本(免费版)。是否有人知道如何设置TEdit控件的文本对齐方式?,c++,c++builder,vcl,C++,C++builder,Vcl,要设置对齐方式属性(显示左对齐、中对齐或右对齐的文本),请设置对齐方式属性,例如,对于名为Edit1的编辑控件,它是表单对象的指针成员,要将对齐方式设置为右对齐方式,您可以使用: Edit1->Alignment = taRightJustify; 其他对正属性是taLeftJustify和taCenter 这仅影响控件上字符的位置,而不影响控件从右向左或从左向右对齐时的位置。可以通过设置BiDiMode属性-bdLeftToRight、bdRightToLeft(这些在从左到右和从右到
Edit1->Alignment = taRightJustify;
其他对正属性是taLeftJustify和taCenter
这仅影响控件上字符的位置,而不影响控件从右向左或从左向右对齐时的位置。可以通过设置BiDiMode属性-bdLeftToRight、bdRightToLeft(这些在从左到右和从右到左的语言中更重要)来调整
还是我在问题中遗漏了一些明显的东西?您可能会发现这个问题的解决方案很有趣: 它通过启用控件的
ES_right
Windows样式使编辑框右对齐,但在创建组件时会这样做。由于历史原因,标准windows编辑控件不支持在创建(即正式创建)后更改对齐方式,如中所述。然而,从检查各种索赔和评论可以看出,这已经发生了变化,尽管仍然没有记录,但应该是可能的
因此,如果您想在不创建自己的组件的情况下执行此操作,可以使用Windows API函数,如下所示:
DWORD alignment = ES_RIGHT;
DWORD oldStyle = GetWindowLong(Edit1->Handle, GWL_STYLE);
DWORD newStyle = (oldStyle & ~(ES_LEFT | ES_CENTER | ES_RIGHT)) | alignment;
SetWindowLong(Edit1->Handle, GWL_STYLE, newStyle);
MyEditBox.Alignment:=taLeftJustify;
MyEditBox.Alignment:=taCenter;
MyEditBox.Alignment:=taRightJustify;
请注意,您可能必须要求更改生效,如本文前面链接的帖子中的注释所述。在Delphi上,我通过重载TEdit类型来实现更改,方法如下: 在接口部分,在我放置任何TForm声明之前:
type
TEdit=class(StdCtrls.TEdit)
private
FAlignment:TAlignment;
procedure SetAlignment(Value:TAlignment);
protected
procedure CreateParams(var Params:TCreateParams);override;
public
constructor Create(AOwner:TComponent);override;
published
property Alignment:TAlignment read FAlignment write SetAlignment default taLeftJustify;
end;
在实施部分,我提出了以下实施:
procedure TEdit.SetAlignment(Value:TAlignment);
begin
if FAlignment<>Value
then begin
FAlignment:=Value;
RecreateWnd;
end;
end;
procedure TEdit.CreateParams(var Params:TCreateParams);
const
Alignments:array[TAlignment] of Cardinal=(ES_LEFT,ES_RIGHT,ES_CENTER);
begin
inherited CreateParams(Params)
Params.Style:=Params.Style or Alignments[FAlignment];
end;
constructor TEdit.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
FAlignment:=taLeftJustify;
end;
就是这样
Pelase注意到它可以改进很多,它只是将它添加到TEdit的概念证明,它不是关于创建一个新类(使用其他名称),也不是关于创建一个新组件
希望这对其他人有用
p.D.:TStringGrid也有同样的想法,只需在stackoverflow.com上搜索
CellsAlignment
或阅读post,我还可以将所有内容放在另一个单独的单元中,因此如下所示:
unit AlignedTEdit;
interface
uses Windows,Classes,Controls,StdCtrls;
type
TEdit=class(StdCtrls.TEdit)
private
FAlignment:TAlignment;
procedure SetAlignment(Value:TAlignment);
protected
procedure CreateParams(var Params:TCreateParams);override;
public
constructor Create(AOwner:TComponent);override;
published
property Alignment:TAlignment read FAlignment write SetAlignment default taLeftJustify;
end;
implementation
procedure TEdit.SetAlignment(Value:TAlignment);
begin
if FAlignment<>Value
then begin
FAlignment:=Value;
RecreateWnd;
end;
end;
procedure TEdit.CreateParams(var Params:TCreateParams);
const
Alignments:array[TAlignment] of Cardinal=(ES_LEFT,ES_RIGHT,ES_CENTER);
begin
inherited CreateParams(Params);
Params.Style:=Params.Style or Alignments[FAlignment];
end;
constructor TEdit.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
FAlignment:=taLeftJustify;
end;
end.
单元对齐编辑;
接口
使用窗口、类、控件、stdctrl;
类型
TEdit=类(StdCtrls.TEdit)
私有的
FAlignment:TAlignment;
程序设置对齐(值:TAlignment);
受保护的
过程CreateParams(变量参数:TCreateParams);推翻
公众的
构造函数创建(AOwner:TComponent);推翻
出版
属性对齐:TAlignment read fallignment write SetAlignment default taLeftJustify;
结束;
实施
程序TEdit.SetAlignment(值:TAlignment);
开始
如果FAlignmentValue
然后开始
FAlignment:=值;
再创造;
结束;
结束;
过程TEdit.CreateParams(变量参数:TCreateParams);
常数
对齐:基数=(左、右、中)的数组[TAlignment];
开始
继承的CreateParams(Params);
参数样式:=参数样式或路线[FAlignment];
结束;
构造函数TEdit.Create(AOwner:TComponent);
开始
继承的创建(AOOwner);
FAlignment:=taLeftJustify;
结束;
结束。
这是一个完整的单元,请将其保存到名为alignededit.pas
的文件中
然后,在任何表单上,您都有一个TEdit
add,在接口uses子句的末尾对齐了edit
<> P.D.:对于