home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
High Voltage Shareware
/
high1.zip
/
high1
/
DIR7
/
FOXTAILS.ZIP
/
LOOKUP.PRG
< prev
next >
Wrap
Text File
|
1992-03-21
|
6KB
|
168 lines
PROCEDURE Lokup
PARAMETER Ttlstr,Fldlist,Defsrch,Toprow,Topcol,botrow,;
Botcol,Db,Ldb,Exwin,key1,key2
* TtlStr = String for Title Line
* Fldlist = Browse Field List in FoxPro Format
* Defsrch = Beginning Default Search
* Toprow = Top Row (relative) of Box
* Topcol = Top Column (relative) of Box
* Botrow = Bottom Row (relative) of Box
* Botcol = Bottom Column (relative) of Box
* db = Database Alias to be in use after lookup
* ldb = Database Alias to be in use during lookup
* Exwin = Window to activate upon exit
* Key1 = For Scoping (limiting) the scroll... Beginning value of index
* Key2 = For Scoping (limiting) the scroll... Ending value of index
SELECT (Ldb) && Select the lookup Database
* Numlkp is a counter/macro, used for nesting these buggers.
Numlkp = ALLTRIM(STR(VAL(NumLkp)+1)) && Only increment when needed
PUSH KEY
DO Keyset
PRIVATE Cursrch, Newtop, Dne, Lk, Mkey, Lk_ind, Lk_sk, Lk_pct
PRIVATE Osrch, Keyprg
Cursrch=Defsrch && Cursrch is the key for the power seek
SET CONFIRM OFF
SET NEAR ON
SET EXACT OFF
SET BELL OFF
DEFINE WINDOW ("Incrsrch"+Numlkp) FROM Toprow,TopCol TO Botrow,Botcol SHADOW FLOAT CLOSE
ACTIVATE WINDOW ("Incrsrch"+Numlkp) && Display Window
DEFINE WINDOW ("Cursrch"+Numlkp) IN WINDOW ("Incrsrch"+Numlkp) FROM 0,0 TO 0,Botcol-topcol-2 NONE
ACTIVATE WINDOW ("Cursrch"+Numlkp) IN WINDOW ("Incrsrch"+Numlkp) && Text window for search stuff
@0,0 SAY "Seek: "
* Say the current search string
IF TYPE(SYS(14,VAL(SYS(21))))="C"
@0,6 SAY Defsrch
ELSE
@0,6 SAY "->Power Seek Disabled"
ENDIF
DEFINE WINDOW ("Lookup"+Numlkp) IN WINDOW ("Incrsrch"+Numlkp) FROM 1,0 TO Botrow-toprow-2,;
Botcol-topcol-2 NONE && This is where the browse lives
IF !USED('Junk')
SELECT 0 && Next available area
USE Junk
SELECT (Ldb) && Back to browse database
ENDIF
SEEK Cursrch && Now we SEEK with Exact off and Near on
Dne = .F.
MKey = IIF(Key1="NONE","","KEY "+Key1)
Mkey = IIF(Key2="NONE",Mkey,Mkey+", "+Key2)
Osrch=Cursrch
DO WHILE .T.
SHOW WINDOW ("Lookup"+Numlkp) IN WINDOW ("Incrsrch"+Numlkp) TOP && Show browse window
* The browse (yipee) uses the incr1(junk) validation clause.
BROWSE FIELDS Junk->junk:p="!":v=incr1(Junk->junk):h="":1,&Fldlist. ;
FREEZE Junk->Junk WINDOW ("Lookup"+Numlkp) IN WINDOW ("Incrsrch"+Numlkp) ;
SAVE Title TtlStr &Mkey. && Do the browse...uh-huh, yea; Do it real good
Newtop=UPPER(WONTOP()) && What's the current window that's on top?
DO CASE
CASE !WEXIST(TtlStr)
EXIT && Browse window is closed, somehow...
CASE Newtop = "CURSRCH"+Numlkp && Override power search, go direct
* This area needs some sprucing up still....
ACTIVATE WINDOW ("Cursrch"+Numlkp) IN WINDOW ("Incrsrch"+Numlkp)
CLEAR
Lk_Ind = SYS(14,VAL(SYS(21)))
DO CASE
CASE TYPE(Lk_Ind) = "C"
Lk_sk = PADR(Cursrch,LEN(Lk_Ind)-LEN(Cursrch))
Lk_Pct = IIF(AT("UPPER",Lk_ind)<>0,"PICTURE '@!'","")
@0,0 SAY "Seek: " GET Lk_sk &Lk_Pct.
READ
CASE TYPE(Lk_Ind) = "N"
Lk_sk = 0.0000
@0,0 SAY "Seek: " GET Lk_sk PICTURE "99999999.9999"
READ
CASE TYPE(Lk_Ind) = "D"
Lk_sk = DATE()
@0,0 SAY "Seek: " GET Lk_sk
READ
ENDCASE
SEEK Lk_sk
IF TYPE(Lk_ind) = "C"
Cursrch=TRIM(Lk_sk)
ENDIF
OTHERWISE && probably a letter or backspace
IF Cursrch<>Osrch .OR. Osrch<>Cursrch
IF TYPE(SYS(14,VAL(SYS(21)))) = "C"
ACTIVATE WINDOW ("Cursrch"+Numlkp) IN WINDOW ("Incrsrch"+Numlkp)
CLEAR
@0,0 SAY "Seek: " + Cursrch && Say the current search string
SEEK Cursrch && You've said it, now seek it.
ELSE
WAIT "Not a Character Index - No Power Seek" WINDOW
Cursrch = ''
ENDIF
ENDIF
Osrch = Cursrch
ENDCASE
ENDDO && Loop again (go do the browse, you idiot!)
IF !EMPTY(Exwin)
ACTIVATE WINDOW &Exwin. && Activate the original window
ELSE
ACTIVATE SCREEN
ENDIF
POP KEY
IF USED('Junk') AND Numlkp = "1"
USE IN Junk
ENDIF
* Clears all windows involved
IF WEXIST('Incrsrch'+Numlkp)
RELEASE WINDOW ("Incrsrch"+Numlkp)
ENDIF
IF WEXIST('Incrsrch'+Numlkp)
RELEASE WINDOW ("Incrsrch"+Numlkp)
ENDIF
IF WEXIST('Selct'+Numlkp)
RELEASE WINDOW ('Selct'+Numlkp)
ENDIF
IF WEXIST('Refresh')
RELEASE WINDOW Refresh
ENDIF
SELECT (Db)
RELEASE Cursrch, Newtop, Dne
Numlkp = ALLTRIM(STR(VAL(NumLkp)-1))
RETURN
PROCEDURE Incr1
PARAMETERS Thischar
* This proc increments the seek buffer by the value of Thischar (Junk)
REPLACE Junk->Junk WITH Chr(255)
IF TYPE(SYS(14,VAL(SYS(21)))) = "C"
Cursrch = Cursrch + Thischar
DEFINE WINDOW Refresh FROM 0,0 TO 0,0 NONE && Refresh window
ACTIVATE WINDOW Refresh
ENDIF
RETURN .T.
PROCEDURE Incr2
* This proc is a Backspace, or Delete character
IF TYPE(SYS(14,VAL(SYS(21)))) = "C"
Cursrch = IIF(LEN(Cursrch)>0,LEFT(Cursrch,LEN(Cursrch)-1),"")
DEFINE WINDOW Refresh FROM 0,0 TO 0,0 NONE && Refresh window
ACTIVATE WINDOW REFRESH
ENDIF
RETURN
PROCEDURE Incrclr
* Clear the Seekbuf
Lk_ind = TYPE(SYS(14,VAL(SYS(21))))
Cursrch = IIF(Lk_ind = "C","",IIF(Lk_ind = "D",{ / / },0))
Osrch = IIF(Lk_ind = "C","1",IIF(Lk_ind = "D",{01/01/01},1))
IF Lk_ind<> "C"
ACTIVATE WINDOW ("Cursrch"+Numlkp) IN WINDOW ("Incrsrch"+Numlkp)
CLEAR
@0,0 SAY "Seek: ->Power Seek Disabled"
ENDIF
DEFINE WINDOW Refresh FROM 0,0 TO 0,0 NONE && Refresh window
ACTIVATE WINDOW REFRESH
RETURN
PROCEDURE Keyset
* Reset the On Key Labels...
ON KEY LABEL Backspace DO incr2 && Cursrch = Cursrch -1
ON KEY LABEL TAB DO Incrclr && Clear Cursrch
RETURN