Formular übergreifende Komponenten

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
siro
Beiträge: 437
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 10
CPU-Target: 64Bit
Wohnort: Berlin

Formular übergreifende Komponenten

Beitrag von siro »

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 :o
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 ? :roll:

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) :mrgreen:

Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

Benutzeravatar
six1
Beiträge: 346
Registriert: Do 1. Jul 2010, 19:01

Re: Formular übergreifende Komponenten

Beitrag von six1 »

in Form2 unter Implementation eintragen:
uses Unit1;

Zugriff:

Form1.[Name deiner Komponente]
Gruß, Michael

siro
Beiträge: 437
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 10
CPU-Target: 64Bit
Wohnort: Berlin

Re: Formular übergreifende Komponenten

Beitrag von siro »

Tatsächlich.....das funktioniert..... :shock:

so einfach geht das. :lol: 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...

Benutzeravatar
Winni
Beiträge: 665
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.0.12, fpc 3.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Formular übergreifende Komponenten

Beitrag von Winni »

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

Benutzeravatar
six1
Beiträge: 346
Registriert: Do 1. Jul 2010, 19:01

Re: Formular übergreifende Komponenten

Beitrag von six1 »

...oder gleich ein Datamodul für die nichtsichbaren Komponenten...
Gruß, Michael

Benutzeravatar
Winni
Beiträge: 665
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.0.12, fpc 3.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Formular übergreifende Komponenten

Beitrag von Winni »

Hi!

Stimmt!

Das ist auch so ein fast vergessenes Stiefkind ....

Winni

Benutzeravatar
six1
Beiträge: 346
Registriert: Do 1. Jul 2010, 19:01

Re: Formular übergreifende Komponenten

Beitrag von six1 »

..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 :lol:
Gruß, Michael

siro
Beiträge: 437
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 10
CPU-Target: 64Bit
Wohnort: Berlin

Re: Formular übergreifende Komponenten

Beitrag von siro »

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.... 8)

@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...

Benutzeravatar
Winni
Beiträge: 665
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.0.12, fpc 3.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Formular übergreifende Komponenten

Beitrag von Winni »

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

Antworten