Einzelnen Beitrag anzeigen

hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#1

Farbschema auslesen

  Alt 26. Apr 2012, 10:07
Hallo #,

folgender Code liest das Farbschema von Windows aus
( aus http://www.swissdelphicenter.ch/de/showcode.php?id=1646)
Delphi-Quellcode:
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;
Problem:
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
Heiko

Geändert von hoika (26. Apr 2012 um 10:14 Uhr)
  Mit Zitat antworten Zitat