![]() |
Tatsächliche Rahmenbreite von Komponenten herausfinden?
Gibt es eine Möglichkeit, die tatsächliche Rahmenbreite von z.B. einer GroupBox herauszufinden? Mit der klassichen Darstellung sind das 2px, in Windows 7 ists aber nur 1px.
Ich dachte, ich komme vielleicht über ClientRect dran, aber das liefert (zumindest bei einer GroupBox) die gleiche Breite wie die Breite der Komponente (.Width = .ClientRect.Right). |
AW: Tatsächliche Rahmenbreite von Komponenten herausfinden?
Hallo,
Zitat:
Vielleicht hilft sofort:
Delphi-Quellcode:
ShowMessage(IntToStr (GetSystemMetrics (SM_CXBORDER)));
Gruß |
AW: Tatsächliche Rahmenbreite von Komponenten herausfinden?
Liste der Anhänge anzeigen (Anzahl: 1)
Ich versuche, das Problem mal mit einem vereinfachten Beispiel (damit man die Pixel besser sehen kann, in vergrößerter Form) zu visualisieren:
http://www.delphipraxis.net/attachme...1&d=1393114874 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
Delphi-Quellcode:
und
Left:=0
Delphi-Quellcode:
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.)
Width:=Groupbox1.Width
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
Delphi-Quellcode:
und
Left:=2
Delphi-Quellcode:
positioniert werden, um so auszusehen, als würde es genau vom linken zum rechten Rahmen reichen.
Width:=Groupbox1.Width-4
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:
Delphi-Quellcode:
liefert bei mir auf beiden Systemen "1". Schade, genausowas bräuchte ich eigentlich.
GetSystemMetrics(SM_CXBORDER)
|
AW: Tatsächliche Rahmenbreite von Komponenten herausfinden?
Vielleicht isses SM_CXEDGE? Sonst schau mal bei
![]() MfG Dalai |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 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