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 MDI Child hat falsche Größe bei wsMaximized (https://www.delphipraxis.net/196350-mdi-child-hat-falsche-groesse-bei-wsmaximized.html)

ZOD 15. Mai 2018 12:55

MDI Child hat falsche Größe bei wsMaximized
 
Hallo zusammen,

seit einigen Tagen suche ich nach meinem Fehler und sehe wohl inzwischen den Wald vor lauter Sträuchern nicht mehr (Bäume sind alle abgesägt).

Folgende Situation:

- älteres Projekt in D7
- MDI Applikation
- Application.Mainwindow ist fsMDIForm
- es gibt eine MDIChild-Basisklasse
- davon abgeleitet viele Kinder
- im Hauptformular ist eine TreeView (Projekt-Baum)
- beim Select eines Knoten wird das entsprechende MDIChild-Formular angezeigt

Wie gesagt, das ist ein älteres Projekt (seit 2003 laufend). Bisher klappte alles wie gewollt.

Nun gibt es bei einem MDI-Child (dem Formular zum obersten Knoten = Projektknoten) seit
einigen Tagen ein Problem:

Das Formular wird nicht mehr wie die anderen MDIChilds in den verfügbaren Clint-Bereich des Hauptformulares eingepasst sondern scheinbar in den Bildschirm (s.u.).

Ich habe natürlich eine Versionsverwaltung aktiv und versucht herauszufinend, ab welcher Änderung das Problem auftritt.
Aber hier komme ich nicht weiter. Auch "alte" Versionen zeigen nun das Problem in der Delphi-IDE und als EXE nach neukompieren, obwohl die "alten" EXE das Problem nicht haben.

Natürlich habe ich was vermurkst .. nur was?

Zur Fehlersuche habe ich mir im FormResize des MDIChild einige Infos anzeigen lassen.
FormResze wird oft aufgerufen. Nach der Instanzierung wird irgendwannn die MDIChild-Formgröße genau dem Clientbereich angepasst.
Hier Auszüge meiner "Debuganzeige":

frmRMProjekt.Width x Height = 860 x 742
frmRMProjekt.ClientWidth x ClientHeight = 860 x 742
frmRMProjekt.FormStyle = fsMDIChild
frmRMProjekt.Owner = dmMakeTree
frmMain.ClientRect = 860 x 742

und bei einem der nächsen Aufrufe von FormResize sieht das dann plötzlich so aus:

frmRMProjekt.Width x Height = 1920 x 1016
frmRMProjekt.ClientWidth x ClientHeight = 1920 x 1016
frmRMProjekt.FormStyle = fsMDIChild
frmRMProjekt.Owner = dmMakeTree
frmMain.ClientRect = 864 x 746

Wie gesagt - NUR bei diesem Formular.

Hat irgendwer zielführende Ideen oder Vorschläge? Ich bin wirklich dankbar für Tipps.

Sicher habe ich hier nicht alle Details aufgeführt - einfach fragen.
Den gesamten Code zu posten halte ich für extrem unelegant, da das ein größeres Projekt ist.

Danke für Unterstützung.

Sherlock 15. Mai 2018 14:17

AW: MDI Child hat falsche Größe bei wsMaximized
 
Owner ist vermutlich halb so wild, interessanter ist eher der Parent, aber dennoch: Was da als Owner eingetragen ist hört sich sehr nach Datenmodul an.
Interessant wäre übrigens der Vergleich zu den anderen MDIChildren, wie sieht da die Formulardatei aus?

Sherlock

ZOD 15. Mai 2018 16:45

AW: MDI Child hat falsche Größe bei wsMaximized
 
die MDIChildren sind wie gesagt Ableitungen eines MDIChildBasis-Formulars.
Dort werden im wesentlichen die Datenabrufe gehandhabt.

Ja, der Owner ist ein DataModule. Das war und ist aber n.m. Verständnis kein Problem, da hier lediglich die Speicherverwaltung dran hängt.

Die Formulardateien zu vergleichen ist jedoch nicht trivial.

Hier mal kurz die Hirarchie:

UrForm
|
GrundForm
|
MDIChildBasisForm
|
MDChild

Die ersten zwei Vorfahren werden auch für nicht-MDI Formulare als Vorfahr verwendet.

Auf was sollte ich bei dem Vergleich achten? Irgendwie spukt in meinem Kopf herum,
dass das MDIChild die "Verbindung" zum MDIForm verliert.

ZOD 15. Mai 2018 16:49

AW: MDI Child hat falsche Größe bei wsMaximized
 
Nachsatz:
ach ja - irgendwo habe ich bei meiner Fehlersuche gelesen, dass für die MDIChild der "normale" Parent unbedeutend ist.

himitsu 15. Mai 2018 19:52

AW: MDI Child hat falsche Größe bei wsMaximized
 
Der Parent ist schon wichtig, aber die die Verwaltung des MDI setzt Diesen auf die "eine" Form, welche MDI-Parent definiert wurde.

ZOD 16. Mai 2018 10:02

AW: MDI Child hat falsche Größe bei wsMaximized
 
Das dachte ich eigentlich auch.

Nur scheint beim Problemformular entweder dieser MDIParent verloren gegangen zu sein oder die Ermittlung des MDIClientBereiches nicht richtig zu funktionieren. Irgendwie scheint das Problemformular anzunehmen, dass der Clientbereich = gesamter Bildschirm ist.

Und ich habe keine Ahnung, was hier passiert ist.

Gerade habe ich eine absolut gruselige Notlösung geschaffen. Dabei wird im UrForm im FormResize (steuerbar über eine Property)
die Formulagröße hart auf den MDIClient-Bereich des Hauptformulars gesetzt. Das geht zwar, gibt aber ein saublödes Geflacker,
da das FormResize oft aufgerufen wird.

ZOD 16. Mai 2018 14:32

AW: MDI Child hat falsche Größe bei wsMaximized
 
Ich bin nach wie vor auf der Fehlersuche.

Kann mir jemand sagen, wo im Quellcode von TForm (ggf. auch wo anders) das Handling der MDI Funktionalität hinsichtlich Größe anpassen (wsMaximized) gemacht wird?


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:27 Uhr.

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