Gadget-Events: Button soeben gedrückt?

Anfängerfragen zum Programmieren mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Gadget-Events: Button soeben gedrückt?

Beitrag von Kaeru Gaman »

hideeho!

Wenn ich für ein Buttongadget das Gadgetevent normal abfrage,
bekomme ich es erst, wenn der Button wieder losgelassen wird.

ich hätte gern das ereignis "life", also, während der button gedrückt ist.

geht das irgendwie fix und einfach?

...da werd ich wohl API brauchen, hm?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Lass doch mal die Eventnummer, die (Wait)WindowEvent() ausspuckt mal anzeigen.

Da müsste man doch ein extra Event beim Button klicken sehen.
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

gss.. das ich da nicht selber drauf gekommen bin...

habs ausprobiert, aber muss irgendwo ein käfer sein, is wohl zu spät jetzt...

ich bekommm grad ständig als (fast) jedes zweite event ne NULL...
mit dem resultat, das das aktuelle immer NULL ist..
das kann irgendwie nicht sein....

erstmal auf ohr haun, morgen werd ich den blöden fehler schon finden...

Code: Alles auswählen

Dim EvList(10) 

OpenWindow(0, 0,0, 800,600, #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget , "buttontest" ) 

CreateGadgetList(WindowID(0)) 
    ButtonGadget( 1,   0,   0, 160,  40, "a") 
    ButtonGadget( 2,   0,  50, 160,  40, "b") 
    ButtonGadget( 3,   0, 100, 160,  40, "c") 
    TextGadget( 10, 0,150,160,160,"") 

Repeat 
    WinEventID = WindowEvent() 

    If old <> WinEventID 
        old = WinEventID 
        txt$ = "" 
        For n=0 To 9 
            EvList(n) = EvList(n+1) 
            txt$ + Str(EvList(n)) +Chr(13)+Chr(10) 
        Next 
        EvList(10) = old 
        txt$ + Str(old) 
        SetGadgetText(10,txt$) 
    EndIf    

    If WinEventID = #PB_Event_CloseWindow : EXIT=1 : EndIf 
Until EXIT = 1
is bestimmt ein ganz bescheuerter käfer... aber ich bin auch grad müd...

auf jeden fall mal danke, Laurin...

das ist immerhin schon mal fenstergebunden,
und nicht global, wie GetAsyncKeyState_()
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Code: Alles auswählen

OpenWindow(0, 0,0, 800,600, #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget , "buttontest" )

CreateGadgetList(WindowID(0))
    ButtonGadget( 1,   0,   0, 160,  40, "a")
    ButtonGadget( 2,   0,  50, 160,  40, "b")
    ButtonGadget( 3,   0, 100, 160,  40, "c")
    TextGadget( 10, 0,150,160,160,"")

Repeat
    WinEventID = WaitWindowEvent()
    If WinEventID = #WM_LBUTTONDOWN
      Select GetFocus_()
        Case GadgetID(1) : Debug "a wird gedrückt"
        Case GadgetID(2) : Debug "b wird gedrückt"
        Case GadgetID(3) : Debug "c wird gedrückt"
      EndSelect
    ElseIf WinEventID = #PB_Event_Gadget
      Select EventGadgetID()
        Case 1 : Debug "a geklickt"
        Case 2 : Debug "b geklickt"
        Case 3 : Debug "c geklickt"
      EndSelect
    ElseIf WinEventID = #PB_Event_CloseWindow
      EXIT = 1
    EndIf
Until EXIT = 1
Hoffe mal, das war, was Du meinst :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

yo, dank dir ts...

#WM_LBUTTONDOWN is die 513, die ich immer bekommen habe,
und dann nach fokus trennen is logisch.

das erklärt zwar noch nicht, was für nen komischen käfer ich da eingesperrt habe
bei ner simplen elementschlange, aber das is auch egal.

jetzt muss ich noch testen, wie das ganze sich verhält bei nicht-standard aktionen.
wenn ich das verwenden will, um Flags zu setzen/löschen,
die einen kontinuierlichen Ablauf ermöglichen,
sollte es sich nicht irgendwie blockieren,
wenn ich zwischendrin das fenster wechsel oder
mit gedrücktem button das fenster verlasse oder so..
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten