unit AlignEdit; (* Edit Component that allows left, centered, or right justified text. Be sure to use the MaxLength property to disallow overflow of the control. This is essentially a multiline control set to be the size of a single line edit control, wherein the text alignment is available. *) interface uses Windows, Messages, Classes, Controls, StdCtrls; type TAlignEdit = class(TEdit) private { Private declarations } FTextAlign : TAlignment; FMaxLength: Integer; procedure SetTextAlignment(Value: TAlignment); procedure SetMaxLength(Value: Integer); procedure CreateWnd; override; protected { Protected declarations } procedure CreateParams(var Params: TCreateParams); override; public { Public declarations } published { Published declarations } property MaxLength: Integer read FMaxLength write SetMaxLength default 0; property Alignment : TAlignment read FTextAlign write SetTextAlignment default taLeftJustify; end; procedure Register; implementation procedure TAlignEdit.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); with Params do begin Style := Style or ES_MULTILINE; case FTextAlign of taLeftJustify: begin Style := Style or ES_LEFT; end; taCenter: begin Style := Style or ES_CENTER; end; taRightJustify: begin Style := Style or ES_RIGHT; end; end; end; end; procedure TAlignEdit.SetTextAlignment(Value: TAlignment); begin if FTextAlign <> Value then begin FTextAlign := Value; RecreateWnd; end; end; procedure TAlignEdit.SetMaxLength(Value: Integer); begin if FMaxLength <> Value then begin FMaxLength := Value; if HandleAllocated then SendMessage(Handle, EM_LIMITTEXT, Value, 0); end; end; procedure TAlignEdit.CreateWnd; begin { had to override this method because it was not updating the EM_LIMITTEXT when the alignment was set to taLeftJustify } inherited CreateWnd; SendMessage(Handle, EM_LIMITTEXT, FMaxLength, 0); end; procedure Register; begin RegisterComponents('Samples', [TAlignEdit]); end; end.