AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TForm.Height vs. ClientHeight

Ein Thema von himitsu · begonnen am 26. Feb 2021 · letzter Beitrag vom 20. Jun 2022
Antwort Antwort
Benutzerbild von himitsu
himitsu
Online

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

AW: TForm.Height vs. ClientHeight

  Alt 12. Mär 2021, 13:57
Eine "schnelle" Lösung ist hier die Width/Height in den DFMs zu suchen und durch ClientWidth/ClientHeight zu ersetzen (notfalls mit bissl Zuschlag, aber egal, da wir mit Align arbeiten) und HorzScrollBar/VertScrollBar in den constructor zu verschieben.


Ich hab jetzt erstmal das absolute MinimalBeispiel gebastelt
  • nagelneue VCL-Anwendung erstellen
  • Alt+F12 (in die DFM)
  • unterhalb von ClientHeight ein Height einfügen
    Delphi-Quellcode:
    object Form12: TForm12
      Left = 0
      Top = 0
      Caption = 'Form12'
      ClientHeight = 299
      ClientWidth = 635
      Color = clBtnFace
    Delphi-Quellcode:
      Height = 800
      Width = 50
  • nicht zurück in den Designer
  • speichern
  • und F9
  • =
  • eigentlich müsste die jetzt 999 hoch und 50 breit sein, aber sie ist noch so, wie vorher im Designer gesehn, also was in ClientHeight/ClientWidth steht.
Bin grad nochmal im XE am Probieren.


Grundsätzlich ist es doch eh ein Fehler, dass Width/Height gespeichert wird?
wenn irgendwas nicht miz Align ausgerichtet ist, dann kann die Form per se falsch geladen werden. (das, weswegen man damals von Height auf ClientHeight umgestiegen ist)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (12. Mär 2021 um 14:05 Uhr)
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
655 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TForm.Height vs. ClientHeight

  Alt 12. Mär 2021, 15:00
Noch eine Anmerkung für dich, die aber eventuell bei aktuellen Versionen nicht mehr zutrifft:

Sobald AutoScroll=True im DFM steht, wird die Grösse (Widht/Height) des Fenster gespeichert. Ist das False wird ClientWidth/Height gespeichert. Ob das aktuell noch so ist, habe ich jetzt nicht getestet, aber in D7 war es noch so. Daher haben alle meine Formen AutoScroll=False und wenn ich es irgendwo benötige, setze ich das Propety im OnCreate der Form auf True. Wieso man da unterscheidet und nicht generell ClientXY nutzt, wissen wohl auch nur die, die das mal so angedacht haben.

Bis glaube ich D3 wurde nur Width/Height gespeichert was dann spätestens bei Windows XP (andere Titelgrösse der Fenster) zu falschem Forminhalt führte. Durch die grössere Titelleiste wurden in Delphi Formen der Clientbereich verkleinert. Da wurde dan auf ClientXY umgestellt, aber eben nur wenn AutoScroll=False ist, was IMO ein ziemlicher Blödsinn ist.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: TForm.Height vs. ClientHeight

  Alt 12. Mär 2021, 15:18
Delphi 7 war's auch noch so.
Und ja, als es seit XP mit den verschiedenen Fensterrahmen/Titelleisten in jedem neuen Windows anders.
Man konnte da nur alles in ein Panel legen und das mit alClient, sonst rutschten schnell mal Komponenten aus dem Fenster.


Hmmm, also Grundsätzlich ist im XE der Code ähnlich.
Dort wird auch mal Height und mal ClientHeight gespeichert, abhängig von VertScrollBar.
Und im SetClientHeight wird ebenfalls in einer Variable zwischengespeichert.
Delphi-Quellcode:
  ClientHeight = 299
  ClientWidth = 635
  Height = 800
  Width = 50
Mein Beispiel liefert also auch im XE schon eine falsche Größe.

Aber zusammen mit der Vererbung (ClientHeight in einer DFM und Height in einer Anderen), da funktionierte damals noch (D5, D7, XE)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (12. Mär 2021 um 15:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: TForm.Height vs. ClientHeight

  Alt 15. Mär 2021, 12:37
https://quality.embarcadero.com/browse/RSP-33368
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: TForm.Height vs. ClientHeight

  Alt 24. Mär 2021, 23:40
Zitat von Closed:
Works As Expected
Ähhhh NEIN!

Erwarten tut man tu ich was Anderes.


Und außer dem Status kein Wort dazu.
Echt nett.

Vor allem, da das Problem vermutlich mit 2 Zeilen Code, ala FClientWidth:=0; gelöst wäre.
Ein Therapeut entspricht 1024 Gigapeut.
  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 22:27 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