MOUSEWHEEL: Difference between revisions

From QB64 Phoenix Edition Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
 
(8 intermediate revisions by the same user not shown)
Line 11: Line 11:
* After an event has been read, the value resets to 0 automatically so cumulative position values must be added.
* After an event has been read, the value resets to 0 automatically so cumulative position values must be added.
* If no movement on the wheel has occurred since the last [[_MOUSEINPUT]] read, [[_MOUSEWHEEL]] returns 0.
* If no movement on the wheel has occurred since the last [[_MOUSEINPUT]] read, [[_MOUSEWHEEL]] returns 0.
{{PageAvailability}}
<!-- QB64 = a version or none, QBPE = a version or all, Platforms = yes or no -->
<gallery widths="48px" heights="48px" mode="nolines">
File:Qb64.png|'''v0.851'''
File:Qbpe.png|'''all'''
File:Apix.png
File:Win.png|'''yes'''
File:Lnx.png|'''yes'''
File:Osx.png|'''yes'''
</gallery>
<!-- additional availability notes go below here -->
* Available for ''macOS'' since '''QB64-PE v3.13.0'''




{{PageExamples}}
{{PageExamples}}
''Example 1:'' Reading the cumulative mouse wheel "clicks".
; Example 1: Reading the cumulative mouse wheel "clicks".
{{CodeStart}}
{{CodeStart}}
DO: {{Cl|_LIMIT}} 100
{{Cl|DO}}
     DO WHILE {{Cl|_MOUSEINPUT}}
    {{Cl|_LIMIT}} {{Text|50|#F580B1}}
      Scroll = Scroll + {{Cl|_MOUSEWHEEL}}
     {{Cl|DO...LOOP|DO WHILE}} {{Cl|_MOUSEINPUT}}
      LOCATE 10, 20: PRINT Scroll
        Scroll = Scroll + {{Cl|_MOUSEWHEEL}}
     LOOP
        {{Cl|LOCATE}} {{Text|10|#F580B1}}, {{Text|20|#F580B1}}: {{Cl|PRINT}} Scroll
LOOP UNTIL INKEY$ = CHR$(13) ' press Enter to quit  
     {{Cl|LOOP}}
{{Cl|DO...LOOP|LOOP UNTIL}} {{Cl|INKEY$}} = {{Cl|CHR$}}({{Text|13|#F580B1}}) {{Text|<nowiki>' press Enter to quit</nowiki>|#919191}}
{{CodeEnd}}
{{CodeEnd}}


----


''Example 2:'' A simple text scrolling routine using the mouse wheel value to read a text array.
; Example 2: A simple text scrolling routine using the mouse wheel value to read a text array.
: You will need a text file that is large enough for this example.</center>
{{CodeStart}}
{{CodeStart}}
{{Cl|DIM}} Array$(100)
{{Cl|DIM}} Array$({{Text|100|#F580B1}})
{{Cl|LINE INPUT}} "Enter a file name with 100 or more lines of text: ", file$
{{Cl|LINE INPUT}} {{Text|<nowiki>"Enter a file name with 100 or more lines of text: "</nowiki>|#FFB100}}, file$
{{Cl|OPEN}} file$ {{Cl|FOR (file statement)|FOR}} {{Cl|INPUT (file mode)|INPUT}} {{Cl|AS}} #1
{{Cl|OPEN}} file$ {{Cl|OPEN#File_Access_Modes|FOR}} {{Cl|OPEN#File_Access_Modes|INPUT}} {{Cl|OPEN|AS}} #1
{{Cl|DO...LOOP|DO}} {{Cl|UNTIL}} {{Cl|EOF}}(1)
{{Cl|DO...LOOP|DO UNTIL}} {{Cl|EOF}}({{Text|1|#F580B1}})
  inputcount = inputcount + 1
    inputcount = inputcount + {{Text|1|#F580B1}}
  {{Cl|LINE INPUT (file statement)|LINE INPUT}} #1, Array$(inputcount)
    {{Cl|LINE INPUT (file statement)|LINE INPUT}} #1, Array$(inputcount)
  {{Cl|IF...THEN|IF}} inputcount = 100 {{Cl|THEN}} {{Cl|EXIT DO}}
    {{Cl|IF}} inputcount = {{Text|100|#F580B1}} {{Cl|THEN}} {{Cl|EXIT DO}}
{{Cl|LOOP}}
{{Cl|LOOP}}
{{Cl|FOR...NEXT|FOR}} n = 1 {{Cl|TO}} 21: {{Cl|PRINT}} Array$(n): {{Cl|NEXT}}
{{Cl|FOR}} n = {{Text|1|#F580B1}} {{Cl|TO}} {{Text|21|#F580B1}}: {{Cl|PRINT}} Array$(n): {{Cl|NEXT}}
{{Cl|CLOSE}} #1
{{Cl|CLOSE}} #1
DO
{{Cl|DO}}
  {{Cl|DO...LOOP|DO}} {{Cl|WHILE}} {{Cl|_MOUSEINPUT}}
    {{Cl|DO...LOOP|DO WHILE}} {{Cl|_MOUSEINPUT}}
    {{Cl|IF...THEN|IF}} row >= 0 {{Cl|THEN}} row = row + {{Cl|_MOUSEWHEEL}} {{Cl|ELSE}} row = 0 'prevent under scrolling
        {{Cl|IF}} row >= {{Text|0|#F580B1}} {{Cl|THEN}} row = row + {{Cl|_MOUSEWHEEL}} {{Cl|ELSE}} row = {{Text|0|#F580B1}} {{Text|<nowiki>'prevent under scrolling</nowiki>|#919191}}
    {{Cl|IF...THEN|IF}} row > inputcount - 20 {{Cl|THEN}} row = inputcount - 20   'prevent over scrolling
        {{Cl|IF}} row > inputcount - {{Text|20|#F580B1}} {{Cl|THEN}} row = inputcount - {{Text|20|#F580B1}} {{Text|<nowiki>'prevent over scrolling</nowiki>|#919191}}
    {{Cl|IF...THEN|IF}} prevrow <> row {{Cl|THEN}} 'look for a change in row value
        {{Cl|IF}} prevrow <> row {{Cl|THEN}} {{Text|<nowiki>'look for a change in row value</nowiki>|#919191}}
      {{Cl|IF...THEN|IF}} row > 0 {{Cl|AND (boolean)|AND}} row <= inputcount - 20 {{Cl|THEN}}
            {{Cl|IF}} row > {{Text|0|#F580B1}} {{Cl|AND (boolean)|AND}} row <= inputcount - {{Text|20|#F580B1}} {{Cl|THEN}}
        {{Cl|CLS}}: {{Cl|LOCATE}} 2, 1
                {{Cl|CLS}}: {{Cl|LOCATE}} {{Text|2|#F580B1}}, {{Text|1|#F580B1}}
        {{Cl|FOR...NEXT|FOR}} n = row {{Cl|TO}} row + 20
                {{Cl|FOR}} n = row {{Cl|TO}} row + {{Text|20|#F580B1}}
          {{Cl|PRINT}} Array$(n)
                    {{Cl|PRINT}} Array$(n)
        {{Cl|NEXT}}
                {{Cl|NEXT}}
      {{Cl|END IF}}
            {{Cl|END IF}}
    {{Cl|END IF}}
        {{Cl|END IF}}
    prevrow = row 'store previous row value
        prevrow = row {{Text|<nowiki>'store previous row value</nowiki>|#919191}}
  {{Cl|LOOP}}
    {{Cl|LOOP}}
{{Cl|LOOP}} {{Cl|UNTIL}} {{Cl|INKEY$}} > ""  
{{Cl|DO...LOOP|LOOP UNTIL}} {{Cl|INKEY$}} > {{Text|<nowiki>""</nowiki>|#FFB100}}
{{CodeEnd}}
{{CodeEnd}}
{{small|Code by Ted Weissgerber}}
{{Small|Example by Ted Weissgerber}}
<center>Note: You will need a text file that is large enough for this example.</center>




{{PageSeeAlso}}
{{PageSeeAlso}}
* [https://qb64phoenix.com/forum/showthread.php?tid=1302 Featured in our "Keyword of the Day" series]
* [[_MOUSEX]], [[_MOUSEY]], [[_MOUSEBUTTON]]
* [[_MOUSEX]], [[_MOUSEY]], [[_MOUSEBUTTON]]
* [[_MOUSEINPUT]], [[_MOUSEMOVE]]  
* [[_MOUSEINPUT]], [[_MOUSEMOVE]]
* [[_MOUSESHOW]], [[_MOUSEHIDE]]
* [[_MOUSESHOW]], [[_MOUSEHIDE]]
* [[Controller Devices]]
* [[Controller Devices]]
Line 65: Line 82:


{{PageNavigation}}
{{PageNavigation}}
[[Category:Latest]]

Latest revision as of 18:15, 25 May 2024

The _MOUSEWHEEL function returns a positive or negative INTEGER value indicating mouse scroll events since the last read of _MOUSEINPUT.


Syntax

scrollAmount% = _MOUSEWHEEL


Description

  • Returns -1 when scrolling up and 1 when scrolling down with 0 indicating no movement since last read.
  • After an event has been read, the value resets to 0 automatically so cumulative position values must be added.
  • If no movement on the wheel has occurred since the last _MOUSEINPUT read, _MOUSEWHEEL returns 0.


Availability

  • Available for macOS since QB64-PE v3.13.0


Examples

Example 1
Reading the cumulative mouse wheel "clicks".
DO
    _LIMIT 50
    DO WHILE _MOUSEINPUT
        Scroll = Scroll + _MOUSEWHEEL
        LOCATE 10, 20: PRINT Scroll
    LOOP
LOOP UNTIL INKEY$ = CHR$(13) ' press Enter to quit

Example 2
A simple text scrolling routine using the mouse wheel value to read a text array.
You will need a text file that is large enough for this example.
DIM Array$(100)
LINE INPUT "Enter a file name with 100 or more lines of text: ", file$
OPEN file$ FOR INPUT AS #1
DO UNTIL EOF(1)
    inputcount = inputcount + 1
    LINE INPUT #1, Array$(inputcount)
    IF inputcount = 100 THEN EXIT DO
LOOP
FOR n = 1 TO 21: PRINT Array$(n): NEXT
CLOSE #1
DO
    DO WHILE _MOUSEINPUT
        IF row >= 0 THEN row = row + _MOUSEWHEEL ELSE row = 0 'prevent under scrolling
        IF row > inputcount - 20 THEN row = inputcount - 20 'prevent over scrolling
        IF prevrow <> row THEN 'look for a change in row value
            IF row > 0 AND row <= inputcount - 20 THEN
                CLS: LOCATE 2, 1
                FOR n = row TO row + 20
                    PRINT Array$(n)
                NEXT
            END IF
        END IF
        prevrow = row 'store previous row value
    LOOP
LOOP UNTIL INKEY$ > ""
Example by Ted Weissgerber


See also



Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage
Report a broken link