Wiki source for KeyPgMultikey


Show raw source

{{fbdoc item="title" value="MULTIKEY"}}----
Detects the status of keys by keyboard scancode.

{{fbdoc item="syntax"}}##
[[KeyPgDeclare|declare]] [[KeyPgFunction|function]] **Multikey** ( [[KeyPgByval|byval]] //scancode// [[KeyPgAs|as]] [[KeyPgLong|long]] ) [[KeyPgAs|as]] [[KeyPgLong|long]]
##
{{fbdoc item="usage"}}##
//result// = **Multikey**(//scancode//)
##
{{fbdoc item="param"}}
##//scancode//##
The [[GfxScancodes|scan code]] of the key to check.

{{fbdoc item="ret"}}
Returns ##-1## if the key for the specified [[GfxScancodes|scan code]] is pressed, otherwise returns ##0##.

{{fbdoc item="desc"}}
##**Multikey**## is a function which will detect the status of any key, determined by scancode, at any time. It will return ##-1## if the key is pressed, otherwise it will return ##0##. The keyboard input buffer is not disabled while you use ##**Multikey**##; that is, pressed keys will be stored and subsequently returned by your next call to ##[[KeyPgInkey|Inkey]]##. This means you have to empty ##[[KeyPgInkey|Inkey]]## manually when you finish using ##**Multikey**##, using something like the following method:
{{fbdoc item="filename" value="examples/manual/check/KeyPgMultikey_1.bas"}}%%(freebasic)
While Inkey <> "": Wend '' loop until the Inkey buffer is empty
%%

Keeping ##[[KeyPgInkey|Inkey]]## to work while you use ##**Multikey**## allows more flexibility and can be useful to detect ##[[KeyPgChr|Chr]](255)+"k"## combo returned on window close button click, if a windowed graphics mode has been set via the ##[[KeyPgScreengraphics|Screen]]## statement. For a list of accepted scancodes, see [[GfxScancodes|DOS keyboard scancodes]]; these are guaranteed to be valid for all ""FreeBASIC"" supported platforms.
##**Multikey**## should always work in graphics mode, as long as the screen is [[KeyPgScreenunlock|unlocked]]. Support in the console depends on the platform the program is run on though, and cannot be guaranteed.

{{fbdoc item="ex"}}
{{fbdoc item="filename" value="examples/manual/input/multikey.bas"}}%%(freebasic)
#include "fbgfx.bi"
#if __fb_lang__ = "fb"
Using FB '' Scan code constants are stored in the FB namespace in lang FB
#endif

Dim As Integer x, y

Screenres 640, 480

Color 2, 15

x = 320: y = 240
Do
' Check arrow keys and update the (x, y) position accordingly
If MultiKey(SC_LEFT ) And x > 0 Then x = x - 1
If MultiKey(SC_RIGHT) And x < 639 Then x = x + 1
If MultiKey(SC_UP ) And y > 0 Then y = y - 1
If MultiKey(SC_DOWN ) And y < 479 Then y = y + 1

' Lock the page while we work on it
Screenlock
' Clear the screen and draw a circle at the position (x, y)
Cls
Circle(x, y), 30, , , , ,F
ScreenUnlock

Sleep 15, 1

' Run loop until user presses Escape
Loop Until MultiKey(SC_ESCAPE)

' Clear Inkey buffer
While Inkey <> "": Wend


Print "Press CTRL and H to exit..."

Do
Sleep 25

'' Stay in loop until user holds down CTRL and H at the same time
If MultiKey(SC_CONTROL) And MultiKey(SC_H) Then Exit Do
Loop
%%


{{fbdoc item="lang"}}
- Not available in the //[[CompilerOptlang|-lang qb]]// dialect unless referenced with the alias ##**""__Multikey""**##.

{{fbdoc item="diff"}}
- New to ""FreeBASIC""

{{fbdoc item="see"}}
- [[GfxScancodes|Keyboard scancodes]]
- ##[[KeyPgGetmouse|Getmouse]]##
- ##[[KeyPgGetjoystick|Getjoystick]]##
- ##[[KeyPgScreengraphics|Screen (Graphics)]]##
- ##[[KeyPgInkey|Inkey]]##

{{fbdoc item="back" value="CatPgGfxInput|User Input Functions"}}
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki



sf.net phatcode