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/)
-   -   Delphi Fontcolor der Groupbox im Xp-Style (https://www.delphipraxis.net/20356-fontcolor-der-groupbox-im-xp-style.html)

cheatzs 16. Apr 2004 13:30


Fontcolor der Groupbox im Xp-Style
 
Hi Leutz,
ich suche die Farbe die der Text einer Groupbox im Xp-Style hat. Die ist nämlich keine, die im Object-Inspector ausgewählt werden kann. :?
Ich hätte die Farbe ja auch zur Laufzeit von der Groupbox geholt, aber das geht auch nicht.

Hat jemmand ne Idee. Das PSDK sagt auch nicht viel dazu.

THX

notam 16. Apr 2004 14:07

Re: Fontcolor der Groupbox im Xp-Style
 
Sind die Farben im Luna-Style nicht von Windows vorgegeben? Vielleicht kann man sie ja in Anzeigeeinstellungen->Darstellung->Erweitert einstellen. Aber ob das Delphi geht? :gruebel:

cheatzs 16. Apr 2004 14:15

Re: Fontcolor der Groupbox im Xp-Style
 
Also ich bin gerade mal die Erweiterten Einstellungen der Darstellungsoptionen durchgegangen. Da find ich die Farbe auch nicht.
Ich will sie ja nichtmal einstellen. Nur wissen (je nach XP-Style eben).

Bernhard Geyer 16. Apr 2004 14:27

Re: Fontcolor der Groupbox im Xp-Style
 
Dazu benötigst Du die Funktion GetThemeSysColor aus der Themes-DLL.
In D7 sollte die Funktion schon in Delphi vorhanden sein. Falls nicht mußt du entsprechende Themes-Komponenten dir besorgen (z.B. das Elpack bietet XP-Theming auch für altere Delphi-Versionen/Windows-Versionen an).

cheatzs 16. Apr 2004 14:56

Re: Fontcolor der Groupbox im Xp-Style
 
Ok, hab die Funktion jetzt gefunden.
Hab ein paar Farben durchprobiert (allerdings hab ich HTheme 0 gesetzt weil ich nich wusste wie man das bekommt).
Leider sind das nur die Farben, die der Objekt-Inspektor auch anzeigt.

Kann das an der 0 liegen für HTheme?, wie bekommt man das?

mirage228 16. Apr 2004 16:10

Re: Fontcolor der Groupbox im Xp-Style
 
Wenn du Delphi7 hast, kannst du dir die Unit Themes anschauen. Dort gibts eine enstprechende Funktion. Aber ich bin daraus nicht schlau geworden (Ich habe ebenfalls das Problem, das du hast, jedoch mit einem PageControl)

mfG
mirage228

cheatzs 16. Apr 2004 16:58

Re: Fontcolor der Groupbox im Xp-Style
 
Hi ALL,
also ich hab nochmal genauer nachgeschaut und bin auf Codeproject.com fündig geworden.
Das Programm, geschrieben in C++, kann die jeweiligen Theme-Elemente zeichnen und auch den Text ausgeben, in meiner gesuchten Farbe. Nur kapier ich nicht ganz wie.

Ich bin gerade hier:

Delphi-Quellcode:
 var pcolor : TColorREF;
     hhtheme : HTheme;
begin
  hhTheme:= OpenThemeData(Application.handle,'Button;GroupBox');
  if hhTheme = 0 then showMessage('0'); //Wenn HTheme nicht gefunden
  GetThemeColor(hhTheme, BP_GROUPBOX, GBS_NORMAL,color,pcolor);
  Configuration_General_Title_label.font.color := pcolor;
  CloseThemeData(hhTheme);
end;
Ich bin mir nur nicht sicher was ich bei OpenThemeDate als Parameter angeben soll. Ich finde nirgends eine Doku darüber. Das PSDK sagt nur:

Zitat:

hwnd = Handle of the window for which theme data is required.
pszClassList = Pointer to a string that contains a semicolon-separated list of classes.
GetThemeColor ist ziemlich gut beschrieben.
Wenn ich das Probgramm aber starte, ist die Farbe trotzdem Schwarz und nicht Blau.

Bernhard Geyer 16. Apr 2004 17:17

Re: Fontcolor der Groupbox im Xp-Style
 
[quote]Hab ein paar Farben durchprobiert (allerdings hab ich HTheme 0 gesetzt weil ich nich wusste wie man das bekommt). [cl]

Wie Du an die Themes-Handle kommst kann ich dir nicht sagen, da ich nur Controls einsetze (ElPack) welche einen integrierten Themes-Support haben und dort ist das Handle unter XP-Themes immer richtig gesetzt. Evtl. hat auch der Themes-Manager von Mike Lischke Code den du für deine Tests/ einen Einstieg verwenden könntest.

cheatzs 16. Apr 2004 17:23

Re: Fontcolor der Groupbox im Xp-Style
 
@mirage228

Die Themes Unit ist ein Teil von Mike Lischkes Theme Manager.
Die eigentliche Unit ist UxTheme.
Diese enthällt die Proceduren die wir brauchen. So z.B. GetThemeColor u.a.
Das Problem ist, diese Proceduren und Funktionen sind in ner Library. Und da weiß ich nicht wie ich dran kommen soll. :?
Und diese zu benutzen klappt irgendwie nicht. :wall:

@Bernhard Geyer

Hab deinen Text gerade noch gelesen. Der Theme Manager baut ja auf dem Problem auf, also nützt er mir auch nicht viel. (siehe oben)

cheatzs 16. Apr 2004 17:51

Re: Fontcolor der Groupbox im Xp-Style
 
Ich hab jetzt eine für mich akzeptable Lösung.
Unzwar ist mir beim Durchgehen des Programms auf das ich verwiesen hatte eines aufgefallen.
Die Schrift passend zum Start-Menu-Button konnte ebenfalls Problemlos mit der selben Procedure dargestellt werden. So eine Schrift kann man aber nicht in nem gewöhnlichem Label ausgeben. Also muss sie Windows selbst zeichnen.
Das heißt sozusagen es gibt keine Möglichkeit, soweit ich das jetzt mitbkommen habe, nur die Farbe rauszubekommen. Das einzigste was man kann ist die Prozedure zu benutzen um den Text zu zeichnen.

Und so hab ich es dann auch gemacht:

Delphi-Quellcode:
var hhtheme : HTheme;
begin
  hhTheme:= OpenThemeData(MainForm.Handle,'Button');
  DrawThemeText(hhTheme,label.Canvas.Handle,BP_GROUPBOX, GBS_NORMAL, 'Hallo', -1, DT_LEFT, 0,label.Canvas.ClipRect);
  CloseThemeData(hhTheme);
end;
Vielleicht hilft es euch!


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