home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a065 / 1.img / TBPRGS.EXE / TB28.PRG < prev    next >
Encoding:
Text File  |  1992-03-05  |  2.9 KB  |  114 lines

  1.     // Tb28.prg
  2.     //
  3.     // Program sequence illustrating how to browse a record
  4.     // on more than one line
  5.     //
  6.     // Compile with /a /m /n /w
  7.     //
  8.     // Link with Tbutils, Dict, Tb07
  9.     
  10.     #define LAST_ADDR_LINE iif(!Empty(Addr3), 3, ;
  11.                                iif(!empty(Addr2), 2, 1))
  12.     
  13.     #include "Inkey.ch"
  14.     #include "Tbutils.ch"
  15.     
  16.     FUNCTION Tb28
  17.     
  18.     FIELD Lname, Fname, Addr1, Addr2, Addr3 IN TbDbf1
  19.     
  20.     LOCAL oTbr
  21.     LOCAL oTbc1, oTbc2, oTbc3
  22.     LOCAL nAddrLine := 1      // Address line # we are looking at
  23.     LOCAL bNext
  24.     LOCAL bPrev
  25.     
  26.         USE TbDbf1
  27.         IF !file("TbDbf1.ntx")
  28.             INDEX ON Upper(Lname + Fname) TO TbDbf1
  29.         ELSE
  30.             SET INDEX TO TbDbf1
  31.         ENDIF
  32.     
  33.         CLEAR SCREEN
  34.         @ 0, 0 TO 23, 79
  35.     
  36.         oTbr  := TBrowseNew(1, 1, 22, 78)
  37.         oTbr:colSep  := DEF_CSEP
  38.         oTbr:headSep := DEF_HSEP
  39.         oTbr:footSep := DEF_FSEP
  40.     
  41.         oTbc1 := TBColumnNew("Last Name", {|| iif(nAddrLine == 1, Lname, "") })
  42.         oTbc1:width := 20
  43.         oTbr:addColumn(oTbc1)
  44.     
  45.         oTbc2 := TBColumnNew("First Name", {|| iif(nAddrLine == 1, Fname, "") })
  46.         oTbc2:width := 20
  47.         oTbr:addCOlumn(oTbc2)
  48.     
  49.         oTbc3 := TBColumnNew("Address", ;
  50.                              {|| iif(nAddrLine == 1, Addr1, ;
  51.                                      iif(nAddrLine == 2, Addr2, ;
  52.                                                          Addr3))})
  53.         oTbr:addColumn(oTbc3)
  54.     
  55.         oTbr:goTopBlock    := {| | DbGoTop(), nAddrLine := 1 }
  56.         oTbr:goBottomBlock := {| | DbGoBottom(), nAddrLine := LAST_ADDR_LINE }
  57.         bNext := {|| GoNext(@nAddrLine) }
  58.         bPrev := {|| GoPrev(@nAddrLine) }
  59.         oTbr:skipBlock = {|n| DbSkipBlock(n, bNext, bPrev) }
  60.     
  61.         Mybrowse2(oTbr)
  62.     
  63.     RETURN NIL
  64.     
  65.     
  66.     FUNCTION GoNext(nAddrLine)
  67.     
  68.     FIELD Addr1, Addr2, Addr3 IN TbDbf1
  69.     
  70.     LOCAL lMoved := .T.
  71.     
  72.       IF Eof() .OR. LastRec() == 0
  73.         lMoved := .F.
  74.       ELSE
  75.         IF nAddrLine == 1 .AND. !Empty(Addr2) .OR. ;
  76.            nAddrLine == 2 .AND. !Empty(Addr3)
  77.           nAddrLine++
  78.         ELSE
  79.           SKIP
  80.           IF !Eof()
  81.             nAddrLine := 1
  82.           ELSE
  83.             SKIP -1
  84.             lMoved := .F.
  85.           ENDIF
  86.         ENDIF
  87.       ENDIF
  88.     
  89.     RETURN lMoved
  90.     
  91.     
  92.     FUNCTION GoPrev(nAddrLine)
  93.     
  94.     FIELD Addr1, Addr2, Addr3 IN TbDbf1
  95.     
  96.     LOCAL lMoved := .T.
  97.     
  98.       IF Bof() .OR. LastRec() == 0
  99.         lMoved := .F.
  100.       ELSE
  101.         IF nAddrLine == 3 .OR. nAddrLine == 2
  102.           nAddrLine--
  103.         ELSE
  104.           SKIP -1
  105.           IF !Bof()
  106.             nAddrLine := LAST_ADDR_LINE
  107.           ELSE
  108.             lMoved := .F.
  109.           ENDIF
  110.         ENDIF
  111.       ENDIF
  112.     
  113.     RETURN lMoved
  114.