KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

Q36894: Predefined Key ON KEY(n) GOSUB Trap Supersedes User-Defined

Article: Q36894
Product(s): See article
Version(s): 1.00 1.01 1.02 2.00 2.01 3.00 4.00 4.00b 4.50
Operating System(s): MS-DOS
Keyword(s): ENDUSER | B_BasicCom | mspl13_basic
Last Modified: 28-DEC-1989

If a predefined key (such as a key from n=1 through 14) is turned on,
the associated ON KEY(n) GOSUB statement is executed regardless of the
status of the keyboardflag. In other words, a predefined key is
trapped whether or not the key is pressed alone or in conjunction with
the CAPS LOCK, NUM LOCK, SHIFT, CTRL, or ALT keys. The key trap occurs
even if the same key also is defined with a specific keyboardflag
value in a user-defined KEY statement. (User-defined keys are from
n=15 through 20 in QuickBASIC Versions 3.00 and earlier, and from n=15
to 25 in QuickBASIC Versions 4.00 and later and BASIC compiler
Versions 6.00 and 6.00b for MS-DOS and OS/2.)

Unlike trapping predefined keys, trapping user-defined keys IS
dependent on the status of CAPS LOCK, NUM LOCK, SHIFT, CTRL, or ALT
key.

In the code example below, the user-defined key trap for CTRL+F1
initially works as expected. If you press F2 and turn on the trapping
of predefined function KEY (1), then the user-defined key trap for
CTRL+F1 is ignored. The ON KEY (1) GOSUB trap for predefined function
key 1 takes priority. This behavior is by design.

This information applies to all versions of QuickBASIC, to Microsoft
BASIC Compiler Versions 6.00 and 6.00b for MS-DOS and MS OS/2, and to
Microsoft BASIC PDS Version 7.00 for MS-DOS and MS OS/2.

The following is a code example:

ON KEY(1) GOSUB got1
KEY(1) OFF
ON KEY(2) GOSUB swapper
KEY(2) ON
KEY 16, CHR$(4) + CHR$(&H3B)
ON KEY(16) GOSUB got16
KEY(16) ON
print "Press an F1, CTRL-F1, or F2 key"
WHILE 1
WEND
END

got16:
  PRINT "found user-defined CTRL-F1 "
RETURN

got1:
  PRINT "found predefined F1 "
RETURN

swapper:
   INPUT "set Predefined on (Y/n) ", a$
   IF a$ = "N" or a$="n" THEN
      KEY(1) OFF
   ELSE
      KEY(1) ON
   END IF
RETURN

THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Copyright Microsoft Corporation 1986-2002.