home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / pcmagazi / 1992 / 03 / qbmenu.bas < prev   
BASIC Source File  |  1992-01-14  |  4KB  |  134 lines

  1. DEFINT A-Z
  2. DECLARE SUB Menu (Row, Column, Option$(), HotKey$, Escape, Selection)
  3.  
  4. CONST TRUE = -1
  5. CONST FG = 7, BG = 1, HiLightFG = 1, HiLightBG = 3, HotLetter = 12
  6.  
  7. DIM Main$(1 TO 10)
  8. FOR X = 1 TO 10
  9.   READ Main$(X)
  10. NEXT
  11.  
  12. DATA Bill Machrone, John C. Dvorak, Jim Seymour, -, Utilities
  13. DATA Environments, Power programming, Languages, -, Quit
  14.  
  15. Selection = 3                   'highlight choice 3 initially
  16. CLS
  17. CALL Menu(6, 30, Main$(), "BJI-++++-Q", LastKey, Selection)
  18. COLOR 7, 0
  19.  
  20. LOCATE 20, 1: PRINT "Your selection was:"; Selection
  21. PRINT "The last key pressed was ASCII"; LastKey
  22. IF LastKey = 27 THEN PRINT "You pressed the Escape key"
  23.  
  24. SUB Menu (Row, Column, Option$(), HotKey$, Last, Selection) STATIC
  25.  
  26.   Letter = 0
  27.   IF LEN(HotKey$) THEN Hot = TRUE
  28.   HotKey$ = UCASE$(HotKey$)
  29.  
  30.   LMax = 0                              'Max length of options
  31.   NumOpts = UBOUND(Option$)             'Number of options
  32.   IF Selection = 0 OR Selection > NumOpts THEN Selection = 1
  33.    
  34.   FOR A = 1 TO NumOpts                  'Determine longest item
  35.     B = LEN(Option$(A))
  36.     IF B > LMax THEN LMax = B
  37.   NEXT
  38.   LMax = LMax + 2                       'Add two for surrounding spaces
  39.  
  40.   FOR A = 1 TO NumOpts                  'Display the choices
  41.     COLOR FG, BG
  42.     F = Row + A - 1
  43.     LOCATE F, Column
  44.     IF Option$(A) = "-" THEN
  45.       PRINT STRING$(LMax, 196)
  46.     ELSE
  47.       PRINT " "; Option$(A); TAB(Column + LMax);
  48.       IF Hot THEN
  49.         A$ = MID$(HotKey$, A, 1)
  50.         B = INSTR(UCASE$(Option$(A)), A$)
  51.         IF B THEN
  52.           COLOR HotLetter, BG
  53.           LOCATE F, Column + B
  54.           PRINT MID$(Option$(A), B, 1)
  55.         END IF
  56.       END IF
  57.     END IF
  58.   NEXT
  59.  
  60.   DO
  61.     COLOR HiLightFG, HiLightBG          'Display the current item
  62.     LOCATE Row + Selection - 1, Column
  63.     PRINT " "; Option$(Selection); TAB(Column + LMax);
  64.     IF Hot THEN
  65.       A$ = MID$(HotKey$, Selection, 1)
  66.       B = INSTR(UCASE$(Option$(Selection)), A$)
  67.       IF B THEN
  68.         COLOR HotLetter, HiLightBG
  69.         LOCATE Row + Selection - 1, Column + B
  70.         PRINT MID$(Option$(Selection), B, 1)
  71.       END IF
  72.       IF Letter THEN EXIT DO
  73.       DO
  74.         DO
  75.           T$ = INKEY$
  76.         LOOP UNTIL LEN(T$)
  77.         IF ASC(T$) = 0 THEN             'Extended key
  78.           T = -ASC(RIGHT$(T$, 1))
  79.         ELSE                            'Regular key
  80.           T = ASC(T$)
  81.         END IF
  82.         Last = T
  83.         IF T = 13 OR T = 27 THEN EXIT SUB
  84.      
  85.         S = (T = 13) OR (T = 27)                'Enter or Escape
  86.         S = S OR (T = -72) OR (T = -80)         'Up or Down
  87.         S = S OR (T = -71) OR (T = -79)         'Home or End
  88.         IF T > 0 AND T <> 45 AND T <> 43 THEN   'Discard plus and minus
  89.           Letter = INSTR(HotKey$, UCASE$(T$))
  90.         END IF
  91.         IF Hot THEN
  92.            IF MID$(HotKey$, Selection, 1) = "+" AND T = 13 THEN S = 0
  93.         END IF
  94.       LOOP UNTIL S OR Letter
  95.     END IF
  96.  
  97.     COLOR FG, BG
  98.     LOCATE Row + Selection - 1, Column
  99.     PRINT " "; Option$(Selection); TAB(Column + LMax);
  100.     IF Hot THEN
  101.       A$ = MID$(HotKey$, Selection, 1)
  102.       B = INSTR(UCASE$(Option$(Selection)), A$)
  103.       IF B THEN
  104.         COLOR HotLetter, BG
  105.         LOCATE Row + Selection - 1, Column + B
  106.         PRINT MID$(Option$(Selection), B, 1)
  107.       END IF
  108.     END IF
  109.  
  110.     SELECT CASE T
  111.       CASE -71                          'Home
  112.         Selection = 1
  113.       CASE -79                          'End
  114.         Selection = NumOpts
  115.       CASE -72
  116.         Selection = Selection - 1       'Up arrow
  117.         IF Selection = 0 THEN Selection = NumOpts
  118.         IF MID$(Option$(Selection), 2, 1) = "-" THEN
  119.           Selection = Selection - 1
  120.         END IF
  121.       CASE -80                          'Down arrow
  122.         Selection = Selection + 1
  123.         IF Selection > NumOpts THEN Selection = 1
  124.         IF Option$(Selection) = "-" THEN
  125.           Selection = Selection + 1
  126.         END IF
  127.       CASE ELSE
  128.         Selection = Letter
  129.     END SELECT
  130.   LOOP
  131.  
  132. END SUB
  133.  
  134.