MDI Anwendungen erstellen
Eine schöne Variante, mehrere Formulare mit ähnlichen Inhalten zu verwalten,
zB bei diversen Texteditoren ist MDI.
Erstelle ein neues Projekt und stelle bei deinem Hauptformular
Formstyle auf
fsMDIForm
Erstelle dann ein zweites Formular, dieses wird das Template für unsere MDI-Child Fenster.
Dort stellst du
Formstyle auf
fsMDIChild
So wenn du jetzt kompilierst kannst du schon dein mdi fenster eingebettet im Hauptfenster sehen. Wie jetzt aber mehrere Fenster erstellen ?
Das ist auch kein Problem, da wir später eventuell auf einzelne spezielle Childs zugreifen möchten, lassen wir unser erstes MDI Child auch erst gar nicht erstellen. Dazu gehe auf Projekt->Optionen->Formulare und verschiebe das MDI-Child Formular in die Sparte mit den verfügbaren Formularen.
so jetzt brauchen wir ein menu, am besten mit Neu und Speichern, das sollte vorerst reichen und auf unserem MDI-Child Formular ein Memo.
Klickt auf Neu, hier werden wir unsere MDI-Childs erstellen:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Neu1Click(Sender: TObject); begin TForm2.Create(self); end; |
Auf die einzelnen Childs kann man so zugreifen:
Delphi-Quelltext
1: 2:
| if Form1.MDIChildCount > 0 then showmessage(TForm2(Form1.MDIChildren[0]).memo1.text); |
Möchten wir jetzt den Inhalt des aktuell gewählten MDIs speichern, dann müssen wir unser MDIForm fragen, welches Child aktiv ist, das geht einfach mit
ActivMDIChild, damit Delphi weiß, dass es sich um ein TForm2 handelt, brauchen wir noch eine Umwandlung:
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.Speichern1Click(Sender: TObject); begin if savedialog1.execute then TForm2(Form1.ActiveMDIChild).Memo1.lines.SaveToFile(savedialog1.filename); end; |
Damit das ganze funktioniert musst du vorher ein Savedialog auf deinem Formular platziert haben.
Wenn du jetzt ein mdi child schließt, wird dir auffallen, dass dies nur minimiert wird, damit es jedoch geschlossen wird, muss im OnClose des MDI-Child Forms folgendes stehen:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; |
somit wird das MDI Child Freigegeben.
Das war's auch schon, Viel Spass mit der MDI Child Programmierung, weiterführendes Material, bzw einen kleinen Tipp gibt es hier:
www.delphi-library.d...55&highlight=mdi
Am Anhang gibts den kompletten SourceCode
Moderiert von jasocul: Beitrag geprüft am 28.08.2006