Clicked() ohne waitinput

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Clicked() ohne waitinput

      Ich habe ein Programm, das etwas tut. Das soll man durch Druck auf einen "Pause"-Button unterbrechen können. Soweit so gut, bei Druck auf Pause, abgefragt mit Clicked() wird das Programm unterbrochen und eine einfache Funktion wird aufgerufen, die in einer waitinput-Schleife wartet, dass der Benutzer noch einmal Pause anklickt und das Programm weitergehen soll. So weit so gut, leider wird beim Rücksprung ins eigentliche Programm immer wieder "Pause" angeklickt. Obwohl das der Benutzer nicht tut. Es ist so, als ob die Message nicht gelöscht wird.
      Kann man das irgendwie umgehen? So dass das Clicked() erst wieder reagiert, wenn wirklich geklickt wird. Oder gibt es gar eine bessere Möglichkeit das zu bewerkstelligen?
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/52TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG
      Samsung Galaxy S6 edge pearlwhite mit 128GB und AOSP Extended (Android 8.1, 03/2018)
      http://jacdelad.bplaced.net
    • Moin...

      Quellcode

      1. DEF GetDlgCtrlID(1) !"USER32","GetDlgCtrlID"
      2. DEF ButtonClicked(1) GetDlgCtrlID(&(1)) = -%MENUITEM
      3. Declare Button%, x&
      4. CLS
      5. Button% = Create("Button", %HWND, "Click", 30 ,30, 300, 30)
      6. While 1
      7. Sleep 10
      8. If ButtonClicked(Button%)
      9. Beep
      10. LOCATE 0,0
      11. Print str$(X&)
      12. x& = X& +1
      13. SetMenuitem 0
      14. endif
      15. EndWhile
      Alles anzeigen
      ________________________________________________________

      PPFScanner PPFS Android MisterXMail@web.de
      Mfg AHT

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von AHT ()

    • Oh, danke. Das probiere ich morgen mal aus. Muss leider gleich zur Arbeit.
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/52TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG
      Samsung Galaxy S6 edge pearlwhite mit 128GB und AOSP Extended (Android 8.1, 03/2018)
      http://jacdelad.bplaced.net
    • Nein, das funktioniert leider nicht. Das Verhalten ist identisch mit Clicked().


      Quellcode

      1. DEF GetDlgCtrlID(1) !"USER32","GetDlgCtrlID"
      2. DEF ButtonClicked(1) GetDlgCtrlID(&(1)) = -%MENUITEM
      3. proc pause
      4. declare ende%
      5. SetMenuItem 0
      6. settext btn&,"Weiter"
      7. whilenot ende%
      8. waitinput
      9. if Clicked(btn&)
      10. Inc ende%
      11. endif
      12. endwhile
      13. SetMenuItem 0
      14. SetText btn&,"Pause"
      15. endproc
      16. cls
      17. btn&=Create("Button",%hWnd,"Pause",8,8,120,32)
      18. while 1
      19. 'Tu etwas
      20. case ButtonClicked(btn&):Pause
      21. 'Tu noch mehr
      22. endwhile
      Alles anzeigen
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/52TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG
      Samsung Galaxy S6 edge pearlwhite mit 128GB und AOSP Extended (Android 8.1, 03/2018)
      http://jacdelad.bplaced.net
    • Möööp. XProfan X4.
      Irgendwie müssen nach de Waitinput-Schleife die anliegenden Messages gelöscht werden. Gibt's da so 'ne Art Flush-Befehl?
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/52TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG
      Samsung Galaxy S6 edge pearlwhite mit 128GB und AOSP Extended (Android 8.1, 03/2018)
      http://jacdelad.bplaced.net
    • H.Brill schrieb:

      Hast du evtl. ein Beispielcode, mit dem man das ungewöhnliche
      Verhalten nachvollziehen kann ?

      Normalerweise sollte Clicked() nur nach jedem Mausklick des Users
      reagieren und nicht selbständig, unabhängig von Mausklicks.
      Leider nicht mehr als den oben. Mein Code ist recht komplex. Es geht dort um die Übertragung von Dateien per FTP. Der Vorgang soll pausiert werden können, um ihn dann entweder fortzusetzen, abzubrechen oder den aktuellen Fortschritt für später zu speichern.

      Eigentlich stimmt der Code ja auch so. Clicked() ermittelt den zuletzt gedrückten Button, in dem Fall der Pausen-Button. Das wird sicher nicht zurückgesetzt, wenn man SetMenuItem benutzt.
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/52TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG
      Samsung Galaxy S6 edge pearlwhite mit 128GB und AOSP Extended (Android 8.1, 03/2018)
      http://jacdelad.bplaced.net
    • AHT schrieb:

      Statt Clicked ButtonClicked verwenden - dann kannst du mit Setmenuitem 0 den Klick zurücksetzen.
      Das klappt wunderbar - auch in dem Code, den du gepostet hast. Wenn es dir um Usermessages geht, die zusätzlich zurückgesetzt werden müssen, musst du da noch etwas mehr tricksen.
      Ich habe ein paar Usermessages definiert, aber nur 563. 16 wird vor Beginn der Operation per -16 zurückgesetzt...

      Vielleicht kann Roland uns helfen. Ein Befehl, der %Key, Clicked(), %LastMessage etc. zurücksetzt. Momentan hab ich es so gelöst, dass der Button durch einen anderen Button an gleicher Stelle ersetzt wird. Nicht übermäßig schön, aber funktioniert.
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/52TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG
      Samsung Galaxy S6 edge pearlwhite mit 128GB und AOSP Extended (Android 8.1, 03/2018)
      http://jacdelad.bplaced.net
    • Hier nochmal Code zum Beweis, dass das geht:

      Quellcode

      1. Declare Button%, x&, y&, Ende&
      2. DEF GetDlgCtrlID(1) !"USER32","GetDlgCtrlID"
      3. DEF ButtonClicked(1) GetDlgCtrlID(&(1)) = -%MENUITEM
      4. CLS
      5. Button% = Create("Button", %HWND, "Pause", 30 ,30, 300, 30)
      6. Proc Pause
      7. SetText Button%, "Weiter"
      8. While Ende& = 0
      9. y& = y& + 1
      10. LOCATE 1, 1
      11. Drawtext 0, 130, "Zahl Nummer 2: " + str$(y&) + " "
      12. If ButtonClicked(Button%)
      13. Ende& = 1
      14. SetMenuitem 0
      15. SetText Button%, "Pause"
      16. endif
      17. Sleep 100
      18. EndWhile
      19. endproc
      20. While 1
      21. Ende& = 0
      22. Sleep 100
      23. X& = x& + 1
      24. Drawtext 0, 0, "Zahl Nummer 1: " + str$(X&) + " "
      25. If ButtonClicked(Button%)
      26. LOCATE 0, 0
      27. SetMenuitem 0
      28. Pause
      29. endif
      30. EndWhile
      Alles anzeigen
      ________________________________________________________

      PPFScanner PPFS Android MisterXMail@web.de
      Mfg AHT

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von AHT ()

    • Der Testcode tut was er soll, aber im fertigen Produkt klappt's nicht. Dort werden mehrere Dateien per FTP übertragen. Man kann das halt abbrechen. Mehr ist da nicht dabei...
      Leider tun sich da noch andere Probleme auf: Wenn ich die Übertragung einer Datei unterbreche schließe ich das Handle normal mit InternetCloseHandle(), aber danach kann ich keine FTP-Operationen mehr ausführen, so als wäre das Ding blockiert. Ich muss dort erstmal eine genaue Fehlerbeschreibung abfragen...
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/52TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG
      Samsung Galaxy S6 edge pearlwhite mit 128GB und AOSP Extended (Android 8.1, 03/2018)
      http://jacdelad.bplaced.net
    • H.Brill schrieb:

      Vielleicht blockiert ja was bei dem FTP-Zeug.
      Wäre vielleicht ein Überlegung wert, das in einen
      Prozess zu verlegen.

      Mit der Containerfunktionen Process(Kill, Suspend, Resume)
      könnte man das doch schön steuern und das Hauptprogramm
      ist entlastet.
      Hab ich auch schon überlegt. Es wäre aber sehr unpraktisch den Übertragungsprozess in einen eigenen Prozess auszugliedern. Wenn ich ihn abbreche habe ich weniger Kontrolle was genau übertagen wurde. da müsste viel Kommunikation stattfinden. Außerdem dauert es immer 3 Sekunden bis eine FTP-Verbindung aufgebaut ist.
      Mit den 2 Buttons klappts ganz gut, ist nur nicht ganz sauber.
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/52TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG
      Samsung Galaxy S6 edge pearlwhite mit 128GB und AOSP Extended (Android 8.1, 03/2018)
      http://jacdelad.bplaced.net
    • Ich glaube, im Purebasic Forum war auch mal so eine Diskussion.
      Der Autor von PB hatte dann die FileDownloads und Uploads
      threadsafe gemacht.

      PS: Die Kommunikation zwischen Prozess und Hauptprogramm
      ist ja da. Sei es über FileMapping oder aber auch einfach
      mit SendMessage, wenn man das Hauptprogrammfenster
      als Parameter mitgibt und eine UserMessage definiert.
    • H.Brill schrieb:

      Ich glaube, im Purebasic Forum war auch mal so eine Diskussion.
      Der Autor von PB hatte dann die FileDownloads und Uploads
      threadsafe gemacht.

      PS: Die Kommunikation zwischen Prozess und Hauptprogramm
      ist ja da. Sei es über FileMapping oder aber auch einfach
      mit SendMessage, wenn man das Hauptprogrammfenster
      als Parameter mitgibt und eine UserMessage definiert.
      Aber die Kommunikation würde ich gern vermeiden.
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/52TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG
      Samsung Galaxy S6 edge pearlwhite mit 128GB und AOSP Extended (Android 8.1, 03/2018)
      http://jacdelad.bplaced.net