GUI Layout einer Applikation

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

GUI Layout einer Applikation

Beitrag von charlytango »

Hi

früher oder später kommt der Punkt an dem man für eine Applikation ein ordentliches Layout und damit auch einen Fenstermanager bzw Objektmanager braucht.
im aktuellen Projekt möchte ich dem Benutzer die Möglichkeit geben aus drei Stilen (siehe scribble) zu wählen.
Den Fenstermanager habe ich derzeit mit Hilfe des Generators http://www.michael-fuchs.net/rubriken/edv/tools/fcgt/ umgesetzt.
Die liefert auch gleich den ersten Designstil mit den frei fliegenden Fenstern.

mit etwas Erweiterung und einem TPageControl lassen sich die Fenster auch in vom Programm erzeugte TTabsheets eindocken.

Dazu die erste Frage:
Nutzt ihr zu so einem Job

Code: Alles auswählen

TForm.ManualDock(<docksite>, NIL, alClient);

oder

Code: Alles auswählen

TForm.Parent:=<docksite>


was mich gleich zu meiner zweiten Frage führt:
Beim zerstören der eingedockten Fenster muss ich auch im TTabControl aufräumen, also den als Docksite "missbrauchten" TTabsheet löschen.
Wie ermittle ich das Control in dem das Fom eingedockt ist ?
geht das mit GetParentComponent ?
oder wie?

Die Verwendung von TPageControl hat noch einige Haken und Ösen.
Trotzdem nochmal die Frage ob TTabcontrol mit einem getrennten TPanel als Docksite nicht besser ist? Dazu gibt es unterschiedliche Standpunkte. Einer der mit eingeleuchtet hat ist: wenn gleichartige Objekte (das Beispiel waren Webseiten in einem tabbed Browser) angezeigt werden, dann TTabControl, für unterschiedliche sollte TPageControl verwendet werden
Jetzt sind das im aktuellen Projekt alles unterschiedliche Forms des Typs TForm die aber recht unterschiedliche Funktionen haben -- also was nun ? :(

Der dritte Stil ist dann schon wieder eine andere Dimension, dann brauchts einen echten Dockmanager -- mit welchem habt ihr gute Erfahrungen gemacht ?

Danke im voraus
Dateianhänge
windows01.jpg

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: GUI Layout einer Applikation

Beitrag von Michl »

Ich antworte mal nur auf TPageControl. Zur Zeit bin ich mit folgender Lösung recht glücklich:

Für die Kommunikation mit dem Nutzer erstelle ich TFrames (wobei ich ein erweitertes TFrame nutze, dass noch Initialisierungs- und Finalisierungsmethoden bereit stellt). Die Logik kommt in extra Klassen in extra Units (der Übersichtlichkeit wegen, versuche ich die Klassen bzw. die Units so schlank wie möglich zu halten).

Auf das Formular kommt ein leeres TPageControl. Beim OnCreate des Formulars werden die TTabSheets mit ihrem jeweiligen TFrame erstellt (nur erstellt, nicht initialisiert).

Wenn nun der Nutzer eine Seite vom TPageControl wechselt, wird das entsprechende TFrame einmalig initialisiert. Wenn er zur nächsten Seite wechselt bleibt das Layout erhalten und muss nur für initialisierte TFrames bei der Beendigung der Anwendung gespeichert werden.

Die TFrames könnten statt einem TPageControl auch (andockbaren) Formularen zugeordnet werden. Optisch vorteilhaft bzw. praktisch fand ich diese Lösung bisher nicht. Kommt aber sicherlich auf den Anwendungsfall und mögliche parallele Bedienbarkeit an.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Antworten