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

  1.     // Tb30.prg
  2.  
  3.     // Program sequence illustrating how to browse a record
  4.     // on more than one line. Generic version, moves and highlights
  5.     // entire multi-line records
  6.  
  7.     #include "Inkey.ch"
  8.     #include "Tbutils.ch"
  9.  
  10.     FUNCTION Tb30
  11.  
  12.     FIELD Lname, Fname, Addr1, Addr2, Addr3, Addr4, State, Zip IN TbDbf1
  13.     
  14.     LOCAL oTbr
  15.     LOCAL oTbc
  16.     LOCAL nRowNum := 1      // Index into the fields array
  17.     LOCAL i
  18.     LOCAL bNext
  19.     LOCAL bPrev
  20.     LOCAL aFields := { ;
  21.                        {|| Lname + " " + Fname }, ;
  22.                        {|| Addr1 }, ;
  23.                        {|| Addr2 }, ;
  24.                        {|| Addr3 }, ;
  25.                        {|| Addr4 }, ;
  26.                        {|| Trim(State) + " " + Zip } ;
  27.                      }
  28.     
  29.     LOCAL lExitRequested
  30.     LOCAL nKey
  31.     LOCAL nVisRows
  32.     
  33.         USE TbDbf1
  34.         IF !file("TbDbf1.ntx")
  35.             INDEX ON Upper(Lname) TO TbDbf1
  36.         ELSE
  37.             SET INDEX TO TbDbf1
  38.         ENDIF
  39.     
  40.         CLEAR SCREEN
  41.         @ 0, 0 TO 23, 79
  42.     
  43.         oTbr  := TBrowseNew(1, 1, 22, 78)
  44.         oTbr:colSep  := DEF_CSEP
  45.         oTbr:footSep := DEF_FSEP
  46.         oTbr:headSep := DEF_HSEP
  47.     
  48.         oTbc := TBColumnNew(, {|| Eval(aFields[nRowNum]) } )
  49.         oTbr:addColumn(oTbc)
  50.     
  51.         oTbr:goTopBlock    := {| | DbGoTop(), nRowNum := 1 }
  52.         oTbr:goBottomBlock := {| | DbGoBottom(), nRowNum := Len(aFields) }
  53.         bNext := {|| GoNext(@nRowNum, aFields) }
  54.         bPrev := {|| GoPrev(@nRowNum, aFields) }
  55.         oTbr:skipBlock = {|n| DbSkipBlock(n, bNext, bPrev) }
  56.     
  57.         lExitRequested := .F.
  58.         DO WHILE !lExitRequested
  59.           FullStabilize(oTbr)
  60.           DO WHILE nRowNum != 1
  61.             oTbr:up()
  62.             FullStabilize(oTbr)
  63.           ENDDO
  64.     
  65.           // This ensures the entire record is always displayed
  66.           // Figure out how many visible rows ... may be at bottom of
  67.           // display
  68.           nVisRows := Min(oTbr:rowCount - oTbr:rowPos + 1, Len(aFields))
  69.           IF nVisRows < Len(aFields)
  70.             DO WHILE nRowNum != Len(aFields)
  71.               oTbr:down()
  72.               FullStabilize(oTbr)
  73.             ENDDO
  74.     
  75.             // Now back to line 1
  76.             DO WHILE nRowNum != 1
  77.               oTbr:up()
  78.               FullStabilize(oTbr)
  79.             ENDDO
  80.     
  81.           ENDIF
  82.     
  83.           oTbr:colorRect({ oTbr:rowPos, oTbr:leftVisible, ;
  84.                            oTbr:rowPos + Len(aFields) - 1, oTbr:rightVisible }, ;
  85.                            {2, 1})
  86.     
  87.           nKey := Inkey(0)
  88.     
  89.           // dehilite entire row before continuing
  90.           oTbr:colorRect({ oTbr:rowPos, oTbr:leftVisible, ;
  91.                            oTbr:rowPos + Len(aFields) - 1, oTbr:rightVisible }, ;
  92.                            {1, 2})
  93.     
  94.           IF nKey == K_DOWN
  95.             FOR i := 1 TO Len(aFields)
  96.               oTbr:down()
  97.             NEXT
  98.           ELSEIF !StdMeth(nKey, oTbr)
  99.             DO CASE
  100.               CASE nKey == K_ESC
  101.                 lExitRequested := .T.
  102.             ENDCASE
  103.           ENDIF
  104.         ENDDO
  105.     
  106.     RETURN NIL
  107.     
  108.     
  109.     FUNCTION GoNext(nRowNum, aFields)
  110.     
  111.     LOCAL lMoved := .T.
  112.     
  113.       IF Eof() .OR. LastRec() == 0
  114.         lMoved := .F.
  115.       ELSE
  116.         IF nRowNum < Len(aFields)
  117.           nRowNum++
  118.         ELSE
  119.           SKIP
  120.           IF !Eof()
  121.             nRowNum := 1
  122.           ELSE
  123.             SKIP -1
  124.             lMoved := .F.
  125.           ENDIF
  126.         ENDIF
  127.       ENDIF
  128.     
  129.     RETURN lMoved
  130.     
  131.     
  132.     FUNCTION GoPrev(nRowNum, aFields)
  133.     
  134.     LOCAL lMoved := .T.
  135.     
  136.       IF Bof() .OR. LastRec() == 0
  137.         lMoved := .F.
  138.       ELSE
  139.         IF nRowNum > 1
  140.           nRowNum--
  141.         ELSE
  142.           SKIP -1
  143.           IF !Bof()
  144.             nRowNum := Len(aFields)
  145.           ELSE
  146.             lMoved := .F.
  147.           ENDIF
  148.         ENDIF
  149.       ENDIF
  150.     
  151.     RETURN lMoved
  152.