INSTALL @lib$+"STRINGLIB"
REM set global button tracker string array
REM response1$ is your response from the buttons. It must remain global for users program.
response1$=""
DIM BTTNLIST$(50):REM 50 buttons should be enough for any program?
REM !!! MAKE SURE IN BBC BASIC OPTIONS TO DISABLE Lower Case Keywords ( OR you will have keyword errors )
REM SET GRAPHICS MODE TO 8 USING VDU
VDU 22,8
REM SET LINE THICKNESS TO 3
VDU 23,23,1|
REM Turn off the text cursor _
OFF
VDU 5 : REM Treat text as graphics (transparent background)
REPEAT
BTTNLIST$(0)="OK 500 500 ":REM Activate the button first then name the button and make start coordinates (also tells mouse where to look)
BTTNLIST$(1)="CANCEL 200 800 ":REM I did it like this because I think a user can just manually switch this on
BTTNLIST$(2)="QUIT 200 400 "
PROC_monitorbuttons
UNTIL response1$="QUIT"
WAIT 0
END
REM this procedure will display and monitor the buttons you want ( that is pretty cool eh?)
DEF PROC_monitorbuttons
LOCAL hh%,vv%,exitcondition%,activepwrsave%(),buttonlist%,checkstr$
LOCAL initialwd$,moub%,mouy%,moux%,x,n%,i%
DIM activepwrsave%(50)
exitcondition%=0
buttonlist%=0
FOR x=0 TO 50
activepwrsave%(x)=1
NEXT
REPEAT
REM Display the buttons first
initialwd$=BTTNLIST$(buttonlist%)
n% = FN_split(initialwd$, " ", array$())
FOR i% = n%-1 TO 0 STEP -1
hh%=VAL(array$(1)):vv%=VAL(array$(2))
REM MOUSE b-- 1-rightbttn 2-mid bttn 4-left bttn
MOUSE moux%,mouy%,moub%
checkstr$=array$(0)
IF LEN(checkstr$)>1 AND activepwrsave%(buttonlist%)=0 THEN IF moux%>hh% AND mouy%>vv%-30 AND moux%<hh%+140 AND mouy%<vv%+15 THEN PROC_button(hh%,vv%,0,array$(0)+" ",255,255,255):activepwrsave%(buttonlist%)=1
IF LEN(checkstr$)>1 AND activepwrsave%(buttonlist%)=1 THEN IF moux%<hh% OR mouy%<vv%-30 OR moux%>hh%+140 OR mouy%>vv%+15 THEN PROC_button(hh%,vv%,0,array$(0)+" ",200,200,200):activepwrsave%(buttonlist%)=0
IF LEN(checkstr$)>1 THEN IF moux%>hh% AND mouy%>vv%-30 AND moux%<hh%+140 AND mouy%<vv%+15 AND moub%=4 THEN response1$=array$(0):exitcondition%=1:activepwrsave%(buttonlist%)=0
NEXT
buttonlist%=buttonlist%+1:IF LEN(BTTNLIST$(buttonlist%))<1 THEN buttonlist%=0
IF buttonlist%>50 THEN buttonlist%=0
UNTIL exitcondition%=1
PROC_color("b",0,0,0):CLG
MOVE 0,500:PROC_color("f",255,255,255)
PRINT "YOU CLICKED ON :";response1$
PRINT "H string ";array$(1);" number ";hh%
MOVE 0,450
PRINT "V string";array$(2);" number ";vv%
ENDPROC
REM PUT YOUR PROCEDURES AND FUNCTIONS BELLOW THE MAIN PROGRAM END ****************
REM ***********************this is my super custom text box tool ***********************
REM X,Y,text color,boarder color,message,r,g,b
REM ************************************************************************
DEF PROC_button(x%,y%,c%,msg$,r%,g%,b%)
LOCAL initialx%,tx%,reduction%,fxx%
initialx%=LEN(msg$)
LET tx%= x%+initialx%+25
reduction%=0
COLOUR 0,r%,g%,b%
GCOL 0
reduction%=initialx%/2
reduction%=reduction%*6
IF initialx%<20 THEN reduction%=reduction%/2
initialx%=initialx%*22-reduction%
FOR fxx%=17 TO 49
LINE x%+3,y%+20-fxx%,x%+initialx%,y%+20-fxx%
NEXT fxx%
PROC_color("f",0,0,0)
MOVE tx%,y%
PRINT msg$
GCOL c%
MOVE 0,0 REM hide that thing
ENDPROC
REM ******************this is a custom Foreground and Background control tool (too much?) *****************
REM color "F"or"B", r,g,b
DEF PROC_color(fb$,r%,g%,b%)
IF fb$="f" OR fb$="F" THEN COLOUR 0,r%,g%,b% : GCOL 0
IF fb$="b" OR fb$="B" THEN COLOUR 1,r%,g%,b% : GCOL 128+1
ENDPROC