Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在TEdit控件中设置textalignment 我使用Turbo C++资源管理器版本(免费版)。是否有人知道如何设置TEdit控件的文本对齐方式?_C++_C++builder_Vcl - Fatal编程技术网

如何在TEdit控件中设置textalignment 我使用Turbo C++资源管理器版本(免费版)。是否有人知道如何设置TEdit控件的文本对齐方式?

如何在TEdit控件中设置textalignment 我使用Turbo C++资源管理器版本(免费版)。是否有人知道如何设置TEdit控件的文本对齐方式?,c++,c++builder,vcl,C++,C++builder,Vcl,要设置对齐方式属性(显示左对齐、中对齐或右对齐的文本),请设置对齐方式属性,例如,对于名为Edit1的编辑控件,它是表单对象的指针成员,要将对齐方式设置为右对齐方式,您可以使用: Edit1->Alignment = taRightJustify; 其他对正属性是taLeftJustify和taCenter 这仅影响控件上字符的位置,而不影响控件从右向左或从左向右对齐时的位置。可以通过设置BiDiMode属性-bdLeftToRight、bdRightToLeft(这些在从左到右和从右到

要设置对齐方式属性(显示左对齐、中对齐或右对齐的文本),请设置对齐方式属性,例如,对于名为Edit1的编辑控件,它是表单对象的指针成员,要将对齐方式设置为右对齐方式,您可以使用:

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.:对于 TSTRGGRIDGE/CODE>,可以做同样的想法,只需在StAccOffFort.com上搜索< Turbo C++资源管理器>代码> TSTRGRADGET.StCELL SaleNeX/<代码>或ReplyPrest< /P>TeDIT组件没有“对齐”的合适性…我只需设置一个虚拟机,看看什么是找到Turbo C++资源管理器的演示版本不是TrvialALE免费版本不再可用:VC++的旧版本在TeDIT控件上没有对齐属性。新版本确实如此。注意Turbo C++资源管理器是C++ Builder的免费版本,与OLD的Turb-C++无关。但是StWistWOPOS不做任何操作,但调用Eddi1--ValuiDATE对我来说是有效的。正如雷蒙德所说,这是一个不支持的黑客攻击。