Re: Mouse routines

 BBS: Inland Empire Archive
Date: 11-24-92 (15:14)             Number: 354
From: TONY ELLIOTT                 Refer#: NONE
  To: STEVEN MORGAN                 Recvd: NO  
Subj: Re: Mouse routines             Conf: (2) Quik_Bas
Steven,

 SM> I downloaded QBnws...  Your Mouse Program was Great!  It was well
 SM> documented and you examples were very helpful.  I had no problems with
 SM> your library, you made it extremely easy to establish procedures for
 SM> the mouse functions.

<blush> Thanks!

 SM> Could you please leave a short example as to how I could create an
 SM> event that activates when a button, row, colunm has been met and then
 SM> how I can co.nect it to call a procedure.

Sure. You can do it a couple of different ways. If you know a little
about MASM, you could modify the assembly code to accept an array of
coordinates (perhaps in the MouseSetEvent routine). When the specified
mouse event occurs (left button press), compare the pointer position
with your array of corrdinates. If there's a match, THEN call the
SETUEVENT routine.

Or... you could leave the mouse ASM code as-is and define an BASIC
procedure that executes each time the left button is pressed. In that
subroutine, you could check your coordinate array and see if you have a
match. The example program included with the article already sets up a
UEVENT trap for a right-button click. Just expand the subroutine to
include checking one or more sets of coordinates. Here's an example
using the mouse routines from QBNews:

DEFINT A-Z
REM $INCLUDE: 'MOUSE.BI'
TYPE Coordinates            'Structure for our "hot spot"
    TopRow    AS INTEGER    ' coordinates.
    LeftCol   AS INTEGER
    BottomRow AS INTEGER
    RightCol  AS INTEGER
END TYPE

'The following routine resets the mouse and returns the number
'of buttons.
Buttons% = MouseReset%
IF Buttons = 0 THEN
    PRINT "No mouse present."
    END
END IF

CLS                     'Display some "buttons"
LOCATE 10, 1
PRINT "    ************    ************    ************"
PRINT "    * Button 1 *    * Button 2 *    * Finished *"
PRINT "    ************    ************    ************"

DIM H(1 TO 3) AS Coordinates
FOR Z% = 1 TO 3                         'Set up our coordinate array
    H(Z%).TopRow = 10                   ' that defines these three
    H(Z%).LeftCol = (Z% - 1) * 16 + 5   ' "buttons"
    H(Z%).BottomRow = 12
    H(Z%).RightCol = H(Z%).LeftCol + 11
NEXT

CALL MousePointerOn                     'Turn on mouse pointer
CALL MouseSetEvent(2)                   '2 - Left button press
ON UEVENT GOSUB MouseEventHandler       'Point to an event hander
UEVENT ON                               'Turn on event trapping.

DO
    A$ = INKEY$                         'Wait for a key
EventCheckLabel:                        '/W will cause check for
LOOP UNTIL LEN(A$) OR Finished%         ' events here.

UEVENT OFF                              'Turn off event trapping
CALL MouseCancelEvent                   'Turn our handler off.
CALL MousePointerOff
END

MouseEventHandler:
  'This subroutine used in conjunction with the MouseSetEvent and
  'UEVENT demonstration. This routine is called only when the
  'defined mouse event occurs.

  CALL MouseGetEventInfo(EventFlag%, Lb%, Rb%, Cb%, Row%, Column%)
  CALL MousePointerOff          'To prevent mouse droppings
  FOR Z% = 1 TO 3
    IF Row% >= H(Z%).TopRow AND Row% <= H(Z%).BottomRow THEN
        IF Column% >= H(Z%).LeftCol AND Column% <= H(Z%).RightCol THEN
            'We found one. Exit the loop, leaving Z% indicating the
            ' "button" that was clicked on.
            EXIT FOR
        END IF
    END IF
  NEXT
  LOCATE 15, 10
  IF Z% <= 3 THEN                               'If a valid button
     BEEP
     PRINT "Click on button"; Z%
  ELSE
     PRINT "Click at"; Row; ","; Column%; "   " 'Erase last click info
  END IF
  CALL MousePointerOn           'Back on
RETURN

--- Blue Wave/Max v2.10 [NR]
 * Origin: Oakland BBS - McDonough, GA - (404) 954-0071 (1:133/706.0)
Outer Court
Echo Basic Postings

Books at Amazon:

Back to BASIC: The History, Corruption, and Future of the Language

Hackers: Heroes of the Computer Revolution (including Tiny BASIC)

Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution

The Advent of the Algorithm: The Idea that Rules the World

Moths in the Machine: The Power and Perils of Programming

Mastering Visual Basic .NET