![]() |
1400 Ungültiges Fensterhandle u. Leinwand/Bild erlaubt kein
Hi Leute,
ich bin gerade dabei eine Anwendung zu Schreiben, bei der einige Threads im Hintergund ablaufen. Die Threads scheinen aber nicht das Problem zu sein, weil die Anwendung die oben genannten Fehler früher nicht gebracht hat, obwohl die Threads auch da schon verwendet wurden. Das einzige was ich geändert habe, ist das wenn ich auf einem IdTcpServer eine Nachricht empfange dann in meiner GUI-Oberfläche einen MessageDlg anzeige, um dem User frage wie er auf diese Nachricht reagieren soll. Bei ersten Durchlauf klappt auch alles wunderbar, aber zum zweiten aufruf kommen die oben genannten Fehlermeldungen ?! Einen Auszug des Sourcecodes kann ich nicht posten, weil ich nicht weiß an welcher Stelle der Fehler genau auftritt ! Kann mir jemand weiterhelfen bzw. sagen in welcher Richtung ich den Fehler zu muss ? Gruß Data |
Probiers mal mit der API-Funktion MessageBox anstatt der VCL-Funktion MessageDlg...
|
Ich habe jetzt mal was anderes ausprobiert !
Ich habe in der Anwendung eine weitere Form erzeugt, wenn ich jetzt meine Anfrage über Indy bekomme zeige ich diese Form an. Fast das gleiche Verhalten wie bei der MessageBox. Beim ersten mal funktioniert als wunderbar. Beim zweiten Mal wird im Gegensatz zum MessageDlg die Form angezeigt, nur die Buttons auf der Form sind nicht sichtbar und diese modale Form läßt sich nicht über das "X" schliessen. dito shortcuts oder Hotkeys. Ich hab langsam keine Ahnung woran das liegt; Beim Suchen hier im Forum habe ich zu "Leinwand/Bild kein nicht zeichnen" zwar was gefunden, aber auch dort wurde keine Lösung gefunden bzw. nur über die Ursache spekuliert. Gruß Data |
Re: 1400 Ungültiges Fensterhandle u. Leinwand/Bild erlaubt k
Zitat:
|
Hi Luckie,
ich habe meinen IdTCPServer innerhalb einer Komponente eigenen Komponente diese hat verschiedene Notify-Events, wenn ich jetzt meine Nachricht im OnExecute des IdTCPServer erhalte, rufe ich innerhalb des OnExecute Ereignis der in notifyxz zugewiesene Procedure auf. Es geht bei der ganzen Geschichte um einen Anruf(VoiceOverIP), wenn jetzt eine Anrufanfrage kommt, möchte ich dem Benutzer die Möglichkeit geben den Anruf anzunehmen bzw. abzulehnen. Deshalb brauche ich einen modalen Dialog, wo der User "La" oder "Nein" drücken kann. Lange rede kurzer Sinn, der MessageDlg wird aus dem OnExecute-EReignis des IdTcpServer aufgerufen und meines Wissens wird die OnExecute-Methode vom TBaseThread(Indy) mit syncronize aufgerufen. Data |
Wer lesen kann ist klar im Vorteil :wall:
Mein Problem lag darin, das ich im OnExecute-Ereignis des IdTcpServer meine Procedure in der Main-Form aufgerufen habe, wo der MessageDlg bzw. die Form angezeigt wird. Ich habe mir schon gedacht das das syncronisiert aufgerufen werden muss, aber ich dachte das das automatisch geschiet da die OnExecute-Methode ja selber mit syncronize aufgrufen wird. Jetzt habe ich aber im AThread: TIdPeerThread den ich als Parameter im OnExecute Ereignis bekomme die Methode AThread.syncronize(...) gefunden :hello: Und siehe da es geht :mrgreen: Danke für eure Hilfe/Geduld, Data |
Zitat:
|
Hallo erstmal,
Ich hatte heute mit den selben Fehlermeldungen zu kämpfen. Die Ursachen sind mir auch klar. Allerdings brauche ich statt dem Dialog ein Formular, das ich im Thread Modal aufrufe. Rufe ich es mit Synchronize auf werden mir offensichtlich Programmteile blockiert die ich zu der Zeit dringend brauche. Gibt es eine alternative, Threadsichere Methode Formulare modal zu zeigen? Ich habe versucht das Fenster mit
Delphi-Quellcode:
Ich weiss ist nicht modal, allerdings gab es dabei den gleichen Effekt den DataCool schon beschrieben hat:
ShowWindow(form.handle,SW_SHOW);
Zitat:
|
Hi,
wozu benutzt Du den Dein Formular ? Was macht Deon Proggi ? Welche Prog-Teile die Du unbedingt brauchst werden blockiert ? Gruß Data |
Mein Prog übernimmt Messwerte von diversen Geräten (u.a. auch Benutzereingabe) und steuert irgendwelche Geräte an.
Geräte, Messwertübernahmen ... sind einstellbar und auf einem Schaubild "designbar". Diese Ansteuerung erfolgt auch automatisch per Script. Es können mehrere Scripts gleichzeitig ablaufen (dazu der Thread). Ein Script kann auch eine Meldung (in einem modalen Form) ausgeben, das während dem Ablauf erst weggeklickt werden muss. -- hier brauch ich zum ersten mal ein Formular im Thread. Das Script hat auch einen Befehl zum Messwerte einsammeln um sie an ein Protokoll weiterzugeben. Jetzt kann der Messwert z.B. von einer Benutzereingabe kommen. Also muss der Thread wieder ein Form "aufreissen". Das ist zwar nicht die ganze Funktion des Progs aber ich hoffe es zeigt das Problem. Blockiert wird das Form, dass im Hintergrund mit den angeschlossenen Geräten kommuniziert. D.h. es gehen keine Daten raus und auch keine rein. Blöd, wenn ich gerade Messwerte übernehmen will. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:40 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 by Thomas Breitkreuz