Diverse Formulare in einem scrollbaren Bereich

Rund um die LCL und andere Komponenten
Benutzeravatar
altmetaller
Beiträge: 22
Registriert: Do 12. Nov 2020, 15:04

Diverse Formulare in einem scrollbaren Bereich

Beitrag von altmetaller »

Hallo,

ich habe seinerzeit Turbo Pascal 3.02 gelernt und fuchse mich jetzt - aufgrund eines aktuellen Bedarfes - nach 30 Jahren Programmierabstinenz in Lazarus rein.

Für euch sicher eine "dumme" Frage:

In meinem Projekt möchte ich in meinem Hauptformular einen scrollbaren Bereich definieren, in dem situationsabhängig unterschiedliche (statische) Formulare angezeigt werden.

Mein erster pragmatischer Gedanke wäre, eine TScrollBox zu erstellen, dieser diverse TPanels zuzuweisen und auf den jeweiligen TPanels die Formularfelder anzuordnen. Danach würde ich dann das jeweils gewünschte Formular auf "Visible" schalten.

Wäre das die korrekte Vorgehensweise? Wichtig wäre mir, dass alles im ObjectInspector und in der Formularansicht dargestellt wird; da die Anordnung der Formularelemente und die Benutzerführung noch weitestgehend "offen" ist und ich da viel Spielraum für intuitive Experimente benötige :-)

Liebe Grüße,
Jörg

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1435
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Diverse Formulare in einem scrollbaren Bereich

Beitrag von fliegermichl »

Wozu Formulare?

du kannst doch die Komponenten direkt in die Panels legen. Wenn du das Panel auf visible := False setzt, sind auch die Unterkomponenten nicht mehr sichtbar.

Die Scrollbox ist mMn. hier genau der richtige Weg.

Benutzeravatar
altmetaller
Beiträge: 22
Registriert: Do 12. Nov 2020, 15:04

Re: Diverse Formulare in einem scrollbaren Bereich

Beitrag von altmetaller »

Hallo,

...weil ich den Begriff "Formulare" einerseits als Gattungsbegriff für ein Eingabeformular und andererseits für die entsprechende Komponente in Lazarus verwende :-)

Also, noch mal zum Verständnis:
- eine TScrollBox enthält diverse untergeordnete TPanel
- jedes TPanel enthält diverse Bedienelemente, RadioButtons, Eingabefelder usw.
- das jeweils gewünschte TPanel wird auf "Visible" gesetzt

Richtig?

Was ich gedanklich nicht vorraussehen kann ist, wie es sich dann z.B. mit dem Scrollbalken von der TScrollBox verhält. Die TPanels sind ja unterschiedlich lang...

Gruß & danke für die superschnelle Antwort,
Jörg

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1435
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Diverse Formulare in einem scrollbaren Bereich

Beitrag von fliegermichl »

Normalerweise werden die Scrollbalken automatisch so angezeigt, daß man auch das längste bzw breiteste Panel oder auch jede andere Komponente in der Scrollbox zu Gesicht bekommt.

Eine andere Möglichkeit wäre ein Pagecontrol zu nehmen. Da kann man thematisch zusammenhängende Unterkomponenten auf einzelne Seiten verteilen und mit den Reitern die gerade gebrauchte Seite in den Vordergrund zu bringen. Auch hier lassen sich einzelne TabSheets ausblenden.

Benutzeravatar
altmetaller
Beiträge: 22
Registriert: Do 12. Nov 2020, 15:04

Re: Diverse Formulare in einem scrollbaren Bereich

Beitrag von altmetaller »

Hallo,

ließe sich das eigentliche Control (also z.B. die Tabulatoren am oberen Rand) denn auch ausblenden? Der Wechsel zwischen den einzelnen Formularen soll(te) exklusiv programmatisch erfolgen.

Die Lösung erscheint mir auf den ersten Blick etwas eleganter in Hinblick darauf, dass ich "nur" eine Seite in den Vordergrund schalten muss. Bei den TPanels beschränkt es sich nicht darauf, das jeweilige TPanel sichtbar zu schalten - ich muss ja auch sicherstellen, dass die anderen TPanels unsichtbar sind :-)

Gruß,
Jörg

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Diverse Formulare in einem scrollbaren Bereich

Beitrag von Winni »

Hi!

Ich würde den Vorschlag mit der PageControl unterstützen:

Alle Komponenten, die für Menschen nicht sichtbar sind, sind auch in der Logik "not visible".

Man hat keinerlei Gezappel mit Visible oder Enabled - was ansonsten in Arbeit ausarten kann.

Man darf natürlich keine Komponenten, deren kontinierliche Arbeit man braucht, auf eine Page der PageControl legen.
Das hat mal n Newbie geschafft: hat irgendeine Netzwerk-Komponente hierher gelegt, und sich gewundert, dass die Verbindung weg war, wenn er die Seite gewechselt hat.

