home *** CD-ROM | disk | FTP | other *** search
- CLASS CHT
-
- FUNCTION BAR2D
- PARAMETER cPicFile
- LOCAL aChart:=self:set(), pic:=iif(valtype(cPicFile)='C',.T.,.F.)
- LOCAL aScrn:=aChart[1], aValues:= EVAL(aChart[2]), aXlabels:=aChart[3], cTitle:=aChart[4]
- LOCAL nXstart:=aScrn[2], nYstart:=aScrn[3], nWidth:=aScrn[6], nHeight:=aScrn[7], nFcolor:=aScrn[9], nBcolor:=aScrn[8]
- LOCAL nPHandle, x := 0, y := 0, i := 0, nBarwidth := 0, j
- LOCAL nMaxbar := 0, nMinbar := 0, ht_scale := 0
- LOCAL xaxis_st, yaxis_st, xaxis_en, yaxis_en
- LOCAL xpos := 0, nOldtfcolr := 0, nOldtbcolr := 0
- LOCAL nYval := 0, cYtext := ""
-
- xaxis_st := nXstart+32
- yaxis_st := nYstart+nHeight-32
- xaxis_en := nXstart+nWidth-32
- yaxis_en := nYstart+32
-
- nOldtfcolr = VSTXTCOLR(15)
- nOldtbcolr = VSTXTBCOLR(0)
-
- VFRECT(nXstart, nYstart, nWidth, nHeight, nBcolor)
-
- IF pic
- nPHandle = FCREATE(cPicFile)
- FWRITE (nPHandle, chr(1)+chr(0)+chr(0)+chr(0)+chr(1)+;
- chr(0)+chr(8)+chr(0)+chr(68)+chr(0)+;
- chr(0)+chr(0)+chr(0)+chr(12)+chr(127)+;
- chr(9)+chr(6)+chr(167)+chr(1)+chr(176))
- self:Send('AddRect', nPHandle, nXstart, nYstart, nWidth, nHeight)
- ENDIF
-
- VSFRAME(nXstart, nYstart, nWidth, nHeight)
- VSFRAME(nXstart+1, nYstart+1, nWidth-2, nHeight-2)
-
- i = 1
-
- DO WHILE ! i > LEN(aValues)
- j = 1
-
- DO WHILE ! j > LEN(aValues[i])
-
- IF nMaxbar < aValues[i,j]
- nMaxbar = aValues[i,j]
- ENDIF
- j = j + 1
- ENDDO
-
- i = i + 1
- ENDDO
-
- i = 1
-
- DO WHILE ! i > LEN(aValues)
- j = 1
-
- DO WHILE ! j > LEN(aValues[i])
-
- IF nMinbar > aValues[i,j]
- nMinbar = aValues[i,j]
- ENDIF
- j = j + 1
- ENDDO
-
- i = i + 1
- ENDDO
-
- nBarwidth = ROUND((nWidth-64)/LEN(aValues[1]),0)-2
- ht_scale = ABS((nHeight-64)/(nMaxbar-nMinbar))
-
-
- VLINE(xaxis_st, yaxis_st, xaxis_st, yaxis_en, 15)
- VLINE(xaxis_st, yaxis_st, xaxis_en, yaxis_st, 15)
-
- IF pic
- self:Send('AddLine', nPHandle, xaxis_st, yaxis_st, xaxis_st, yaxis_en)
- self:Send('AddLine', nPHandle, xaxis_st, yaxis_st, xaxis_en, yaxis_st)
- ENDIF
-
- i = 1
-
- DO WHILE ! i > LEN(aValues)
- j = 1
- xpos = xaxis_st+1
-
- DO WHILE ! j > LEN(aValues[i])
- self:Send('B2D', xpos, yaxis_st-1, nBarwidth, ht_scale*aValues[i,j]*-1, nFcolor+i-1, pic, nPHandle)
- xpos = xpos + nBarwidth + 2
- j = j + 1
- ENDDO
-
- i = i + 1
- ENDDO
-
- xpos = xaxis_st+1
- i = 1
-
- DO WHILE ! i > LEN(aValues[1])
- VSAYAT((xpos+1)+(LEN(TRIM(aXlabels[i]))*VTWIDTH()/2), nYstart+nHeight-VTHEIGHT()*1.5, aXlabels[i], nFcolor, nBcolor)
- VRECT((xpos+1)+((nBarwidth+2)/2), nYstart+nHeight-32+3, 1, -6, nFcolor)
-
- IF pic
- self:Send('AddText', nPHandle, (xpos+1)+(LEN(TRIM(aXlabels[i]))*VTWIDTH()/2), nYstart+nHeight-VTHEIGHT()*1.5, vtheight(), aXlabels[i])
- self:Send('AddRect', nPHandle, (xpos+1)+((nBarwidth+2)/2), nYstart+nHeight-32+3, 1, -6)
- ENDIF
-
- xpos = xpos + nBarwidth + 2
- i = i + 1
- ENDDO
-
- i = ROUND(nMaxbar*ht_scale,0)
-
- DO WHILE ! i < ROUND(nMinbar*ht_scale,0)
- nYval = ( i/((nMaxbar*ht_scale)-(nMinbar*ht_scale)) ) * nMaxbar
-
- IF nYval >= 1
- cYtext = LTRIM(STR(ROUND(nYval,0)))
- ELSE
- cYtext = LTRIM(STR(ROUND(nYval, 1)))
- ENDIF
-
- VSAYAT(nXstart+(VTWIDTH()/2), yaxis_st-i-(VTHEIGHT()/2), cYtext, nFcolor, nBcolor)
- VRECT(nXstart+32-3, yaxis_st-i, 6, 1, nFColor)
-
- IF pic
- self:Send('AddText', nPHandle, nXstart+(VTWIDTH()/2), yaxis_st-i-(VTHEIGHT()/2), vtheight(), cYtext)
- self:Send('AddRect', nPHandle, nXstart+32-3, yaxis_st-i, 6, 1)
- ENDIF
-
- i = i - 30
- ENDDO
-
-
- VSAYAT(nXstart+((nWidth-LEN(cTitle)*VTWIDTH())/2), nYstart+VTHEIGHT(), cTitle, nFcolor, nBcolor)
- VSTXTCOLR(nOldtfcolr)
- VSTXTBCOLR(nOldtbcolr)
-
- IF pic
- self:Send('AddText', nPHandle, nXstart+((nWidth-LEN(cTitle)*VTWIDTH())/2), nYstart+VTHEIGHT(), vtheight(), cTitle)
- FWRITE(nPHandle,chr(96))
- FCLOSE (nPHandle)
- ENDIF
-
- RETURN NIL
-
-
-
- FUNCTION BAR3D
- PARAMETER cPicFile
- LOCAL aChart:=self:set(), pic:=iif(valtype(cPicFile)='C',.T.,.F.)
- LOCAL aScrn:=aChart[1], aValues:= EVAL(aChart[2]), aXlabels:=aChart[3], cTitle:=aChart[4]
- LOCAL nXstart:=aScrn[2], nYstart:=aScrn[3], nWidth:=aScrn[6], nHeight:=aScrn[7], nFcolor:=aScrn[9], nBcolor:=aScrn[8]
- LOCAL nPHandle, x := 0, y := 0, i := 0, nBarwidth := 0, j
- LOCAL nMaxbar := 0, nMinbar := 0, ht_scale := 0
- LOCAL xaxis_st, yaxis_st, xaxis_en, yaxis_en
- LOCAL xpos := 0, nOldtfcolr := 0, nOldtbcolr := 0
- LOCAL nYval := 0, cYtext := ""
-
- xaxis_st := nXstart+32
- yaxis_st := nYstart+nHeight-32
- xaxis_en := nXstart+nWidth-32
- yaxis_en := nYstart+32
-
- nOldtfcolr = VSTXTCOLR(15)
- nOldtbcolr = VSTXTBCOLR(0)
-
- VFRECT(nXstart, nYstart, nWidth, nHeight, nBcolor)
-
- IF pic
- nPHandle = FCREATE(cPicFile)
- FWRITE (nPHandle, chr(1)+chr(0)+chr(0)+chr(0)+chr(1)+;
- chr(0)+chr(8)+chr(0)+chr(68)+chr(0)+;
- chr(0)+chr(0)+chr(0)+chr(12)+chr(127)+;
- chr(9)+chr(6)+chr(167)+chr(1)+chr(176))
- self:Send('AddRect', nPHandle, nXstart, nYstart, nWidth, nHeight)
- ENDIF
-
- VSFRAME(nXstart, nYstart, nWidth, nHeight)
- VSFRAME(nXstart+1, nYstart+1, nWidth-2, nHeight-2)
-
-
- i = 1
-
- DO WHILE ! i > LEN(aValues)
- j = 1
-
- DO WHILE ! j > LEN(aValues[i])
-
- IF nMaxbar < aValues[i,j]
- nMaxbar = aValues[i,j]
- ENDIF
- j = j + 1
- ENDDO
-
- i = i + 1
- ENDDO
-
- i = 1
-
- DO WHILE ! i > LEN(aValues)
- j = 1
-
- DO WHILE ! j > LEN(aValues[i])
-
- IF nMinbar > aValues[i,j]
- nMinbar = aValues[i,j]
- ENDIF
- j = j + 1
- ENDDO
-
- i = i + 1
- ENDDO
-
- nBarwidth = ROUND((nWidth-64)/(LEN(aValues[1])*1.5),0)-2
- ht_scale = ABS((nHeight-64)/(nMaxbar-nMinbar))
-
- VLINE(xaxis_st, yaxis_st, xaxis_st, yaxis_en, 15)
- VLINE(xaxis_st, yaxis_st, xaxis_en, yaxis_st, 15)
-
- IF pic
- self:Send('AddLine', nPHandle, xaxis_st, yaxis_st, xaxis_st, yaxis_en)
- self:Send('AddLine', nPHandle, xaxis_st, yaxis_st, xaxis_en, yaxis_st)
- ENDIF
-
- i = 1
-
- DO WHILE ! i > LEN(aValues)
- j = 1
- xpos = xaxis_st+1
-
- DO WHILE ! j > LEN(aValues[i])
- self:Send('B3D', xpos, yaxis_st-1, nBarwidth, ROUND(ht_scale*aValues[i,j],0) * -1, nFcolor+i-1, pic, nPHandle)
- xpos = xpos + nBarwidth + ROUND(nBarwidth/2,0) + 2
- j = j + 1
- ENDDO
-
- i = i + 1
- ENDDO
-
- xpos = xaxis_st+1
- i = 1
-
- DO WHILE ! i > LEN(aValues[1])
- VSAYAT((xpos+1)+((nBarwidth-nBarwidth*0.5)-LEN(TRIM(aXlabels[i]))*VTWIDTH()/2), nYstart+nHeight-VTHEIGHT()*1.5, aXlabels[i], nFcolor, nBcolor)
- VRECT((xpos+1)+((nBarwidth+2)/2), nYstart+nHeight-32+3, 1, -6, nFcolor)
-
- IF pic
- self:Send('AddText', nPHandle, (xpos+1)+((nBarwidth-nBarwidth*0.5)-LEN(TRIM(aXlabels[i]))*VTWIDTH()/2), nYstart+nHeight-VTHEIGHT()*1.5, vtheight(), aXlabels[i])
- self:Send('AddRect', nPHandle, (xpos+1)+((nBarwidth+2)/2), nYstart+nHeight-32+3, 1, -6)
- ENDIF
-
- xpos = xpos + nBarwidth + ROUND(nBarwidth/2,0) + 2
- i = i + 1
- ENDDO
-
-
- i = ROUND(nMaxbar*ht_scale,0)
-
- DO WHILE ! i < ROUND(nMinbar*ht_scale,0)
- nYval = ( i/((nMaxbar*ht_scale)-(nMinbar*ht_scale)) ) * nMaxbar
-
- IF nYval >= 1
- cYtext = LTRIM(STR(ROUND(nYval,0)))
- ELSE
- cYtext = LTRIM(STR(ROUND(nYval, 1)))
- ENDIF
-
- VSAYAT(nXstart+(VTWIDTH()/2), yaxis_st-i-(VTHEIGHT()/2), cYtext, nFcolor, nBcolor)
- VRECT(nXstart+32-3, yaxis_st-i, 6, 1, nFcolor)
-
- IF pic
- self:Send('AddText', nPHandle, nXstart+(VTWIDTH()/2), yaxis_st-i-(VTHEIGHT()/2), vtheight(), cYtext)
- self:Send('AddRect', nPHandle, nXstart+32-3, yaxis_st-i, 6, 1)
- ENDIF
-
- i = i - 30
- ENDDO
-
-
- VSAYAT(nXstart+((nWidth-LEN(cTitle)*VTWIDTH())/2), nYstart+VTHEIGHT(), cTitle, nFcolor, nBcolor)
- VSTXTCOLR(nOldtfcolr)
- VSTXTBCOLR(nOldtbcolr)
-
- IF pic
- self:Send('AddText', nPHandle, nXstart+((nWidth-LEN(cTitle)*VTWIDTH())/2), nYstart+VTHEIGHT(), vtheight(), cTitle)
- FWRITE(nPHandle,chr(96))
- FCLOSE (nPHandle)
- ENDIF
-
-
- RETURN NIL
-
-
-
-
- FUNCTION LINEGRAPH
- PARAMETER cPicFile
- LOCAL aChart:=self:set(), pic:=iif(valtype(cPicFile)='C',.T.,.F.)
- LOCAL aScrn:=aChart[1], aValues:= EVAL(aChart[2]), aXlabels:=aChart[3], cTitle:=aChart[4]
- LOCAL nXstart:=aScrn[2], nYstart:=aScrn[3], nWidth:=aScrn[6], nHeight:=aScrn[7], nFcolor:=aScrn[9], nBcolor:=aScrn[8]
- LOCAL nPHandle, x := 0, y := 0, i := 0, nBarwidth := 0, j
- LOCAL nMaxbar := 0, nMinbar := 0, ht_scale := 0
- LOCAL xaxis_st, yaxis_st, xaxis_en, yaxis_en
- LOCAL xpos := 0, nOldtfcolr := 0, nOldtbcolr := 0
- LOCAL nYval := 0, cYtext := ""
-
- xaxis_st := nXstart+32
- yaxis_st := nYstart+nHeight-32
- xaxis_en := nXstart+nWidth-32
- yaxis_en := nYstart+32
-
- nOldtfcolr = VSTXTCOLR(15)
- nOldtbcolr = VSTXTBCOLR(0)
-
- VFRECT(nXstart, nYstart, nWidth, nHeight, nBcolor)
-
- IF pic
- nPHandle = FCREATE(cPicFile)
- FWRITE (nPHandle, chr(1)+chr(0)+chr(0)+chr(0)+chr(1)+;
- chr(0)+chr(8)+chr(0)+chr(68)+chr(0)+;
- chr(0)+chr(0)+chr(0)+chr(12)+chr(127)+;
- chr(9)+chr(6)+chr(167)+chr(1)+chr(176))
- self:Send('AddRect', nPHandle, nXstart, nYstart, nWidth, nHeight)
- ENDIF
-
- VSFRAME(nXstart, nYstart, nWidth, nHeight)
- VSFRAME(nXstart+1, nYstart+1, nWidth-2, nHeight-2)
-
- i = 1
-
- DO WHILE ! i > LEN(aValues)
- j = 1
-
- DO WHILE ! j > LEN(aValues[i])
-
- IF nMaxbar < aValues[i,j]
- nMaxbar = aValues[i,j]
- ENDIF
- j = j + 1
- ENDDO
-
- i = i + 1
- ENDDO
-
- i = 1
-
- DO WHILE ! i > LEN(aValues)
- j = 1
-
- DO WHILE ! j > LEN(aValues[i])
-
- IF nMinbar > aValues[i,j]
- nMinbar = aValues[i,j]
- ENDIF
- j = j + 1
- ENDDO
-
- i = i + 1
- ENDDO
-
-
- nBarwidth = ROUND((nWidth-64)/LEN(aValues[1]),0)-2
- ht_scale = ABS((nHeight-64)/(nMaxbar-nMinbar))
-
- VLINE(xaxis_st, yaxis_st, xaxis_st, yaxis_en, 15)
- VLINE(xaxis_st, yaxis_st, xaxis_en, yaxis_st, 15)
-
- IF pic
- self:Send('AddLine', nPHandle, xaxis_st, yaxis_st, xaxis_st, yaxis_en)
- self:Send('AddLine', nPHandle, xaxis_st, yaxis_st, xaxis_en, yaxis_st)
- ENDIF
-
-
- i = 1
-
- DO WHILE ! i > LEN(aValues)
- j = 1
- xpos = xaxis_st+1+ROUND((nBarwidth+2)/2,0)
-
- DO WHILE ! j > LEN(aValues[i])-1
- VLINE(xpos, yaxis_st-(ht_scale*aValues[i,j]), xpos+nBarwidth+2, yaxis_st-(ht_scale*aValues[i,j+1]), nFcolor+i-1)
-
- IF pic
- self:Send('AddLine', nPHandle, xpos, yaxis_st-(ht_scale*aValues[i,j]), xpos+nBarwidth+2, yaxis_st-(ht_scale*aValues[i,j+1]))
- ENDIF
-
- xpos = xpos + nBarwidth + 2
- j = j + 1
- ENDDO
-
- i = i + 1
- ENDDO
-
- xpos = xaxis_st+1
-
- i = 1
-
- DO WHILE ! i > LEN(aValues[1])
- VSAYAT((xpos+1)+(LEN(TRIM(aXlabels[i]))*VTWIDTH()/2), nYstart+nHeight-VTHEIGHT()*1.5, aXlabels[i], nFcolor, nBcolor)
- VRECT((xpos+1)+((nBarwidth+2)/2), nYstart+nHeight-32+3, 1, -6, nFcolor)
-
- IF pic
- self:Send('AddText', nPHandle, (xpos+1)+(LEN(TRIM(aXlabels[i]))*VTWIDTH()/2), nYstart+nHeight-VTHEIGHT()*1.5, vtheight(), aXlabels[i])
- self:Send('AddRect', nPHandle,(xpos+1)+((nBarwidth+2)/2), nYstart+nHeight-32+3, 1, -6)
- ENDIF
- xpos = xpos + nBarwidth + 2
- i = i + 1
- ENDDO
-
-
- i = ROUND(nMaxbar*ht_scale,0)
-
- DO WHILE ! i < ROUND(nMinbar*ht_scale,0)
- nYval = ( i/((nMaxbar*ht_scale)-(nMinbar*ht_scale)) ) * nMaxbar
-
- IF nYval >= 1
- cYtext = LTRIM(STR(ROUND(nYval,0)))
- ELSE
- cYtext = LTRIM(STR(ROUND(nYval, 1)))
- ENDIF
-
- VSAYAT(nXstart+(VTWIDTH()/2), yaxis_st-i-(VTHEIGHT()/2), cYtext, nFcolor, nBcolor)
- VRECT(nXstart+32-3, yaxis_st-i, 6, 1, nFcolor)
-
- IF pic
- self:Send('AddText', nPHandle, nXstart+(VTWIDTH()/2), yaxis_st-i-(VTHEIGHT()/2), vtheight(), cYtext)
- self:Send('AddRect', nPHandle,nXstart+32-3, yaxis_st-i, 6, 1)
- ENDIF
-
- i = i - 30
- ENDDO
-
- VSAYAT(nXstart+((nWidth-LEN(cTitle)*VTWIDTH())/2), nYstart+VTHEIGHT(), cTitle, nFcolor, nBcolor)
- VSTXTCOLR(nOldtfcolr)
- VSTXTBCOLR(nOldtbcolr)
-
- IF pic
- self:Send('AddText', nPHandle, nXstart+((nWidth-LEN(cTitle)*VTWIDTH())/2), nYstart+VTHEIGHT(), vtheight(), cTitle)
- FWRITE(nPHandle,chr(96))
- FCLOSE (nPHandle)
- ENDIF
-
- RETURN NIL
-
-
-
- FUNCTION B3D
- PARAMETER nXstart, nYstart, nWidth, nHeight, nFcolor, pic, nPHandle
- LOCAL nX := 0, nY := nYstart
-
- VFRECT(nXstart, nYstart, nWidth, nHeight, nFcolor)
-
- IF pic
- self:Send('AddRect', nPHandle, nXstart, nYstart, nWidth, nHeight)
- ENDIF
-
- nX = nXstart+nWidth+1
-
- DO WHILE ! nX > nXstart+nWidth+ROUND(nWidth/2,0)
- nY = nY + 1
- VLINE(nX, nY, nX, nY-ABS(nHeight), 8)
-
- IF pic
- self:Send('AddLine', nPHandle, nX, nY, nX, nY-ABS(nHeight))
- ENDIF
-
- nX = nX + 1
- ENDDO
-
- nY = nYstart-ABS(nHeight)
- nX = nXstart+1
-
- DO WHILE ! nX > nXstart+ROUND(nWidth/2,0)
- nY = nY + 1
- VLINE(nX, nY, nX+nWidth, nY, 7)
-
- IF pic
- self:Send('AddLine', nPHandle, nX, nY, nX+nWidth, nY)
- ENDIF
- nX = nX + 1
- ENDDO
-
- RETURN (NIL)
-
-
-
- FUNCTION B2D
- PARAMETER nXstart, nYstart, nWidth, nHeight, nFcolor, pic, nPhandle
- VFRECT(nXstart, nYstart, nWidth, nHeight, nFcolor)
-
- IF pic
- self:Send('AddRect', nPHandle, nXstart, nYstart, nWidth, nHeight)
- ENDIF
- RETURN (NIL)
-
-
-
- FUNCTION AddLine
- PARAMETER nPHandle,x1,y1,x2,y2
- LOCAL aChart:=self:set(), aScrn:=aChart[1], vp1,vp2,vp3,vp4
-
- vp1 = (x1 - aScrn[2]) * (2800 / aScrn[6])
- vp2 = (aScrn[5] - y1) * (2250 / aScrn[7])
- vp3 = (x2 - aScrn[2]) * (2800 / aScrn[6])
- vp4 = (aScrn[5] - y2) * (2250 / aScrn[7])
- fwrite(nPHandle,chr(160)+num2chr(vp1)+num2chr(vp2)+chr(162)+num2chr(vp3)+num2chr(vp4))
- RETURN NIL
-
-
-
- FUNCTION AddText
- PARAMETER nPHandle,x1,y1,size,txt
- LOCAL aChart:=self:set(), aScrn:=aChart[1], vp1,vp2,vp3,vp4
-
- vp1 = (x1 - aScrn[2]) * (2800 / aScrn[6])
- vp2 = (aScrn[5] - y1) * (2250 / aScrn[7])
- vp4 = size * (2250 / aScrn[7])
- vp3 = vp4 * .825
- FWRITE (nPHandle,chr(160)+num2chr(vp1)+num2chr(vp2)+chr(172)+num2chr(vp3)+num2chr(vp4)+chr(168)+chr(7)+txt+chr(0))
- RETURN NIL
-
-
-
- FUNCTION AddRect
- PARAMETER nFhandle, nX, nY, nDX, nDY
- self:Send('AddLine', nFhandle, nX, nY, nX+nDX-1, nY)
- self:Send('AddLine', nFhandle, nX+nDX-1, nY, nX+nDX-1, nY+nDY-1)
- self:Send('AddLine', nFhandle, nX+nDX-1, nY+nDY-1, nX, nY+nDY-1)
- self:Send('AddLine', nFhandle, nX, nY+nDY-1, nX, nY)
- RETURN NIL
-