Entwickler-Ecke

Windows API - Wie unter XP ermitteln, on XP-Stil oder Windows classic?


welu - So 24.02.08 00:22
Titel: Wie unter XP ermitteln, on XP-Stil oder Windows classic?
Ich bin neu hier, viele Grüße an alle!

Wie kann man unter XP von Delphi aus ermitteln, ob für die Oberfläche der XP-Stil oder Windows classic eingestellt ist? Wenn man den Rechner aus- und dann wieder einschaltet, bleibt die Einstellung ja erhalten, d. h. sie muss irgendwo auf der HD gespeichert sein. Ich vermute, in der Registry. Hat jemand eine Idee?


Calculon - So 24.02.08 00:38

Hi,

das hab' ich auch erst benötigt, um die AlphaSkins (Lite) zu aktivieren oder - wenn XP-Theme nicht verfügbar - nicht zu aktivieren.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
uses ..., Themes;  // ab Delphi 7

[..]

  if ThemeServices.ThemesEnabled then ... // (Themes aktiviert?) das suchst du, glaub' ich
  if ThemeServices.ThemesAvailable then ... // (Themes verfügbar?)


Gruß

Calculon
--


welu - So 24.02.08 06:42
Titel: Und unter Delphi5?
Das ist sicher eine gute Idee, aber ich habe nur D5 pro. Kann man die Unit Themes auch für für D5 einsetzen? Wenn ja, wo gibt's den Download?


Bernhard Geyer - So 24.02.08 10:07
Titel: Re: Und unter Delphi5?
user profile iconwelu hat folgendes geschrieben:
Das ist sicher eine gute Idee, aber ich habe nur D5 pro. Kann man die Unit Themes auch für für D5 einsetzen? Wenn ja, wo gibt's den Download?

Die von neueren Delphi-Versionen mit sicherheit aufgrund von Lizenzrechtlichen Gründen nicht. Aber evtl. ist ja in der Jedi (Win32-API-Translation) ebenfalls ein Import dabei ...


welu - So 24.02.08 20:03
Titel: Registry-Eintrag?
Die Art der Desktopdarstellung muss ja aber irgendwo gespeichert sein. Ich denke mal in der der Registry. Weiß vielleicht jemand den Registry-Eintrag? Den könnte ich direkt lesen, ohne andere Units, die evtl. Lizenzen benötigen würden, zu brauchen.


jakobwenzel - So 24.02.08 20:55

Mitgelieferte VCL-Quellen sind was tolles... :wink:

ThemeAvailable prüft, ob sich die uxtheme.dll per loadlibrary laden lässt.
ThemeEnabled ist dann true, wenn ThemeAvailable true ist, die Funktionen 'IsAppThemed' und 'IsThemeActive' der uxtheme.dll true liefern, und wenn die per GetVersion ermittelte Version der comctl32.dll (Konstante comctl32 in Unit Windows) größer/gleich $00060000 ist.

Definition der beiden Funktionen:

Delphi-Quelltext
1:
2:
3:
4:
  IsThemeActive: function: BOOL; stdcall;
  {$EXTERNALSYM IsThemeActive}
  IsAppThemed: function: BOOL; stdcall;
  {$EXTERNALSYM IsAppThemed}


luwe - Mo 25.02.08 09:17
Titel: Problem gelöst
Danke, das war die Lösung.