BBS: Inland Empire Archive Date: 04-17-93 (20:46) Number: 303 From: JIM GIORDANO Refer#: NONE To: OWEN GIBBINS Recvd: NO Subj: mouse Conf: (2) Quik_Bas
OG>Could anyone give me a QB 4.5 (or -) program that will take OG>input from the mouse/mouse driver, and print "Left", OG>"Right", "Up", "Down", "Left Button", "Right button", or 'You'll probably get a bunch of progs to do what you asked. Most 'write a half dozen subs to do various mouse things. I prefer one 'mouse sub, just pass it what I want to do with symbolic names 'like POLL, SHOW, SAVE, etc. ' note: be sure to load library qb mprog /L or qbx mprog /L DEFINT A-Z TYPE RegType 'for CALL INTERRUPT ax AS INTEGER bx AS INTEGER cx AS INTEGER dx AS INTEGER bp AS INTEGER si AS INTEGER di AS INTEGER flags AS INTEGER ds AS INTEGER es AS INTEGER END TYPE DIM SHARED regs AS RegType DECLARE SUB Interrupt (IntNum AS INTEGER, inregs AS RegType,_ outregs AS RegType) DECLARE SUB InterruptX (IntNum AS INTEGER, inregs AS RegType,_ outregs AS RegType) DECLARE SUB Mouse (IntNum) CLS CONST Mreset = 0, Show = 1, Hide = 2, Poll = 3 'mouse interrupts CONST Save = 22, Retrive = 23 DIM SHARED Mrow, Mcol, Lbutton, Rbutton _ 'condition of mouse after Mouse Poll Mouse Save 'save users mouse program Mouse Mreset 'now reset mouse Mouse Show 'show the mouse cursor LOCATE 10, 22 PRINT "Press the escape key to end program" DO Mouse Poll LOCATE 12, 14 IF Lbutton THEN PRINT "Left Button pressed"; ELSE PRINT " "; END IF PRINT USING " ### ### ### ### "; Mrow; Mcol; IF Rbutton THEN PRINT "Right Button pressed" ELSE PRINT " " END IF LOCATE 14, 29 IF Lbutton AND Rbutton THEN PRINT "Both Buttons pressed" ELSE PRINT " " END IF LOOP WHILE INKEY$ <> CHR$(27) Mouse Hide Mouse Mreset 'reset the mouse Mouse Retrive 'get old driver back SYSTEM SUB Mouse (IntNum) STATIC regs.ax = IntNum ' Calls interrupt 51 to invoke mouse functions IF IntNum = 22 THEN 'save current driver. First get size of regs.ax = 21 'buffer needed to save state of any Interrupt 51, regs, regs ' mouse handler currently running Bsize = regs.bx DIM buf((Bsize + 1) / 2) AS INTEGER 'make space for the buffer regs.ax = 22 '(use an integer buffer for compatibility regs.dx = VARPTR(buf(1)) ' between qb4.5 and basic7) regs.es = VARSEG(buf(1)) 'now save it InterruptX 51, regs, regs ELSEIF IntNum = 23 THEN 'restore old driver we saved earlier regs.dx = VARPTR(buf(1)) regs.es = VARSEG(buf(1)) InterruptX 51, regs, regs ELSE Interrupt 51, regs, regs 'do whatever INTNUM the user wanted END IF IF IntNum = Poll THEN 'get position and button condition Mrow = regs.dx \ 8 + 1 Mcol = regs.cx \ 8 + 1 Lbutton = regs.bx AND 1: IF Lbutton THEN Lbutton = -1 Rbutton = regs.bx AND 2: IF Rbutton THEN Rbutton = -1 END IF END SUB ___ X SLMR 2.1 X --- Maximus 2.01wb * Origin: RoyaLink BBS *HST/DS* Oxnard, CA (805) 488-7430 (1:206/2503)
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