home *** CD-ROM | disk | FTP | other *** search
- // Tb28.prg
- //
- // Program sequence illustrating how to browse a record
- // on more than one line
- //
- // Compile with /a /m /n /w
- //
- // Link with Tbutils, Dict, Tb07
-
- #define LAST_ADDR_LINE iif(!Empty(Addr3), 3, ;
- iif(!empty(Addr2), 2, 1))
-
- #include "Inkey.ch"
- #include "Tbutils.ch"
-
- FUNCTION Tb28
-
- FIELD Lname, Fname, Addr1, Addr2, Addr3 IN TbDbf1
-
- LOCAL oTbr
- LOCAL oTbc1, oTbc2, oTbc3
- LOCAL nAddrLine := 1 // Address line # we are looking at
- LOCAL bNext
- LOCAL bPrev
-
- USE TbDbf1
- IF !file("TbDbf1.ntx")
- INDEX ON Upper(Lname + Fname) TO TbDbf1
- ELSE
- SET INDEX TO TbDbf1
- ENDIF
-
- CLEAR SCREEN
- @ 0, 0 TO 23, 79
-
- oTbr := TBrowseNew(1, 1, 22, 78)
- oTbr:colSep := DEF_CSEP
- oTbr:headSep := DEF_HSEP
- oTbr:footSep := DEF_FSEP
-
- oTbc1 := TBColumnNew("Last Name", {|| iif(nAddrLine == 1, Lname, "") })
- oTbc1:width := 20
- oTbr:addColumn(oTbc1)
-
- oTbc2 := TBColumnNew("First Name", {|| iif(nAddrLine == 1, Fname, "") })
- oTbc2:width := 20
- oTbr:addCOlumn(oTbc2)
-
- oTbc3 := TBColumnNew("Address", ;
- {|| iif(nAddrLine == 1, Addr1, ;
- iif(nAddrLine == 2, Addr2, ;
- Addr3))})
- oTbr:addColumn(oTbc3)
-
- oTbr:goTopBlock := {| | DbGoTop(), nAddrLine := 1 }
- oTbr:goBottomBlock := {| | DbGoBottom(), nAddrLine := LAST_ADDR_LINE }
- bNext := {|| GoNext(@nAddrLine) }
- bPrev := {|| GoPrev(@nAddrLine) }
- oTbr:skipBlock = {|n| DbSkipBlock(n, bNext, bPrev) }
-
- Mybrowse2(oTbr)
-
- RETURN NIL
-
-
- FUNCTION GoNext(nAddrLine)
-
- FIELD Addr1, Addr2, Addr3 IN TbDbf1
-
- LOCAL lMoved := .T.
-
- IF Eof() .OR. LastRec() == 0
- lMoved := .F.
- ELSE
- IF nAddrLine == 1 .AND. !Empty(Addr2) .OR. ;
- nAddrLine == 2 .AND. !Empty(Addr3)
- nAddrLine++
- ELSE
- SKIP
- IF !Eof()
- nAddrLine := 1
- ELSE
- SKIP -1
- lMoved := .F.
- ENDIF
- ENDIF
- ENDIF
-
- RETURN lMoved
-
-
- FUNCTION GoPrev(nAddrLine)
-
- FIELD Addr1, Addr2, Addr3 IN TbDbf1
-
- LOCAL lMoved := .T.
-
- IF Bof() .OR. LastRec() == 0
- lMoved := .F.
- ELSE
- IF nAddrLine == 3 .OR. nAddrLine == 2
- nAddrLine--
- ELSE
- SKIP -1
- IF !Bof()
- nAddrLine := LAST_ADDR_LINE
- ELSE
- lMoved := .F.
- ENDIF
- ENDIF
- ENDIF
-
- RETURN lMoved