for überholt while



  • ´n Abend,

    Ich habe gerade eine merkwürdige Begegnung mit Schleifenüberholung gemacht.

    Innerhalb einer Funktion läuft erst eine while-Schleife in der ´ne Menge Koordinaten zusammengetragen werden.

    Dann folgt eine for-Schleife die mir die Koordinaten auf ein Bitmap malt.

    Jetzt kommt der Witz(jedenfalls für mich)

    Wenn ich zwischen die beiden Schleifen eine ShowMessage packe wird hinterher artig gemalt.
    Wenn aber keine Unterbrechung durch die ShowMessage stattfindet wird gar nichts gemalt. Mit anderen Worten wird die Funktion nicht eines nach dem anderen durchgearbeitet.
    Mir ist so was noch nie untergekommen.

    Gibts Tips dazu.

    Danke und guten Rutsch



  • Die wird nicht überholt, sondern die Nachricht, dass Windows neu zu zeichnen hat, wird verschoben.

    ProcessMessages hilft warscheinlich.



  • Na so wie ich das in der BBC-Hilfe verstanden habe wird mit
    Application->ProcessMessages(); während einer Verarbeitung auf Mausaktionen reagiert. Habs gerade ausprobiert

    Application->ProcessMessages();
    bit->Canvas->LineTo(pos.x, pos.y);
    

    Wird auch nicht gemacht. Aber ich denke daß dein Ansatz richtig ist



  • Erst dafür sorgen dass eine Nachricht prozessiert werden kann, dann ProcessMessage.

    Sprich: Umgedreht. :p



  • Also wenn Du meinst

    bit->Canvas->LineTo(pos.x, pos.y);
    Application->ProcessMessages();
    

    sorum, das klappt so auch nicht.

    Ich habe das Zeichnen einfach mal in eine andere Funktion verlegt. Das geht zwar, aber das Ding muß ich auch so hinkriegen.



  • Ruf Invalidate auf für die Bitmap.



  • Probier's mal damit:

    bit->Canvas->Refresh();
    

    - Windoof


Anmelden zum Antworten