Announcement

Collapse
No announcement yet.

Problem in TEdit mit Alignment-Eigenschaft

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem in TEdit mit Alignment-Eigenschaft

    Hallo! Ich habe eine TEdit Komponente unter anderem mit der Eigenschaft Alignment erweitert um Zahlen linksbündig eingeben zu können und nach Verlassen des Feldes den Wert rechtsbündig an-zuordnen. Ich habe die damit zusammenhängenden Programmteile der Unit nachfolgend dargestellt. Wenn ich das Feld auf einem Formular direkt anordne, funktioniert alles einwandfrei. Plaziere ich das Feld jedoch auf einer Komponente vom Typ PageControl, wird der Programmablauf chaotisch. Beim Ausführen des Befehls RecreateWnd der Prozedur TParaZahlEdit.SetAlignment springt das Programm mehrmals zur Message-Prozedur CMEnter zurück und alles gerät durcheinander. Kom-mentiere ich den Alignment-Aufruf aus, funktioniert alles korrekt. Vielleicht kann mir jemand hel-fen. Danke.

    MfG B.Kandler

    private
    { Private-Deklarationen }
    FAlignment: TAlignment;
    procedure CMExit(var Message: TCMExit); message CM_EXIT;
    procedure CMEnter(var Message: TCMEnter); message CM_ENTER;
    procedure PZEENTER(var Msg: TMessage); message PZE_ENTER;

    protected
    { Protected-Deklarationen }
    procedure CreateParams(var Params: TCreateParams); override;
    procedure SetAlignment(Value: TAlignment);

    published
    { Published-Deklarationen }
    property Alignment: TAlignment read FAlignment write SetAlignment;

    procedure TParaZahlEdit.CMExit(var Message: TCMExit);
    begin
    if (Alignment = taLeftJustify) then
    Alignment:=taRightJustify;
    end;

    procedure TParaZahlEdit.CMEnter(var Message: TCMEnter);
    begin
    inherited;
    PostMessage(Handle,PZE_ENTER,0,0);
    end;

    procedure TParaZahlEdit.PZEENTER(var Msg: TMessage);
    begin
    if (Alignment = taRightJustify) then
    Alignment:=taLeftJustify;
    SelectAll;
    end;

    procedure TParaZahlEdit.CreateParams(var Params: TCreateParams);
    const
    Alignments: array[TAlignment] of DWORD = (ES_LEFT, ES_RIGHT, ES_CENTER);
    begin
    inherited CreateParams(Params);
    Params.Style := Params.Style or Alignments[FAlignment];
    end;

    procedure TParaZahlEdit.SetAlignment(Value: TAlignment);
    begin
    if FAlignment <> Value then
    begin
    FAlignment := Value;
    RecreateWnd;
    end;
    end;
Working...
X