Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi MDIChild- wie gehts am besten? (https://www.delphipraxis.net/2695-mdichild-wie-gehts-am-besten.html)

lowell 2. Feb 2003 23:35


MDIChild- wie gehts am besten?
 
Schönen Guten Morgen,

das ist mein erster Beitrag in das Forum, hoffe das ich alles richtig mache:)

Ich habe schon das halbe Internet durchforstet und bin immer noch keinen Schritt weiter. Mein Problem betrifft das Thema MDIChild. Soviel wie ich schon aus diversen Internetseiten erkennen konnte, ist MDIChild nicht ganz ohne- hoffe es findet sich eine einfache Lösung:

Mein Vorhaben kurz geschildert: Ich habe ein Hauptformular (form1-fsMDIForm) und weitere Formulare (form2,form3...) die als fsMDIChild definiert sind. Die fsMDIChild-Formulare sollen "im" Hauptformular geöffnet und geschlossen werden können- ich glaube viele Programme wie Microsoft Paint, etc arbeiten ja so. Jede fsMDIChild (form2, form3...) soll etwas anderes beinhalten was ich schon vorher auf den Formularen erstellt habe. In diversen Foren habe ich schon was von "Create(self)" gelesen, ebenso auch über das schließen "Action:= caFree". Ich habe jetzt schon einiges ausprobiert- das Programm stürzt immer wieder ab. Kennt jemand von euch diesbezüglich eine gute Internetadresse oder kennt den Trick?

Über eine Antwort würde ich mich sehr freuen- ich blicke momentan da nicht durch. Bedanke mich im vorraus für die Mühe,

viele Grüße
Alex

NeoDeluxe 3. Feb 2003 04:35

Moin.
Willkommen auf dem Forum.
Du bist schon in der Richtung nicht schlech. Mit der

Code:
procedure TForm1.ButtonClick(Sender:Tobject); //Wenn man klickt oder irgend einen Anderen ereignis auslöst.
  begin
    TForm2.Create(Self)
  end;
und mit dem Ereignis OnClose für jedes MDIForm so schreiben:

Code:
procedure TForm2.FormClose (Sender: Tobject; var Action: TCloseAction);
  begin
    Action:=caFree
  end;
Und übrigens wenn du willst kann ich dir noch zeigen, wie du die Forms(MDI) im Hauptformular ordnen kannst, aber ich bin mir sicher du weist es schon! Wegen Internetseite: tut mir echt leid, kenn einfach keine!

oki 3. Feb 2003 16:19

Hallo,

schau mal in deinem Delphi-Verzeichnis nach. Üblicherweise sind da Programmbeispiele mit installiert. Soweit ich das aus der Vergangenheit kenne sind immer MDI-Beispiele mit dabei. Die helfen dir mehr wie alles andere.

Gruß oki

Mirilin 3. Feb 2003 19:15

Ich habe eine PDF-Datei über MDI-Applicationen (46 Seiten) ist auf der Buch-CD des "Delphi4 Developer's Guide" drauf, ich weiss nicht ob ich sie Dir hier anhängen darf, deshalb zuerst dieser Frage-Tread.

Darf ich diese Datei hier hinein hängen? (Wegen der Legalität und den Rechten...)

Alexander 3. Feb 2003 19:40

Wenn es das Buch nicht legal im Netz oder sowas ähnliches ist, dann wirst du es wohl nicht dürfen. Da der Autor sicherlich damit auch Geld verdienen will
Aber ich bin sicher man findet sowas ähniches auch mit Google.
Oder man schaut einfach mal in die Hilfe

sakura 4. Feb 2003 08:55

Zitat:

Zitat von Mirilin
Ich habe eine PDF-Datei über MDI-Applicationen (46 Seiten) ist auf der Buch-CD des "Delphi4 Developer's Guide" drauf...

Ich denke mal, Du meinst das Buch von Teixeira & Pacheco. Super Serie, gilt jedoch das gleiche, wie für ca. 99% der anderen Bücher: leider nein.

