mseIDE Fensterproblem

Forum für alles rund um die MSEide und MSEgui
Antworten
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

mseIDE Fensterproblem

Beitrag von fliegermichl »

Hallo,

ich versuche mich gerade ein wenig in der mseIDE zurecht zu finden. Ich habe das Projekt msekicadbom geöffnet und versuche herauszufinden, wie die Menüverbindung von "global settings" funktioniert.
Als "action" ist mainmo.globalsettingsact und bei dem unter "ifilink" steht editglobalsettings. Da ist aber nirgends ein Verweis auf das Formular zu finden, welches sich darauf öffnet.

Um hinter die Funktionalität zu kommen, habe ich mainmodule.pas in Zeile 1083 einen Breakpoint gesetzt und das Programm hält da auch an. Jetzt will ich mir den Stack anschauen und klicke auf View | Stack aber da wird kein Fenster angezeigt.

Ein ähnliches Problem hatte ich schonmal. Da war im "Source|message" Fenster plötzlich nur noch messages zu sehen und ich bekam den Source nicht mehr zu Gesicht.

Gibt es irgendeine Möglichkeit, das ganze Layout zu resetten?

Viele Grüße
Michael

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: mseIDE Fensterproblem

Beitrag von mse »

Um hinter die Funktionalität zu kommen, habe ich mainmodule.pas in Zeile 1083 einen Breakpoint gesetzt und das Programm hält da auch an. Jetzt will ich mir den Stack anschauen und klicke auf View | Stack aber da wird kein Fenster angezeigt.

Schau mal oben links im Bildschirm, wahrscheinlich hat das Stack Fenster eine gespeicherte Grösse von 0. Ich habe irgendwo eine fehlerhafte default Datei die ich versehentlich als Projektdatei für MSEkicadBOM verwendet habe.
MSEkicadBOM habe ich dazu benutzt, um die strikte Trennung von Code und GUI zu demonstrieren, es ginge also auch einfacher. ;-)
"editglobalsettings" ist ein "tifiactionendpoint" im Hauptformular. Wenn das Ereignis getriggert wird, wird "onexecute" aufgerufen. Doppelklick auf "editglobalsettingsev" im Objektinspektor zeigt den entsprechenden Handlercode. Es wird ein "tglobalsettingsfo" Formular erstellt.
handler.png

Ein ähnliches Problem hatte ich schonmal. Da war im "Source|message" Fenster plötzlich nur noch messages zu sehen und ich bekam den Source nicht mehr zu Gesicht.

Bitte berichte, falls du das Problem reproduzieren kannst.
Gibt es irgendeine Möglichkeit, das ganze Layout zu resetten?

Ein Windowlayout kannst du aus einer beliebigen "*.prj" MSEide Projektdatei mit 'View'-'Load Window Layout' Laden.

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: mseIDE Fensterproblem

Beitrag von fliegermichl »

Ah jetzt ja! :-)

Also kann man von der Menüseite her gar nicht herausfinden, wer alles mit dem tifiactionlinkcomp Objekt verknüpft ist.
Zum testen habe ich im mainfo nochmal eine zusätzliche tifiactionendpoint Komponente platziert und in dem onexecute event "showmessage('test 123');" untergebracht.
Dann erscheint zuerst das Formular "global settings" und danach dann "test 123".

Strikte Trennung von GUI und bussines finde ich gut. Es macht die Sache aber sehr schwer nachvollziehbar.

Das wirkt so ein bißchen wie globale Variablen auf mich. Man dreht hier ein klein wenig an einer Schraube und auf der anderen Seite fällt alles auseinander.

Für was steht eigentlich "ifi" ?

Das Problem mit dem verschwundenen Source Teil in dem Source|Messages Panel kann ich auch nicht mehr nachvollziehen. Das trat nur einmal auf. Mit View | Load Window Layout kam dann auch das Stackfenster wieder zum Vorschein.

Viele Grüße
Michael

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: mseIDE Fensterproblem

Beitrag von mse »

