Prog steht bei HandleMessage



  • Soweit, sogut - irgendwie hatte ich das auch schon irgendwo gelesen... Danke.

    Wobei ich immernoch nicht weiß, was ich dagegen tun soll!?! 😕

    (2) Ist es möglich aus diesem Wartemodus herauszukommen? Wie wäre es mit einer selbst generierten Windows-Message, um wenigstens eine abzuarbeiten!?! Oder springt das Prog danach wieder zu HandleMessage?

    MfG



  • Hallo

    Mir ist immer noch nicht klar was dein Problem ist. Dein Programm bleibt nicht stehen sondern wartet auf weitere Aktionen. Dann passiert auch was. Manuelles Auslösen von Messages ist nicht nötig, die werden schon generiert wenn zum Beispiel die Eigenschaft Text eines Labels geändert wird.

    bis bald
    akari



  • Okay, ich versuchs anders zu umschreiben:

    ich schrieb:

    (1) Was erlaubt sich dieses unverschämte Prog dort einfach stehen zu bleiben?

    Damit meine ich, es sind keine Benutzeraktionen mehr möglich! Kein Button lässt sich drücken etc. ohne dass ich eine "keine Rückmeldung"-Meldung bekomme! Und das kann ja nicht normal sein, oder? Ich bin zwar Anfänger, aber nicht unkreativ - Werd schon versucht haben nen Button zu drücken etc.

    Es muss was mit dem OnDataAvailable-Event zu tun haben... In der Hilfe steht dazu allerdings nichts weiter. Fakt ist nach neuesten Erkenntnissen meinerseits:

    Wenn ich das Event nach dem Empfang des ersten Zeichens in der Behandlungsroutine deaktiviere, reagiert das Prog danach normal auf Benutzereingaben!

    ...->OnDataAvailable= 0;
    

    Nur leider kann ich ja dann keine Daten mehr automatisch empfangen. Wüßte auch nicht, wie ich den Event nach Verlassen der DataAvailable-Routine wieder aktivieren soll bzw. wo. Kann ja auch nicht Sinn der Sache sein! Bin ratlos!

    MfG





  • Danke schonmal an alle. Und speziell an merker: Vor dem Lesen des Tutorial war mir nicht bewußt, das ich es evtl. mit einem Problem zu tun habe, das mit Threads gelöst wird. Aber scheinbar sind Threads ja ein Schlüssel zur erfolgreichen Windows-Programmierung.

    Ich arbeite grad das Thread-Tutorial durch und hab jetzt folgendes Problem:

    Beim Kompilieren meines Prog's bekomme ich folgende Fehlermeldungen:

    [C++ Fehler] Unit1E_UNIGATEClient.cpp(281): E2303 Typname erwartet
    [C++ Fehler] Unit1E_UNIGATEClient.cpp(281): E2379 In Anweisung fehlt ;

    für folgende Codezeile aus dem Tutorial:

    new TRxDThread(false);
    

    Was habe ich evtl. falsch gemacht?

    MfG



  • Hallo

    Dem Compiler ist der Typ TRxDThread an dieser Stelle nicht bekannt. vermutlich fehlt ein include.

    bis bald
    akari



  • Ja akari,

    das hat gefehlt! in beiden *.cpp's. Danke. Ich dachte das wird automatisch eingefügt und habe deswegen nicht extra nachgeschaut!

    Nun gibt es eine neue Fehlermeldung:

    [C++ Fehler] Unit1_RxDThread.cpp(35): E2285 Keine Übereinstimmung für 'TThread::Synchronize(void)' gefunden

    in Zeile:

    Synchronize(GuiElements);
    

    der Routine:

    void __fastcall TRxDThread::Execute()
    

    Laut Hilfe übergebe ich wohl ein Argument falsch!? Habe mich jedoch an das Tutorial gehalten und Alles nochmal durchgesehen... Wo könnte ich suchen?

    MfG



  • In diesem Zusammenhang: Im BCB-tutorial zu Thread's steht was von Display(); was aber garnicht in den Quellcodebeispielen steht... Was hat das zu bedeuten? Fehlt da was im Quellcode? 😕

    Edit: Ich kann nicht mehr... Habe mir alles 5mal angeschaut, sogar die Quellcodebeispiele als zip gezogen, nochmal gelesen, nochmal Alles durchgeschaut, verglichen - mein Thread im Prog wird genauso erzeugt wie im Beispiel... 😞

    Aber die Fehlermeldung bleibt!

    Kann bitte nochmal jemand den Stein in meinem Kopf mit frischen Ideen ins Rollen bringen? Wenn noch Info's benötigt werden - immer her mit den Anforderungen!

    MfG



  • Hallo nochmal,

    also abschließend kann ich nur sagen:

    //---------------------------------------------------------------------------
    
    //   Wichtig: Objekt-Methoden und -Eigenschaften in der VCL dürfen nur
    //   in einer Methode nur mir Synchronize aufgerufen werden, z.B.:
    //
    //      Synchronize(&UpdateCaption);
    //
    //   wobei UpdateCaption folgendermaßen aussehen könnte:
    //
    //      void __fastcall TRxDThread::UpdateCaption()
    //      {
    //        Form1->Caption = "Aktualisiert in einem Thread";
    //      }
    //---------------------------------------------------------------------------
    

    Das ist der Kommentar am Anfang einer *.cpp eines neu erstellten Thread-Objektes...

    Synchronize([b]&[/b]GuiElements);
    

    Da lag der Hase im Pfeffer, beim &! Siehe auch Shogun's Beitrag "Synchronize() - SOS"

    Wir fassen zusammen: Lesen ist ein elementarer Bestandteil der Programmierung - Lesen!, nicht nur raufschauen... 😉

    MfG



  • Welche Version des BCB verwendest Du? Bei mir (BCB6) fehlt der Operator in dem generierten Beispiel.



  • Hallo,

    siehe Signatur. Oder brauchst Du weitergehende Info's?

    MfG



  • Hallo

    Die Diskussion um das & geht hier weiter.

    bis bald
    akari



  • Einverstanden! 🙂

    Das umherspringen zwischen den Themen ist wirklich belastend.

    Ich habe ja auch schon geschrieben:

    ...abschließend kann ich nur sagen:

    und:

    ...Siehe auch Shogun's Beitrag "Synchronize() - SOS"

    MfG

    Edit: Kann ich ein von mir eröffnetes Thema selbst schließen? Das wäre jetzt angebracht.


Anmelden zum Antworten