Man kann einzelne Tabs mit ihren Seiten sichtbar und unsichtbar machen - per code.
Das kleine Kreuz in den Tabs zum Schließen der Tabs war glaub ich Betriebssystem-abhängig und hat schon viel Ärger gemacht. Wennn der User Seiten schließen dürfen soll: glleich um diese Klippe herumpgrqmmieren.

Ich arbeite gerne mit PageControls.

Winni

Benutzeravatar
altmetaller
Beiträge: 22
Registriert: Do 12. Nov 2020, 15:04

Re: Diverse Formulare in einem scrollbaren Bereich

Beitrag von altmetaller »

Hallo,

ich würde in den Formularen Einstellungen abfragen, die ich irgendwann einmal alle miteinander benötige. Sprich: Irgendwann kommt die Action und sammelt das ganze Geraffel ein.

Kann ich die Daten bis zum Schluss in den Formularfeldern stehen lassen oder schreibe / hole ich mir die Daten in irgendeinen globalen Record, wenn die entsprechende Seite verlassen / betreten wird?

Ich möchte dem Anwender auf jeden Fall die Möglichkeit lassen, immer wieder zu bestimmten Formularen zu springen und bereits vorgenommene Einstellungen zu ändern.

Gruß,
Jörg

Sieben
Beiträge: 202
Registriert: Mo 24. Aug 2020, 14:16
OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
CPU-Target: i386

Re: Diverse Formulare in einem scrollbaren Bereich

Beitrag von Sieben »

Die Inhalte einzelner Controls auf den verschiedenen Seiten bleiben erhalten, und mit ShowTabs := False kannst du auch das beliebige Umschalten des Anwenders verhindern und die Reihenfolge programmatisch steuern. 'Wizards' zB mit 'Weiter'- und 'Zurück'-Buttons sind zB typische Anwendungen.

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Diverse Formulare in einem scrollbaren Bereich

Beitrag von Winni »

@altmetaller

Hi!

Nun ist genug mit hätte, wäre, wenn:

Ein Pagecontrol auf die Form, ein Editfeld auf eine Page, ein Memo auf die nächste Page.
Und dann kannste hin und herspringen, Dein Lieblingsgedicht ins Memo eingeben, die Seite wechseln, und zurück:
und staunen, dass es immer noch da ist.

Winni

Benutzeravatar
altmetaller
Beiträge: 22
Registriert: Do 12. Nov 2020, 15:04

Re: Diverse Formulare in einem scrollbaren Bereich

Beitrag von altmetaller »

Hallo,
Sieben hat geschrieben:
Do 12. Nov 2020, 17:12
'Wizards' zB mit 'Weiter'- und 'Zurück'-Buttons sind zB typische Anwendungen.
Das kommt dem schon ziemlich nahe :-)

Vielen lieben Dank noch einmal für die Antworten und bitte entschuldigt die vielleicht etwas dummen Fragen. Meine letzten Erfahrungen mit Pascal sind halt noch nicht einmal objektorientiert und ich denke, "dafür" habe ich mich in den letzten zwei Tagen schon ganz gut reingefuchst.

Ich bin ja gerne bereit, mich einzuarbeiten und nehme alle Anregungen mit. Aber mir ist halt auch wichtig, dass ich den Weg der "Best practice" einschlage und mich nicht von einem Frickelworkaround zum Nächsten durchgoogle.

Über das Tempo reden wir mal nicht weiter :-)

Liebe Grüße,
Jörg

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6208
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Diverse Formulare in einem scrollbaren Bereich

Beitrag von af0815 »

Der Unterschied zwischen Ereignisorientiert und nicht ist gewaltig. Komplett andere Denkschule.
Wenn dir was abgeht, dann einen Timer als Scheduler einsetzen. Nicht vergessen, der Benutzer wartet nicht gerne, also nicht irgendwo in einer Schleife hängen bleiben.

Ich verwende gerne Tabsheets mit dynamischen Frames. Die Frames werden von einem Template über Vererbung abgleitet. Das Template beinhaltet die allgeine Verwaltung von einem Datenobjekt, das zur Synchronisation über die Templates geshared wird.

Damit halte ich die verschiedenen Bereiche absolut isoliert voneinander, sowohl optisch als auch im Code. Damit ist alles sehr stark entkoppelt und bleibt auch wartbar bei sehr vielen Frames.

Durch die dynamischen Frames ist der Resourcenverbrauch beim Start erfreulich gering, und bleibt auch unten, da ich Frames auch jederzeit wieder entfernen kann.

Vielleicht ein Hinweis aus meiner Praxis. Ich lasse nur das Hauptformular erzeugen, alles andere wird per Code relativ spät erzeugt. Ich verwende dazu das erste OnActivate dazu. Zu diesem Zeitpunkt ist garantiert das wirklich alles bereitsteht und geladen ist. Nur hier ist wirklich alles am laufen und man kann auch das Form sauber schliessen wen einem irgendwelche Resourcen fehlen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

