Autor Beitrag
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Do 06.04.06 19:02 
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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Neu1Click(Sender: TObject);
begin
  TForm2.Create(self);
end;


Auf die einzelnen Childs kann man so zugreifen:
ausblenden 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:
ausblenden 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:
ausblenden 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 user profile iconjasocul: Beitrag geprüft am 28.08.2006


MDI Anwendung.zip  (9.38 KB) Download (Rev 0)
 (1277x, 1277x gesamt)
Beschreibung: Demo Source


Zuletzt bearbeitet von F34r0fTh3D4rk am Fr 14.04.06 14:46, insgesamt 1-mal bearbeitet