AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi 1400 Ungültiges Fensterhandle u. Leinwand/Bild erlaubt kein
Thema durchsuchen
Ansicht
Themen-Optionen

1400 Ungültiges Fensterhandle u. Leinwand/Bild erlaubt kein

Ein Thema von DataCool · begonnen am 12. Jun 2003 · letzter Beitrag vom 12. Jun 2003
Antwort Antwort
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#1

1400 Ungültiges Fensterhandle u. Leinwand/Bild erlaubt kein

  Alt 12. Jun 2003, 13:37
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
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#2
  Alt 12. Jun 2003, 13:40
Probiers mal mit der API-Funktion MessageBox anstatt der VCL-Funktion MessageDlg...
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#3
  Alt 12. Jun 2003, 16:54
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: 1400 Ungültiges Fensterhandle u. Leinwand/Bild erlaubt k

  Alt 12. Jun 2003, 17:03
Zitat von DataCool:
dann in meiner GUI-Oberfläche einen MessageDlg anzeige, um dem User frage wie er auf diese Nachricht reagieren soll.
Ich hoffe, das machst du in der Synchronize-methode von TThread. "Canvas erlaubt kein zeichen" deutet für mich darauf hin, dass die Ressourcen von einem anderen Thread gerade "gelockt" werden und dann kannst du nicht darauf zugreifen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#5
  Alt 12. Jun 2003, 17:19
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
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#6
  Alt 12. Jun 2003, 18:18
Wer lesen kann ist klar im Vorteil

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

Und siehe da es geht

Danke für eure Hilfe/Geduld,

Data
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7
  Alt 12. Jun 2003, 19:12
Zitat von DataCool:
aber ich dachte das das automatisch geschiet da die OnExecute-Methode ja selber mit syncronize aufgrufen wird.
Wo wird OnExecute mit Synchonize aufgerufen? Das wäre ja fatal für einen Server. Wenn der eine Client ihm eine riesige Datei schickt, müssen alle anderen Clients eine Ruhepause einlegen. Aus diesem Grund wird OnExecute nicht mit dem Hauptthread synchronisiert.
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#8
  Alt 12. Jun 2003, 20:55
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

ShowWindow(form.handle,SW_SHOW); Ich weiss ist nicht modal, allerdings gab es dabei den gleichen Effekt den DataCool schon beschrieben hat:

Zitat:
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
mfg Daniel
Daniel
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#9
  Alt 12. Jun 2003, 21:20
Hi,

wozu benutzt Du den Dein Formular ?
Was macht Deon Proggi ?

Welche Prog-Teile die Du unbedingt brauchst werden blockiert ?

Gruß Data
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#10
  Alt 12. Jun 2003, 21:36
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.
Daniel
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:00 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