home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload
/
ShartewareOverload.cdr
/
database
/
tmenu.zip
/
OPTMENU.PRG
Wrap
Text File
|
1986-10-22
|
7KB
|
174 lines
*****************************************************
* SPECIAL THANKS TO ALAN SIMPSON'S FINE BOOK *
* "ADVANCED TECHNIQUES IN dBASE III PLUS" *
* THAT INSPIRED ME TO WRITE THIS PROCEDURE. *
*****************************************************
* ---------------------------------------------------------------------------
* DISPLAY AN OPTION MENU, AND FETCH CHOICE BY USING CURSOR UP/DOWN OR NUMBER
* ---------------------------------------------------------------------------
* DATE: 10/22/86
*
* PROGRAMMER: D. L. Raney (GEnie address: D.L.RANEY)
* 2612 CASTLE DR. also
* BLUE SPRINGS, MO. 64015 (The Programmers Exchange BBS)
* ( 816-228-1957 )
*
* LANGUAGE: dBIII+
*
* PURPOSE: To present user with a highlight bar menu option list. Using this
* they may use the cursor keys to select, or press an entry number.
*
* USE: This procedure may be used to display any menu with up to 9 options.
* The option strings for prompts must be set before calling this
* procedure.
* EXAMPLE:
* OPT1='1. Append record'
* OPT2='2. Edit record'
* And so on........ Up to 9 options (OPT9)
*
* You must call it with two parameters. The first will return the number
* that the user selected. The second is used internally by the procedure
* to display the correct number of options and return a number within
* that range. An example of the proper way to call this procedure is,
* EXAMPLE:
* SELECTION = 0
* DO WHILE SELECTION # 3
* OPTHEADER = 'MAIN MENU TRAVEL SYSTEM DATA BASE'
* OPT1 = '1. Add records to data base'
* OPT2 = '2. Edit records in data base'
* OPT3 = '3. Exit to system'
* DO FETCH_OPT WITH SELECTION, 3
* DO CASE
* CASE SELECTION = 1
* DO APPENDREC && --- MAY ALSO USE FETCH_OPT
* CASE SELECTION = 2
* DO EDITREC && --- MAY ALSO USE FETCH_OPT
* ENDCASE
* ENDDO
*
* END OF EXAMPLE
*
* INPORTANT NOTE: Make sure the variables OPT1-9 and OPTHEADER are
* GLOBAL variables.
* Also, the OPTHEADER must not be longer than 50
* characters. This because the procedure will auto-
* maticly append the system date and time to the
* string. If OPTHEADER is "MAIN MENU", then the out
* put would be similar to the following,
*
* "MAIN MENU DATE:10/22/86 TIME:01:15:54"
*
* ---------------------------------------------------------------------------
PROCEDURE FETCH_OPT
PARAMETERS CHOICE, NUMOPT
* ------- CHOICE RETURN SELECTION NUMBER PICKED
* ------- NUMOPT TELLS PROGRAM HOW MANY OPTIONS TO DISPLAY
* ---------------------------------------------------------------------------
* INITIALIZE THE PROGRAM AND VARIABLES
* ---------------------------------------------------------------------------
PRIVATE DONE, CNT, MAXOPTLEN
DONE = .F. && USED FOR MAIN LOOP TEST FOR RETURN
CNT = 1 && USED AS A LOOP COUNTER
MAXOPTLEN = 0 && USED TO FIND A CENTERING POINT FOR OPTION LIST
OPTCOL = 0 && ALL OPTIONS START AT THIS COLUMN POINTER
* ---------------------------------------------------------------------------
* FIND LENGTH OF THE LONGEST OPTION PARAMETER
* SHOULD TELL US THE LONGEST STRING LENGTH SO WE CAN CENTER ALL AVALABLE
* OPTIONS ON THE SCREEN
* ---------------------------------------------------------------------------
DO WHILE CNT <= NUMOPT
SUB = STR(CNT,1)
IF LEN(OPT&SUB) > MAXOPTLEN
MAXOPTLEN = LEN(OPT&SUB)
ENDIF
CNT = CNT + 1
ENDDO ( CNT )
OPTCOL = (INT((79-MAXOPTLEN)/2))
*----------------------------------------------------------------------------
* DISPLAY OPTION LIST
*----------------------------------------------------------------------------
CNT = 1
CLEAR
OPTHEADER = OPTHEADER + ' Date:' + DTOC(DATE()) + ' Time:' + TIME()
@ 1,0 TO 3,79 DOUBLE && DRAW TITLE BOX
@ 2,(INT((79-LEN(OPTHEADER))/2)) SAY OPTHEADER && ---- CENTERED HEADER
@ 5,0 TO (8+NUMOPT),79 DOUBLE && ---- FRAME OPTIONS LIST
DO WHILE CNT <= NUMOPT
SUB = STR(CNT,1)
@ (6+CNT),OPTCOL SAY OPT&SUB
CNT = CNT + 1
ENDDO ( CNT )
* ---------------------------------------------------------------------------
* DISPLAY INSTRUCTIONS WITH GRAPHICS CHARACTERS
* ---------------------------------------------------------------------------
@ (9+NUMOPT),0 TO (12+NUMOPT),79 DOUBLE && ---- FRAME HELP SCREEN
@ (10+NUMOPT),18 SAY 'Highlight option by using'
@ (10+NUMOPT),44 SAY CHR(24) + ' or ' + CHR(25) + ' and press ' + CHR(17) + CHR(217)
@ (11+NUMOPT),22 SAY 'or press appropriate menu number.'
*----------------------------------------------------------------------------
* INITIALIZE MEMORY VARIABLES
*----------------------------------------------------------------------------
OPT = 1
SUB = STR(OPT,1)
KEYPRESS = 0
CHOICE = 0
* ----------- SET REVERSE VIDEO ON NUMBER ONE
@ (6+OPT),OPTCOL GET OPT&SUB
CLEAR GETS
* ----------- LOOP FOR SELECTING MENU OPTIONS
DO WHILE .NOT. DONE
* ------- WAIT FOR KEYPRESS
KEYPRESS = 0
DO WHILE KEYPRESS = 0
KEYPRESS = INKEY()
ENDDO ( KEYPRESS )
* ------- ARROW KEY PRESSED
IF KEYPRESS = 24 .OR. KEYPRESS = 5
@ OPT+6,OPTCOL SAY OPT&SUB
OPT = IIF(KEYPRESS = 24, OPT+1,OPT-1)
OPT = IIF(OPT > NUMOPT, 1, OPT)
OPT = IIF(OPT < 1, NUMOPT, OPT)
SUB = STR(OPT,1)
@ OPT+6,OPTCOL GET OPT&SUB
CLEAR GETS
LOOP && CHOICE NOT MADE, GO BACK FOR MORE INPUT
ENDIF
* ------- OPTION NUMBER ENTERED
IF KEYPRESS >= 49 .OR. KEYPRESS <= (NUMOPT+48)
CHOICE = KEYPRESS - 48
ENDIF
* ------- RETURN KEY PRESSED
IF KEYPRESS = 13
CHOICE = OPT
ENDIF
* ------- AN OPTION WAS SELECTED
IF CHOICE > 0 .AND. CHOICE <= NUMOPT
DONE = .T.
ENDIF
ENDDO ( DONE )
RETURN