wp_xyz
Beiträge: 4885
Registriert: Fr 8. Apr 2011, 09:01

Re: Diverse Formulare in einem scrollbaren Bereich

Beitrag von wp_xyz »

Ich möchte af0815 Recht geben: Wenn du von mehreren eingebettenen "Formularen" sprichst, dann klingt das nach "vielen" Komponenten, und das kannst du sinnvoll nur mit Frames bewältigen. Ohne Frames hast du alle Komponenten mit ihren Ereignissen im Hauptformular zusammengewürfelt, und du verlierst sehr schnell die Übersicht, spätestens dann, wenn dir die Systematik mit der Komponentenbenennung über den Kopf wächst. Frames dagegen werden wie Formulare in eigenen Units entworfen, so dass sie sauber voneinander getrennt sind. Mit "Datei" > "Neu" > "Frame" wird ein neuer Frame erzeugt, und du arbeitest auf dem Frame wie auf einem Formular. Man kann sich die Frames sogar zur Designzeit ins Hauptformular einbetten lassen, aber das trägt nur wieder zur Verwirrung bei. Viel besser ist es, wie af0815 schon sagte, sich dann die Instanz des Frames zur Laufzeit zu erzeugen und erst dann ins Hauptformular einzufügen.

Ist zugegebenermaßen für den Anfang mit Lazarus etwas kompliziert, aber es ist die einzige Möglichkeit den Überblick zu behalten.

Vielleicht solltest du aber die ersten Übungen mit Lazarus mit kleineren Programmen machen.

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Diverse Formulare in einem scrollbaren Bereich

Beitrag von Winni »

Hey Ihr beiden!

Der Mann hat 30 Jahre kein Pascal gemacht und weiß nix von OOP!!

Wollen wir mal die Schule im Dorf lassen? Kopfschüttel.

Hi Altmetaller!

Bleib mal schön bei der Scrollbox oder der PageControl.

Winni

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6208
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Diverse Formulare in einem scrollbaren Bereich

Beitrag von af0815 »

Winni hat geschrieben:
Fr 13. Nov 2020, 01:43
Hey Ihr beiden!

Der Mann hat 30 Jahre kein Pascal gemacht und weiß nix von OOP!!

Wollen wir mal die Schule im Dorf lassen? Kopfschüttel.
Wenn die Frage so war:
In meinem Projekt möchte ich in meinem Hauptformular einen scrollbaren Bereich definieren, in dem situationsabhängig unterschiedliche (statische) Formulare angezeigt werden.

Mein erster pragmatischer Gedanke wäre, eine TScrollBox zu erstellen, dieser diverse TPanels zuzuweisen und auf den jeweiligen TPanels die Formularfelder anzuordnen. Danach würde ich dann das jeweils gewünschte Formular auf "Visible" schalten.
Dann bist du schnelle im Chaos. Betonung liegt auf 'situationsabhängig unterschiedlich', 'diverse Panels', Formularfelder. Da bist du bald mit einem sehr komplexen, verwirrenden Programmoloch konfrontiert, bei dem du in der ersten gröberen Pause den Überblick verlierst, weil gewachsen, gewachsen, gewachsen, über den Kopf gewachsen. Wenn davon gesprochen worden wäre, das über verschiedene Formulare zu machen, dann wäre es der Lösung von den Frames nahegekommen. Genaugenommen sind die Frames ja nichts anderes als eingebettete (spezielle) Formulare.

Ich gehe davon aus das der Altmetaller mit den Begriffen vorerst nicht so viel anfangen kann, außer sich dafür zu interessieren und bei Bedarf zu Fragen. Beispiele habe ich aus der Praxis zu dem Thema zu haufe. (Leider auch im negativen Sinn :-) )
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
altmetaller
Beiträge: 22
Registriert: Do 12. Nov 2020, 15:04

Re: Diverse Formulare in einem scrollbaren Bereich

Beitrag von altmetaller »

Hallo,

wie gesagt - ich schaue mir gleich mal die Geschichte mit den Tabulatoren an weil ich denke, dass es so am einfachsten im ObjectInspector und im Formulareditor nachvollziehbar ist. Ich werde sicher noch viel an der GUI schrauben (bis jetzt habe ich erst ein paar "grobe Vorstellungen") und bin am experimentieren. Gerade auch, wenn es darum geht, die Nutzererfahrung möglichst intuitiv zu gestalten.

Insofern dürfte es mit einen "reinem" Blick auf den Code eher schwierig sein.

Sobald ich die GUI fertig habe, kann ich das Kompilat ja mal in einen Cloudspace stellen und hier verlinken. Am technischen Teil werde ich mir eh' noch die Zähne ausbeißen. Ich befürchte, da gibt es einen ganzen Batzen, den ich aus externen Quellen zusammenkratzen muss :-(

Gruß,
Jörg

Antworten