AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

MDI Child hat falsche Größe bei wsMaximized

Ein Thema von ZOD · begonnen am 15. Mai 2018 · letzter Beitrag vom 16. Mai 2018
Antwort Antwort
ZOD

Registriert seit: 6. Mai 2009
97 Beiträge
 
#1

MDI Child hat falsche Größe bei wsMaximized

  Alt 15. Mai 2018, 12:55
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.799 Beiträge
 
Delphi 12 Athens
 
#2

AW: MDI Child hat falsche Größe bei wsMaximized

  Alt 15. Mai 2018, 14:17
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
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
ZOD

Registriert seit: 6. Mai 2009
97 Beiträge
 
#3

AW: MDI Child hat falsche Größe bei wsMaximized

  Alt 15. Mai 2018, 16:45
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.
  Mit Zitat antworten Zitat
ZOD

Registriert seit: 6. Mai 2009
97 Beiträge
 
#4

AW: MDI Child hat falsche Größe bei wsMaximized

  Alt 15. Mai 2018, 16:49
Nachsatz:
ach ja - irgendwo habe ich bei meiner Fehlersuche gelesen, dass für die MDIChild der "normale" Parent unbedeutend ist.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: MDI Child hat falsche Größe bei wsMaximized

  Alt 15. Mai 2018, 19:52
Der Parent ist schon wichtig, aber die die Verwaltung des MDI setzt Diesen auf die "eine" Form, welche MDI-Parent definiert wurde.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
ZOD

Registriert seit: 6. Mai 2009
97 Beiträge
 
#6

AW: MDI Child hat falsche Größe bei wsMaximized

  Alt 16. Mai 2018, 10:02
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.
  Mit Zitat antworten Zitat
ZOD

Registriert seit: 6. Mai 2009
97 Beiträge
 
#7

AW: MDI Child hat falsche Größe bei wsMaximized

  Alt 16. Mai 2018, 14:32
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?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:46 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