Hallo
es gibt da EM_SETRECTNP, geht allerdings nur, wenn das Edit multiline ist, oder bei einem Memo.
Delphi-Quellcode:
type
TEditAlign = class(TEdit)
private
FAlignment: TAlignment;
procedure SetAlignment(const Value: TAlignment);
protected
procedure CreateParams(var Params: TCreateParams); override;
public
constructor Create(AOwner: TComponent); override;
published
property Alignment: TAlignment read FAlignment write SetAlignment;
end;
TForm1 = class(TForm)
...
private
edit2:TEditAlign;
...
end;
...
procedure TForm1.Button1Click(Sender: TObject);
Var R:Trect;
begin
edit2:=TEditAlign.Create(self);
edit2.Parent:=self;
edit2.Alignment:=taCenter;
edit2.Top:=20;
edit2.Left:=20;
edit2.Height:=50;
edit2.Width := 150;
edit2.Text:='Zentriert';
R := Rect(1, 16, Edit2.Width - 2, Edit2.Height); //kann man ja noch richtig ausmitteln ;-)
SendMessage(Edit2.Handle, EM_SETRECTNP, 0, LongInt(@R));
SendMessage(Edit2.Handle, EM_SCROLLCARET, 0, 0);
Edit2.Repaint;
end;
{ TEditAlign }
constructor TEditAlign.Create(AOwner: TComponent);
begin
inherited;
FAlignment := taLeftJustify;
end;
procedure TEditAlign.CreateParams(var Params: TCreateParams);
begin
inherited;
case FAlignment of
taLeftJustify : Params.Style := Params.Style or ES_LEFT or ES_MULTILINE;
taCenter : Params.Style := Params.Style or ES_CENTER or ES_MULTILINE;
taRightJustify : Params.Style := Params.Style or ES_RIGHT or ES_MULTILINE;
end;
end;
procedure TEditAlign.SetAlignment(const Value: TAlignment);
begin
if FAlignment <> Value then
begin
FAlignment := Value;
RecreateWnd;
end;
end;
aber damit steht zumindestens der Text dort, wo er stehen soll und mit markieren hast du auch keine Probleme. Der User darf halt bloß nicht enter drücken oder zuviel reinschreiben :'(
Mfg Frank