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/)
-   -   TcxGroupBox und dessen echte Farbe? (https://www.delphipraxis.net/168461-tcxgroupbox-und-dessen-echte-farbe.html)

himitsu 22. Mai 2012 16:40

TcxGroupBox und dessen echte Farbe?
 
Moin,

wie bekommt man von einem TcxGroupBox die tatsächlich angezeigte Hintergrundfarbe raus?


Problem: Eine Komponente (z.B. TLinkLabel), die nicht transparent ist, nimmt sich über ParentColor die falsche Farbe, was natürlich echt besch* aussieht.


In sowas wie .Color oder .Style.Color steht nicht die richtige Farbe drin.


Wer ist eigentlich auf die saublöde Idee gekommen das TLinkLabel nicht einfach von TCustomLabel abzuleiten? :wall:

Klaus01 22. Mai 2012 16:56

AW: TcxGroupBox und dessen echte Farbe?
 
Hallo,

ich kenne die Komponente nicht, aber sollte die nicht ein Canvas haben und der Canvas
eine Farbe (color)?
Link

Grüße
Klaus

Furtbichler 22. Mai 2012 17:09

AW: TcxGroupBox und dessen echte Farbe?
 
Also ich nehme eine TCxCheckBox, schmeiss sie auf ne Form, ändere die Farbe der Form und -wupps- ist cxCheckBox1.Color angepasst.

himitsu 22. Mai 2012 17:25

AW: TcxGroupBox und dessen echte Farbe?
 
Ich will sie ja nicht setzen, sondern auslesen.

Und {Component}.Canvas.Brush.Color gibt nicht unbedingt die Hintergrundfarbe an, sondern die letzte Brush-Farbe, welche in diesem Canvas zum Zeichnen genutzt wurde.

In meinem Testfall war es zufällig "weiß", welches mit dem zarzen Hellgrau grade noch ertragbar währe, aber wie gesagt, das war wohl eher Zufall.


PS: Das ist eine mehrfach abgeleitete Komponente und irgendwo tief im System versteckt wird zur Runtime ein irgendein Style zugewiesen.
Wäre ja zu einfach, wenn DevExpress dabei an .Color die aktuelle Farbe zuweisen würde, was aber nicht gemacht wird.

Ach ja, eine TcxCheckBox weiß was Transparenz ist und bei ihren eigenen Komponenten haben die bestimmt notfalls einen Bugfix eingebaut, bzw. sie wissen wo die echte Farbe zu finden ist, welche nötig ist.
Hier handelt es sich um eine Komponente mit Pseudotransparent, welche nicht wirklich transparent ist, aber für's Zeichen die Parent.Color verwendet,
welche aber von DevExpress falsch/nicht gesetzt wird.

Furtbichler 22. Mai 2012 19:45

AW: TcxGroupBox und dessen echte Farbe?
 
himitsu, wie ich schon schrieb, entspricht bei mir die Eigenschaft 'Color' der TcxCheckbox der Hintergrundfarbe der dahinterliegenden Form. Es scheint, sie würde sich anpassen. Transparent ist das Teil jedenfalls nicht, denn über einem TDBGrid, das da so zufällig rumlag, war die 'Hintergrundfarbe' der TcxCheckbox nicht etwa weiß, wie das Grid, sondern maroon, wie die Form.

Wie gesagt, es scheint sich bei mir anzupassen.

Blup 23. Mai 2012 09:21

AW: TcxGroupBox und dessen echte Farbe?
 
Code:
TcxGroupBox
  ParentBackground
  ParentColor -> Wenn True wird Color im Style ignoriert
  Style
    AssignedValues -> bestimmt welche Properties individuell für diese Komponente festgelegt sind
    Color  
    StyleController -> nicht festgelegte Properties werden von hier bezogen (oder DefaultController)
  StyleDisabled
    AssignedValues
    Color
  Transparent
Die Hilfe zu TcxDefaultEditStyleController beschreibt die Funktionsweise eigentlich ganz gut.

In TcxContainer als protected deklariert:
Delphi-Quellcode:
function GetBackgroundColor: TColor; virtual;

himitsu 6. Jun 2012 13:09

AW: TcxGroupBox und dessen echte Farbe?
 
Zitat:

Delphi-Quellcode:
cxLookAndFeelController1.NativeStyle:=False; // das hier ist eine entdeckter Unterschied
cxLookAndFeelController1.SkinName:='Silver';

Und dann versteckt sich die "richtige" Farbe in cxGroupBox1.Styles.ContentOdd.Color :gruebel:


Aber dennoch:
Solange in Control.Color nicht die Farbe drinsteht, welche wirklich als Hintergrundfarbe verwendet wird, kann ParentColor ja nur Mist erzeugen.
Und wenn die es schon nicht schaffen .Color richtig zu setzen, warum gibt es dann keine Methode ala "MirIstEgalWasSonstwoStehtAberDieEchteHintergrundfarbeIstDiese". :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:12 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