Sub Screens in Lazarus?

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Lorca
Beiträge: 196
Registriert: Di 3. Nov 2020, 12:25

Sub Screens in Lazarus?

Beitrag von Lorca »

Hallo zusammen,

ich habe da mal eine "blöde?" Frage:

Gibt es bei Lazarus die Möglichkeit sog. "SubScreens" darzustellen?
Also da wo ich mein ganzes Berufsleben tätig war, wurden z.B. einzelne "TabSheets" als SubScreens erstellt.
Das ist so etwas ähnliches wir eine weitere Form. Jedoch war diese "Form" fest mit dem TabSheets der PageControl verbunden.
Ich würde gerne die Komponenten dieses Tabsheet's ein eine eigene Form darstellen. Das Problem ich diese Form ist verschiebbar.
Das darf aber nicht sein.

Der Vorteil liegt in der kleineren Portionierung der Komponenten auf der Form und ihre Auslagerung in eine andere Unit.

Bei einer klassischen PageControl kann ich in der Designphase mir jedes einzelne Register anschauen und bearbeiten.
Diese Funktion ist auch dringend Notwendig und sollte auch bei einer "SubScreen" Lösung funktionieren.

Der Grund warum ich dies frage, liegt in der Komplexität des TabSheet's Inhaltes.
Ich habe zwar eine andere, selbst gebaute Lösung gefunden, würde jedoch gerne wissen ob ich zukünftig dies besser machen kann.

- Also zu aller erst darf die im TabSheet angezeigte Form (SubScreen) nicht verschiebbar sein. (Fest mit der TabSheet verbunden)
- Während der Design Phase muss jedes TabSheet (SubScreen) einsehbar und bearbeitbar sein.
- Weiter darf die blaue "Caption" Komponente der Form (SubScreen) nicht angezeigt werden.

Vllt. hat ja jemand eine Antwort darauf, oder hat eine Idee wie man so etwas besser lösen kann.
In meiner jetzigen Lösung habe ich für jedes TabSheet eine Eigene Unit erstellt.
Hier muss jedoch immer auf die Haupt Unit des FORM1 zugegriffen werden, wenn ich die einzelnen Komponenten ansprechen will.


Viele Grüße
Lorca

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Sub Screens in Lazarus?

Beitrag von theo »


Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
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: Sub Screens in Lazarus?

Beitrag von af0815 »

Frames wie schon Theo sagte. Ich verwende sie nur zur Laufzeit und nicht über den FRamescontainer. Der Editor macht sonst Sachen, die man nicht unbedingt haben will und ist überhaupt recht eigenwillig. Es werden gerne statische Verknüfungen mit Elementen des Frames erstellt, die bei mir absolut nicht gewollt sind. Für mich sind Frames echte Container, die dynamisch wo hineingehängt werden und auch über entsprechende Properties und Schnittstellen dann in ein Programm verknüpft werden. Mehrfaches verwenden auch innerhalb eines Programmes ist bei mir durchaus möglich.

Für die Entwicklung der Frames habe ich meistens ein kleines Testprogramm, was einfach das Frane ereugt die Schnittstellen versorgt und damit kann man prüfen ob alle Abläufe passen.

Es ist kein Problem Frames in Frames in Frames in .... einzubinden. Auch ein paar Layoutbugs (mit loops) sind mittlerweile behoben. Tip, eine aktuelle Version von Lazarus zu verwenden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Lorca
Beiträge: 196
Registriert: Di 3. Nov 2020, 12:25

Re: Sub Screens in Lazarus?

Beitrag von Lorca »

Hallo zusammen,

ja, genau so etwas wie Frames habe ich mir vorgestellt.

@af0815: Was meinst Du mit "FRamescontainer"? Die Komponente TFrame im Register: Standard?
Du erstellst also die Frames im Coding?!!!
Habe ich das richtig verstanden?

Muss nun jedoch erst einmal Erfahrungen damit sammeln.
Echt cool, herzlichen Dank an euch :)

Nochmals Danke schön

Viele Grüße
Lorca

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
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: Sub Screens in Lazarus?

Beitrag von af0815 »

Lorca hat geschrieben:
Di 28. Jun 2022, 07:33
@af0815: Was meinst Du mit "FRamescontainer"? Die Komponente TFrame im Register: Standard?
Du erstellst also die Frames im Coding?!!!
Habe ich das richtig verstanden?
Ich verwende die Komponente TFRame im Register Standard nicht. Frames selbst werden ja über Datei->Neu-> Frame erzeugt. Die Komponente ist ein visueller Container in der IDE, diesen verwende ich aus schlechter Erfahrung nicht. Sondern binde die Frames zur Laufzeit im Code ein.

Der Container TFrame kann die jede Menge ungewollter Ereignisroutinen anlegen, damit kann das Frame plötzlich nicht so reagieren, wie du es ursprünglich gedacht hast. Das und das Änderungen am Frame nicht zeitnah Refreshed werden haben mich dazu bewogen das TFrame nicht mehr zu verwenden.

Das wichtigste beim dynamischen Binden ist, das man nach dem Erzeugen des Frames nicht vergisst den Parent festzulegen. Ansonsten wird es nicht sichtbar. Ausserem habe ich mir angewöhnt die Frames als strikter Container zu sehen und auch entsprechend zu behandeln. Also Communikation Frame zu Komponeneten ausserhalb immer über entsprechende Callbacks, Funktionen/Proceduren oder Properties zu machen. Durch diese Kapselung lassen sich die dann wie ein Baukasten verwenden. Übrigends kann man sich auch Basisfunktiuonalität in ein Frame einpacken und dieses 'BasisFrame' entsprechende vererben. Daher leite ich meine neuen Frames meistens von dieser Basisfunktionalität und das neue Frame erbt dann alles vom Basisframe und wenn ich die Basisfunktionalität erweitern muss (oder fixen) dann habe ich nur eine Stelle, wo ich das machen muss. Aber an sowas muss man sich gewöhnen. Der Sourcecode von Lazarus ist da auch eine gute Inspirationsquelle.


Edit: Gerade mal Testweise in Projekt neu anglegt, ein Frame erzeugt. Alles gespeichert - sonst findet das TFrame schon mal nichts. Das Tframe mit dem Frame verknüpft. Dann einen Button ohne weitere Sachen auf das TFrame gelegt, gespeichert. Am TFrame war natürlich noch nicht sichtbar. Das Hauptformular geschlossen, wieder geöffnet - Booom - Projekt kaputt, weil das Hauptfenster sich ohne Fehlermeldung wegen zirkularer Refernzen nicht mehr öffnen lässt. Ok, betärkt mich in meiner Vorverurteilung :-) es nur dynamisch zu machen :mrgreen: Und nein, ich brauche keine Tips wie man das repariert - Testprojekt ist schon wieder gekübelt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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

Re: Sub Screens in Lazarus?

Beitrag von wp_xyz »

Wenn du Laz 2.2+ verwendest, findest du im Ordner (lazarus)/components/tachart/demo/charteditor ein Projekt, das ganz massiv mit Frames arbeitet. Nahezu jede Gruppierung von Controls ist ein eigener Frame, der bei entsprechender Gelegenheit immer wieder verwendet wird. Wenn z.B. "Choose "all-in-one" dialog" markiert ist und ein Element in dem linken Baum gewählt wird, wird der mit diesem Element verbundene Frame geladen und ins Formular eingesetzt (Frame.Parent := ...).

Antworten