![]() |
Erstellen einer MDI Anwendung
Hallo , ich möchte eine MDI Anwendung erstellen
(Also ein Hauptformular mit Menü und Toolbar und dann dadrin Fenster) Wenn ich auf der Toolbar einen Punkt auswähle soll sich das entsprechende Fenster öffnen , und wenn ich das Fenster schließe soll es nicht mehr sichtbar sein... Nur leider geht diese Visible=false eigenschaft bei MDI-Child fenstern ja nicht... Wie macht man sowas denn vernünftig? Hab mir nur mal sone professionelle MDIapplication angeguckt und da is viel mit Vererbung hantiert worden , sah für mich auf den ersten blick etwas komplexer aus , aber geht anscheinend nur so.. vielleicht kann mir ja mal jemand kurz erklären wie man die MDIchild fenster denn professionell erscheinen und verschwinden lässt :freak: Wäre cool :nerd: |
Vielleicht mit
Delphi-Quellcode:
und
MDIChild.Create;
Delphi-Quellcode:
Oder so ähnlich... :roll:
MDIChild.Close;
MDIChild.Destroy; MfG Florian :hi: |
So ähnlich eher..... Ne in die Richtung hatte ich auch gedacht.
Aber was du da sagst funktioniert SO bestimmt nich... Hm kann mir denn da keiner helfen? Naja vielleicht morgen. :roll: |
Naja war auch geraten... :roll:
Mein (schlaues) Delphi-Buch meint folgendes: Zitat:
Da stehen noch ein paar andere Befehle drin. Kann ich dir ja vielleicht morgen oder so per PN schicken wenn es dir hilft. MfG Florian :hi: |
Hallo,
Zitat:
Wiedem auch sei, beim Create, Destroy usw., brauchst Du einen Index! MDIChildren[0].Create(); Zudem hast Du das Show vergessen, nur Createn wird Dir nichts bringen. MDIChildren[0].Show; Grüsse, Daniel :hi: |
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
MfG Florian :hi: |
Zum schließen mußt Du im MDI-Kindfenster die Action-Eigenschaft des OnClose-Ereignisses setzen.
Delphi-Quellcode:
procedure TFormMDIChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin { Action := caNone; Das Formular darf nicht geschlossen werden, daher geschieht nichts. Action := caHide; Das Formular wird nicht geschlossen, sondern lediglich verborgen. Die Anwendung kann nach wie vor auf das Formular zugreifen. Action := caFree; Das Formular wird geschlossen und sein Speicher freigegeben. Action := caMinimize; Das Formular wird nicht geschlossen, sondern als Symbol angezeigt. } Action := caFree; end; |
Ihr habt mir schon beachtlich weitergeholfen. :lol:
Mit dem .Hide geht das aber trotzdem nich , dann kommt die Fehlermeldung , dass man MDIKindformulare nicht verstecken kann. Habe dennoch nochmal eine Frage: Wie mache ich dass denn jetzt dass ich am Anfang , also quasi beim FormCreate des Hauptformulars das MDIKindFenster gar nicht sehe.. Weil das ist ja automatisch beim Start sichtbar... ? :| |
und noch was...
und noch was...
Der Befehl :
Delphi-Quellcode:
funktioniert so nicht , der erwartet da mehr Paramter , aber was soll ich denn da übergeben? Habs schon mit Application probiert aber das wird nur Mist... :angle:
MDIChildren[0].Create;
|
Mit Self funktioniert das.
Aber wie kann ich das denn machen dass ich jedes Formular nur einmal erzeugen kann? Das is doch total der Schwachsinn eigentlich dass man ein Formular beliebig oft mal öffnen kann.(zumindest bei den meisten Anwendungen) ? Also ich find diese mdi anwendungen irgendwie ziemlich umständlich :freak: |
Moin DBman,
Zitat:
Zitat:
Zitat:
Das MDI für Multiple Document Interface steht ist Dir aber bekannt? ;-) Bei solchen Anwendungen ist es nun einmal der Witz, dass man für eine, mehr oder weniger, beliebige Anzahl von Dokumenten, eine ebenso grosse Anzahl, ansonsten gleicher, Fenster öffnen kann. |
Zitat:
MfG Florian :hi: |
Wenn das MDIChild Form2 Heißt:
Delphi-Quellcode:
:wink:
TForm2.Create(Self);
|
Ich weiß nicht, ob es schon gepostet worden ist. Aber bei Delphi liegt eine einfache Demo eines MDI-Editors bei. sollte dir helfen.
|
Ja dass MDI für MultiDocumentInterface steht weiss ich auch..
Nur ich weiss halt nich ob das für meine Zwecke so toll ist... Ich habe ja nich sone Anwendung á la Word wo man ein Hauptfenster hat und dann da beliebig viele Dokumente öffnen will , ich will eine Anwendung wo ich ein Hauptfenster habe mit Menü und Toolbar und dann im Menü mir die Programmteile auswählen kann (z.b.) Adressverwaltung und das jeweilige Fenster dann auch nur 1x erscheint , wäre ja quatsch wenn da 2 adressverwaltungen sind... Ich dachte das geht halt n bissel einfacher. Aber kann man ja eigentlich nur mit MDIform und MDIchild machen , anders wird das einfach unübersichtlich wenn man da nur "normale" formulare nimmt.. |
Hi,
sorry - aber den Rest habe ich nicht gelesen. Aber ich wollte nur mal auf das doch recht einfache, aber gute Delphi-Beispiel zum Thema MDI hinweisen. Das befindet sich im Verzeichnis $(Delphi)\Demos\Doc\TextEdit. Vielleicht hilft es ja. ...:cat:... |
siehe mein Posting ;-)
|
Zitat:
...:cat:... |
stimmt. War ja auch nicht böse gemeint ;-)
Wie gesagt doppelt hält besser :mrgreen: |
Ja aber wie gesagt , das was ich machen will ist keine Anwendung , wo ich beliebig viele Textfenster öffnen kann , sondern ich will ganz einfach ein Hauptformular haben von dem aus ich dann meine Menüpunkte anwählen kann und sich jeweils ein und NUR ein Fenster davon öffnet...habe schon nach Flags und so geschaut , aber habs noch nicht hinbekommen.
Deswegen das Beispiel hatte ich mir auch schon angeschaut aber hat mir nicht wirklich viel gebracht :? |
Folgender Code-Auschnitt sollte verdeutlichen, wie Du überprüfst, ob ein bestimmtes Formular bereits existiert. Wenn es existiert, wird es nach vorn gebracht, wenn nicht, dann wird es erstellt.
Delphi-Quellcode:
Ich hoffe, daß es Dir weiterhilft.
procedure TForm1.mniShowFormTyp1(Sender: TObject);
var I: Integer begin for I := 0 to Pred(MDIChildCount) do if MDIChildren[I] is TMDIFormTyp1 then begin MDIChildren[I].BringToFront; Exit; end; TMDIFormTyp1.Create(Self); end; ...:cat:... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:30 Uhr. |
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