fliegermichl hat geschrieben:Also kann man von der Menüseite her gar nicht herausfinden, wer alles mit dem tifiactionlinkcomp Objekt verknüpft ist.
Zum testen habe ich im mainfo nochmal eine zusätzliche tifiactionendpoint Komponente platziert und in dem onexecute event "showmessage('test 123');" untergebracht.
Dann erscheint zuerst das Formular "global settings" und danach dann "test 123".

Korrekt, tifiactionlinkcomp verteilt die Ereignisse an die angeschlossen tifiactionendpoint.
Strikte Trennung von GUI und bussines finde ich gut. Es macht die Sache aber sehr schwer nachvollziehbar.
Das wirkt so ein bißchen wie globale Variablen auf mich. Man dreht hier ein klein wenig an einer Schraube und auf der anderen Seite fällt alles auseinander.

Ich habe für die ifi-Links und die ifi-Endpoints jeweils die gleichen Komponentennamen verwendet. Eine weitere Möglichkeit ist in den Formulardateien mit der Funktion 'Search-Find in Files' nach dem im Menu eingehängten ifi-Link zu suchen.
search.png

Doppelklick in Zeile 2 zeigt, dass "mainmo.editglobalsettings" im Objekt "editglobalsettings" von mainfo in die Property "ifilink" gewählt ist. RightClick-'Show as Form' im Editor wechselt wieder zur Formularanzeige.
search1.png

Die Idee der strikten Trennung ist, dass die Steuersoftware von der GUI nichts weiss, das hat natürlich Konsequenzen. Meist ist auch eine weniger strikte Trennung vernünftiger. ;-) Beispielsweise könnte mainmo.globalsettingsact.onexecute die Aktion direkt ausführen.
Für was steht eigentlich "ifi" ?

Da hat keine Bedeutung mehr. Denke dir was aus!

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: mseIDE Fensterproblem

Beitrag von fliegermichl »

Ich finde das schon gut.

Ich möchte eine Anwendung schreiben, bei der der (geschulte) Anwender oder wer auch immer die Oberfläche selbst gestalten können soll. Da darf der bussines Bereich des Programmes keinerlei Annahmen über die GUI machen.
Mit den ifiactionendpoints hat man den Vorteil, daß ein Ereignis eine ganze Reihe von Reaktionen auslösen kann und das ganze auch recht flexibel.

Man muß es nur halt erstmal verstehen.

Ich werde das msekicadbom Projekt noch etwas weiter untersuchen.
Das ist ein schönes Beispiel für die Verwendung der Datenbankkomponenten und auch der Reportfunktion. (Der konnte ich bislang noch keinerlei Reaktion entlocken :-)

Hat es einen Grund, daß die Daten der Datenbank in dbdata.pas als Konstanten definiert sind?
Ich würde eher eine Liste der Tabellen mit entsprechenden "create table if not exist ..." Konstrukten machen.

Viele Grüße
Michael

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: mseIDE Fensterproblem

Beitrag von mse »

fliegermichl hat geschrieben:Hat es einen Grund, daß die Daten der Datenbank in dbdata.pas als Konstanten definiert sind?
Ich würde eher eine Liste der Tabellen mit entsprechenden "create table if not exist ..." Konstrukten machen.

Die Daten in dbdata.pas wurden mit "gbak -M" erstellt. Das hat den Vorteil, dass MSEkicadBOM die Datenstruktur nicht genau kennen muss. Zudem ist die Struktur recht kompliziert mit Triggern und vielen Foreignkeys. Es wäre gar nicht so einfach, die DB Schritt für Schritt aufzubauen.

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: mseIDE Fensterproblem

Beitrag von mse »

fliegermichl hat geschrieben:Ich werde das msekicadbom Projekt noch etwas weiter untersuchen.
Das ist ein schönes Beispiel für die Verwendung der Datenbankkomponenten und auch der Reportfunktion. (Der konnte ich bislang noch keinerlei Reaktion entlocken :-)

Report Beispiele gibt es hier:
https://gitlab.com/mseide-msegui/mseuni ... als/report
Weitere Beispiele:
https://gitlab.com/mseide-msegui/mseuni ... er/samples

Antworten