![]() |
Parent.Color ermitteln bei ParentColor=False
Gib es eine Möglichkeit die Eigenschaft "Color" des Parent-Objectes
zu ermitteln, wenn "ParentColor" auf False steht? Ich möchte die eigene Eigenschaft "Color" setzen und trotzdem die Parent "Color" ermitteln. FColor ist "private" und die property "Color" bei TWinControl noch nicht "published... |
AW: Parent.Color ermitteln bei ParentColor=False
Zitat:
Delphi-Quellcode:
(Untested.)
type
TWinControlHack = class(TWinControl) end; function TWinControl_GetColor(_ctl: TWinControl): TColor; begin Result := TWinControlHack(_ctl).Color; end; |
AW: Parent.Color ermitteln bei ParentColor=False
Besten Dank! So funktioniert es!
Es fehlte zwar noch eine Zeile aber der Gedanke ist richtig. Hier noch mal für alle: Da die Eigenschaft "Parent" vom Typ TWinControl ist, leiten wir davon eine neue Klasse TestWinControl ab. In dieser ändern wir die Sichtbarkeit der Eigenschaft "Color" indem wir sie vom Bereich "private" nach "public" verschieben:
Code:
Im untergeordneten Object können wir dann auf die Eigenschaft
TestWinControl = class(TWinControl)
public property Color; end; "Color" des übergeordneten Objects zugreifen, indem wir die "Parent" Eigenschaft mit der neuen Klasse casten:
Code:
ParentClr := TestWinControl(Parent).Color;
|
AW: Parent.Color ermitteln bei ParentColor=False
Zitat:
Theoretisch Ja, aber praktisch Nein. :stupid: Alles in der selben Unit der Deklaration ist wie PUBLIC. Somit hat man da automatisch auch auf PROTECTED Zugriff. Aus diesem Grund wurde inzwischen STRICT PRIVATE und STRICT PROTECTED eingeführt. Inzwischen war es das, mit der "berühmten" Abwärtskompatibilität, somit hätte man das PRIVATE und PROTECTED eigentlich auch reparieren und das "falsche" Verhalten mit neuem Namen implementieren können. :roll: Genauso, wie AnsiSameText plötzlich UNICODE ist, aber WideSameText kein String/UnicodeString und SameText kein UNICODE. :wall: |
AW: Parent.Color ermitteln bei ParentColor=False
TWinControl ist aber nicht in meiner Unit deklariert und
ich nehme keine Änderungen an den VCL Units vor! Ich muss die Hilfsklasse also in meinen Units deklarieren von wo aus ich keinen Zugriff auf "FColor" oder "Color" habe... Außerdem hätte dann nur die Hilfklasse den Zugriff auf die "protected" Eigenschaften und für jede andere andere Unit wären sie wieder unsichtbar! Der Code ist getestet und funktioniert! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz