![]() |
Farbschema auslesen
Hallo #,
folgender Code liest das Farbschema von Windows aus ( aus ![]()
Delphi-Quellcode:
Problem:
uses ComObj, SyncObjs, ActiveX;
var GetCurrentThemeName: function (pszThemeFileName: LPWSTR; cchMaxNameChars: Integer; pszColorBuff: LPWSTR; cchMaxColorChars: Integer; pszSizeBuff: LPWSTR; cchMaxSizeChars: Integer): HRESULT; stdcall; procedure TForm1.Button1Click(Sender: TObject); var FileName, ColorScheme, SizeName: WideString; hThemeLib: THandle; begin try CoInitialize(NIL); hThemeLib := LoadLibrary('uxtheme.dll'); if hThemeLib > 0 then GetCurrentThemeName := GetProcAddress(hThemeLib, 'GetCurrentThemeName'); if Assigned(GetCurrentThemeName) then begin SetLength(FileName, 255); SetLength(ColorScheme, 255); SetLength(SizeName, 255); OleCheck(GetCurrentThemeName(PWideChar(FileName), 255, PWideChar(ColorScheme), 255, PWideChar(SizeName), 255)); // show the the theme path and file name. ShowMessage(PWideChar(FileName)); // show the color scheme name ShowMessage(PWideChar(ColorScheme)); // show the size name ShowMessage(PWideChar(SizeName)); end; finally FreeLibrary(hThemeLib); end; end; Auf einer virtuellen Maschine klappt es (XP mit XP-Mode, normale Farbeinstellung. Stelle ich um auf "klassisch" und "Kontrast schwarz", kommt bei OleCheck(GetCurrentThemeName die Meldung "Element nicht gefunden". Was ist das denn ? Das Problem scheint darab zu liegen, dass es bei klassisch ja keine Themes gibt (?) Heiko die |
AW: Farbschema auslesen
Zitat:
Und nein, das ließt nicht das Windows Farbshema aus, sondern das Farbschema des aktiven Theme. Über clScrollBar bis clMenuBar kommst du an die Farben der WinControls (wenn man sie sich vorher nach RGB konvertiert), aber zum Malen sind sie auch direkt nutzbar. Seit einer Weile, ich weiß nicht genau seit wann (daheim könnt ich mal nachsehn), könnte man auch die Unit UxTheme verwenden. Ist 'ne Übersetzung des Headers uxtheme.h . Dort gibt es noch ein paar Zusatzfunktionen
Delphi-Quellcode:
UseThemes sieht so aus
procedure FreeThemeLibrary;
function InitThemeLibrary: Boolean; // läd ebenfalls in Variablen ala "GetCurrentThemeName" die Funktionszeiger function UseThemes: Boolean;
Delphi-Quellcode:
function UseThemes: Boolean;
begin if (ThemeLibrary > 0) then Result := IsAppThemed and IsThemeActive else Result := False; end; //also {UseThemes} := Assigned(IsAppThemed) and Assigned(IsThemeActive) and IsAppThemed and IsThemeActive; |
AW: Farbschema auslesen
Hallo,
UxTheme benutze ich. Das Problem ist aber folgendes. Der User stellt "Kontrast schwarz" ein. Damit ist der Button-Hintergrudn schwarz, der Font-Color weiss (naja, so in etwa). Diese Font.color brauch ich, weil bei TBitButton das Color Schema nicht richtig umgesetzt. Ich will halt sowas machen:
Delphi-Quellcode:
if not ThemeIsActive then
begin BitButton1.Font.Color:= cl ??? end; Heiko |
AW: Farbschema auslesen
Zitat:
|
AW: Farbschema auslesen
Hallo,
wollte ich gerade reinschreiben ;) Dös passt. Danke Heiko |
AW: Farbschema auslesen
Zitat:
Delphi-Quellcode:
und
AControl.Font.Color := clBtnText
Delphi-Quellcode:
(siehe
AControl.Color := clBtnFace
![]() |
AW: Farbschema auslesen
Hallo,
beim ersten Durchlesen hatte ich noch gedacht, wat soll der M... ;) Dann kam die Erleuchtung. Danke! Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 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