@1: das mit dem 'vor' erstellen fällt weg, da alTop grundsätzlich(leider) vor alLeft ausgewertet wird. Trotzdem eine Antwort hierauf: Beim Erstelen eines designten Formulars wertet Delphi das .dfm file aus. Hier stehen alle Komponenten ind der Reihenfolge drin, in der Du sie auf dem Formular platziert hast(zeitlich), inclusive aller Verschachtelungen. Damit ist gewährleistet, dass a) die Komponenten immer in der selben Reihenfolge erstellt werden und b) die Parents schon da sind, wenn childs erstellt werden. Im übrigen macht Delphi beim Erstellen aus einem .dfm nichts anderes, was Du auch im FormCreate machen würdest, wenn Du eine Komponente dazubringen willst, also Instanz kreieren und alle Properties zuweisen, die sich von defaultwerten unterscheiden (also auch den Parent).
Die
MDI Childs liegen im Client-Bereich des Hauptformulars, und eben dieser wird verkleinert, wenn eine 'normale' Komponente mit alIrgendwas auf dem Hauptformular liegt, d.h. sie liegen nur dahinter, denn die Komponente kein align hat.
@2: Mit Nachfolger machen meine ich, die Klasse TCustPageControl oder so überschreiben. Wenn Du das in einem
Package machst, kannst Du das auch in die
IDE integrieren, aber erstmal genügt es eine Instanz davon im FormCreate des Hauptformulars zu erstellen usw.
@3: wie beschrieben:
property WindowProc: TWndMethod read FWindowProc write FWindowProc;
ist eine public property von TControl und zeigt auf die zu benutzende Prozedur, die Delphi ruft, falls eine Windowsnachricht ankommt. Wenn Du Dir diese Prozedur merkst und eine eigene dieser Property zuweist, wird ab dann diese gerufen. Jetzt kannst Du in Deiner Eigenen Prozedur auf alle Windows-Nachrichten reagieren, die eigentlich für das Hauptformular bestimmt sind und da diese Parent von den MDIChilds ist auch alle Nachrichrten an diese. Nachdem Du reagiert hast (z.B.: neuen Tab erstellen), solltest Du aber die Nachricht an die originale(gemerkte) Prozedur weiterleiten und das hauptformular reagiert normal darauf.
@4: nicht direkt. Du kanns aber die Windowsnachricht auswerten, die dafür sorgt, dass MDIChildren[i].WindowState gerufen wird.
@5: Der Trick dabei ist der, dass die Children nach wie Vor als Parent das Hauptform haben und die Größenanderung sorgt nur dafür, das Dein Pagecontrol unsichtbar wird, wenn die Children nicht maximiert sind. Du kannst auch Visible auf false setzen, ich weiss allerdings nicht, ob das den Clientbereich des Hauptforms beeinflusst.
p.s.: Augen rolle ich nur, wenn sich jemand dumm stellt. Du versuchst, etwas zu lernen und das kann man nur gutheissen
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>