O ideal é não ter que se preocupar com decimais no fonte, por isso é interessante deixar o tratamento disso na classe.
Segue o fonte atual funcionando.
O gráfico em IF .F. é o primeiro, seguido do 5 em 1 no IF .T.
Código: Selecionar todos
#include "hbclass.ch"
#include "rmchart.ch"
#include "hbgtinfo.ch"
#include "hbdyn.ch"
#define RMC_USERWM "" // Your watermark
#define RMC_USERWMCOLOR Black // Color for the watermark
#define RMC_USERWMLUCENT 30 // Lucent factor between 1(=not visible) and 255(=opaque)
#define RMC_USERWMALIGN RMC_TEXTCENTER // Alignment for the watermark
#define RMC_USERFONTSIZE 0 // Fontsize; if 0: maximal size is used
FUNCTION Main
LOCAL oCrt, cLegenda, cLabels, cTitulo, aDados, cImagem, cUnidade, cTextoVert, nMax, nIdChart
LOCAL oGrafico := RMChart():New(), nCont, oElement
LOCAL sTemp1, aData1, sTemp2, aData2, aData3, aData4, aData5, aData6, aData7, aData8, sTemp3 := "", ID_RMC1 := 1
oCrt := WvgCrt():New( , , { -1, -1 }, { 35, 90 }, , .T. )
oCrt:lModal := .T.
oCrt:icon := "demo.ico"
oCrt:resizable := .T.
oCrt:create()
hb_gtInfo( HB_GTI_WINTITLE, "Grafico com RmChart - Dll" )
IF .F.
cLegenda := "Entradas*Saidas*Mais Um"
cLabels := "Janeiro*Fevereiro*Março*Abril*Maio*Junho*Julho*Agosto*Setembro*Outubro*Novembro*Dezembro"
cTitulo := "Gráfico de Teste"
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 } }
cImagem := ""
cUnidade := "R$ "
cTextoVert := ""
nMax := 0
nIdChart := 1
FOR EACH oElement IN aDados
nMax := Max( nMax, aMax( oElement ) )
NEXT
nMax := Round( ( Int( nMax / 10 ) * 10 ) + 10, 2 )
oGrafico:CreateChart( hb_gtInfo( HB_GTI_WINHANDLE ), nIdChart, 0, 0, 770, 400, Azure, RMC_CTRLSTYLE3DLIGHT, .F., cImagem, "", 0, 0 )
oGrafico:AddRegion( nIdChart, 0, 0, 760, 400, "RmChart", .F. )
oGrafico:AddCaption( nIdChart, 1, cTitulo, Transparent, Red, 9, .T. )
oGrafico:AddGrid( nIdChart, 1, LightBlue, .F., 20, 20, 685, 330, RMC_BICOLOR_LABELAXIS )
oGrafico:AddLabelAxis( nIdChart, 1, cLabels, 1, Len( aDados[ 1 ] ), RMC_LABELAXISBOTTOM, 8, Black, RMC_TEXTCENTER, Black, RMC_LINESTYLENONE, "" )
oGrafico:AddDataAxis( nIdChart, 1, RMC_DATAAXISRIGHT, 0.0, nMax, Len( aDados[ 1 ] ), 8, Black, Black, RMC_LINESTYLESOLID, 1, cUnidade, cTextoVert, "", RMC_TEXTCENTER )
oGrafico:AddLegend( nIdChart, 1, cLegenda, RMC_LEGEND_BOTTOM, Transparent, RMC_LEGENDNORECT, Red, 8, .T. )
FOR nCont = 1 TO Len( aDados )
oGrafico:AddBarSeries( nIdChart, 1, aDados[ nCont ], 12, RMC_BARGROUP, RMC_BAR_FLAT_GRADIENT2, .F., 0, .F., 1, RMC_VLABEL_NONE, nCont, RMC_HATCHBRUSH_ONPRINTING )
NEXT
oGrafico:Draw( nIdChart )
ENDIF
IF .T.
sTemp1 := "Label 1*Label 2*Label 3*Label 4*Label 5"
aData1 := { 30,40,70,60,20 }
sTemp2 := "Label 1*Label 2*Label 3*Label 4*Label 5"
aData2 := { 20, 10, 15, 25, 30 }
aData3 := { 25, 30, 10, 20, 15 }
aData4 := { 10, 20, 40, 20, 30 }
aData5 := { 40, 30, 20, 30, 20 }
aData6 := { 30, 50, 20, 40, 60 }
aData7 := { 240, 230, 220, 180, 170, 160, 145, 130, 125, 115 }
aData8 := { 8.1, 6.2, 4.3, 2.2, 1.2, 3.1, 5.2, 11.4, 7.3, 4.2 }
DO CASE
CASE oGrafico:CreateChart( hb_gtInfo( HB_GTI_WINHANDLE ),ID_RMC1,0,0,800,600,AliceBlue,RMC_CTRLSTYLEFLATSHADOW,.F.,"","", 0, 0 ) < 0
CASE oGrafico:AddRegion( ID_RMC1, 1, 2, 348, 208, "", .F. ) < 0
CASE oGrafico:AddGrid( ID_RMC1, 1, Beige, .F., 0, 0, 0, 0, RMC_BICOLOR_NONE ) < 0
CASE oGrafico:AddDataAxis( ID_RMC1, 1, RMC_DATAAXISLEFT, 0, 100, 11, 8, Black, Black, RMC_LINESTYLESOLID, 0, "", "", "", RMC_TEXTCENTER ) < 0
CASE oGrafico:AddLabelAxis( ID_RMC1, 1, sTemp1, 1, 5, RMC_LABELAXISBOTTOM, 8, Black, RMC_TEXTCENTER, Black, RMC_LINESTYLESOLID, "" ) < 0
CASE oGrafico:AddBarSeries( ID_RMC1, 1, aData1, 5,RMC_BARSINGLE, RMC_BAR_3D, .F., Default, .F., 1, RMC_VLABEL_NONE, 1, RMC_HATCHBRUSH_OFF ) < 0
CASE oGrafico:AddRegion( ID_RMC1, 352, 2, -2, 248, "", .F. ) < 0
CASE oGrafico:AddGrid( ID_RMC1, 2, Beige, .F., 0, 0, 0, 0, RMC_BICOLOR_NONE ) < 0
CASE oGrafico:AddDataAxis( ID_RMC1, 2, RMC_DATAAXISBOTTOM, 0, 100, 10, 8, Black, Black, RMC_LINESTYLESOLID, 0, "", "", "", RMC_TEXTCENTER ) < 0
CASE oGrafico:AddLabelAxis( ID_RMC1, 2, sTemp2, 1, 5, RMC_LABELAXISLEFT,8, Black, RMC_TEXTCENTER, Black, RMC_LINESTYLESOLID, "" ) < 0
CASE oGrafico:AddBarSeries( ID_RMC1, 2, aData2, 5, RMC_BARSTACKED, RMC_COLUMN_FLAT, .F., Default, .T., 1, RMC_VLABEL_NONE, 1, RMC_HATCHBRUSH_OFF ) < 0
CASE oGrafico:AddBarSeries( ID_RMC1, 2, aData3, 5, RMC_BARSTACKED, RMC_COLUMN_FLAT, .F., Default, .T., 1, RMC_VLABEL_NONE, 1, RMC_HATCHBRUSH_OFF ) < 0
CASE oGrafico:AddBarSeries( ID_RMC1, 2, aData4, 5, RMC_BARSTACKED, RMC_COLUMN_FLAT, .F., Default, .T., 1, RMC_VLABEL_NONE, 1, RMC_HATCHBRUSH_OFF ) < 0
CASE oGrafico:AddBarSeries( ID_RMC1, 2, aData5, 5, RMC_BARSTACKED, RMC_COLUMN_FLAT, .F., Default, .T., 1, RMC_VLABEL_NONE, 1, RMC_HATCHBRUSH_OFF ) < 0
CASE oGrafico:AddRegion( ID_RMC1, 2, 252, 348, -2, "", .F. ) < 0
CASE oGrafico:AddGridlessSeries( ID_RMC1, 3, aData6, 5, 0, 0, RMC_PIE_3D_GRADIENT, RMC_FULL, 2, .F., RMC_VLABEL_DEFAULT, RMC_HATCHBRUSH_OFF, 0 ) < 0
CASE oGrafico:AddRegion( ID_RMC1, 352, 252, -2, -2, "", .F.) < 0
CASE oGrafico:AddGrid( ID_RMC1, 4, AliceBlue, .T., 0, 0, 0, 0, RMC_BICOLOR_NONE ) < 0
CASE oGrafico:AddDataAxis( ID_RMC1, 4, RMC_DATAAXISLEFT, 100, 250, 11, 8, Blue, Black, RMC_LINESTYLESOLID, 0, "$ ", "", "", RMC_TEXTCENTER ) < 0
//CASE oGrafico:AddDataAxis( ID_RMC1, 4, RMC_DATAAXISRIGHT, 0, 0, 0, 0, 0, 0, 0, 2, " %", "" ) < 0
CASE oGrafico:AddLabelAxis( ID_RMC1, 4, sTemp3, 1, 10, RMC_LABELAXISBOTTOM, 8, Black, RMC_TEXTCENTER, Black, RMC_LINESTYLESOLID, "" ) < 0
CASE oGrafico:AddBarSeries( ID_RMC1, 4, aData7, 10, RMC_BARSINGLE, RMC_BAR_FLAT_GRADIENT2, .F., Gold, .F., 1, RMC_VLABEL_NONE, 1, RMC_HATCHBRUSH_OFF ) < 0
CASE oGrafico:AddLineSeries( ID_RMC1, 4, aData8, 10, 0, 0, RMC_LINE, RMC_LINE_CABLE, RMC_LSTYLE_LINE, .F., Green, RMC_SYMBOL_NONE, 2, RMC_VLABEL_DEFAULT, RMC_HATCHBRUSH_OFF ) < 0
CASE oGrafico:SetWatermark( RMC_USERWM, RMC_USERWMCOLOR, RMC_USERWMLUCENT, RMC_USERWMALIGN, RMC_USERFONTSIZE ) < 0
CASE oGrafico:Draw( ID_RMC1 ) < 0
ENDCASE
ENDIF
Inkey( 0 )
oCrt:destroy()
oGrafico:Destroy()
HB_SYMBOL_UNUSED( sTemp1 + aData1 + sTemp2 + sTemp3 + aData2 + aData3 + aData4 + aData5 + aData6 + aData7 + aData8 )
RETURN NIL
FUNCTION AMax( x )
LOCAL nVal, oElement
nVal := x[ 1 ]
FOR EACH oElement IN x
IF oElement > nVal
nVal := oElement
ENDIF
NEXT
RETURN nVal
CREATE CLASS RmChart
VAR nHandle
METHOD New() INLINE ::nHandle := hb_libLoad( "RMChart.dll" ), SELF
METHOD Destroy() INLINE hb_libFree( ::nHandle )
METHOD CallDllStd( cName, ... ) INLINE hb_DynCall( { cName, ::nHandle, HB_DYN_CALLCONV_STDCALL }, ... )
METHOD CreateChart( ... ) INLINE ::CallDllStd( "RMC_CREATECHART", ... )
METHOD AddRegion( ... ) INLINE ::CallDllStd( "RMC_ADDREGION", ... )
METHOD AddCaption( ... ) INLINE ::CallDllStd( "RMC_ADDCAPTION", ... )
METHOD AddGrid( ... ) INLINE ::CallDllStd( "RMC_ADDGRID", ... )
METHOD AddLabelAxis( ... ) INLINE ::CallDllStd( "RMC_ADDLABELAXIS", ... )
METHOD AddDataAxis(a,b,c,d,e, ... ) INLINE ::CallDllStd( "RMC_ADDDATAAXIS", a, b, c, ::ToDecimal(d), ::ToDecimal(e), ... )
METHOD AddLegend( ... ) INLINE ::CallDllStd( "RMC_ADDLEGEND", ... )
METHOD AddBarSeries(a,b,c, ... ) INLINE ::CallDllStd( "RMC_ADDBARSERIES", a, b, ::ToDouble(c), ... )
METHOD Draw( ... ) INLINE ::CallDllStd( "RMC_DRAW", ... )
METHOD Draw2Clipboard( ... ) INLINE ::CallDllStd( "RMC_DRAW2CLIPBOARD", ... )
METHOD Draw2Printer( ... ) INLINE ::CallDllStd( "RMC_DRAW2PRINTER", ... )
METHOD Draw2File( ... ) INLINE ::CallDllStd( "RMC_DRAW2FILE", ... )
METHOD AddGridLessSeries(a,b,c, ... ) INLINE ::CallDllStd( "RMC_ADDGRIDLESSSERIES", a, b, ::ToDouble(c), ... )
METHOD AddLineSeries( a,b,c, ... ) INLINE ::CallDllStd( "RMC_ADDLINESERIES", a, b, ::ToDouble(c), ... )
METHOD SetWaterMark( ... ) INLINE ::CallDllStd( "RMC_SETWATERMARK", ... )
METHOD WriteRMCFile( ... ) INLINE ::CallDllStd( "RMC_WRITERMCFILE", ... )
METHOD ToDouble( c )
METHOD ToDecimal( c ) INLINE c + 1.01 - 1.01
ENDCLASS
METHOD RMChart:ToDouble( c )
LOCAL cDouble := "", oElement
FOR EACH oElement IN c
cDouble += FToC( oElement )
NEXT
RETURN cDouble