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 »

Dann könnte dich auch MSEspice interessieren. Dort werden ebenfalls von den Anwendern erzeugte verschiedene Forms verwendet:
https://gitlab.com/mseide-msegui/mseuni ... s/msespice

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
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 »

Werde ich mir bei Gelegenheit anschauen.

Ich habe verschiedene Formularklassen die alle auf tdockpanelform basieren. Jetzt habe ich in meinem mainmodul ein feld fnewpanelclass : panelfoclassty; deklariert.
in dem oncreatepanel Event des tdockpanelformcontroller (maindock) steht jetzt folgendes

Code: Alles auswählen

 
procedure tmainmo.maindockcreatepanel(const sender: tdockpanelformcontroller;
               var apanel: tdockpanelform);
begin
 if fnewpanelclass = nil then
  apanel := tdockpanelform.create(application)
 else
  apanel := fnewpanelclass.create(application);
 with sender, apanel do
 begin
   createframe;
   dragdock.optionsdock:= defaultdockpaneloptionsdock;
   frame.grip_options:= defaultdockpanelgripoptions;
   dragdock.optionsdock:= sender.optionsdock;
   frame.grip_options:= sender.optionsgrip;
   container.frame.framei:= nullframe;
   statfile:= sender.statfileclient;
 end;
 fnewpanelclass := nil;
end;
 


Das funktioniert soweit auch. Ich konnte jedoch bislang nicht herausfinden, wie msegit den Namen des neuen Panels vergibt. Bei mir klappt das nur beim ersten. Wenn ich ein neues Panel erstellen will, bekomme ich die Exception "panel1" existiert bereits.
Könnte man das Handling mit der zu erstellenden dockpanel Klasse eleganter lösen?

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:Ich konnte jedoch bislang nicht herausfinden, wie msegit den Namen des neuen Panels vergibt. Bei mir klappt das nur beim ersten. Wenn ich ein neues Panel erstellen will, bekomme ich die Exception "panel1" existiert bereits.

In MSEgit kommt jede Formklasse nur einmal vor. In MSEspice können mehrere gleiche Formklassen vorkommen, dort werden die Komponentennamen zuerst:= '' gesetzt und danach konstruiert.
Könnte man das Handling mit der zu erstellenden dockpanel Klasse eleganter lösen?

Ich vermute, dass du die Dockpanels als dynamische Formulare "zweckentfremdest". Mit Dockpanel sind eigentlich die vom Anwender erstellten leeren Dockflächen gemeint, in MSEide z.B. die mit 'View'-'Panels'-'New Panel' erstellten Fenster.
Ich werde TDockPanelFormController mit Funktionen zur Verwaltung von dynamischen Formularen ausrüsten.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
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 kann in msegit "View -> Panels -> new Panel" beliebig viele Panels anlegen. Die können dann auch angedockt werden und irgendwie werden die auch in der .sta Datei gespeichert und wiederhergestellt. Den Mechanismus hab ich aber noch nicht durchschaut.

Mit Dockpanels meine Ich von TDockPanelform abgeleitete Klassen (z.B. CADViewer, Layerliste, PropertyEditor oder auch nur einfach TDockPanelform um diese per Drag and Dock zu organisieren)

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:Ich kann in msegit "View -> Panels -> new Panel" beliebig viele Panels anlegen. Die können dann auch angedockt werden und irgendwie werden die auch in der .sta Datei gespeichert und wiederhergestellt. Den Mechanismus hab ich aber noch nicht durchschaut.

In MSEgit macht dies TDockPanelformController.
Mit Dockpanels meine Ich von TDockPanelform abgeleitete Klassen (z.B. CADViewer, Layerliste, PropertyEditor oder auch nur einfach TDockPanelform um diese per Drag and Dock zu organisieren)

Ich bin daran TDockPanelformController um Funktionen zur Verwaltung von dynamisch erzeugten Formularen zu erweitern. Ich denke sie sollten separat behandelt werden.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
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 hab mir das eben im Debugger nochmal angeschaut. Die DockpanelForm wird auch bei mir von TDockformController.newpanel erzeugt aber dann nicht in dessen fpanellist eingetragen. Dadurch erzeugt er beim nächsten Aufruf wieder den namen "panel1".

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
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 hab den Fehler gefunden. Beim erzeugen von TDockPanelform darf nicht application als Owner angegeben werden sondern der tdockformcontroller. Dann klappt es.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
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 »

