erzeugte und angedockte forms speichern?

Forum für alles rund um die MSEide und MSEgui
mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: erzeugte und angedockte forms speichern?

Beitrag von mse »

fliegermichl hat geschrieben:und noch eine kleine Bitte: Wenn man im Designer ein Menuitem anklickt, passiert nichts. Kannst du es so einstellen, daß dann das Menuitem im Objectinspektor den Focus bekommt?

Siehe git master c7c6d34dc15238b1b61886efa7f33d976764ff3b.

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

Re: erzeugte und angedockte forms speichern?

Beitrag von fliegermichl »

Cool! Danke

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

Re: erzeugte und angedockte forms speichern?

Beitrag von fliegermichl »

Wie kann ich denn erreichen, daß auch die Childcontrols der zur Laufzeit erzeugten Formulare mit im statfile gespeichert werden?

Ideal wäre eigentlich, wenn ich so etwas wie einen vereinfachten Laufzeit GUI Designer hätte.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: erzeugte und angedockte forms speichern?

Beitrag von mse »

fliegermichl hat geschrieben:Wie kann ich denn erreichen, daß auch die Childcontrols der zur Laufzeit erzeugten Formulare mit im statfile gespeichert werden?

Du meinst zur Laufzeit erzeugte variable Komponenten? Da müsste man vermutlich component streaming verwenden, dieselbe Methode welche auch MSEide verwendet, siehe TReader und TWriter.
https://www.freepascal.org/docs-html/cu ... eader.html
https://www.freepascal.org/docs-html/cu ... riter.html

Im statfile werden die Werte der Childcontrols durch Setzen der "statfile" properties gespeichert.
Ideal wäre eigentlich, wenn ich so etwas wie einen vereinfachten Laufzeit GUI Designer hätte.

Was ist der Einsatzzweck?
Edit:
Falls es um verstellbare widget Grössen geht, dafür ist TSplitter vorgesehen, der hat eine "statfile" Property um die Position zu speichern.
Beispiele sind
https://gitlab.com/mseide-msegui/mseuni ... rms/panels
und MSEgit.

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

Re: erzeugte und angedockte forms speichern?

Beitrag von fliegermichl »

mse hat geschrieben:Im statfile werden die Werte der Childcontrols durch Setzen der "statfile" properties gespeichert.


Genau das hatte ich versucht. Ich habe ein ttabwidget erzeugt und in dem ein ttabpage. statfile von dem tabwidget auf mainmo.mainstat gesetzt. Die options des Formulars enthalten auch fo_autoreadstat und fo_autowritestat aber von dem ttabwidget oder dem ttabpage erscheint nichts im statfile.

fliegermichl hat geschrieben:Ideal wäre eigentlich, wenn ich so etwas wie einen vereinfachten Laufzeit GUI Designer hätte.

Was ist der Einsatzzweck?

Ich habe tonnenweise anwendungsspezifische Aktionen die in Gruppen organisiert sind. Der Anwender soll die GUI selbst anpassen können und z.B. durch Toolbars, Menüs, Shortcuts, Commandline etc. diese Aktionen mit Parametern versehen ud ausführen können. Diese Controls zur Laufzeit zu erzeugen klappt problemlos nur bekomme ich das nicht persistiert.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: erzeugte und angedockte forms speichern?

Beitrag von mse »

fliegermichl hat geschrieben:
mse hat geschrieben:Im statfile werden die Werte der Childcontrols durch Setzen der "statfile" properties gespeichert.


Genau das hatte ich versucht. Ich habe ein ttabwidget erzeugt und in dem ein ttabpage. statfile von dem tabwidget auf mainmo.mainstat gesetzt. Die options des Formulars enthalten auch fo_autoreadstat und fo_autowritestat aber von dem ttabwidget oder dem ttabpage erscheint nichts im statfile.

ttabwidget speichert die lediglich die aktuelle page im statfile. Das Setzen von fo_autoreadstat und fo_autowritestat dient dazu, dass tstatfile.readstat()/writestat() beim Erstellen und Schliessen des Fomulares automatisch ausgeführt wird. Da mainmo.mainstat viele Formulare bedient, sollten die flags nicht gesetzt sein.
Es gibt auch 'File'-'New'-'Form'-'Tabform', das sind Formulare welche zur Laufzeit in ttabwidget eine tabpage bilden können.
Ich habe tonnenweise anwendungsspezifische Aktionen die in Gruppen organisiert sind. Der Anwender soll die GUI selbst anpassen können und z.B. durch Toolbars, Menüs, Shortcuts, Commandline etc. diese Aktionen mit Parametern versehen ud ausführen können. Diese Controls zur Laufzeit zu erzeugen klappt problemlos nur bekomme ich das nicht persistiert.

Das geht nicht automatisch, wenn es nicht über TDockController läuft. Die Struktur kann z.B. in tstatfile.onstatwrite gespeichert und in tstatfile.onstatread rekonstruiert werden.

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

Re: erzeugte und angedockte forms speichern?

Beitrag von fliegermichl »

Ich bekomme das einfach nicht hin.
Wenn ich mit stream.writecomponent eine Komponente speichere, dann bekomme ich später beim laden - die Exception unknown property "". Kann ich die Funktionen der ide zum speichern und laden von Formularen in den .mfm Dateien dafür nutzen?

In Lazarus gibt es lreseources.pas

Code: Alles auswählen

 
procedure WriteComponentAsTextToStream(AStream: TStream;
                                       AComponent: TComponent);
procedure ReadComponentFromTextStream(AStream: TStream;
                           var RootComponent: TComponent;
                           OnFindComponentClass: TFindComponentClassEvent;
                           TheOwner: TComponent = nil;
                           Parent: TComponent = nil);
 


Damit kann man problemlos Formulare in Dateien speichern und wieder laden.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: erzeugte und angedockte forms speichern?

Beitrag von mse »

Ich würde glaube ich nicht component-streaming via TReader/TWriter sondern TStatFile benutzen, da die anderen Layout- und Status-Daten ja auch in der statfile Datei stehen.

Zur Fehlermeldung, falls "RootComponent" keine published Eigenschaften der zu ladenden Komponenten hat, müssen die verwendeten Komponentenklassen vor dem Laden via "RegisterClass" bekannt gemacht werden. Komponenten-Streaming ist eine komplizierte Angelegenheit.
Bitte mache ein vereinfachtes Beispiel, welches das Problem zeigt.

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

Re: erzeugte und angedockte forms speichern?

Beitrag von fliegermichl »

Merkwürdig, ich habe eben das vereinfachte Beispiel gemacht und da hat es problemlos funktioniert. Ich denke, daß da tatsächlich eine property nicht published wurde. Aber jetzt habe ich einen Anhaltspunkt wo ich vergleichen kann.

Antworten