Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Parent.Color ermitteln bei ParentColor=False (https://www.delphipraxis.net/189116-parent-color-ermitteln-bei-parentcolor%3Dfalse.html)

skyobserver 5. Mai 2016 19:17

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

dummzeuch 5. Mai 2016 19:38

AW: Parent.Color ermitteln bei ParentColor=False
 
Zitat:

Zitat von skyobserver (Beitrag 1337560)
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...

Delphi-Quellcode:
type
  TWinControlHack = class(TWinControl)
  end;

function TWinControl_GetColor(_ctl: TWinControl): TColor;
begin
  Result := TWinControlHack(_ctl).Color;
end;
(Untested.)

skyobserver 5. Mai 2016 20:28

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:
  TestWinControl = class(TWinControl)
  public
    property Color;
  end;
Im untergeordneten Object können wir dann auf die Eigenschaft
"Color" des übergeordneten Objects zugreifen, indem wir die
"Parent" Eigenschaft mit der neuen Klasse casten:
Code:
  ParentClr := TestWinControl(Parent).Color;

himitsu 5. Mai 2016 21:27

AW: Parent.Color ermitteln bei ParentColor=False
 
Zitat:

Es fehlte zwar noch eine Zeile ...
Jain.
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:

skyobserver 5. Mai 2016 21:38

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 08:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz