// TGraph test
#Include "Fivewin.Ch"
#define GRAPH_TYPE_BAR 1
#define GRAPH_TYPE_LINE 2
#define GRAPH_TYPE_POINT 3
#define GRAPH_TYPE_PIE 4
#define GRAPH_TYPE_ALL 5
#Define SERIE_VALUES 1
#Define PERIOD_VALUES 2
Static oGraph, oItem[10], aEntrad, aSaidas, aSaldos, aTitulo, aVals, aItem
FUNCTION RELGRAPH(nData)
LOCAL oGrfDl, oGraph, oFontT, oFontX, oFontY
LOCAL cItem, oPie, oFont
IF ! ChkMangr() ; RETURN NIL ; ENDIF
aEntrad := {0,0,0,0,0,0,0,0,0,0,0,0}
aSaidas := {0,0,0,0,0,0,0,0,0,0,0,0}
aSaldos := {0,0,0,0,0,0,0,0,0,0,0,0}
aTitulo := {"Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"}
IF nData = 1
aVals := {aEntrad,aSaidas,aSaldos}
nAno := YEAR(DATE())
IF MsgGet("Ano base","Ano base",@nAno)
MsgMeter( { | oMeter, oText, oDlg, lEnd | ;
GetCaixa( oMeter, oText, oDlg, @lEnd, @aEntrad, @aSaidas, @aSaldos, @aVals, nAno) },;
"Obtendo valores. Aguarde...")
ENDIF
aItem:= { "Entradas", "Saidas","Saldos"}
ELSE
aVals := {aSaldos}
nAno := YEAR(DATE())
IF MsgGet("Ano base","Ano base",@nAno)
MsgMeter( { | oMeter, oText, oDlg, lEnd | ;
GetLocac( oMeter, oText, oDlg, @lEnd, nData, @aSaldos, @aVals, nAno) },;
"Obtendo valores. Aguarde...")
ENDIF
aItem:= {"Totais"}
ENDIF
cItem:=aItem[1]
// Other fonts
DEFINE FONT oFont NAME "MS Sans Serif" SIZE 0,-10
DEFINE FONT oFontT NAME "Times New Roman" SIZE 0,-18 BOLD ITALIC
DEFINE FONT oFontX NAME "Times New Roman" SIZE 0,-10
DEFINE FONT oFontY NAME "Times New Roman" SIZE 0,-10
DEFINE DIALOG oGrfDl RESOURCE "Graph" TITLE OemToAnsi("Gr fico estat¡stico") FONT oFont
REDEFINE FOLDER oFld ID 101 OF oGrfDl ;
PROMPTS OemToAnsi("&Gr gico"), OemToAnsi("&Tabela") ;
DIALOGS "GRAFDL1", "GRAFDL2"
REDEFINE BTNBMP ID 101 OF oFld:aDialogs[1] RESOURCE "Printer" NOBORDER TOOLTIP "Imprimir" ;
ACTION GetPrtCoors(oGraph)
REDEFINE BTNBMP ID 102 OF oFld:aDialogs[1] RESOURCE "Bars" NOBORDER TOOLTIP "Barras" ;
ACTION (oGraph:nType:=GRAPH_TYPE_BAR , oPie:Hide(), oGraph:Refresh())
REDEFINE BTNBMP ID 103 OF oFld:aDialogs[1] RESOURCE "Lines" NOBORDER TOOLTIP "Linhas" ;
ACTION (oGraph:nType:=GRAPH_TYPE_LINE , oPie:Hide(), oGraph:Refresh())
REDEFINE BTNBMP ID 104 OF oFld:aDialogs[1] RESOURCE "Points" NOBORDER TOOLTIP "Pontos" ;
ACTION (oGraph:nType:=GRAPH_TYPE_POINT, oPie:Hide(), oGraph:Refresh())
REDEFINE BTNBMP ID 105 OF oFld:aDialogs[1] RESOURCE "Pie" NOBORDER TOOLTIP "Torta" ;
ACTION (oGraph:nType:=GRAPH_TYPE_PIE , oPie:Show(), oGraph:Refresh())
REDEFINE BTNBMP ID 106 OF oFld:aDialogs[1] RESOURCE "3D" NOBORDER TOOLTIP "3D" ;
ACTION (oGraph:l3D :=!oGraph:l3D ,oGraph:Refresh())
REDEFINE BTNBMP ID 107 OF oFld:aDialogs[1] RESOURCE "xGrid" NOBORDER TOOLTIP "Linhas horizontais" ;
ACTION (oGraph:lxGrid:=!oGraph:lxGrid ,oGraph:Refresh())
REDEFINE BTNBMP ID 108 OF oFld:aDialogs[1] RESOURCE "yGrid" NOBORDER TOOLTIP "Linhas verticais" ;
ACTION (oGraph:lyGrid:=!oGraph:lyGrid ,oGraph:Refresh())
REDEFINE BTNBMP ID 109 OF oFld:aDialogs[1] RESOURCE "Fonts" NOBORDER TOOLTIP "Fontes" ;
ACTION Show_Menu(oFld:aDialogs[1], 23,198,oGraph)
REDEFINE BTNBMP ID 110 OF oFld:aDialogs[1] RESOURCE "Tools" NOBORDER TOOLTIP "Configurar" ;
ACTION Chg_Options(oGraph,oPie,aItem,@cItem)
REDEFINE COMBOBOX oPie VAR cItem ITEMS aItem ID 115 OF oFld:aDialogs[1] ;
ON CHANGE (oGraph:nPieX:=Max(oPie:nAt,1),oGraph:Refresh())
// Graph start settings via Command (TGraph.Ch)
oGraph := TGraph():ReDefine( 120, oFld:aDialogs[1] )
IF nData = 1
oGraph:AddSerie( aEntrad, "Entrada", RGB( 0,255,255))
oGraph:AddSerie( aSaidas, "Saida", RGB(255,102, 10))
oGraph:AddSerie( aSaldos, "Saldo", RGB( 0,200,100))
oGraph:cTitle := "Movimento do caixa"
ELSEIF nData = 2
oGraph:AddSerie( aSaldos, "Totais", RGB(255,102, 10))
oGraph:cTitle := OemToAnsi("Loca‡Æo de filmes (di ria normal)")
ELSEIF nData = 3
oGraph:AddSerie( aSaldos, "Totais", RGB(255,102, 10))
oGraph:cTitle := OemToAnsi("Filmes gr tis")
ELSEIF nData = 4
oGraph:AddSerie( aSaldos, "Totais", RGB(255,102, 10))
oGraph:cTitle := "Descontos concedidos"
ENDIF
oGraph:SetYVals( aTitulo )
oGraph:l3D := .t.
oGraph:nType := GRAPH_TYPE_BAR
oGraph:aFont[1]:= oFontT
oGraph:aFont[2]:= oFontX
oGraph:aFont[3]:= oFontY
oGraph:lcTitle := .F.
oGraph:nClrT := RGB( 55, 55, 55)
oGraph:nClrX := CLR_BLUE
oGraph:nClrY := CLR_RED
oGraph:cPicture:= "999,999.99"
oGraph:lViewVal:= .f.
oGraph:cBitmap:= ".\BITMAPS\GRAFICO.bmp"
nRec := 1
REDEFINE LISTBOX oBrowse ;
FIELDS aItem[nRec],;
TRANS(aVals[nRec,01],"@E 999,999.99"),;
TRANS(aVals[nRec,02],"@E 999,999.99"),;
TRANS(aVals[nRec,03],"@E 999,999.99"),;
TRANS(aVals[nRec,04],"@E 999,999.99"),;
TRANS(aVals[nRec,05],"@E 999,999.99"),;
TRANS(aVals[nRec,06],"@E 999,999.99"),;
TRANS(aVals[nRec,07],"@E 999,999.99"),;
TRANS(aVals[nRec,08],"@E 999,999.99"),;
TRANS(aVals[nRec,09],"@E 999,999.99"),;
TRANS(aVals[nRec,10],"@E 999,999.99"),;
TRANS(aVals[nRec,11],"@E 999,999.99"),;
TRANS(aVals[nRec,12],"@E 999,999.99") ;
ID 103 OF oFld:aDialogs[2] ;
ALIAS NIL ;
COLORS CLR_BLACK, 14483196
oBrowse:aHeaders := {"Ref","Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"}
oBrowse:aColSizes := {70,70,70,70,70,70,70,70,70,70,70,70,70}
oBrowse:bLogicLen := {|| len(aVals)}
oBrowse:bGoTop := {|| nRec := 1 }
oBrowse:bGoBottom := {|| nRec := len(aVals) }
oBrowse:bSkip := { | nWant, nDo | ;
nDo := Min( Max( nWant, 1 - nRec ), ;
Len( aVals ) - nRec ), ;
nRec += nDo, nDo }
REDEFINE BUTTON oBtn0 ID 102 OF oGrfDl ACTION oGrfDl:End()
ACTIVATE DIALOG oGrfDl CENTERED ON INIT oPie:Hide()
oFontT:End()
oFontX:End()
oFontY:End()
oFont:End()
RETURN (NIL)
FUNCTION Chg_Options(oGraph,oPie,aItem,cItem)
LOCAL lRefresh:=.F., oCbx, cType, nType, aType
LOCAL oDlg, aOpt[13], nSeries:=1, cSerie, oCol
LOCAL oPnt, cPoint, aPoint, oFont, nI
aType :={"Barras","Linhas","Pontos","Torta","Mix"}
aPoint:={"Ponto","Cruzado","Formato"}
cPoint:=aPoint[oGraph]
nType :=oGraph:nType
cType :=aType[nType]
aOpt[ 1] := oGraph:l3D
aOpt[ 2] := oGraph:lTitle
aOpt[ 3] := oGraph:lxVal
aOpt[ 4] := oGraph:lyVal
aOpt[ 5] := oGraph:lLegends
aOpt[ 6] := oGraph:lxGrid
aOpt[ 7] := oGraph:lyGrid
aOpt[ 8] := oGraph:nXRanges
aOpt[ 9] := oGraph:nBarD
aOpt[10] := oGraph:nValues
aOpt[11] := oGraph:cTitle +Space(30-Len(oGraph:cTitle ))
aOpt[12] := Space(10-Len(oGraph:cPicture))+oGraph:cPicture
aOpt[13] := oGraph:lViewVal
DEFINE FONT oFont NAME "MS Sans Serif" SIZE 0,-10
DEFINE DIALOG oDlg RESOURCE "Settings" FONT oFont
REDEFINE CHECKBOX aOpt[ 1] ID 101 OF oDlg
REDEFINE CHECKBOX aOpt[ 2] ID 102 OF oDlg
REDEFINE CHECKBOX aOpt[ 3] ID 103 OF oDlg
REDEFINE CHECKBOX aOpt[ 4] ID 104 OF oDlg
REDEFINE CHECKBOX aOpt[ 5] ID 105 OF oDlg
REDEFINE CHECKBOX aOpt[ 6] ID 106 OF oDlg
REDEFINE CHECKBOX aOpt[ 7] ID 107 OF oDlg
REDEFINE GET aOpt[ 8] ID 108 OF oDlg PICTURE "99"
REDEFINE GET aOpt[ 9] ID 109 OF oDlg PICTURE "99"
REDEFINE COMBOBOX oCbx VAR cType ITEMS aType ID 110 OF oDlg
REDEFINE COMBOBOX oCol VAR cSerie ITEMS aGetSeries( oGraph ) ;
ID 111 OF oDlg ;
ON CHANGE (SelColor(oCol,oGraph:aSeries),oGraph:Refresh(.T.))
REDEFINE COMBOBOX oPnt VAR cPoint ITEMS aPoint ID 112 OF oDlg ;
ON CHANGE (oGraph:nPoint:=oPnt:nAt,oGraph:Refresh(.T.)) ;
BITMAPS {"Point","Cross","Shape"}
REDEFINE RADIO aOpt[10] ID 113,114 OF oDlg
REDEFINE GET aOpt[11] ID 115 OF oDlg PICTURE "@X"
REDEFINE GET aOpt[12] ID 116 OF oDlg PICTURE "@X"
REDEFINE CHECKBOX aOpt[13] ID 117 OF oDlg
REDEFINE BUTTON ID 120 OF oDlg ACTION (lRefresh:=.T., oDlg:End())
REDEFINE BUTTON ID 125 OF oDlg
REDEFINE BUTTON ID 130 OF oDlg ACTION oDlg:End() CANCEL
ACTIVATE DIALOG oDlg
IF lRefresh
oGraph:l3D :=aOpt[ 1]
oGraph:lTitle :=aOpt[ 2]
oGraph:lxVal :=aOpt[ 3]
oGraph:lyVal :=aOpt[ 4]
oGraph:lLegends:=aOpt[ 5]
oGraph:lxGrid :=aOpt[ 6]
oGraph:lyGrid :=aOpt[ 7]
oGraph:nXRanges:=aOpt[ 8]
oGraph:nBarD :=aOpt[ 9]
oGraph:nValues :=aOpt[10]
oGraph:cTitle :=Alltrim(aOpt[11])
oGraph:cPicture:=Alltrim(aOpt[12])
oGraph:nType :=oCbx:nAt
oGraph:lViewVal:=aOpt[13]
aItem:={}
IF aOpt[10]=SERIE_VALUES
FOR nI=1 TO Len(oGraph:aSeries)
AAdd(aItem,oGraph:aSeries[nI][1])
NEXT nI
ENDIF
IF aOpt[10]=PERIOD_VALUES
aItem:=AClone(oGraph:aYVals)
ENDIF
oPie:SetItems(aItem)
oPie:Select(1)
cItem:=aItem[1]
IF oGraph:nType == GRAPH_TYPE_PIE
oPie:Show()
oPie:Refresh()
ELSE
oPie:Hide()
ENDIF
oGraph:Refresh()
ENDIF
oFont:End()
RETURN (NIL)
STAT FUNC Show_Menu(oDlg,nRow,nCol,oGraph)
LOCAL oMenu, aFont, oFont, nOpt:=0
LOCAL nTClr :=oGraph:nClrT
LOCAL nXClr :=oGraph:nClrX
LOCAL nYClr :=oGraph:nClrY
LOCAL nLClr :=oGraph:nClrL
LOCAL nSClr :=oGraph:nClrST
LOCAL nXTClr:=oGraph:nClrXT
LOCAL nYTClr:=oGraph:nClrYT
LOCAL nVClr :=oGraph:nClrV
MENU oMenu POPUP
MENUITEM "&Titulo " ACTION oGraph:aFont[1]:Choose(@nTClr )
MENUITEM "&Etiqueta X" ACTION oGraph:aFont[2]:Choose(@nXClr )
MENUITEM "&Etiqueta Y" ACTION oGraph:aFont[3]:Choose(@nYClr )
MENUITEM "&Legendas " ACTION oGraph:aFont[4]:Choose(@nLClr )
MENUITEM "&Subtitulo " ACTION oGraph:aFont[5]:Choose(@nSClr )
MENUITEM "&Titulo X " ACTION oGraph:aFont[6]:Choose(@nXTClr)
MENUITEM "&Titulo Y " ACTION oGraph:aFont[7]:Choose(@nYTClr)
MENUITEM "&Valores " ACTION oGraph:aFont[ 8 ]:Choose(@nVClr )
ENDMENU
ACTIVATE POPUP oMenu OF oDlg AT nRow,nCol
oGraph:nClrT :=nTClr
oGraph:nClrX :=nXClr
oGraph:nClrY :=nYClr
oGraph:nClrL :=nLClr
oGraph:nClrST:=nSClr
oGraph:nClrXT:=nXTClr
oGraph:nClrYT:=nYTClr
oGraph:nClrV :=nVClr
oGraph:Refresh()
RETURN (NIL)
STAT FUNC aGetSeries(oGraph)
LOCAL nI, aRet :={}
FOR nI:=1 TO Len(oGraph:aSeries)
AAdd(aRet,oGraph:aSeries[nI][1])
NEXT nI
RETURN (aRet)
STAT FUNC SelColor(oCol,aColors)
aColors[oCol][2]:=ChooseColor(aColors[oCol][2])
RETURN (.T.)
// --- To printer -----------------------------------------------------------
FUNCTION GetPrtCoors(oGraph)
LOCAL oDlg, oFont, ;
nTop := 2.5,;
nLeft := 2.5,;
nHeight:= 8.0,;
nWidth := 15.0
DEFINE FONT oFont NAME "MS Sans Serif" SIZE 0,-10
DEFINE DIALOG oDlg FROM 17, 20 TO 23.5,45.5 TITLE "Imprimir" FONT oFont
@ 7, 5 SAY "Topo" SIZE 25,10 PIXEL
@ 17, 5 SAY "Esquerda" SIZE 25,10 PIXEL
@ 27, 5 SAY "Largura" SIZE 25,10 PIXEL
@ 37, 5 SAY "Altura" SIZE 25,10 PIXEL
@ 7,67 SAY "(cmtr)" SIZE 25,10 PIXEL
@ 6,30 GET nTop PICTURE "99.99" SIZE 20,9 PIXEL
@ 16,30 GET nLeft PICTURE "99.99" SIZE 20,9 PIXEL
@ 26,30 GET nWidth PICTURE "99.99" SIZE 20,9 PIXEL
@ 36,30 GET nHeight PICTURE "99.99" SIZE 20,9 PIXEL
@ 20,55 BUTTON "&Aceitar" SIZE 40,10 PIXEL OF oDlg ACTION (Print(oGraph,nTop,nLeft,nWidth,nHeight),oDlg:End())
@ 35,55 BUTTON "&Cancelar" SIZE 40,10 PIXEL OF oDlg ACTION oDlg:End()
ACTIVATE DIALOG oDlg
oFont:End()
RETURN (NIL)
FUNCTION Print(oGraph, nTop, nLeft, nWidth, nHeight)
LOCAL oPrn
PRINT oPrn NAME "TGraph" PREVIEW
oPrn:Cmtr2Pix(@nTop , @nLeft) // you can change to inchs
oPrn:Cmtr2Pix(@nWidth, @nHeight)
PAGE
oGraph:Print( oPrn, nTop, nLeft, nWidth, nHeight )
ENDPAGE
ENDPRINT
RETURN Nil
STATIC FUNCTION GetCaixa( oMeter, oText, oDlg, lEnd, aEntrad, aSaidas, aSaldos, aVals, nAno)
LOCAL aTotal := {0,0,0,0,0,0,0,0,0,0,0,0},;
aDespe := {0,0,0,0,0,0,0,0,0,0,0,0},;
aLiqui := {0,0,0,0,0,0,0,0,0,0,0,0},;
nRecNo := 1
PUBLIC dIni := CTOD("01/01/"+STRZERO(nAno,4)),;
dFim := CTOD("31/12/"+STRZERO(nAno,4))
SELECT 5
CAIXA->(DBCLEARFIL(NIL))
CAIXA->(DBSETORDER(1))
SET FILTER TO CAIXA->DATA >= dIni .AND. CAIXA->DATA <= dFim
oMeter:nTotal = CAIXA->(RecCount())
CAIXA->(DBGOTOP())
IF ! CAIXA->(EOF())
WHILE ! CAIXA->(EOF())
nMes := MONTH(CAIXA->DATA)
IF CAIXA->TIPO = "C"
IF nMes <> 0
aTotal[nMes] += CAIXA->ENTRADA
aLiqui[nMes] += CAIXA->ENTRADA
ENDIF
ELSEIF CAIXA->TIPO = "D"
IF nMes <> 0
aDespe[nMes] += CAIXA->SAIDA
aLiqui[nMes] -= CAIXA->SAIDA
ENDIF
ENDIF
oMeter:Set( nRecNo )
CAIXA->(DBSKIP(1))
nRecNo ++
SysRefresh()
END
ENDIF
aEntrad := aTotal
aSaidas := aDespe
aSaldos := aLiqui
aVals := {aEntrad,aSaidas,aSaldos}
CAIXA->(DBCLEARFIL(NIL))
CAIXA->(DBGOTOP())
SysRefresh()
SELECT 0
RETURN NIL
STATIC FUNCTION GetLocac( oMeter, oText, oDlg, lEnd, nData, aSaldos, aVals, nAno)
LOCAL aTotal := {0,0,0,0,0,0,0,0,0,0,0,0},;
nRecNo := 1
PUBLIC dIni := CTOD("01/01/"+STRZERO(nAno,4)),;
dFim := CTOD("31/12/"+STRZERO(nAno,4))
SELECT 7
LOCACAO->(DBCLEARFIL(NIL))
LOCACAO->(DBSETORDER(1))
SET FILTER TO LOCACAO->ITEM02 >= dIni .AND. LOCACAO->ITEM02 <= dFim
oMeter:nTotal = LOCACAO->(RecCount())
LOCACAO->(DBGOTOP())
IF ! LOCACAO->(EOF())
WHILE ! LOCACAO->(EOF())
nMes := MONTH(LOCACAO->ITEM02)
IF nData = 4
aTotal[nMes] += LOCACAO->ITEM20
ELSE
FOR Y := 1 TO 30
IF !EMPTY( &("ITEM05_"+STRZERO(Y,2)) )
IF nData = 2
IF &("ITEM19_"+STRZERO(Y,2)) = .F.
aTotal[nMes] ++
ENDIF
ELSEIF nData = 3
IF &("ITEM19_"+STRZERO(Y,2)) = .T.
aTotal[nMes] ++
ENDIF
ENDIF
ENDIF
NEXT
ENDIF
LOCACAO->(DBSKIP(1))
END
ENDIF
aSaldos := aTotal
aVals := {aSaldos}
LOCACAO->(DBCLEARFIL(NIL))
LOCACAO->(DBGOTOP())
SysRefresh()
SELECT 0
RETURN NIL