AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MDIChild- wie gehts am besten?

Ein Thema von lowell · begonnen am 3. Feb 2003 · letzter Beitrag vom 4. Feb 2003
Antwort Antwort
Seite 1 von 2  1 2      
lowell

Registriert seit: 3. Feb 2003
Ort: Frankfurt
13 Beiträge
 
#1

MDIChild- wie gehts am besten?

  Alt 3. Feb 2003, 00:35
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
Danke für die Hilfe im vorraus- hoffe auch irgendwann mal helfen zu können
  Mit Zitat antworten Zitat
Benutzerbild von NeoDeluxe
NeoDeluxe

Registriert seit: 4. Dez 2002
Ort: Behind the Firewall
240 Beiträge
 
Delphi 7 Personal
 
#2
  Alt 3. Feb 2003, 05: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!
Alex
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#3
  Alt 3. Feb 2003, 17: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
  Mit Zitat antworten Zitat
Benutzerbild von Mirilin
Mirilin

Registriert seit: 21. Dez 2002
Ort: Lenzburg
861 Beiträge
 
Delphi 6 Professional
 
#4
  Alt 3. Feb 2003, 20: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...)
Tobias
Die Physik ist für die Physiker eigentlich viel zu schwer.
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#5
  Alt 3. Feb 2003, 20: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
Alexander
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#6
  Alt 4. Feb 2003, 09:55
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.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
lowell

Registriert seit: 3. Feb 2003
Ort: Frankfurt
13 Beiträge
 
#7
  Alt 4. Feb 2003, 10: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
Danke für die Hilfe im vorraus- hoffe auch irgendwann mal helfen zu können
  Mit Zitat antworten Zitat
lowell

Registriert seit: 3. Feb 2003
Ort: Frankfurt
13 Beiträge
 
#8
  Alt 4. Feb 2003, 11: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
Danke für die Hilfe im vorraus- hoffe auch irgendwann mal helfen zu können
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#9
  Alt 4. Feb 2003, 11:50
Ungetestet, aber das kannst Du ja mal testen

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;
......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#10
  Alt 4. Feb 2003, 14: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).
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz