Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Showmessage löst Fehler in Event-Procedure aus (https://www.delphipraxis.net/94157-showmessage-loest-fehler-event-procedure-aus.html)

AirSpider 17. Jun 2007 11:47


Showmessage löst Fehler in Event-Procedure aus
 
Hallo!

Ich schreibe gerade an einer Komponente, die die Kommunikation mit einem Mikrocontroller übernehmen soll.

In dieser Komponente erzeuge ich einen Thread, der mit WaitforSingleObject solange wartet bis etwas passiert. Dann möchte ich ein Event auslösen, sodass der Benutzer es wie jedes andere Event nutzen kann (Bsp. OnClick).

Momentan habe ich es so gelöst, dass ich in der Klasse meines Threads ein Event auslöse, dem ich eine Procedure der Hauptklasse meiner Unit zuordne, die dann wiederum dort das gewünschte Event auslöst. Diese Lösung finde ich persönlich nicht so schön, habe aber bisher keine andere Möglichkeit gefunden, denn ich kann bei einer Komponente ja nicht so einfach vom Thread aus auf z.b Form1.IrgendeineProcdure zugreifen.

Weiteres Problem besteht darin, dass eine Fehlermeldung kommt, wenn in der Procedure, die der Benutzer in dem Programm dem Event zuweist, showmessage verwendet. Es kommt dann die Fehlermeldung "Leinwand/Bild erlaubt kein Zeichnen".

Daher wollte ich fragen ob ich das Auslösen eines Events in einer Komponente einfacher bewerkstelligen kann bzw. woher der Fehler kommt, damit ich ihn vermeiden kann.

Grüße
AirSpider

SirThornberry 17. Jun 2007 11:50

Re: Showmessage löst Fehler in Event-Procedure aus
 
du hast einfach das syncronisieren vergessen. Du darfst nicht einfach vom Thread aus auf visuelle Dinge zugreifen (ShowMessage etc.). Du musst den Thread zur Ausgabe mit dem Hauptthread (welcher die Fenster erzeugt hat) syncronisieren. Also TThread.Syncronize nutzen

AirSpider 17. Jun 2007 12:05

Re: Showmessage löst Fehler in Event-Procedure aus
 
Hallo!

Danke für deine Antwort.

Ich habe die Komponente testweise mal auf eine Form gelegt und das Event getestet. Und hier habe ich die showmessage eingetragen. Das verändern eines Label.Caption geht problemlos.
[Edit] Habe das Event mit dem Hauptthread synchronisiert. Nun geht showmessage! Vielen Dank SirThornberry, habe übersehen, dass ich das Event ja gar nicht wie die anderen Funktionen synchronisiert habe! :oops: Bleib nun eigentlich nur die Frage ob ich das Event einfacher auslösen kann... [\Edit]

Wie kann ich von einem Thread auf eine Procedure bzw Variable in einer Komponente (Klasse) zugreifen? Also der Thread wird von der Komponente erzeugt, liegt aber in einer anderen Unit. Bei einer Anwendung kann ich ja Form1 benutzen, aber bei einer Komponente gibt es ja sowas nicht...

Grüße
AirSpider


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz