Zeigen MDI-Formular als modal
Diese klingen gegen die Natur des MDI.. ich muss ein MDI-Formular (FormStyle=fsMdiChild) als modal manchmal. Und ich muss auch Zugriff auf den Teil zwischen der Anwendung.Wie CreateForm im und OnShow-Ereignis von einem anderen MDI-Formular, d.h.
Application.CreateForm(Form2,TForm2); // but don't set form2's visible property true.
Form2.caption:='not working example';
Form2.SomeMagicToSetVisibleTrue;
Irgendwelche Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für dein erstes problem: Fügen Sie einen anderen Konstruktor, zum Beispiel CreateAsMDI, wie diese:
In der normalen Konstruktor setzen Sie einfach die variable f_blChild auf false und rufen Sie die geerbte erstellen.
Müssen Sie noch zwei Dinge, ziemlich selbsterklärend:
Rufen Sie nun das Formular modal ist, wenn erstellt mit dem standard-Konstruktor, und als MDI-Kind, wenn erstellt mit CreateAsMDI.
Wenn Sie dieses in Ihrem Formular " Erklärung
können Sie auch Dinge tun, je nachdem, ob das Formular ein MDI Kind oder nicht, nur die Befragung der isChild-Eigenschaft.
Als Sie für Ihre zweite problem: verwenden Sie keine Anwendung.Wie CreateForm im, sondern erstellen Sie Ihr Formular selbst:
Hier die beiden Kreationen für modal-und MDI:
Habe ich übersetzt diese Antwort Formular einem Artikel auf der Website DelphiPraxis.
OldCreateOrder
eingestelltTrue
) sollten Sieif OldCreateOrder then DoCreate
am EndeTModalAndMDIForm.CreateAsMDI
.Die einfachste Methode ist die Schaffung eine triviale Unterklasse der form, und legen Sie
FormStyle = fsMDIChild
UND
Form.Visible = False
in den Eigenschafteninspektor ein. Diese ist erprobt und getestet!
Zumindest für Delphi 2007 und 2009 erstellen von untergeordneten MDI-Formular unsichtbar ist, ist einfach. Für den frühen Delphi-Versionen (wo war es unmöglich
Visible
zuFalse
im Eigenschafteninspektor) Sie müssen nur einen handler für dieOnCreate
Veranstaltung und den Zugriff auf einen geschützten Bereich der Klasse:Deaktiviert das automatische anzeigen der untergeordneten MDI. Nachdem Sie fertig sind mit Ihrem anderen Initialisierungen bereinigen, welche Sie einfach
Show
oderVisible
zuTrue
.Werde ich nicht versuchen, eine Antwort auf Ihre Frage über modal untergeordnete MDI-Formulare, wie dies verstößt gegen die Konventionen der Windows-Plattform.
Keine Antworten tatsächlich den job erforderlich. Die beste Antwort ist falsch, denn der folgende:
Wenn Sie wirklich brauchen, um zu entscheiden, in der Laufzeit, ob es ein fsMDIChild oder fsNormal, müssen Sie folgenden Ansatz.
...