home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / CLIPPER / DATABASE / APOP.ZIP / SCROLBAR.PRG < prev    next >
Encoding:
Text File  |  1993-04-24  |  4.1 KB  |  100 lines

  1. ***********************************************************************
  2. *  Scrolbar.prg
  3. *  Implements a scroll bar that can be updated as the cursor moves down
  4. *  in a TBrowse object, ACHOICE(), DBEDIT(), or MEMOEDIT().
  5. *
  6. *  Copyright (c) 1990, Nantucket Corp.  All rights reserved.
  7. *  David R. Allison
  8. *
  9. * UPDATED BY: KRAIG KRIST/T BEAR COMPUTER SERVICES
  10. *       WHEN: APRIL 1993
  11. *        WHY: ADD COMMENTS AND ENHANCE.
  12. ***********************************************************************
  13. #INCLUDE "FILEMAN.CH"
  14. ***********************************************************************
  15. *  Create a new scroll bar array with the specified coordinates
  16. ***********************************************************************
  17. FUNCTION SCROLLBARNEW(nTOPROW,nTOPCOLUMN,nBOTTOMROW,cCOLORSTRING,;
  18.                       nINITPOSITION)
  19.   MEMVAR aSCROLLBAR
  20.   aSCROLLBAR := ARRAY(TB_ELEMENTS)
  21.   aSCROLLBAR[TB_ROWTOP] := nTOPROW
  22.   aSCROLLBAR[TB_COLTOP] := nTOPCOLUMN
  23.   aSCROLLBAR[TB_ROWBOTTOM] := nBOTTOMROW
  24.   aSCROLLBAR[TB_COLBOTTOM] := nTOPCOLUMN
  25. ***********************************************************************
  26. *  Set the default color to White on Black if none specified
  27. ***********************************************************************
  28.   IF cCOLORSTRING == NIL
  29.     cCOLORSTRING := "W/N"
  30.   ENDIF
  31.   aSCROLLBAR[TB_COLOR] := cCOLORSTRING
  32. ***********************************************************************
  33. *  Set the starting position
  34. ***********************************************************************
  35.   IF nINITPOSITION == NIL
  36.     nINITPOSITION := 1
  37.   ENDIF
  38.   aSCROLLBAR[TB_POSITION] := nINITPOSITION
  39. RETURN(NIL)
  40. ***********************************************************************
  41. *  FUNCTION SCROLLBARDISPLAY
  42. ***********************************************************************
  43. FUNCTION SCROLLBARDISPLAY()
  44.   MEMVAR aSCROLLBAR
  45.   LOCAL cOLDCOLOR, nROW
  46.   cOLDCOLOR := SETCOLOR(aSCROLLBAR[TB_COLOR])
  47. ***********************************************************************
  48. *  Draw the background
  49. ***********************************************************************
  50.   FOR nROW := (aSCROLLBAR[TB_ROWTOP]+1) TO (aSCROLLBAR[TB_ROWBOTTOM]-1)
  51.     @ nROW, aSCROLLBAR[TB_COLTOP] SAY TB_BACKGROUND
  52.   NEXT
  53.   SETCOLOR(cOLDCOLOR)
  54. RETURN(NIL)
  55. ***********************************************************************
  56. *  FUNCTION SCROLLBARUPDATE
  57. ***********************************************************************
  58. *  Update scroll bar array with new tab position and redisplay tab
  59. ***********************************************************************
  60. FUNCTION SCROLLBARUPDATE(nCURRENT,nTOTAL,lFORCEUPDATE)
  61.   MEMVAR aSCROLLBAR
  62.   LOCAL cOLDCOLOR, nNEWPOSITION
  63.   LOCAL nSCROLLHEIGHT := (aSCROLLBAR[TB_ROWBOTTOM]-1) -;
  64.         (aSCROLLBAR[TB_ROWTOP])
  65.   IF nTOTAL < 1
  66.     nTOTAL := 1
  67.   ENDIF
  68.   IF nCURRENT < 1
  69.     nCURRENT := 1
  70.   ENDIF
  71.   IF nCURRENT > nTOTAL
  72.     nCURRENT := nTOTAL
  73.   ENDIF
  74.   IF lFORCEUPDATE == NIL
  75.     lFORCEUPDATE := .F.
  76.   ENDIF
  77.   cOLDCOLOR := SETCOLOR(aSCROLLBAR[TB_COLOR])
  78. ***********************************************************************
  79. *  Determine the new position
  80. ***********************************************************************
  81.   nNEWPOSITION := ROUND((nCURRENT/nTOTAL) * nSCROLLHEIGHT,0)
  82. ***********************************************************************
  83. *  Resolve algorythm oversights
  84. ***********************************************************************
  85.   nNEWPOSITION := IF(nNEWPOSITION < 1,1,nNEWPOSITION)
  86.   nNEWPOSITION := IF(nCURRENT == 1,1,nNEWPOSITION)
  87.   nNEWPOSITION := IF(nCURRENT >= nTOTAL,nSCROLLHEIGHT,nNEWPOSITION)
  88. ***********************************************************************
  89. *  Overwrite the old position (if different), then draw in the new one
  90. ***********************************************************************
  91.   IF nNEWPOSITION <> aSCROLLBAR[TB_POSITION] .OR. lFORCEUPDATE
  92.     @ (aSCROLLBAR[TB_POSITION] + aSCROLLBAR[TB_ROWTOP]), ;
  93.        aSCROLLBAR[TB_COLTOP] SAY TB_BACKGROUND
  94.     @ (nNEWPOSITION+aSCROLLBAR[TB_ROWTOP]),aSCROLLBAR[TB_COLTOP] SAY;
  95.       TB_HIGHLIGHT
  96.     aSCROLLBAR[TB_POSITION] := nNEWPOSITION
  97.   ENDIF
  98.   SETCOLOR(cOLDCOLOR)
  99. RETURN(NIL)
  100.