AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Titelleistenhöhe eines Fensters (Borderstyle = [bsToolWindow])
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von amigage · begonnen am 4. Aug 2010 · letzter Beitrag vom 5. Aug 2010
Antwort Antwort
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
270 Beiträge
 
Delphi 11 Alexandria
 
#1

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

  Alt 4. Aug 2010, 14:30
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 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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 4. Aug 2010, 14:50
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#3

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

  Alt 4. Aug 2010, 14:59
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?
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#4

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

  Alt 4. Aug 2010, 15:07
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?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#5

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

  Alt 4. Aug 2010, 15:14
@himitsu:
Hast wohl doch eine ?!
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#6

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

  Alt 4. Aug 2010, 15:22
Vielleicht eine völlige Schnapsidee, aber eigentlich müsstest du die Höhe des oberen Randes auch mit
ClientOrigin.Y - Top
bestimmen können.

hth
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
270 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 4. Aug 2010, 16:19
Besten Dank für die schnelle Rückmeldung.

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

@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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#8

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

  Alt 4. Aug 2010, 16:34
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
270 Beiträge
 
Delphi 11 Alexandria
 
#9

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

  Alt 5. Aug 2010, 09:56
@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

Danke für den Tipp!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#10

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

  Alt 5. Aug 2010, 10:13
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.
(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).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:57 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