Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Tatsächliche Rahmenbreite von Komponenten herausfinden? (https://www.delphipraxis.net/179253-tatsaechliche-rahmenbreite-von-komponenten-herausfinden.html)

Keks 22. Feb 2014 22:41

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).

Volker Z. 22. Feb 2014 23:49

AW: Tatsächliche Rahmenbreite von Komponenten herausfinden?
 
Hallo,

Zitat:

Gibt es eine Möglichkeit, die tatsächliche Rahmenbreite von z.B. einer GroupBox herauszufinden? Mit der klassichen Darstellung sind [...]
Was meinst Du mit "tatsächlicher Rahmenbreite"? Ich vermute mal Du beziehst Dich auf irgendwelche Systemeinstellungen. Die kannst Du im Einzelfall über GetSystemMetrics auslesen - ein Schau in die OH macht da schon schlau.

Vielleicht hilft sofort:
Delphi-Quellcode:
ShowMessage(IntToStr (GetSystemMetrics (SM_CXBORDER)));


Gruß

Keks 23. Feb 2014 00:33

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:
Left:=0
und
Delphi-Quellcode:
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
Delphi-Quellcode:
Left:=2
und
Delphi-Quellcode:
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:
Delphi-Quellcode:
GetSystemMetrics(SM_CXBORDER)
liefert bei mir auf beiden Systemen "1". Schade, genausowas bräuchte ich eigentlich.

Dalai 23. Feb 2014 01:14

AW: Tatsächliche Rahmenbreite von Komponenten herausfinden?
 
Vielleicht isses SM_CXEDGE? Sonst schau mal bei MSDN-Library durchsuchenGetSystemMetrics vorbei, evtl. findest du was passendes.

MfG Dalai


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz