A while back I was coding a front end for WinUAE and I wanted to grab key presses while the listbox of games was selected (eg, like F1 to turn on fullscreen or F2 to load disc into DF1) but Blitz+ struggled with passing the correct data. (Windows always interpreted the events first)
Anyway, here is a small example using HotKeyEvent which could do exactly what I wanted. If I had found this a few months back it would of saved me from many headaches!
;
; Demo showing how to get keyboard input regardless of what gadget is selected in your main window.
;
; em22 9/9/09
;
;
; create some stuff to work with
testwindow=CreateWindow("demo window", (ClientWidth(Desktop())/2)-150,(ClientHeight(Desktop())/2)-100, 300 , 200,testwindow,49)
lister=CreateListBox(5,5,288,130,testwindow,6)
tarea=CreateTextArea(5,170,288,20,testwindow,9)
status=CreateLabel("Select and Item then press the Function Keys",5,140,288,20,testwindow,49)
SetGadgetText(tarea,"Click here and press Function buttons")
;lets just fill our listbox with some stuff
For a = 0 To 15
AddGadgetItem lister, "Listbox Item "+a
Next
SelectGadgetItem lister,0
;this is where we fix our hotkeyevents - we're going to send the scancode value in eventdata() through eventid() $103 (keydown)
HotKeyEvent 1,0,$803,0,0,0,0,testwindow ; press escape any time to quit
HotKeyEvent 59,0,$103,59 ; F1 -
HotKeyEvent 60,0,$103,60
HotKeyEvent 61,0,$103,61
HotKeyEvent 62,0,$103,62 ; thru to
HotKeyEvent 63,0,$103,63
HotKeyEvent 64,0,$103,64 ; F6
While WaitEvent()<>$803
Select EventID()
Case $103 ;
; just some code to deal with the eventdata() could be done better
If EventData()=59 SetGadgetText status,"F1 - Printing "+GadgetItemText (lister, SelectedGadgetItem (lister))
If EventData()=60 SetGadgetText status,"F2 - Loading "+GadgetItemText (lister, SelectedGadgetItem (lister))
If EventData()=61
Stop
SetGadgetText status,"F3 - Adding "+GadgetItemText (lister, SelectedGadgetItem (lister))
AddGadgetItem lister,TextAreaText (tarea),True
EndIf
If EventData()=62
oldsel=SelectedGadgetItem (lister)
If CountGadgetItems (lister)>1 And oldsel >= 0
SetGadgetText status,"F4 - Deleted "+GadgetItemText (lister, oldsel) :
RemoveGadgetItem lister,oldsel
SelectGadgetItem lister,oldsel-1
EndIf
EndIf
If EventData()=63
SetGadgetText status,"F5 - Reloaded " : ClearGadgetItems lister
For a = 0 To 15
AddGadgetItem lister, "Listbox Item "+a
Next
SelectGadgetItem lister,0
EndIf
If EventData()=64
SetGadgetText status,"F6 - Bottom of list"
SelectGadgetItem lister,CountGadgetItems (lister)-1
EndIf
Case $803
Exit
End Select
Wend
|