NewsLetter TOC
FastDataEntry.bas is a demo program for rapid data entry! The features of this cool little program include the following:
See FastDataEntry.bas below. Copy and paste it into the LB Editor!
' fastDataEntry.bas -- No-mouse entries with the number pad. ' Use graphicbox instead of textboxes or listboxes. gosub [getPrompts] mx=999 '*** maximum input (make it whatever). inpX=200 : inpY=82 '*** location of input box. inpW=80 : inpH=16 '*** width & height of input box. nomainwin WindowWidth=300 : WindowHeight=520 graphicbox #w1.g1a,0,0,0,0 '*** box for inputs graphicbox #w1.g1,10,94,274,400 button #w1.b1,"Press X to exit",[quit],UL,40,4 statictext #w1.st1,"Press Escape key to back up",30,68,200,24 open "Fast (Mouseless) Data Entry" for window as #w1 gosub [getInputs] [quit] notice "Inputs complete" close #w1 : END [getInputs] '*** show prompts and get inputs maxShow=24 '*** max lines to fill graphicbox yStart=20 '*** beginning y-position to show top prompt yIncr=16 '*** increment line to line j=1 [loopJ] grp=int((j-1)/(maxShow)) if j=1 or grp=(j-1)/maxShow then if not(backup) then gosub [showGroup] end if gosub [scanIndex] if quit then [quit] '*** abort loop if backup then j=j-1 : if j<1 then j=1 if j=st-1 then if st>1 then gosub [showPriorGroup] end if else '*** retract input box. yPos=(j-grp*maxShow-1)*yIncr+yStart print #w1.g1a,"locate ";inpX;" ";inpY+yPos;" ";inpW;" ";inpH print #w1,"refresh" '*** display entry where box was. yPos=(j-grp*maxShow)*yIncr+yStart print #w1.g1,"place 230 ";yPos print #w1.g1,"\";r$(j+1) end if else '*** advance input box '*** Only if an entry was made, update the input box: if ntry$>"" then r$(j)=ntry$ yPos=(j-grp*maxShow)*yIncr+yStart print #w1.g1a,"locate ";inpX;" ";inpY+yPos;" ";inpW;" ";inpH print #w1,"refresh" '*** display entry where box was. yPos=(j-grp*maxShow-1)*yIncr+yStart print #w1.g1,"place 230 ";yPos print #w1.g1,"\";r$(j) j=j+1 end if if jkQ then en=kQ '*** show prompts & top input box print #w1.g1,"cls" for h=st to en yPos=(h-grp*maxShow-1)*yIncr+yStart print #w1.g1,"place 4 ";yPos print #w1.g1,"\";q$(h) print #w1.g1,"place 230 ";yPos print #w1.g1,"\";r$(h) next h yPos=(j-grp*maxShow-1)*yIncr+yStart print #w1.g1a,"locate ";inpX;" ";inpY+yPos;" ";inpW;" ";inpH print #w1,"refresh" RETURN [scanIndex] '*** get index number ntry$="" R=255 : G=255 : B=165 '*** pale yellow print #w1.g1a, "cls" print #w1.g1a, "fill ";R;" ";G;" ";B print #w1.g1, "when characterInput [keyDown]" print #w1.g1, "setfocus" [scanNum] calldll #kernel32,"Sleep",1 as ulong, res as void SCAN goto [scanNum] [keyDown] key$=Inkey$ : backup=0 : enter=0 if len(key$)<2 then ndx=asc(key$) else ndx=asc(mid$(key$,2,1)) end if if ndx=120 or ndx=88 then quit=1 : RETURN '*** X key to [quit] 'This seems redundant, but it's necessary 'for Enter, Escape and Backspace keys (maybe others)!!! if ndx=13 and asc(key$)=13 then enter=1 : RETURN if ndx=27 and asc(key$)=27 then backup=1 : RETURN if ndx=8 and asc(key$)=8 then '*** Backspace key ntry$=left$(ntry$,len(ntry$)-1) gosub [printNum] end if '*** accept a number, decimal, slash or space: if ndx>44 and ndx<58 or ndx=32 then ntry$=ntry$+chr$(ndx) gosub [printNum] end if if val(ntry$)>mx then NOTICE ntry$+" exceeds the maximum ";mx ntry$=left$(ntry$,len(ntry$)-1) gosub [printNum] : RETURN end if goto [scanNum] [printNum] print #w1.g1a, "cls;fill ";R;" ";G;" ";B print #w1.g1a, "backcolor ";R;" ";G;" ";B print #w1.g1a, "place 8 12;\"+ntry$ RETURN [getPrompts] kQ=74 : DIM q$(kQ) : DIM r$(kQ) for j=1 to kQ q$(j)="Prompt #"+str$(j) r$(j)=str$(j) '*** responses next j RETURN
NewsLetter TOC