Einzelnen Beitrag anzeigen

Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#1
  Alt 17. Apr 2003, 10:18
So.. ich meld mich auch nochmal zu Wort. Ich hab dir doch gestern im ICQ gesagt du sollst die Methode SetParent überschreiben, aber vielleicht hast du den Wink nicht ganz verstanden.

Dein Label vom LabelEdit braucht einen Parent - ganz klar, den braucht jedes Control, das irgendwo angezeigt werden soll! Der Erste Vorschlag war daher Label.Parent := TWinControl(AOwner). Dieser Vorschlag ist nicht nur unelegant und gefährlich (Owner <> Parent) sonder auch noch unflexibel. Wenn der Parent des Edits zur Laufzeit geändert wird kann der Parent des Labels nicht angepasst werden.

Ich hab mir gestern mal die Deklaration von TControl angeschaut (die Eigenschaft Parent wird mit dem TControl eingeführt). Die Methode SetParent ist als protected und virtual deklariert und kann daher in abgeleiteten Klassen überschrieben werden (dieser Weg wird auch beim "original" LabeledEdit eingeschlagen)! Des Rätsels Lösung ist also in deinem Code einfach folgende procedure einzufügen (das ist jetzt nur aus dem Kopf, also keine Garantie!):

Delphi-Quellcode:
type
  {...}
  protected
    procedure SetParent(Value: TWinControl); override;
  {...}
end;

procedure TRealEdit.SetParent(Value: TWinControl);
begin
  inherited;
  if fLabel.Parent <> Value then
    fLabel.Parent := Value;
end;
Das wäre einmal das wichtigste, denn damit erscheint dein Label dann auch auf der Form.. der Rest bleibt dann erstmal dir überlassen.
Manuel Pöter
  Mit Zitat antworten Zitat