我正在使用turbo c ++ explorer edition(免费版)。是否有人知道如何设置TEdit控件的textAlignment?
答案 0 :(得分:2)
您可能会发现此问题的解决方案很有趣:
http://bcbjournal.com/bcbcaq/?loc=edits&caq=28
通过为控件启用ES_RIGHT
Windows样式,可以使编辑框右对齐,但是在创建组件时会执行此操作。由于历史原因,标准的Windows编辑控件不支持在this post on The Old New Thing中提到的创建(正式)之后更改对齐。但是,正如你可以从检查各种声明和评论中看出这已经发生了变化,尽管仍然没有文件说明。
因此,如果您想在不创建自己的组件的情况下执行此操作,可以使用Windows API函数SetWindowLong
,如下所示:
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);
请注意,您可能需要致电SetWindowPos
才能使更改生效,如文中前面链接的帖子中的评论中所述。
答案 1 :(得分:2)
在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;
然后在OnCreate
形式的事件上我写了这样的东西:
MyEditBox.Alignment:=taLeftJustify;
MyEditBox.Alignment:=taCenter;
MyEditBox.Alignment:=taRightJustify;
就是这样。
Pelase注意它可以改进很多,它只是将它添加到TEdit的概念验证,它不是创建一个新类(具有其他名称),也不是关于创建新组件。
希望这对某人有用。
P.D。:可以为TStringGrid做同样的想法,只需在stackoverflow.com上搜索CellsAlignment
或阅读帖子Delphi: How to make cells' texts in TStringGrid center aligned?
答案 2 :(得分:1)
要设置alignment属性 - 显示左对齐,居中对齐或右对齐的文本,可以设置Alignment属性,例如对于名为Edit1的编辑控件,它是表单对象的指针成员,要将对齐设置为右对齐,您可以使用:
Edit1->Alignment = taRightJustify;
其他理由属性是taLeftJustify和taCenter。
这仅影响控件上字符的位置,而不是从右到左或从左到右对齐。这可以通过设置BiDiMode属性来调整--bdLeftToRight,bdRightToLeft(这些在从左到右和从右到左的语言中更为重要)
或者我错过了问题中明显的东西?
答案 3 :(得分:0)
我也能够成为另一个分开的单位,所以这里是:
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.
这是一个整体,将其保存到名为AlignedTEdit.pas
的文件中。
然后在任何表单上,您在接口使用子句的末尾添加TEdit
,AlignedTEdit
。
P.D。:TStringGrid
可以做同样的想法,只需在stackoverflow.com上搜索TStringGrid.SetCellsAlignment
或阅读帖子Delphi: How to make cells' texts in TStringGrid center aligned?