[Gelöst] Sigsegv Error bei delay Aufruf

Für Fragen von Einsteigern und Programmieranfängern...
Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: [Gelöst] Sigsegv Error bei delay Aufruf

Beitrag von af0815 »

Ich löse das mit dem manuellen XMLPropStorage und weise die Daten dort zu. Es ist ein Unterschied bei den visuellen Komponenten, wie zugewiesen wird. Wenn du über das Programm Werte zuweist, werden normalerweise die OnXX nicht gefeuert, bei dem automatischen XMLPropStorage aber scheinbar schon. Da aber noch nicht alles fertig initialisiert ist, kracht es. Es ist nur etwas trickreich, da der Context zum Schreiben und Lesen nur in Zusammenhang mit dem Ereignis gültig ist. Innerhalb der Ereignisroutine kann man zugreifen.

Ausgelöst wird das Lesen dann durch

Code: Alles auswählen

  XMLPropStorage1.Active:=true;
  XMLPropStorage1.Restore;
und das Speichern mit

Code: Alles auswählen

    XMLPropStorage1.Save;
Vermutlich geht das auch bei dir, wenn du die beiden Ereignisse erst auslöst, wenn alles initialisiert ist.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Okil
Beiträge: 32
Registriert: Mi 14. Aug 2019, 16:33
OS, Lazarus, FPC: Lazarus 2.0.8, FPC 3.0.4, Linux, (Windows 7)
CPU-Target: 64Bit / 32 Bit
Wohnort: Umland München

Re: [Gelöst] Sigsegv Error bei delay Aufruf

Beitrag von Okil »

Habe das jetzt mal in einem kleinen Testprogramm nachvollziehen können. Die ToggleBox OnClick Events werden eben nicht nur bei einem Mausklick, sondern bei jeder Veränderung von Checked durchlaufen.

Das vereinfacht die Sache natürlich ungemein und ich spare eine Menge Code. Ich schiebe die GPIO Initialisierungen nach oben im OnActive, verändere dann die Checked Werte der Pumpen, schalte gar nicht mehr im OnActive und lasse das Programm ganz bewußt in die OnClick Ereignisse laufen und die Relais schalten.

Mal schauen, ob das geht.

Antworten