AGB  ·  Datenschutz  ·  Impressum  







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

MDI Anwendung umwandeln in SDI - wie?

Offene Frage von "peterbelow"
Ein Thema von Alfonso · begonnen am 21. Jun 2019 · letzter Beitrag vom 21. Jun 2019
Antwort Antwort
Alfonso

Registriert seit: 10. Jan 2006
250 Beiträge
 
Delphi 11 Alexandria
 
#1

MDI Anwendung umwandeln in SDI - wie?

  Alt 21. Jun 2019, 12:58
Hallo,

meine Delphi Anwendung, die seit vielen Jahren als MDI Applikation läuft, soll modernisiert werden.
Ich habe Zig unterschiedliche Forms, die als MDI Children über das Haiuptmenü geöffnet werden. Alle MDI Formulare sind gleichberechtigt und können parallel laufen. In der Regel ist jedoch nur ein Fenster offen.

Wenn das Programm gestartet wird, hat es nur ein leeres Mainform (maximiert) mit einem Logo in der Mitte. Oben ist ein Hauptmenü und eine Symbolleiste.

Ich habe gelesen, dass MDI veraltet ist und nicht mehr von Microsoft verfolgt wird.

Was wäre der richtige Ansatz, um MDI loszuwerden? Wie ist dann das Userinterface und die Bedienung? Gibt es noch ein Mainform? Läuft jedes Fenster autark für sich? Habe ich dann tausend Symbole in der Tasklesite? Fragen über Fragen

Gruß
Alfonso
Alfonso
Seit Turbo Pascal 3.0 dabei!
Ewiger Pascal Fan!
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
702 Beiträge
 
Delphi 12 Athens
 
#2

AW: MDI Anwendung umwandeln in SDI - wie?

  Alt 21. Jun 2019, 14:16
Hallo,

meine Delphi Anwendung, die seit vielen Jahren als MDI Applikation läuft, soll modernisiert werden.
Ich habe Zig unterschiedliche Forms, die als MDI Children über das Haiuptmenü geöffnet werden. Alle MDI Formulare sind gleichberechtigt und können parallel laufen. In der Regel ist jedoch nur ein Fenster offen.

Wenn das Programm gestartet wird, hat es nur ein leeres Mainform (maximiert) mit einem Logo in der Mitte. Oben ist ein Hauptmenü und eine Symbolleiste.

Ich habe gelesen, dass MDI veraltet ist und nicht mehr von Microsoft verfolgt wird.

Was wäre der richtige Ansatz, um MDI loszuwerden? Wie ist dann das Userinterface und die Bedienung? Gibt es noch ein Mainform? Läuft jedes Fenster autark für sich? Habe ich dann tausend Symbole in der Tasklesite? Fragen über Fragen

Gruß
Alfonso
Naja, es scheint im Wesentlichen zwei weit verbreitete UIs für solche Anwendungen zu geben. Die eine ist SDI, wie von Microsoft Office-Anwendungen bekannt. Jedes "Dokument" hat ein eigenes Fenster mit eigenem Taskbar-Button und eigenem Menu, ein Mainform im strengeren Sinne gibt es nicht, die Anwendung läuft bis das letzte Dokumentfenster geschlossen wird. Das passt für Anwendungen, die wirklich sowas wie Dokumente (Files) bearbeiten, aber weniger für eine Anwendung, die z. B. mit einer Datenbank arbeitet und dem Benutzer Daten aus dieser anzeigt und zur Bearbeitung anbietet.

Das andere verbreitete Design würde ich mal "Workspace"-UI nennen. Dabei gibt es ein "Mainform" mit einem gemeinsam genutzten Menu und viele (oft verschiedene) Fenster für spezifische Aufgaben. MDI passt in dieses Schema, oder z. B. die RAD-Studio IDE. Die "Kind"-Fenster können dabei entweder im Clientbereich des Mainform angesiedelt sein (wie MDI), oder halt unabhängig von diesem (wie das alte undocked design der IDE), wobei die Kindfenster keine eigenen Taskbar-Buttons haben.