Also die .sta Datei enthält schon Informationen über die Panels. Die werden beim start vom Programm nur nicht verwendet. Wo genau muss ich mich einklinken, damit die gespeicherten Formulare wieder erzeugt und an ihren alten Positionen platziert/gedockt usw. werden?

Edit: Eben sehe ich, daß die Formulare erzeugt werden. Sie werden nur nicht angezeigt bzw. platziert.
Dateianhänge
dc.zip
(418 Bytes) 196-mal heruntergeladen

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:Also die .sta Datei enthält schon Informationen über die Panels. Die werden beim start vom Programm nur nicht verwendet. Wo genau muss ich mich einklinken, damit die gespeicherten Formulare wieder erzeugt und an ihren alten Positionen platziert/gedockt usw. werden?

Edit: Eben sehe ich, daß die Formulare erzeugt werden. Sie werden nur nicht angezeigt bzw. platziert.

Habe ein wenig Geduld, Ich arbeite an der Erweiterung von TDockPanelformController.

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 »

git master b4eb5ce6b12e60fb548cba5579c28d0f61aef392 hat es (experimentell). Ein Beispiel ist hier:
https://gitlab.com/mseide-msegui/mseuni ... namicforms

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
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 »

Das klappt jetzt schon fast perfekt. Bei mir stand tmainfo.statfile noch auf nil obwohl ich ein tstatfile in das Formular eingefügt hatte. Dadurch wurden (vermutlich durch die Verknüpfung zu dem mainmodule) die Formulare zwar in der .sta Datei gespeichert aber nicht geladen. Jetzt werden die per tdockpanelformcontroller.createdynamicwidget erzeugten Formulare zwar gespeichert und geladen, "vergessen" aber, daß sie dockbar sind und wo sie früher angedockt waren.

Der kleinste Fehler bei den tonnenweise einstellbaren Optionen hat hier schwerwiegende (und vor allem schwer aufzufindende) Ursachen.

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? Man klickt sich da den Wolf
tmainmenu -> menu -> submenu -> item4(view) -> submenu -> item2(panels) -> submenu....

Ausserdem würde ich das Layout gerne zur Laufzeit laden und speichern können (So wie loadwindowslayout/savewindowslayout). Ich bin mir sicher, daß das geht, finde es aber nicht :-)

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 »

Wenn ich richtig verstehe, erzeugst du eine variable Anzahl von zum Teil gleichen Formularklassen mit unterschiedlichen Daten. Das ist natürlich nicht so einfach zu realisieren. ;-)
Bitte mache ein vereinfachtes Beispiel damit wir am konkreten Code arbeiten können.
Die Tree-Items im Objektinspektor lassen sich auch mit der Tastatur auswählen, ArrowRight auf dem '+' Symbol öffnet den Zweig, ArrowLeft auf dem '-' Symbol schliesst den Zweig, 'Incremental search' auf den Eigenschaftsnamen wird ebenfalls unterstützt.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
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 vermute, daß irgendeine Option fehlt.
Wenn ich mir die .sta Datei anschaue, dann ist unter mainmo.maindock.panel1 gespeichert, wo panel1 gedockt war usw. für dcviewer1 fehlt diese Information. dcviewer1 vom typ tdcviewerfo wird zwar erzeugt aber mit den defaulteinstellungen.

Code: Alles auswählen

 
 [mainmo.maindock]
 panels=1
  panel1
 dynamiccomps=1
  tdcviewerfo,dcviewerfo
 [mainmo.maindock.panel1]
 splitdir=2
 useroptions=805338607
 stackedunder=mainfo
 parent=
 mdistate=0
 nx=0
 ny=0
 ncx=0
 ncy=0
 x=910
 y=470
 cx=350
 cy=200
 rcx=0
 rcy=0
 children=0
 focusedchild=0
 wsize=0
 active=0
 visible=1
 

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 »

In welchem TStatFile speichert sich tdcviewerfo?

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
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 »

Das war der Fehler. Jetzt klappt es. Ich hab mal ein erstes Video von dem Programm gemacht. Das ist natürlich lange noch nicht fertig aber eben ein ganz guter Anfang.
Ich stelle einen Link in einen neuen Thread.

Antworten