MenuBox 1/3

 BBS: Inland Empire Archive
Date: 01-27-93 (20:25)             Number: 398
From: MARK BUTLER                  Refer#: NONE
  To: ALL                           Recvd: NO  
Subj: MenuBox  1/3                   Conf: (2) Quik_Bas
 Jeff Johnston asked for a MenuBox type routine so here it is. It is
 pretty much the same one that was used in the "pulldown.bas" that I
 posted a little while back.

==========================8< Cut Here 8<=============================
 DEFINT A-Z
 DECLARE SUB MenuBox (row, col, Item$(), ItemNum, MaxItems)
 DECLARE SUB Shade (Uprow, Ltcol, Lorow, Rtcol)
 DIM Item$(1 TO 15)

 '**> We'll fill up the Item$() array with some dummy choices
    FOR i = 1 TO 15
        Item$(i) = "Menu Item #" + STR$(i)
    NEXT

    COLOR 14, 1

 '**>  Set up our fictitious application screen
    CLS
    FOR i = 1 TO 1920
        PRINT CHR$(176);
    NEXT
    LOCATE 25, 15
    PRINT "Use arrow keys "; CHR$(24); CHR$(25);
    PRINT " to scroll, press ENTER to select";

 '**> now we'll pass the array to MenuBox.
 '**> MenuBox will return the user choice in ItemNum%
    CALL MenuBox(3, 30, Item$(), ItemNum, 15)
 '                                         ^^
 '                                         |
 '**> Remember to define MaxItems to the upper limit of
 '**> the Item$() array. The Menubox will dimension itself
 '**> to hold all your menu items

    COLOR 7, 0
    CLS
    IF ItemNum = 0 THEN
        PRINT "User aborted without choice..."
    ELSE
        PRINT "You chose"; Item$(ItemNum)
    END IF

 '--------[ End of main - Subs begin ]----------

 SUB MenuBox (row, col, Item$(), ItemNum, MaxItems)
 CONST UpArrow = 72, DownArrow = 80
 CONST Escape = 27, Enter = 13
 CONST Home = 71, EndKey = 79

    row = row + 1
    col = col + 1
    ItemNum = 1
    ItemLength = 1
    FOR i = 1 TO MaxItems
    IF LEFT$(Item$(i), 1) <> " " THEN
        Item$(i) = " " + Item$(i) + " "
    END IF
    NEXT i
    FOR i = 1 TO MaxItems
        IF LEN(Item$(i)) > ItemLength THEN
            ItemLength = LEN(Item$(i))
        ELSEIF LEN(Item$(i)) < 14 THEN
           ItemLength = 14
        END IF
    NEXT i

 '**>**>**>**>**>**>**>**>**>**>**>**>**>**>*
 '**>** build frame around choices **>**>**>*
 '**>**>**>**>**>**>**>**>**>**>**>**>**>**>*

    Ltcol = col - 1
    Rtcol = col + ItemLength
    COLOR 0, 7

    LOCATE row - 1, Ltcol
    PRINT CHR$(218);
    FOR i = 1 TO ItemLength
        PRINT CHR$(196);
    NEXT i
    PRINT CHR$(191)

    LOCATE row, 1
    FOR i = 1 TO MaxItems
        LOCATE , Ltcol
        PRINT CHR$(179); TAB(Rtcol); CHR$(179)
    NEXT i

    LOCATE row + MaxItems, Ltcol

 >>> continued in the next message

--- timEd/B7 * I =LIKE= text based, I =HATE= 'GUI' ..so sue me Gates!
 * Origin:  MotherShip Portholes, Portland OR  (1:105/319.32)
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