카테고리 없음

[일반/컴포넌트] TEdit의 Text를 left, center, right 정렬하기

쇼핑스크래퍼2 2023. 9. 5. 08:03
// 콤포넌트 입니다
unit AlignedEdit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TMyAlign = (alRight, alLeft, alCenter);

  TAlignedEdit = class(TEdit)
  private
    { Private declarations }
    FAlignment: TMyAlign;
  protected
    { Protected declarations }
    procedure CreateParams(var Params: TCreateParams); override;
    procedure SetAlignment(Value: TMyAlign);
    procedure KeyPress(var Key: Char); override;
  public
    { Public declarations }
  published
    { Published declarations }
    property Alignment: TMyAlign read FAlignment write SetAlignment;
  end;

procedure Register;

implementation

procedure TAlignedEdit.CreateParams(var Params: TCreateParams);
const
  Alignments: array[TMyAlign] of Longint = (ES_RIGHT, ES_LEFT, ES_CENTER);
begin
  inherited CreateParams(Params);
  // ES_MULTILINE 속성이 있어야만 ES_RIGHT, ES_LEFT, ES_CENTER 가 동작함
  Params.Style := Params.Style or ES_MULTILINE or Alignments[FAlignment];
end;

procedure TAlignedEdit.SetAlignment(Value: TMyAlign);
begin
  if FAlignment <> Value then
  begin
    FAlignment := Value;
    RecreateWnd;
  end;
end;

procedure TAlignedEdit.KeyPress(var Key: Char);
begin
  inherited KeyPress(Key);
  // ES_MULTILINE 속성이 있어서 Enter 키를 막음
  if Key = #13 then
    Key := #0;
end;

procedure Register;
begin
  RegisterComponents('Samples', [TAlignedEdit]);
end;

end.