Entwickler-Ecke

Windows API - Windows Vista Aero Design ermitteln


magnitudo - Mo 30.03.09 20:26
Titel: Windows Vista Aero Design ermitteln
Hallo zusammen,

ich möchte bündig neben dem Hauptfenster meiner Application ein zweites Fenster positionieren,
muss dazu aber wissen welches Windows-Design der User eingestellt hat um Programmtechnisch darauf reagieren zu können.
Denn die Fensterbreite unter Vista mit dem Aero-Design ist breiter als unter dem normalen Design, also auch dem XP-Design.
Wie und wo kann ich im System erfragen, welches Design der User verwendet ?
Das auslesen der Windows-Version hilft mir hier nicht viel weiter, da es auch unter Vista möglich ist
das Windows-Standard-Design einzustellen.
Ich möchte einfach nur unterscheiden können zwischen Aero und Standard.

Vielen Dank und viele Grüße
Thomas


jakobwenzel - Mo 30.03.09 20:27

Öhm warum liest du nicht einfach deine Formularbreite aus? Das sollte doch die komplette Größe mit allen Rahmen sein


jaenicke - Mo 30.03.09 20:30

Schau mal hier, da habe ich gerade die einzelnen Werte aufgeschrieben wie sich Rahmen, Fensterbreite (Width) und Fensterbereich ohne Rahmen (ClientWidth) zusammensetzen:
http://www.delphi-forum.de/viewtopic.php?p=555047#555047


Gausi - Mo 30.03.09 20:33

Du möchtest nicht wissen, welches Design aktiv ist, sondern wie breit/hoch gewisse Elemente sind. Dafür gibt es Suche im MSDN GETSYSTEMMETRICS (wie user profile iconjaenicke grade auch indirekt geschrieben hat).


magnitudo - Di 31.03.09 10:35

Hallo zusammen,

also ich bin durch eure Hilfe richtig gut weiter gekommen !
Jaenicke hat das in seinem Beispiel exakt ermittelt. Die Dimensionen stimmen so genau.
Leider kannte ich bis dato die Funktion "GetSystemMetrics" noch nicht. Wieder etwas dazugelernt.
Zu Beginn hat mich nur der Parameter "SM_CXFRAME" etwas irritiert, da dieser wie Jaenicke schreibt,
bei Fenstern mit veränderbarer Größe zur Anwendung kommt. Da meine Fenster jedoch "Fixed" sind habe ich
zuerst den Parameter "SM_CXFIXEDFRAME" getestet, der jedoch das Falsche Ergebnis lieferte.
Auch bei Fenstern mit nicht veränderbarer Größe funktioniert nur "SM_CXFRAME" und zwar im Zusammenspiel
mit "ClientWidth", nicht "Width" alleine.

Vielen herzlichen Dank noch einmal an alle
beste Grüße
Thomas