![]() |
Delphi-Version: 5
Problem mit TImage
Hallo,
habe ein komisches Problem... Es geht um eine seit Jahren funktionierende Anwendung. Diese hate eine GUI mir einem TabSheet und mehreren Pages. Auf den Pages sind munter Trackbars, Buttons und Images verteilt um Geräteparameter zu setzen. Über eine Buttonleiste wird zwischen den Geräten umgeschaltet. Beim Umschalten werden in einer Prozedur alle aktuellen Fader/Checkbox/Edit´s usw. in ein Array of Record gespeichert und dann mit der neuen Geräteadresse die Werte wiedergeholt und Fader usw. gesetzt. Unter anderem wird auch nach Daten aus dem Record auf 2 Images (auf verschiedenen Pages )mit einer Kurve gezeichnet. Vorgehensweise ist immer die selbe. Wird ein Geräteparameter geändert wird "Data_to_Record " aufgerufen. Wird ein anderes Gerät gewählt wird "Record_to_Data" aufgerufen. Nun kam jemand auf die Idee man könnte die Änderungen doch auch per Smartphone machen. Die Daten kommen per UDP rein, sind laut Debugging auch alle richtig und werden in den Record geschrieben. Klappt alles wunnebar mit einer Ausnahme: Ist die Page mit dem zweitem Image aktiv und es wird die Routine aufgerufen die dieses Image mit den neuen Daten zeichnet wird das Image weiss und ist quasi "weg". Ändere ich die Daten wärend eine andere Page aktiv ist und schalte dann auf die richtige Page wird alles korrekt dargestellt. Daten sind also richtig angekommen. Mache ich den Aktualisierungsaufruf nicht in der Routine sondern später durch hin/zurückschalten auf ein anderes Gerät gehts auch. Nach dem das Image weiss ist ist es "weg" . Einfach nicht mehr erreichbar. Ein zussätzlicher Button der einfach nur das Image schwarz füllt hat dann keine Funktion mehr. Auch alle anderen Funktionen die das Image einst veränderten sind ohne Funktion. Es bleibt weiss bis zum Neustart. Der Code ist sehr umfangreich. Aber im Grunde werden nur die Daten nun aus anderer Quelle gesetzt und der ewig funktionierende Aktualisierungsaufruf geht gegen den Baum. System ist Win 10 / XE8 Danke und Gruss Calli |
AW: Problem mit TImage
Läuft die Kommunikation über UDP evtl. in einem eigenen Thread?
|
AW: Problem mit TImage
Hi,
UDP Server ist auf dem gleichem Form, Procedure ServerUDPRead in der gleichen Unit. Gruss Calli |
AW: Problem mit TImage
Zitat:
Zitat:
Du darfst auf die Controls nur im MainThread zugreifen. Also benötigst du minimum eine
Delphi-Quellcode:
oder
TThread.Synchronize
Delphi-Quellcode:
TThread.Queue
|
AW: Problem mit TImage
Ups..
verstehe ich nicht aber danke für die Antwort. Kannst du mir das bitte etwas näher erläutern ? Unter einer Syncronisation kann ich mir ja etwas vorstellen aber wie mache ich das und wo ? Sind ja wohl nicht einfach nur die Aufrufe..oder ? Danke und Gruss Calli. |
AW: Problem mit TImage
|
AW: Problem mit TImage
Da reichts bei mir dann wohl nicht... :-(
Auc das was ich an Code-Beispielen ergoogelt hab leuchtet mir nicht ein. Hab wie gesagt die Server-Komponente einfach aufs Form gepackt und die Funktion OnUDPRead benutzt.. Aus dem Quelltext:
Delphi-Quellcode:
Der Rest spielt sich alles unter "TForm1.xxx" ab.
procedure TForm1.ServerUDPRead(AThread: TIdUDPListenerThread;
const AData: TIdBytes; ABinding: TIdSocketHandle); var i:Integer; Buffer:TIDBytes; Settings:TMySettings; begin .... end; Gruss Calli ( der nun mal weiterwühlt.. ) |
AW: Problem mit TImage
Ein simples Beispiel wäre z.B. das hier:
Delphi-Quellcode:
procedure TForm1.ServerUDPRead(AThread: TIdUDPListenerThread;
const AData: TIdBytes; ABinding: TIdSocketHandle); var i:Integer; Buffer:TIDBytes; Settings:TMySettings; begin TThread.Synchronize( nil, procedure begin Edit1.Text := Length( AData ); end ); end; |
AW: Problem mit TImage
Brmpf...
habs nur abgeändert auf
Delphi-Quellcode:
und vor dem i:=Length... nen Breakpoint gesetzt.
begin
TThread.Synchronize( nil, procedure begin i := Length( AData ); end ); end; Send ich nun was per UDP MÜSSTE er da doch anhalten...tut er aber nicht... EDIT: Bei der Serverkomponente ist Threaded Event:=true; Gruss Calli |
AW: Problem mit TImage
Kurze Zwischenfrage zum Verständnis: Wieso ist die VCL-Ereignisbehandlungsroutine der UDP-Komponente als eigener Thread zu bewerten? Das klingt in meinen Ohren falsch.
Edith sah eben, es geht um Indy... carry on. Schön ist es dennoch nicht. Sherlock |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz