Ein paar kleine Fehler...
Delphi-Quellcode:
procedure TRealEdit.CreateParams(var Params: TCreateParams);
const Alignments: array[TAlignment] of byte=(ES_Left, ES_Right, ES_Center);
begin
inherited CreateParams(Params);
Params.Style := Params.Style or Alignments[fAlignment];
end;
Die Zuweisung von Params.Style muss natürlich
VOR dem Aufruf von inherited erfolgen, damit der neue Stil im neuen Fenster auch wirklich vorhanden ist!
Delphi-Quellcode:
procedure TRealEdit.SetParent(AParent: TWinControl);
begin
inherited SetParent(AParent);
if FRealLabel = nil then exit;
FRealLabel.Parent := AParent;
FRealLabel.Visible := True;
end;
Hier sollte man noch die Position des Labels aktualisieren...!
Und außerdem muss man nicht jedesmal, wenn ein property geändert wird RecreateWnd aufrufen!
RecreateWnd wir benötigt wenn ein Property geändert wird, dass ein elementarer Bestandteil eines Windows-Steuerelements ist, der zur Laufzeit nicht geändert werden kann wie zB der Fensterstil für die Ausrichtung. Wird die Ausrichtung geändert, dann muss das gesamte Fenster neu erstellt werden (-> neues
Handle). Bei normalen Properties wie LabelSpacing, LabelPos, .. kann man sich das sparen.
Außerdem würd ich das Property RealLabel ReadOnly machen! Eine Set-Methode für das Label mit einer einfachen Zuweisung:
fRealLabel :=value;
ist eine potenzielle Fehlerquelle!