wxWidgets: Event solange Button oder Maus gedrückt ist



  • Hallo,

    ich kenne mich mit wxWidgets noch nicht gut aus und benötige eure Hilfe.

    Ich habe einen wxButton und nun möchte ich, dass etwas solange ausgeführt wird, wie ich den Button gedrückt halte.

    Derzeit habe ich für wxEVT_COMMAND_BUTTON_CLICKED einen Event-Handler, aber der wird ja nur einmalig ausgeführt, sobald der Button losgelassen ist.

    z. B. soll der Benutzer ein Label mit einer Zahl (schrittweise) von 0 auf 10 erhöhen, ohne dass er 10 mal den Button drücken muss. Er soll ihn nur kurz halten.

    Hoffe ihr könnt mir helfen.

    Vielen Dank


  • Mod

    Schon mal einen Blick auf wxSpinCtrl geworfen?



  • Nein, werd ich aber jetzt machen 🙂

    Vielen Dank für die Antwort.



  • das ist leider nicht das, was ich brauche.

    eine wxSpinCtl ist scheinbar nur ein textfeld und zwei pfeile, mit denen ich den Inhalt / die Zahl des Textfeldes inkrementieren / dekrementieren kann.

    ich brauche einen Button, den ich anklicken kann (wobei ich die Maustaste gedrückt halte), so dass dann z. B. jede Sekunde eine Zahl eines Label inkrementiert wird. Die Inkrementierung stoppt erst dann, wenn ich die Maustaste loslasse und der Button nicht mehr "gedrückt" ist.


  • Mod

    Hm, ich kenne keinen button up button down Event in wx, du müsstest dir das evtl. selber zusammen Basteln. Es gibt ja für die Maustasten diese Events.
    Evtl. reicht es schon, eine Klasse von wxButton abzuleiten.



  • ich versuch das jetzt mal mit einem wxToggleButton.



  • Hallöle,

    ich brauche einen Button, den ich anklicken kann (wobei ich die Maustaste gedrückt halte), so dass dann z. B. jede Sekunde eine Zahl eines Label inkrementiert wird. Die Inkrementierung stoppt erst dann, wenn ich die Maustaste loslasse und der Button nicht mehr "gedrückt" ist.

    Ja das müsste ja eigentlich gut möglich sein, oder?

    Musst halt etwas improvisieren:

    1. Das Event prüfen (EVT_COMMAND_BUTTON_CLICKED)
    2. In das erstellte Handle dann eine Schleife, die bei jedem Durchlauf den Mausstatus abfragt...sollte sie noch gedrückt sein, dann wird inkrementiert.

    So in etwa sollte das aussehen.
    Grüße
    Gapa



  • Hallöle,

    ich brauche einen Button, den ich anklicken kann (wobei ich die Maustaste gedrückt halte), so dass dann z. B. jede Sekunde eine Zahl eines Label inkrementiert wird. Die Inkrementierung stoppt erst dann, wenn ich die Maustaste loslasse und der Button nicht mehr "gedrückt" ist.

    Ja das müsste ja eigentlich gut möglich sein, oder?

    Musst halt etwas improvisieren:

    1. Das Event prüfen (EVT_COMMAND_BUTTON_CLICKED)
    2. In das erstellte Handle dann eine Schleife, die bei jedem Durchlauf den Mausstatus abfragt...sollte sie noch gedrückt sein, dann wird inkrementiert.

    So in etwa sollte das aussehen.
    Grüße
    Gapa



  • Hallo!

    Ich habe zu demselben Problem ein bisschen im Netz gesucht und folgenden Thread gefunden:

    http://wxforum.shadonet.com/viewtopic.php?t=24384&highlight=mousedown

    Im vorletzten Beitrag scheint mir eine recht elegante Lösung vorgestellt worden zu sein. Wenn ich aber versuche, die Funktion zu übernehmen, bekomme ich vom VS2008 diese Fehlermeldung:

    error C2440: 'static_cast': 'void (__thiscall MainFrame::* )(void)' kann nicht in 'wxMouseEventFunction' konvertiert werden
    Umwandlung von der Basis in die Ableitung erfordert 'dynamic_cast' oder 'static_cast'

    Kann man da bedenkenlos einen typecast machen? Oder hab ich etwas falsch gemacht?

    Grüße,
    GoldenAge


Anmelden zum Antworten