Falls eine alte MDI Anwendung zumeist mit maximierten Kindfenstern verwendet wird ist eine gute Alternative ein Workspace-Design in der Art eines Browsers (tabbed UI), wobei man nicht unbedingt Reiter (tabs) für die Navigation zwischen den "Seiten" verwenden muss (unhandlich wenn es viele werden können). Die Anwendung besteht dann aus einem Mainform, das ein Menu, eine Statuszeile und eine Navigations-Control enthält (z. B. einen left-aligned TTreeview oder TCategoryButtons oder sowas). Der Rest des Forms wird von einem client-aligned TPanel eingenommen, auf dem dann nach Bedarf TFrames oder eingebettete Forms (Borderstyle bsNone, Formstyle fsNormal, alClient-Aligned) erzeugt und angezeigt werden. Das Form verwendet eine interne Liste um die aktiven Kindfenster zu verwalten, und wenn der Benutzer auf ein anderes wechselt wird das aktive versteckt und das neue angezeigt. Das funktioniert nach meiner Erfahrung besser, als z. B. die Pages eines TPagecontrol als Parent für die Kindfenster zu verwenden oder gar alle Controls direkt auf TTabsheets zu plazieren (Alptraum!).

Der Vorteil ist halt, das man wie bei MDI die Kindfenster getrennt voneinander entwickeln kann. Dazu gehört natürlich eine saubere Trennung von UI und Datenmodell, weitgehende Vermeidung von Abhängigkeiten zwischen den Forms, etc..
Peter Below
  Mit Zitat antworten Zitat
Alfonso

Registriert seit: 10. Jan 2006
250 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: MDI Anwendung umwandeln in SDI - wie?

  Alt 21. Jun 2019, 15:27
Der Rest des Forms wird von einem client-aligned TPanel eingenommen, auf dem dann nach Bedarf TFrames oder eingebettete Forms (Borderstyle bsNone, Formstyle fsNormal, alClient-Aligned) erzeugt und angezeigt werden.
Wie kann ich Forms in einem Panel einbetten, die keine TFrames sind?
Alfonso
Seit Turbo Pascal 3.0 dabei!
Ewiger Pascal Fan!
  Mit Zitat antworten Zitat
DasWolf

Registriert seit: 7. Jun 2016
76 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: MDI Anwendung umwandeln in SDI - wie?

  Alt 21. Jun 2019, 15:52
Ist die Umstellung weg von MDI für die Zukunft notwendig, oder wird es die nächsten Jahre weiterhin funktionieren?
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#5

AW: MDI Anwendung umwandeln in SDI - wie?

  Alt 21. Jun 2019, 16:50
Der Rest des Forms wird von einem client-aligned TPanel eingenommen, auf dem dann nach Bedarf TFrames oder eingebettete Forms (Borderstyle bsNone, Formstyle fsNormal, alClient-Aligned) erzeugt und angezeigt werden.
Wie kann ich Forms in einem Panel einbetten, die keine TFrames sind?
Man kann auch docken, das geht noch einfacher:
https://delphi-bar.blogspot.com/2017...-to-panel.html
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
702 Beiträge
 
Delphi 12 Athens
 
#6

AW: MDI Anwendung umwandeln in SDI - wie?

  Alt 21. Jun 2019, 17:51
Der Rest des Forms wird von einem client-aligned TPanel eingenommen, auf dem dann nach Bedarf TFrames oder eingebettete Forms (Borderstyle bsNone, Formstyle fsNormal, alClient-Aligned) erzeugt und angezeigt werden.
Wie kann ich Forms in einem Panel einbetten, die keine TFrames sind?
In Kode, einfach das Form erzeugen und dann sein Parent auf das Panel setzen und danach Align auf alClient. Dadurch wird das Form zu einem Control, was übrigens ein paar Unterschiede im Verhalten zur Folge hat. Einige der Events (OnActivate z. B.) feuern nicht mehr.

Im Prinzip sind Forms nicht für sowas gedacht, dafür gibt's Frames, aber wenn Du eine existierende Anwendung umdesignen willst kannst Du auf diese Art vermutlich viele der existierenden MDI Childforms ohne große Änderungen wiederverwenden.
Peter Below
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
702 Beiträge
 
Delphi 12 Athens
 
#7

AW: MDI Anwendung umwandeln in SDI - wie?

  Alt 21. Jun 2019, 17:57
Ist die Umstellung weg von MDI für die Zukunft notwendig, oder wird es die nächsten Jahre weiterhin funktionieren?
Meine Kristallkugel ist seinerzeit dem Y2K-Problem zum Opfer gefallen , aber vermutlich wird das MDI-Framework in Windows noch einige Jahre überleben, allerdings ohne größere Anpassungen an Änderungen der UI-Bibliothek von Windows. Es ist schon bezeichnend das praktisch keine der mit Windows gelieferten Anwendungen noch MDI ist, es gibt da offenbar schon jetzt leichte Probleme mit solchen Anwendungen auf den aktuellen Desktops (Themen, desktop composition API, Taskbar). Das wird nicht besser werden.
Peter Below
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:20 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