Bild Leinwand erlaubt keine Zeichen?
-
Der folgende Fehler tritt bei mir andauernd auf wenn ich mit Hilfe eines Threads eine TBitmap über den Bildschirm fliegen lasse.
http://jesusfreak777.je.funpic.de/fehler.JPG
Die TBitmap bewegt sich ne Weile und dann kommt diese Meldung.
Weiß jemand, woran das liegt und was "erlaubt keine Zeichen" bedeutet?
Danke für alle Antworten
DavidPS:

-
wasn mit dem thread:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-159954.html

-
Der Fehler kommt nur, wenn ich das Bild mit Hilfe eines Threads bewege!- d.h., dass in diesem Thread keine Antwort auf diese Frage für mich war

-
Na dann zeig mal n bissl Code...
-
Hallo
Wahrscheinlich liegt das Problem an der fehlenden aber notwendigen Synchronisation zwischen Thread und Anwendnung. Such hier im Foru mmal nach *synchron*.
bis bald
akari
-
Hi 7777,
akari hat recht mit syncronisieren.
Folgendes steht bei mir in der automatisch erzeugen Thread.cpp drin (BCB5)// Wichtig: Methoden und Eigenschaften von Objekten der VCL können nur in // in Methoden verwendet werden, die Synchronize aufrufen, z.B.: // // Synchronize(UpdateCaption); // // wobei UpdateCaption so aussehen könnte: // // void __fastcall Unit2::UpdateCaption() // { // Form1->Caption = "In Thread aktualisiert"; // } //---------------------------------------------------------------------------so synconisierst du deine Thread-Methode(Funktion) :::
1. Thread.h
protected: void __fastcall Execute(); //automatisch erstellt, und wird sofort nach Instanzierung ausgeführt void __fastcall syncro(); //deine Funktion!!!!2.Thrad.cpp
void __fastcall Twavestopthread::Execute() { //---- Hier den Thread-Code plazieren---- Synchronize(syncro); //deine Funktion!!! }//--------------------------------------------------------------------------- void __fastcall Twavestopthread::syncro() {//das Bild bewegen }//---------------------------------------------------------------------------Das ist alles
Grüsse
-
Es überrascht den Herren 777 vielleicht jetzt, dass ICH hier rein poste, denn es ist mein Klassenkamerad xD
Ich war auch auf der Suche nach einem C++ Forum, wo ich Hilfe bekommen würde, und der erste Thread war genau das Problem, was ich auch hatte, und dann sah ich, dass es mein Klassenkamerad ist, echt lustig ^^°Aber ich denke mal, ich werde das Problem "genauer" aussprechen können.
Ich habe mir vorgenommen, bevor ich anfange, Direct X zu programmieren, ein kleines Flugzeugspiel auf GDI basis zu basteln.
Ich habe ein TThread und eine TForm, die ich praktisch jetzt miteinander kombinieren muss. Alles klappt eigentlich prima, bis auf dieses genannte Problem.Ich habe ersteinmal ein Buffer (Graphics::TBitmap Objekt), in den ich die Grafiken alle rein male, bevor ich diesen Buffer dann in Form1 (so heißt meine TForm Variable) übertrage, wodurch der Bildschirm die Grafik ohne Geflimmer anzeigt.
Da ich das Problem nicht lösen konnte, hab ich eine Methode in Form1 geschrieben und alle Eigenschaften, bzw. weiteren relevanten Objekte wie Buffer in der Klasse Form1 geschrieben.Ich starte nun das Programm, und die Anzeige erfolgt tadellos bis....
.... ich entweder einen Knopf auf der Tastatur drücke ODER mit dem Mauszeige über das Programmfenster fahre.
Scheinbar wird dann das Handle vom Buffer gelöscht und das Bild bleibt hängen, wobei der Thread dennoch weiter läuft. Möglichkeit 1 ist, man deklariert nach JEDEM durchlauf des Threads den ganzen Buffer neu, was das Programm zum einen SEHR langsam macht und zum anderen:
"Bild Leinwand erlaubt keine Zeichen!" <--- Das ausgibt, sobald man mit Tastatur oder Maus was aktives macht.Ich kenne nichtmal so wirklich die Ursache des Problems, nur, dass es eventuell der Handle vom Buffer ist, der gelöscht wird, die Variable ist noch da... wie bekomm ich das Problem weg?
Hier ist ein Link von der gesamten Soße:
http://home.arcor.de/bigdeak/TCall678.rar
ps: Das mit dem Synchronize hab ich nicht hinbekommen
- Vielleicht kann jemand von euch das einbauen und mir dann quelltext geben osoedit: schon gut, es funktioniert XDXDXDXD - VIELEN DANK dlonra !!! ^^
-
Jojo- es geht bei mir auch
