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;
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;