在Delphi6中替TEdit(文字方塊)物件加上對齊(Alignment)的屬性


動機:
對於Delphi6的TEdit文字方塊,
若要用來顯示數字時,
又剛好使用者要求要將數字靠右,
這時按下F11進入Object Inspector卻找不到Alignment屬性時,
要如何解決呢?!

說明:
利用Delphi6物件導向的特性,
再新增相關的class,
就可以讓你使用Alignment來靠右了!!

程式碼如下:


uses
  StdCtrls,...;

......

{ 加 Alignment property }
type
  TEdit = class(StdCtrls.TEdit)
    private
      FAlignment : TAlignment;
      procedure SetAlignment(Value: TAlignment);
    protected
      procedure CreateParams(var Params: TCreateParams); override;
    public
      property Alignment: TAlignment read FAlignment write SetAlignment;
  end;

......

{$R *.dfm}

{ 加 Alignment Property -- Begin }
procedure TEdit.CreateParams(var Params: TCreateParams);
const
  Alignments: array[TAlignment] of LongWord = (ES_Left, ES_Right, ES_Center);
begin
  inherited CreateParams(Params);
  Params.Style := Params.Style or Alignments[FAlignment];
end;

procedure TEdit.SetAlignment(Value: TAlignment);
begin
  if FAlignment <> Value then
  begin
    FAlignment := Value;
    RecreateWnd;
  end;
end;
{ 加 Alignment Property -- End }


使用方式很簡單...
只要宣告屬性 edName.Alignment := taRightJustify; 即可!!

另外,
若是TMaskEdit可不可以使用呢?!
答案是可以的!!

程式碼如下:


uses
  Mask,...;

......

{ 加 Alignment property }
type
  TMaskEdit = class(Mask.TMaskEdit)
    private
      FAlignment : TAlignment;
      procedure SetAlignment(Value: TAlignment);
    protected
      procedure CreateParams(var Params: TCreateParams); override;
    public
      property Alignment: TAlignment read FAlignment write SetAlignment;
  end;

......

{$R *.dfm}

{ 加 Alignment Property -- Begin }
procedure TMaskEdit.CreateParams(var Params: TCreateParams);
const
  Alignments: array[TAlignment] of LongWord = (ES_Left, ES_Right, ES_Center);
begin
  inherited CreateParams(Params);
  Params.Style := Params.Style or Alignments[FAlignment];
end;

procedure TMaskEdit.SetAlignment(Value: TAlignment);
begin
  if FAlignment <> Value then
  begin
    FAlignment := Value;
    RecreateWnd;
  end;
end;
{ 加 Alignment Property -- End }

留言