Einzelnen Beitrag anzeigen

Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#3

AW: Tatsächliche Rahmenbreite von Komponenten herausfinden?

  Alt 23. Feb 2014, 01:33
Ich versuche, das Problem mal mit einem vereinfachten Beispiel (damit man die Pixel besser sehen kann, in vergrößerter Form) zu visualisieren:


Als ich die Frage gestellt habe, bin ich davon ausgegangen, dass in Windows 7 mit Themes die Rahmenbreite nur 1px breit ist (siehe Groupbox1 oben). Erst als ich dieses Beispiel zusammengestellt habe, ist mir aufgefallen, dass es dort nur so aussah, weil es auf einem Tab lag und sich weiße Schatierung aufgehoben hat (siehe Groupbox2 oben). Das verkompliziert die Sache eigentlich nur noch...

Button1 ist mit Left:=0 und Width:=Groupbox1.Width platziert und erfüllt in dem Theme-Style genau meine Anforderung: Er reicht pixelgenau vom linken Rahmen bis zum rechten Rahmen. (Wäre der Hintergrund allerdings nicht weiß, wäre die Positionierung dann doch falsch, weil der Button links einen Pixel vom weißen Rahmen verdecken würde - trifft in meinem Fall aber nicht zu.)

Das ursprüngliche Problem ist nun, dass es "ohne" Themes (Screenshot von XP mit Classic Theme) nun ganz anders aussieht. Der Button müsste mit Left:=2 und Width:=Groupbox1.Width-4 positioniert werden, um so auszusehen, als würde es genau vom linken zum rechten Rahmen reichen.

Natürlich kann ich diese Abweichung hardcoden, aber zum einen ist das unschön und zum anderen weiß ich ja gar nicht, ob das mit anderen Themes nicht vielleicht noch ganz anders aussieht. Eigentlich versuche ich nur eine Möglichkeit zu finden den Innenbereich einer GroupBox pixelgenau bestimmen zu können. Jetzt bin ich aber leider recht ratlos.

Edit: GetSystemMetrics(SM_CXBORDER) liefert bei mir auf beiden Systemen "1". Schade, genausowas bräuchte ich eigentlich.
Miniaturansicht angehängter Grafiken
rahmenbreite.png  
  Mit Zitat antworten Zitat