#include "FiveWin.Ch"
#include "cstruct.ch"
#include "RMCHART.Ch"
#define DLL_OSAPI 0x20
typedef struct { CTYPE_DOUBLE nDouble[12] } DataStructD12
FUNCTION TesteGrafico()
LOCAL aDados := { { 225.25, 100.00, 100.00, 150.00, 250.00, 300.00, 25.00, 75.00, 300.00, 200.00, 325.00, 300.00 } , { 220.00, 100.00, 125.00, 300.00, 150.00, 125.00, 85.00, 50.00, 285.00, 275.00, 295.00, 280.00 }, { 125.25, 100.00, 100.00, 150.00, 250.00, 300.00, 25.00, 75.00, 300.00, 200.00, 325.00, 300.00 } }
LOCAL cLegenda := "Entradas*Saidas*Mais Um"
LOCAL cLabels := "Janeiro*Fevereiro*Março*Abril*Maio*Junho*Julho*Agosto*Setembro*Outubro*Novembro*Dezembro"
LOCAL cTitulo := "Grafico de Teste Grafico"
PRIVATE hDll := DllLoad("rmchart.dll")
DEFINE DIALOG oDlgGra1 FROM 0,0 TO 400,770 PIXEL FONT oClassVar:oFntB COLOR oClassVar:nCorDlgT,oClassVar:nCorDlgJ
oDlgGra1:lHelpIcon := .F.
oChart := TActiveX():New( oDlgGra1, "RMChart.RMChartX", 0, 0, 0, 0 )
ACTIVATE DIALOG oDlgGra1 CENTER ON INIT GeraRmc( oDlgGra1, oChart, aDados, cTitulo, cLabels, cLegenda )
DllUnload( hDLL )
RETURN NIL
FUNCTION GeraRmc( oDlgGra, oChart, aDados, cTitulo, cLabels, cLegenda )
LOCAL nRetVal := nMax := 0
LOCAL cImagem := "" //"C:\SIG32new\Bitmaps\Paper.jpg"
LOCAL cUnidade := "R$ "
LOCAL cTextoVert := ""
LOCAL aDadosGraf:={}
LOCAL oData1 IS DataStructD12
LOCAL oData2 IS DataStructD12
LOCAL oData3 IS DataStructD12
FOR cTrGra1:=1 TO LEN( aDados )
nMax := MAX( nMax, Amax( aDados[cTrGra1] ) )
FOR cTrGra2:=1 TO LEN( aDados[cTrGra1] )
IF cTrGra1 == 1
oData1:nDouble[cTrGra2] := aDados[cTrGra1,cTrGra2]
ELSEIF cTrGra1 == 2
oData2:nDouble[cTrGra2] := aDados[cTrGra1,cTrGra2]
ELSEIF cTrGra1 == 3
oData3:nDouble[cTrGra2] := aDados[cTrGra1,cTrGra2]
ENDIF
NEXT
IF cTrGra1 == 1
AADD( aDadosGraf, oData1[1] )
ELSEIF cTrGra1 == 2
AADD( aDadosGraf, oData2[1] )
ELSEIF cTrGra1 == 3
AADD( aDadosGraf, oData3[1] )
ENDIF
NEXT
nMax := ROUND( ( INT( nMax/10 ) * 10 ) + 10 , 2 )
nRetVal := DllCall(hDll,DLL_OSAPI,"RMC_CREATECHART", oDlgGra:hWnd, 1001, 0, 0, 770, 400, ColorAzure, RMC_CTRLSTYLE3DLIGHT, .F., cImagem, "", 0, 0 )
nRetVal := DllCall(hDll,DLL_OSAPI,"RMC_ADDREGION", 1001, 0, 0, 760, 400, "Sig SoftWare", .F. )
nRetVal := DllCall(hDll,DLL_OSAPI,"RMC_ADDCAPTION", 1001, 1, cTitulo, ColorTransparent, ColorRed, 9, .T. )
nRetVal := DllCall(hDll,DLL_OSAPI,"RMC_ADDGRID", 1001, 1, ColorLightBlue, .F., 20, 20, 685, 330, RMC_BICOLOR_LABELAXIS )
nRetVal := DllCall(hDll,DLL_OSAPI,"RMC_ADDLABELAXIS", 1001, 1, cLabels, 1, LEN( aDados[1] ), RMC_LABELAXISBOTTOM, 8, ColorBlack, RMC_TEXTCENTER, ColorBlack, RMC_LINESTYLENONE, "" )
nRetVal := DllCall(hDll,DLL_OSAPI,"RMC_ADDDATAAXIS", 1001, 1, RMC_DATAAXISRIGHT, 0.0, nMax, LEN( aDados[1] ), 8, ColorBlack, ColorBlack, RMC_LINESTYLESOLID, 0, cUnidade, cTextoVert, "", RMC_TEXTCENTER )
FOR x:=1 TO LEN(aDadosGraf)
nRetVal := DllCall(hDll,DLL_OSAPI,"RMC_ADDBARSERIES", 1001, 1, aDadosGraf[x], 12, RMC_BARGROUP, RMC_BAR_FLAT_GRADIENT2, .F., 0, .F., 1, RMC_VLABEL_NONE, x, RMC_HATCHBRUSH_ONPRINTING )
NEXT
nRetVal := DllCall(hDll,DLL_OSAPI,"RMC_ADDLEGEND", 1001, 1, cLegenda, RMC_LEGEND_BOTTOM, ColorTransparent, RMC_LEGENDNORECT, ColorRed, 8, .T. )
nRetVal := DllCall(hDll,DLL_OSAPI,"RMC_DRAW", 1001 )
RETURN NIL
///////////////////////////////////////////////////////////////////////////////////////
// //
///////////////////////////////////////////////////////////////////////////////////////
FUNCTION ImprimeGrafico( oDlgGra )
nRetVal := DllCall(hDll,DLL_OSAPI,"RMC_DRAW2PRINTER", 1001, oDlgGra:hWnd, 0, 0, 0, 0, RMC_EMF )
?nRetVal
RETURN NIL
////////////////////////////DADOS DA FUNCAO////////////////////////////////////////////
// NOME : aMax //
// SINTESE : Retornar o maior valor de um vetor //
// PARAMETROS : <1> aVetor //
// <2> nElemento (para vetores multimensionais) //
// RETORNO : xMaior elemento do vetor //
///////////////////////////////////////////////////////////////////////////////////////
function aMax( aVetor, nElem )
local aNovoVet
local xMaxElem
DEFAULT nElem:=0
aNovoVet:=aclone( aVetor )
if nElem=0
aNovoVet:=asort( aNovoVet )
xMaxElem:=aNovoVet[len(aNovoVet)]
else
aNovoVet:=aasort( aNovoVet, nElem )
xMaxElem:=aNovoVet[nElem, len(aNovoVet)]
endif
return xMaxElem
////////////////////////////DADOS DA FUNCAO////////////////////////////////////////////
// NOME : AaSort //
// FINALIDADE : ordenar os elementos de um vetor muldimensional //
// PARAMETROS : <1> aVetor a ser ordenado //
// [2] nElemento do vetor a ser ordenado (default=1) //
// [3] cOrdem Crescente ou Decrescente (default='C') //
// RETORNO : aVetor ordenado //
///////////////////////////////////////////////////////////////////////////////////////
function AaSort( aVetor, nElem, cOrdem )
local aRetorno, x, y
DEFAULT nElem:=1
DEFAULT cOrdem:='C'
if cOrdem='C'
aRetorno:= asort( aVetor,,, { |x, y| x[nElem] < y[nElem] } )
else
aRetorno:= asort( aVetor,,, { |x, y| x[nElem] > y[nElem] } )
endif
return aRetorno