Formular übergreifende Komponenten
-
- Beiträge: 730
- Registriert: Di 23. Aug 2016, 14:25
- OS, Lazarus, FPC: Windows 11
- CPU-Target: 64Bit
- Wohnort: Berlin
Formular übergreifende Komponenten
Hallo zusammen,
ich stoße grade "mal wieder" auf ein kleines organisatorisches Problem bei (m)einer Software.
Ich schreibe grade eine neue Steuersoftware für meine elektronische Last KEL103.
Warum ? weil die Originale schlecht und/oder teils garnicht funktioniert
Angesteuert wird das Gerät über eine RS232 oder auch über einen virtuellen Comport USB
Der Datenverkehr klappt bei mir in beiden Varianten, was die originale Software anscheinend nicht hinbekommt....
Doch nun zur Problembeschreibung:
Wenn ich eine "serielle" Komponente habe, so ist man zunächst versucht sie aufs Hauptformular zu setzen und einzustellen.
Nun habe ich aber mehrere Formulare, welche auf diese serielle zugreifen sollen
und genau da stellt sich das Problem: Form2 kennt die Komponente nicht, da sie ja auf Form1 liegt.
Wenn ich nun in die Uses Anweisung ein anderes Formular mit aufnehme gibt es einen Fehler
"Circular unit reference" leuchtet mir ein...
Ich habe das auch schon mit Zeigern und Übergabeparametern gemacht, das geht zwar, aber will man das ?
Nun bleibt die Frage wie macht man das am sinnvollsten ?
Meine neue Idee:
Ich müsste eine spezielle Unit anlegen und dort die serielle Komponente händisch createn,
dann kann ich diese Unit in alle Formulare nach Bedarf mit einbinden.
oder habe ich einen generellen Denkfehler (Rentner halt)
Siro
ich stoße grade "mal wieder" auf ein kleines organisatorisches Problem bei (m)einer Software.
Ich schreibe grade eine neue Steuersoftware für meine elektronische Last KEL103.
Warum ? weil die Originale schlecht und/oder teils garnicht funktioniert
Angesteuert wird das Gerät über eine RS232 oder auch über einen virtuellen Comport USB
Der Datenverkehr klappt bei mir in beiden Varianten, was die originale Software anscheinend nicht hinbekommt....
Doch nun zur Problembeschreibung:
Wenn ich eine "serielle" Komponente habe, so ist man zunächst versucht sie aufs Hauptformular zu setzen und einzustellen.
Nun habe ich aber mehrere Formulare, welche auf diese serielle zugreifen sollen
und genau da stellt sich das Problem: Form2 kennt die Komponente nicht, da sie ja auf Form1 liegt.
Wenn ich nun in die Uses Anweisung ein anderes Formular mit aufnehme gibt es einen Fehler
"Circular unit reference" leuchtet mir ein...
Ich habe das auch schon mit Zeigern und Übergabeparametern gemacht, das geht zwar, aber will man das ?
Nun bleibt die Frage wie macht man das am sinnvollsten ?
Meine neue Idee:
Ich müsste eine spezielle Unit anlegen und dort die serielle Komponente händisch createn,
dann kann ich diese Unit in alle Formulare nach Bedarf mit einbinden.
oder habe ich einen generellen Denkfehler (Rentner halt)
Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
Re: Formular übergreifende Komponenten
in Form2 unter Implementation eintragen:
uses Unit1;
Zugriff:
Form1.[Name deiner Komponente]
uses Unit1;
Zugriff:
Form1.[Name deiner Komponente]
Gruß, Michael
-
- Beiträge: 730
- Registriert: Di 23. Aug 2016, 14:25
- OS, Lazarus, FPC: Windows 11
- CPU-Target: 64Bit
- Wohnort: Berlin
Re: Formular übergreifende Komponenten
Tatsächlich.....das funktioniert.....
so einfach geht das. Ich bin erstaunt.
Habe vielen Dank Michael, für die spontane Erleuchtung.
Siro
so einfach geht das. Ich bin erstaunt.
Habe vielen Dank Michael, für die spontane Erleuchtung.
Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
- 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: Formular übergreifende Komponenten
Hi!
Wenn es mit den überall gebrauchten nicht sichtbaren Komponenten überhand nimmt, geht auch Folgendes:
Mann nimmt eine Form, die nie angezeigt wird, aber in allen anderen Units durch uses eingebunden wird. Da packt man dann seinen Timer, serielle oder USB-Connection oder was auch immer drauf.
Dann spart man sich die rekursiven uses-Beziehungen.
Winni
Wenn es mit den überall gebrauchten nicht sichtbaren Komponenten überhand nimmt, geht auch Folgendes:
Mann nimmt eine Form, die nie angezeigt wird, aber in allen anderen Units durch uses eingebunden wird. Da packt man dann seinen Timer, serielle oder USB-Connection oder was auch immer drauf.
Dann spart man sich die rekursiven uses-Beziehungen.
Winni
Re: Formular übergreifende Komponenten
...oder gleich ein Datamodul für die nichtsichbaren Komponenten...
Gruß, Michael
- 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: Formular übergreifende Komponenten
Hi!
Stimmt!
Das ist auch so ein fast vergessenes Stiefkind ....
Winni
Stimmt!
Das ist auch so ein fast vergessenes Stiefkind ....
Winni
Re: Formular übergreifende Komponenten
..also das kann ich so nicht sagen von dem, was ich so zusammen zimmere.
Es ist bei größeren Projekte das Erste, was ich nach Form1 anlege, da ich sonst auch immer nach kürzester Zeit nichts mehr auf der Form1 sehen kann
Es ist bei größeren Projekte das Erste, was ich nach Form1 anlege, da ich sonst auch immer nach kürzester Zeit nichts mehr auf der Form1 sehen kann
Gruß, Michael
-
- Beiträge: 730
- Registriert: Di 23. Aug 2016, 14:25
- OS, Lazarus, FPC: Windows 11
- CPU-Target: 64Bit
- Wohnort: Berlin
Re: Formular übergreifende Komponenten
Hi Winni,
das war auch schon meine Idee mit dem unsichtbaren Formular als Aufbewahrungsort für die unsichtbaren Komponenten.
Und Du hast es auch richtig erkannt, da kommen nämlich noch 2 Timer mit rein.
Ein Refreshtimer für das Kurvenmodul und ein Timer der die Daten vom Gerät abholt.
Das Problem war halt, dass ich es immer in der Uses oberhalb der Implementation versucht habe
und dann haarsträubende Ideen hatte das Problem zu lösen....
@Michael:
Ein Datamodul kenne ich noch garnicht, das schaue ich mir auch mal an.
Eigentlich wollte ich auch noch eine 7-Segment Anzeige programmieren,
habe dann aber diese schöne gerenderte bzw. kantengeglättete 7-Segment Anzeige hier gefunden:
https://www.atomek.de/coding/ledcontrol ... entdisplay
https://www.atomek.de/coding/ledcontrols/index.html
Voraussetzung ist aber das BGRABitmapPack
Danke nochmal für eure Info
Siro
das war auch schon meine Idee mit dem unsichtbaren Formular als Aufbewahrungsort für die unsichtbaren Komponenten.
Und Du hast es auch richtig erkannt, da kommen nämlich noch 2 Timer mit rein.
Ein Refreshtimer für das Kurvenmodul und ein Timer der die Daten vom Gerät abholt.
Das Problem war halt, dass ich es immer in der Uses oberhalb der Implementation versucht habe
und dann haarsträubende Ideen hatte das Problem zu lösen....
@Michael:
Ein Datamodul kenne ich noch garnicht, das schaue ich mir auch mal an.
Eigentlich wollte ich auch noch eine 7-Segment Anzeige programmieren,
habe dann aber diese schöne gerenderte bzw. kantengeglättete 7-Segment Anzeige hier gefunden:
https://www.atomek.de/coding/ledcontrol ... entdisplay
https://www.atomek.de/coding/ledcontrols/index.html
Voraussetzung ist aber das BGRABitmapPack
Danke nochmal für eure Info
Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
- 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: Formular übergreifende Komponenten
Hi!
Zweimal uses im Interface kann ja zu endloser Rekursion führen - deshalb ist es verboten.
Die rekursive Benutzung von Units is zu 95% auf schlechtes Design zurückzuführen.
Eine unsichtbare Form oder ein Datenmodul oder auch nur eine unit für Konstanten und globale Variablen kann da echt helfen.
Eine 7-Segment-Anzeige mittels BGRAbitmap hab ich mir auch mal gebaut.
Aber nun gibt's das als Komponente, was dann praktischer ist.
Winni
Zweimal uses im Interface kann ja zu endloser Rekursion führen - deshalb ist es verboten.
Die rekursive Benutzung von Units is zu 95% auf schlechtes Design zurückzuführen.
Eine unsichtbare Form oder ein Datenmodul oder auch nur eine unit für Konstanten und globale Variablen kann da echt helfen.
Eine 7-Segment-Anzeige mittels BGRAbitmap hab ich mir auch mal gebaut.
Aber nun gibt's das als Komponente, was dann praktischer ist.
Winni