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
    David

    PS: 🙂 🙂 🙂





  • 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 oso

    edit: schon gut, es funktioniert XDXDXDXD - VIELEN DANK dlonra !!! ^^



  • Jojo- es geht bei mir auch 🙂


Anmelden zum Antworten