Bitte Warten ?



  • heiho

    frage

    ich hab hier vorgaenge in der schleife - wenn es etwas laenger dauert waere es praktisch wenn der user eine meldung bekommt sowas wie "Bitte warten..." aber die schleife sollte waerend es {einmalig} gezeigt wird nicht unterbrochen werden
    sowas wie

    klick auf button - meldung bitte warten wird angezeigt solange die schleife laeuft

    jemand ne idee wie man sowas bewerkstelligt ?



  • Die Abarbeitung in einen Thread verlagern, der dann ganz am ende eine WM_APP-Nachricht schickt und Du im "Hauptfenster" somit weisst wann der Thread fertig ist...


  • Administrator

    Ist aber nicht der einzige Weg. Über Thread kann man es sich einrichten, dass die Suche läuft und der User trotzdem was anderes tun kann. Du kannst es aber auch ohne Threads lösen, zwar nicht ganz so schön, aber geht durchaus auch. Du erstellst dir einen Bitte Warten Dialog, welche kein OK und kein Cancel Button hat. Nimmst auch das System-Menu weg. In der eigenen Klasse, überschreibst du die OnOk und OnCancel Methoden. Du nimmst den Basisaufruf der Methoden weg.

    Bevor nun die Berechnung startet, erstellst du deinen Dialog per Create. Führst dann deine Rechnung durch und zerstörst den Dialog am Ende wieder, durch das senden der WM_CLOSE Nachricht an das Fenster. Ist eben nicht so ganz sauber, da der User während der Berechnung, keine Aktivitäten am Programm vornehmen kann und es sieht dann irgendwie so aus, als wäre das Programm abgestürzt. Dafür ist es nicht so komplex und mit einfachen Mitteln zu lösen, während Threads schon ein grosser nächster Schritt sind 😉

    Grüssli



  • Wie wäre es, einfach die Sanduhr zu zeigen?
    Ist ja auch sowas wie "bitte warten".

    Einfach an den Anfang der Funktion, die so lange dauert, diese Zeile:

    CWaitCursor csr;
    

    fertig 😉



  • Dravere schrieb:

    Bevor nun die Berechnung startet, erstellst du deinen Dialog per Create. Führst dann deine Rechnung durch und zerstörst den Dialog am Ende wieder,

    Verstehe ich jetzt nicht so ganz... für was soll denn der Ok/Cancel button sein, wenn man ihn nicht drücken kann? Auch geht kein Minimieren/Neuzeichnen des Fensters...


  • Mod

    Nur am Rande:

    Dravere schrieb:

    Bevor nun die Berechnung startet, erstellst du deinen Dialog per Create. Führst dann deine Rechnung durch und zerstörst den Dialog am Ende wieder, durch das senden der WM_CLOSE Nachricht an das Fenster.

    Dialoge und Fenster sollte man mit DestroyWindow entsorgen. Andernfalls kan es Dir passieren, dass Du WM_CLOSE sendest, das Fenster dies aber gefliessentlich ignoriert.


  • Administrator

    Jochen Kalmbach schrieb:

    Dravere schrieb:

    Bevor nun die Berechnung startet, erstellst du deinen Dialog per Create. Führst dann deine Rechnung durch und zerstörst den Dialog am Ende wieder,

    Verstehe ich jetzt nicht so ganz... für was soll denn der Ok/Cancel button sein, wenn man ihn nicht drücken kann? Auch geht kein Minimieren/Neuzeichnen des Fensters...

    Ich habe gesagt, KEIN Ok/Cancel Button erstellen. Und jo das minimieren/Neuzeichnen/Verschieben usw. geht alles nicht. Es ist nicht so eine elegante Lösung, welche ich heutzutage gar nicht mehr machen würde, aber wer sich noch nicht zu den Threads wagt, ist das eine alternative. Oder die von Estartu ^^
    Du bekommst mit meiner Lösung einfach einen kleinen Dialog, wo drauf steht, "Bitte Warten ..." und das ist genau das, wonach MrEvil gefragt hat 😉

    @Martin Richter
    Ein Fenster kann die Nachricht irgnorieren? Und wie, bzw. wieso? Wenn der User die Nachricht abfängt und die Basis nicht aufruft, ok, aber ansonsten? Und in diesem Fall würde man sie ja nicht selber abfangen, sondern alles der Basis überlassen.

    Grüssli



  • hehe, bevor esartu es sagen konnte hatte ich es schon gemacht

    ich habs einfach per sanduhr geloest - reicht aus {=

    das dialog erstellen one Ok und Cancel ist auch ne idee - der user darf waerend das passiert eh nicht an den dialog weiterarbeiten
    nur ich weiss nicht, wenn ich kein thread erstelle und ein dialog zeige - arbeitet das programm trotzdem weiter solange das dialog gezeigt wird ?
    oder muss es sihc erst schliessen


Anmelden zum Antworten