Die Demo, welche oki ansprach, findest Du im $(DELPHI)\Demos\Doc\TextEdit Verzeichnis.

...:cat:...

lowell 4. Feb 2003 09:45

Guten Morgen,

erstmal herzlichen Dank für die schnelle Antworten- wollte schon früher vorbeischauen, habe es aber aus Zeitgründen nicht geschafft.

Wie es so bei Delphi ist: Eine Kleinigkeit falsch und ...:-) So war es auch bei dem

" TForm2.Create(Self) "

...ich hatte immer das "T" weggelassen! Jetzt funktioniert es wunderbar- jedoch: Bei mehrmaligem aufrufen der Funktion wird auch mehrmals das gleiche Fenster geöffnet- logisch. Ich bräuchte eigentlich jetzt nur noch einen kleinen Tip, wie man überprüft, ob die jeweilige Child-Form geöffnet ist. Darin würde ich den Befehl eingeben, daß die gleiche Childform nicht nochmals geöffnet werden kann.

Etwa: If TForm2.create(self)= true...? - Habe das mal ausprobiert- war nix:-)

Alternativ könnte ich die Buttons beim erstellen der Form auf Enabled=False stellen...mmmh, würde das aber schon ganz gern mit einem Code überprüfen lassen:)

Ich wollte auch noch folgendes loswerden: Schön das es ein Delphiforum gibt, welches einen netten Umgangston beinhaltet! Ich kenne da eins, da trau ich mich ja nicht mal was reinzuschreiben! Aber das nur mal so am Rande:)

Besten Dank nochmal- ich denke nach dieser Lösung dürfte das Thema MDIChild bewältigt sein...man ließt sich dann wieder beim nächsten Thema:-)))

Schönen Tag euch allen,
viele Grüße,
Alex

lowell 4. Feb 2003 10:15

kleiner Nachtrag:

Ich glaube etwas gefunden zu haben:

"if TForm2.Create(self)<> nil..." dürfte etwa schon in die richtige Richtung gehen, jedoch jetzt habe ich das Problem wie ich sage, daß die selbige Form nicht nochmal geöffnet werden soll! Mit "NOT" haut es nicht hin.

Danke euch:-)

sakura 4. Feb 2003 10:50

Ungetestet, aber das kannst Du ja mal testen :mrgreen:

Delphi-Quellcode:
var
  F2: TForm2;
  I: Integer;
begin
  // FORM2 suchen
  F2 := nil;
  for I := 0 to Screen.FormCount - 1 do
    if (Screen.Forms[I].FormStyle = fsMDIChild) and (Screen.Forms[I] is TForm2) then
    begin
      F2 := TForm2(Screen.Forms[I]);
      Break;
    end;
  if F2 = nil then
    F2 := TForm2.Create(Self)

  // in F2 ist jetzt der Bezug zum alten bzw. neuen TForm2 Objekt
  ...
end;
...:cat:...

Christian Seehase 4. Feb 2003 13:02

Moin Lowell,

auch ungetestest, sollte aber auch gehen:
Im Gegensatz zu sakuras Beispiel durchsucht dieses direkt nur das Array mit den vorhandenen MDI Child Fenstern.

Delphi-Quellcode:
function TForm1.TForm2AlreadyExists : Boolean;

var
  i : integer;

begin
  Result := false;
  for i := 0 to self.MDIChildCount-1 do
  begin
    if self.MDIChildren[i] is TForm2 then
    begin
      Result := true;
      exit;
    end;
  end;
end;
Da dies als Methode vom Haupformular gemacht ist, muss sie noch dort eingetragen werden :

Delphi-Quellcode:
TForm1 = class(TForm)
//.... die übrigen Eintragungen
  function TForm2AlreadyExists : Boolean
  private
  //...
  end;
Für weitere TFormx dann analog.

Mir ist nur noch kein sinnvoller Weg eingefallen, wie man den TFormx Typ als Parameter übergeben kann (auch das müsste irgendwie gehen).


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:26 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz