![]() |
Titelleistenhöhe eines Fensters (Borderstyle = [bsToolWindow])
Hallo,
ich muss ein Fenster zur Laufzeit generieren und entsprechend die reale Höhe berechnen, um den Inhalt korrekt anzuzeigen. Ich weiß, dass die Titelleiste eines Fenster unter verschiedenen Windows-Systemen variabel sein kann und mit GetSystemMetrics(SM_CYCAPTION) ausgelesen werden kann. Diese Angabe stimmt jedoch nicht, wenn das Fenster einen
Delphi-Quellcode:
besitzt. Diese Titelleiste ist nämlich kleiner als die anderen Borderstyles. Ich habe es unter XP Klassisch, XP und Windows 7 probiert. Immer das gleiche Problem.
Borderstyle = [bsToolWindow]
Kann mir freundlicherweise jemand helfen, wie ich diese Höhe herausfinde? Danke. |
AW: Titelleistenhöhe eines Fensters (Borderstyle = [bsToolWindow])
SM_CYCAPTION gibt den Y-Wert (Höhe) der Caption (Titelleiste) aus ... also wirst du da einfach einen anderen/passenderen Wert benötigen, welcher dir das gewünschte Ergebnis liefert.
Mit der Suche würde ich hier ![]() |
AW: Titelleistenhöhe eines Fensters (Borderstyle = [bsToolWindow])
Zitat:
|
AW: Titelleistenhöhe eines Fensters (Borderstyle = [bsToolWindow])
Zitat:
![]() ![]() |
AW: Titelleistenhöhe eines Fensters (Borderstyle = [bsToolWindow])
@himitsu:
Hast wohl doch eine :glaskugel:?! :wink: |
AW: Titelleistenhöhe eines Fensters (Borderstyle = [bsToolWindow])
Vielleicht eine völlige Schnapsidee, aber eigentlich müsstest du die Höhe des oberen Randes auch mit
Delphi-Quellcode:
ClientOrigin.Y - Top
bestimmen können. hth |
AW: Titelleistenhöhe eines Fensters (Borderstyle = [bsToolWindow])
Besten Dank für die schnelle Rückmeldung.
@ralfiii:
Delphi-Quellcode:
ist die Lösung. Bestens! :thumb:
ClientOrigin.Y - Top
@Deep-Sea: Es war eigentlich nur ein "kosmetisches" Problem. Für mich ist die Höhe der Titelleiste wichtig, weil ich in einem kleinen Fenster eine variable Anzahl von Buttons untereinander anordne und am unteren Ende ein "schöner" Abschluss vorhanden sein soll. Weder das der untere Button abgeschnitten wird oder ein paar Pixel zuviel sind. Und hier waren immer 3 Pixel zuviel, wenn das Fenster unter Design "Windows XP" lief. Super, ich danke Euch. |
AW: Titelleistenhöhe eines Fensters (Borderstyle = [bsToolWindow])
Wie gesagt ClientHeight liefert dir die Größe des Clientbereichs und dazu zählt nicht die Titelleiste und der Rahmen, sondern nur der Teil, in welchem du auch deine Buttons reinbekommst.
|
AW: Titelleistenhöhe eines Fensters (Borderstyle = [bsToolWindow])
@himitsu:
Stimmt, Du hast recht, wenn ich statt Dlg.Height nur die Dlg.ClientHeight verändere, interessiert mich die Titelleiste nicht. Habe ich dann auch gleich für Dlg.ClientWidth eingesetzt, denn dann fällt auch die Rahmenabfrage weg :thumb: Danke für den Tipp! |
AW: Titelleistenhöhe eines Fensters (Borderstyle = [bsToolWindow])
In diesem Zusammenhang sei noch erwähnt, daß Delphi (blöderweise) quasi auch Width und Height beim Erstellen der Fenster verwendet, aber die eventuelle Größenänderung nicht beim Align der Subkomponenten oder sonstwo beachtet. :wall:
(das fällt besonders unschön auf, wenn man sein Programm mal auf einen anderen System, mit größerer Titelleiste und oder Rahmen, ausführt) Bist also nicht der Einzige, welcher dieses "Problem" hat(te). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:40 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