如何在CREdit控件中设置文本对齐方式

时间:2010-12-15 21:56:35

标签: c++ c++builder vcl

我正在使用turbo c ++ explorer edition(免费版)。是否有人知道如何设置TEdit控件的textAlignment?

4 个答案:

答案 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?