Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Titelleistenhöhe eines Fensters (Borderstyle = [bsToolWindow]) (https://www.delphipraxis.net/153476-titelleistenhoehe-eines-fensters-borderstyle-%3D-%5Bbstoolwindow%5D.html)

amigage 4. Aug 2010 14:30

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:
Borderstyle = [bsToolWindow]
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.

Kann mir freundlicherweise jemand helfen, wie ich diese Höhe herausfinde?

Danke.

himitsu 4. Aug 2010 14:50

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 MSDN-Library durchsuchenGetSystemMetrics beginnen.

Deep-Sea 4. Aug 2010 14:59

AW: Titelleistenhöhe eines Fensters (Borderstyle = [bsToolWindow])
 
Zitat:

Zitat von amigage (Beitrag 1039520)
ich muss ein Fenster zur Laufzeit generieren und entsprechend die reale Höhe berechnen, um den Inhalt korrekt anzuzeigen.

Was für einen Inhalt hast du denn, der auf die Höhe der Titelleiste angewiesen ist?

himitsu 4. Aug 2010 15:07

AW: Titelleistenhöhe eines Fensters (Borderstyle = [bsToolWindow])
 
Zitat:

Zitat von Deep-Sea (Beitrag 1039532)
Was für einen Inhalt hast du denn, der auf die Höhe der Titelleiste angewiesen ist?

Was Deep-Sea meint ... kennst du schon Delphi-Referenz durchsuchenClientHeight und Delphi-Referenz durchsuchenClientWidth?

Deep-Sea 4. Aug 2010 15:14

AW: Titelleistenhöhe eines Fensters (Borderstyle = [bsToolWindow])
 
@himitsu:
Hast wohl doch eine :glaskugel:?! :wink:

ralfiii 4. Aug 2010 15:22

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

amigage 4. Aug 2010 16:19

AW: Titelleistenhöhe eines Fensters (Borderstyle = [bsToolWindow])
 
Besten Dank für die schnelle Rückmeldung.

@ralfiii:
Delphi-Quellcode:
ClientOrigin.Y - Top
ist die Lösung. Bestens! :thumb:

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

himitsu 4. Aug 2010 16:34

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.

amigage 5. Aug 2010 09:56

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!

himitsu 5. Aug 2010 10:13

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 22:42 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