mirror of
https://github.com/QB64Official/qb64.git
synced 2024-08-22 11:25:08 +00:00
101 lines
2.8 KiB
Markdown
101 lines
2.8 KiB
Markdown
|
The [_MOUSEPIPEOPEN](_MOUSEPIPEOPEN) function creates a pipe handle value for a mouse when using a virtual keyboard.
|
||
|
|
||
|
## Syntax
|
||
|
|
||
|
> vkMousePipe = [_MOUSEPIPEOPEN](_MOUSEPIPEOPEN)
|
||
|
|
||
|
## Description
|
||
|
|
||
|
* The pipe handle value can be used optionally with [_MOUSEINPUT](_MOUSEINPUT), [_MOUSEX](_MOUSEX), [_MOUSEY](_MOUSEY), and [_MOUSEBUTTON](_MOUSEBUTTON) when required.
|
||
|
|
||
|
## Example(s)
|
||
|
|
||
|
The following snippet isn't runnable/compilable, but it showcases the use of the [_MOUSEPIPEOPEN](_MOUSEPIPEOPEN) function.
|
||
|
|
||
|
```vb
|
||
|
|
||
|
mDown = 0
|
||
|
mUp = 0
|
||
|
mEvent = 0
|
||
|
|
||
|
IF VkMousePipe = 0 THEN
|
||
|
VkMousePipe = _MOUSEPIPEOPEN 'create new pipe
|
||
|
END IF
|
||
|
|
||
|
DO WHILE _MOUSEINPUT(VkMousePipe)
|
||
|
mb = _MOUSEBUTTON(1, VkMousePipe)
|
||
|
|
||
|
mx = _MOUSEX(VkMousePipe)
|
||
|
my = _MOUSEY(VkMousePipe)
|
||
|
|
||
|
IF _PIXELSIZE = 0 THEN 'screen 0 adjustment
|
||
|
mx = mx * 8 - 4
|
||
|
my = my * 16 - 8
|
||
|
END IF
|
||
|
IF mb = -1 AND omb = 0 THEN mDown = -1: mEvent = 1: EXIT DO
|
||
|
|
||
|
if VkMousePipeCapture=0 then
|
||
|
_MOUSEINPUTPIPE VkMousePipe
|
||
|
end if
|
||
|
|
||
|
IF mb = 0 AND omb = -1 THEN
|
||
|
VkMousePipeCapture=0
|
||
|
mUp = -1
|
||
|
mEvent = 1
|
||
|
EXIT DO
|
||
|
end if
|
||
|
|
||
|
LOOP
|
||
|
omb = mb
|
||
|
|
||
|
|
||
|
rootId = VkByRole("ROOT")
|
||
|
editMode = VK(rootId).locked
|
||
|
|
||
|
IF mDown THEN
|
||
|
mDownX = mx
|
||
|
mDownY = my
|
||
|
i2 = 0
|
||
|
|
||
|
FOR internal = 1 TO 0 STEP -1
|
||
|
FOR i = VkLast TO 1 STEP -1
|
||
|
IF VK(i).active THEN
|
||
|
IF VK(i).internal = internal THEN
|
||
|
x = VK(i).x * VkUnitSize
|
||
|
y = VK(i).y * VkUnitSize
|
||
|
w = VK(i).w
|
||
|
h = VK(i).h
|
||
|
x1 = INT(x)
|
||
|
x2 = INT(x + VkUnitSize * w) - 1
|
||
|
y1 = sy - 1 - INT(y)
|
||
|
y2 = sy - 1 - INT(y + VkUnitSize * h) + 1
|
||
|
IF mx >= x1 AND mx <= x2 AND my >= y2 AND my <= y1 THEN
|
||
|
i2 = i
|
||
|
EXIT FOR
|
||
|
END IF
|
||
|
END IF
|
||
|
END IF
|
||
|
NEXT
|
||
|
IF i2 THEN EXIT FOR
|
||
|
NEXT
|
||
|
IF i2 THEN
|
||
|
VkI = i2
|
||
|
VKoldX = VK(i2).x
|
||
|
VKoldY = VK(i2).y
|
||
|
VKdragging = 0
|
||
|
VKstart = TIMER(0.001)
|
||
|
'VK(i2).held = -1
|
||
|
VkKeyDown i2
|
||
|
VkMousePipeCapture=1
|
||
|
END IF
|
||
|
IF VkMousePipeCapture = 0 THEN _MOUSEINPUTPIPE VkMousePipe
|
||
|
END I
|
||
|
|
||
|
```
|
||
|
|
||
|
> When using the [$VIRTUALKEYBOARD]($VIRTUALKEYBOARD), the keyboard captures mouse input appropriately whilst selectively letting presses originating on non-key areas of the screen filter through to the default mouse queue.
|
||
|
|
||
|
## See Also
|
||
|
|
||
|
* [$VIRTUALKEYBOARD]($VIRTUALKEYBOARD)
|