Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi MDI oder was...? (https://www.delphipraxis.net/97245-mdi-oder.html)

Hepdepaddel 7. Aug 2007 15:25


MDI oder was...?
 
Hi,

welche Vorgehensweise wählt ihr, wenn ihr eine Anwendung in einem Hauptfenster aber mit mehreren Ansichten umsetzen wollt?

Gemeint ist eine Funktionalität in der Art von Outlook - wenn ich dort in der Navigationsleiste den Kalender wähle, erscheint rechts davon ein Monatskalender, wähle ich "Kontakte" erscheint eine Liste der Kontakte etc. Man könnte einzelne Forms als Dialoge nehmen - aber ich hätte die Anzeige gerne immer im "Hauptfenster" - mal als Tabelle, mal als Grafik, mal als Eingabeformular (Settings)... je nach Ansicht.

Ich habe beispielsweise einen Button für "Kundenkontakte", "Umsatzverlauf" (Grafik), "Stammdaten" etc. Neben meiner "Outlook-Bar" müssen also völlig verschiedene Ansichten dargestellt werden.

Lösungen fallen mir da schon für ein - aber wie geht Ihr da vor? PageControl mit Umschalter? Eigene Formulare, die im Client-Bereich des Hauptfensters dargestellt werden? Eine MDI-Anwendung? Es würde mich interessieren, wie ihr die Vor- und Nachteile dieser Varianten seht.

Viele Grüße

Hepdepaddel

Graffi 17. Aug 2007 00:29

Re: MDI oder was...?
 
Zitat:

Zitat von Hepdepaddel
Eine MDI-Anwendung?

MDI ist wohl nicht mehr zu empfehlen, da selbst MS davon Abstand genommen hat.

Meine alten MDI-Anwendungen sehen z.B. unter XP/Vista einfach nur grauenvoll aus.

semo 17. Aug 2007 07:30

Re: MDI oder was...?
 
@graffi: was ja auch am entwickler liegen kann, oder?

Phoenix 17. Aug 2007 08:09

Re: MDI oder was...?
 
Ich arbeite gerade mit einer solchen Anwendung.
Im Prinzip werden dazu ganz normale Forms hergenommen, die als Parent ein Panel bekommen, welches den restlichen Clientbereich rechts vom Hauptform ausfüllt.

jim_raynor 17. Aug 2007 08:11

Re: MDI oder was...?
 
Alternativ kann man natürlich auch Frames (TFrame) nutzen und diese dann sichtbar/bzw. Unsichtbar schalten. Zumindestens habe ich es so in einer meiner Anwendung gelöst und funktioniert ganz gut.

Sko 17. Aug 2007 08:26

Re: MDI oder was...?
 
Oder mit PageControl und ausgeblendeten Tabs arbeiten, geht auch ganz gut.

hanspeter 17. Aug 2007 08:48

Re: MDI oder was...?
 
Zitat:

Zitat von Hepdepaddel
Eine MDI-Anwendung?

MDI ist wohl nicht mehr zu empfehlen, da selbst MS davon Abstand genommen hat.

Meine alten MDI-Anwendungen sehen z.B. unter XP/Vista einfach nur grauenvoll aus.[/quote]

Um mal eine Lanze für MDI zu brechen.
Es gibt einige Sachen, welche nur mit MDI sinnvoll zu lösen sind. Immer dann, wenn z.B. mehr als ein Fenster gleichzeitig
benötigt wird.
Beispiel Auftragserfassung. Ich öffne ein weiteres Fenster mit den Kundendaten und ein weiteres Fenster mit den Artikeldaten.
Mitten in der Arbeit kommt ein Anruf und ich öffne mal eben schnell einen anderen Auftrag und schließe diesen dann wieder.
Alle Möglichkeiten, die MDI hier bietet, wie ein Container für alle Fenster, das manuelle Anordnen der Fenster, das Wechseln
des Focus zwischen diesen Fenstern, das Anordnen in einer Menüleiste, muss man mühevoll nachbauen.
Wenn MDI ein bischen aufgefrischt und überflüssige Zöpfe, wie z.B. das Mergen der Menüleiste abgeschnitten würden,
ist das durchaus eine brauchbare Methode.


Gruß
Peter

Graffi 17. Aug 2007 22:04

Re: MDI oder was...?
 
Zitat:

Zitat von computer-glossar.de
@graffi: was ja auch am entwickler liegen kann, oder?

Sorry, aber ich konnte (auch) damals noch nicht in die Zukunft blicken.

Ich persönlich kann MDI absolut nicht mehr empfehlen!

Hepdepaddel 18. Aug 2007 08:58

Re: MDI oder was...?
 
Zitat:

Zitat von Phoenix
Ich arbeite gerade mit einer solchen Anwendung.
Im Prinzip werden dazu ganz normale Forms hergenommen, die als Parent ein Panel bekommen, welches den restlichen Clientbereich rechts vom Hauptform ausfüllt.

Von MDI hatte ich inzwischen auch Abstand genommen, die Lösung mit dem PageControl wäre eine Möglichkeit. Sie ist aber vermutlich deutlich ressourcenhungriger und man hat die ganzen Ereignisbehandlungsroutinen im wesentlichen in einer einzigen Unit.

Ich hatte auch schon überlegt, einzelne Forms zu erstellen, die quasi nur den Arbeitsbereich neben den Navigationselementen ausfüllen. Das schöne wäre, dass man OnCreate etc. in gewohnter Manier nutzen kann. Wenn ich das richtig verstehe, nutzt du zwei Forms: Hauptform mit Panel und dann in dem Panel ein Form? Wie packst Du das "Unter-Form" in das Panel?

Gruß

Hepdepaddel

Muetze1 18. Aug 2007 09:09

Re: MDI oder was...?
 
Nimm Frames, die sind genau dafür gedacht. Du hast eine Unit mit dem Oberfächenteil und kannst alles entsprechend implementieren. Bei deinem View-Wechsel instanziierst du einfach die Frames nach deinen Wünschen (bzw. gibst die alten frei) und positionierst diese dann.

timog 18. Aug 2007 09:29

Re: MDI oder was...?
 
Hallo Hepdepaddel,

falls Du Frames aus irgendeinem Grund nicht magst oder dir beim Panel-Ansatz die visuelle Repräsentation irgendwie "fehlt", kannst Du auch JvEmbeddedFormPanel und JvEmbeddedFormLink aus der JVCL nehmen. Ein JvEmbeddedFormPanel auf das Hauptform, je ein JvEmbeddedFormLink auf alle Unterformulare. Zur Laufzeit dann im Hauptformular der JvEmbeddedFormPanel.FormLink Eigenschaft die entsprechende JvEmbeddedFormLink-Komponente zuweisen:

Delphi-Quellcode:
JvEmbeddedFormPanel1.FormLink := Form2.JvEmbeddedFormLink1;
Anschließend muss je nach Aufbau von Form2 vielleicht noch das ein oder andere Repaint aufgerufen werden, da es sonst mit der Bildschirmdarstellung etwas hapert (Artefakte).

Viele Grüße

Timo

Hepdepaddel 30. Aug 2007 08:43

Re: MDI oder was...?
 
Hi,

nach längerer Zeit - ich habe mit den genannten Optionen etwas herumgespielt - eine Rückmeldung. Eigentlich wollte ich vermeiden, wieder eine Drittkomponente einzusetzen. Bisher habe ich die LMD-Tools benutzt, die verwende ich aber fast nur noch wegen der Form-Komponente, die wie ein Panel auf ein Form gesetzt werden kann und sehr leicht an anderes TForm-Objekt in sich darstellen kann. Ich hatte gehofft, das irgendwie auch anders darstellen zu können, separate Forms wären mir eben lieber...

Nun werde ich aber wohl auch das aktuelle Projekt mit den LMD-Tools anfangen, es ist nur ein Quick&Dirty-Prototyp, den ich bei Kundeninteresse wohl in ein/zwei Monaten sowieso mal auf eine saubere Grundlage stellen muss. Vielleicht sind dann Frames wirklich das Mittel der Wahl, wobei fehlende "OnCreate/OnShow" etc. das ganze irgendwie nicht sexy machen...

Danke & Viele Grüße

Hepdepaddel

hanspeter 30. Aug 2007 09:31

Re: MDI oder was...?
 
Ich kann die Nachteile von MDI immer noch nicht so richtig nachempfinden.
Worin bestehen denn nun diese?
Ich setze in einem großen Projekt MDI Formulare ein und habe keinerlei Probleme damit.
Im Gegenteil.
Für Menüs setze ich TMSADVToolbar ein.
Ein Handler im Hauptprogramm verwaltet mir die Formulare.
Hier öffne ich ein Formular und gebe als Parameter an, ob dies ein normales , ein modales oder ein
MDI Form ist.
Dem Aufrufprogramm teile ich mit, ob das MDI Formular neu geöffnet werden kann oder ob ein bereits vorhandenes
Formular wieder aktiviert werden soll.
Der Handler vermerkt die Position des Formulars und stellt diese beim erneuten Öffnen wieder her.
Wie soll ich anderst eine Funktion lösen, das beispielsweise zusätzlich zum Bearbeitungsformular noch eine
Kundenauswahl und Artikelauswahl geöffnet und wahlfrei angeordnet werden kann?

Gruß
Peter

Jakob Ullmann 30. Aug 2007 09:41

Re: MDI oder was...?
 
Ich verstehe das auch nicht. Und ich verstehe auch nicht, was in XP grauenhaft aussieht. Ich habe mir letztens ne MDI für Win95 runtergeladen. Das sah auf XP total gut aus (abgesehen von den Toolbar Icons, die sahen sehr alt aus).
Ich bleibe auf jeden Fall bei MDI.

uwewo 30. Aug 2007 09:43

Re: MDI oder was...?
 
Zitat:

Zitat von Hepdepaddel
Wie packst Du das "Unter-Form" in das Panel?

Ich denke diese Frage ist noch nicht gelöst deshalb

Delphi-Quellcode:
  Form2.Panel.Parent := HauptForm.Panel;
Grundvoraussetzung ist natürlich das Form2 schon existiert.

Gruss Uwe

Hepdepaddel 30. Aug 2007 10:40

Re: MDI oder was...?
 
Hm...

Delphi-Quellcode:
Form2.Panel.Parent := HauptForm.Panel;
Also auf dem Hauptform habe ich ein Panel... soweit OK. Ich hätte da eher sowas erwartet

Delphi-Quellcode:
Form2.Parent:=Hauptform.Panel;
Wenn ich Deinen Code lese, würde ich vermuten, dass irgendein Panel auf dem Form2 nun eben dem Form1 zugeordnet wird... was ich suchte, war sowas (Achtung: Block-Art)




Delphi-Quellcode:
+----------------------------------------------------+
| Hauptform                                         |
|                                                    |
|             +--------------------------------------+
|             |                                      | 
|             |                                      | 
|             |   FORM 2 (mit visuellen und nicht-   | 
|             |           visuellen Komponenten     | 
|             |                                      | 
|             |                                      | 
+-------------+--------------------------------------+
Dennoch Danke für Dein Posting - ich habe das Form2.Parent:=Form1.Panel einfach mal ausprobiert. Lustiger Effekt, man kann dann tatsächlich das neue Form2 im Panel sehen - sogar mit Titelleiste und allem drum und dran - auch Verschieben ist möglich. Mit BorderStyle "none" und Top/Left:=0 sowie einer Anpassung von Breite und Höhe an die Abmessungen des Panels im OnResize des Panels beginnt das ganze gute Formen anzunehmen! Danke also, das Posting hat mich auf den richtigen Weg gebracht!

Viele Grüße

Hepdepaddel


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:05 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