Página 6 de 23

RMChart

Enviado: 10 Mai 2016 12:43
por asimoes
Quintas,

Não funcionou, porque deu um monte de erro:

Qual é o ch que traduz esse declare?

RMChart

Enviado: 10 Mai 2016 12:44
por asimoes
Assim Quintas usando a dll o problema da tela fica resolvido, só resta resolver o problema da RMC_ADDBARSERIES

RMChart

Enviado: 10 Mai 2016 12:52
por asimoes
Quintas,

Você matou a charada, valor por referência.

@aDadosGraf[1]

Só falta acertar os valores

Código: Selecionar todos

   FOR x:=1 TO LEN(aDadosGraf)
      
       nRetVal := hb_dynCall( {"RMC_ADDBARSERIES", nHandleDLL, HB_DYN_CALLCONV_STDCALL },;
                              ID_CHART, 1, @aDadosGraf[1], 12, RMC_BARGROUP, RMC_BAR_FLAT_GRADIENT2, .F., 0, .F., 1, RMC_VLABEL_ABSOLUTE, x, RMC_HATCHBRUSH_OFF )          
   NEXT

RMChart

Enviado: 10 Mai 2016 13:32
por asimoes
RmChart usando somente a dll sem sData
Barras com RmChart
Barras com RmChart

RMChart

Enviado: 10 Mai 2016 14:14
por JoséQuintas
Aquela declaração que mostrei é do Visual Basic 6.
Tá numa das primeiras mensagens sobre a DLL.
Então talvez compense fazer uma classe só para o RMChart naquele estilo que mostrei.
Já evita problemas futuros.
Pode ter a mesma funcionalidade do controle, é só criar a classe igual.

Ou melhor ainda, criar um controle que use a DLL do RMChart !!!.

RMChart

Enviado: 10 Mai 2016 15:46
por asimoes
Taí o código para quem quiser testar.
Eu só não consegui montar o exemplo das barras mostrando os dados nos 12 meses, quem descobrir, ganha os aplausos.
Gráfico de barras usando RmChart.dll
Gráfico de barras usando RmChart.dll

Código: Selecionar todos

STATIC FUNCTION RmChart
   nHandleDLL:=hb_LibLoad("rmchart.dll")
   
   oCrt := WvgCrt():New( , , { -1, -1 }, { 25, 85 }, , .T. )
   oCrt:lModal := .T.
   oCrt:icon   := "demo.ico"
   oCrt:create()
   oCrt:resizable := .F.
   HB_gtInfo(HB_GTI_WINTITLE, "Grafico com RmChart - Dll")
   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 } }
   aDadosGraf:={}
   cImagem  := "" 
   cUnidade := "R$ "
   cTextoVert := ""
   nMax     := 0
   
   DECLARE oData1[12]
   DECLARE oData2[12]
   DECLARE oData3[12]
   
   FOR cTrGra1:=1 TO LEN( aDados )
   
       nMax := MAX( nMax, aMax( aDados[cTrGra1] ) )
       
       FOR cTrGra2:=1 TO LEN( aDados[cTrGra1] )
           IF cTrGra1 == 1
              oData1[cTrGra2] := aDados[cTrGra1, cTrGra2]
           ELSEIF cTrGra1 == 2
              oData2[cTrGra2] := aDados[cTrGra1, cTrGra2]
           ELSEIF cTrGra1 == 3
              oData3[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 := hb_dynCall( { "RMC_CREATECHART", nHandleDLL, HB_DYN_CALLCONV_STDCALL },;
                          hb_gtInfo( HB_GTI_WINHANDLE ), ID_CHART, 0, 0, 770, 400, Azure, RMC_CTRLSTYLE3DLIGHT, .F., cImagem, "", 0, 0 )
 
   nRetVal := hb_dynCall( {"RMC_ADDREGION",    nHandleDLL, HB_DYN_CALLCONV_STDCALL },;
                          ID_CHART, 0, 0, 760, 400, "RmChart", .F. )
                          
   nRetVal := hb_dynCall( {"RMC_ADDCAPTION",   nHandleDLL, HB_DYN_CALLCONV_STDCALL  },;
                          ID_CHART, 1, cTitulo, Transparent, Red, 9, .T. )
                         
   nRetVal := hb_dynCall( {"RMC_ADDGRID",      nHandleDLL, HB_DYN_CALLCONV_STDCALL },;
                          ID_CHART, 1, LightBlue, .F., 20, 20, 685, 330, RMC_BICOLOR_LABELAXIS )
   
   nRetVal := hb_dynCall( {"RMC_ADDLABELAXIS", nHandleDLL, HB_DYN_CALLCONV_STDCALL },;
                          ID_CHART, 1, cLabels, 1, Len( aDados[1] ), RMC_LABELAXISBOTTOM, 8, Black, RMC_TEXTCENTER, Black, RMC_LINESTYLENONE, "" )
                          //Len( aDados[1] )
   nRetVal := hb_dynCall( {"RMC_ADDDATAAXIS",  nHandleDLL,  HB_DYN_CALLCONV_STDCALL },;
                          ID_CHART, 1, RMC_DATAAXISRIGHT, 0.0, nMax, Len( aDados[1] ), 8, Black, Black, RMC_LINESTYLESOLID, 0, cUnidade, cTextoVert, "", RMC_TEXTCENTER )

   nRetVal := hb_dynCall( {"RMC_ADDLEGEND", nHandleDLL, HB_DYN_CALLCONV_STDCALL },;
                         ID_CHART, 1, cLegenda, RMC_LEGEND_BOTTOM, Transparent, RMC_LEGENDNORECT, Red, 8, .T. ) 

   FOR x:=1 TO LEN(aDadosGraf)
       cValue:=aDadosGraf[x]
       nRetVal := hb_dynCall( {"RMC_ADDBARSERIES", nHandleDLL, HB_DYN_CALLCONV_STDCALL },;
                              ID_CHART, 1, @cValue, 12, RMC_BARGROUP , RMC_BAR_FLAT_GRADIENT2, .F., 0, .F., 1, RMC_VLABEL_NONE, X, RMC_HATCHBRUSH_ONPRINTING )
   NEXT
   
   nRetVal:=hb_dynCall( { "RMC_DRAW", nHandleDLL, HB_DYN_CALLCONV_STDCALL },;
                        ID_CHART)

   Inkey(0)
   oCrt:destroy()
   
   hb_LibFree(nHandleDLL)

RETURN Nil

RMChart

Enviado: 10 Mai 2016 16:10
por JoséQuintas
Acho que falta sua última correção pra funcionar.

Código: Selecionar todos

CREATE CLASS RmChart
   VAR nHandle
   METHOD CreateChart( ... )  INLINE hb_DynCall( { "RMC_CREATECHART",  ::nHandle, HB_DYN_CALLCONV_STDCALL }, ... )
   METHOD AddRegion( ... )    INLINE hb_DynCall( { "RMC_ADDREGION",    ::nHandle, HB_DYN_CALLCONV_STDCALL }, ... )
   METHOD AddCaption( ... )   INLINE hb_DynCall( { "RMC_ADDCAPTION",   ::nHandle, HB_DYN_CALLCONV_STDCALL }, ... )
   METHOD AddGrid( ... )      INLINE hb_DynCall( { "RMC_ADDGRID",      ::nHandle, HB_DYN_CALLCONV_STDCALL }, ... )
   METHOD AddLabelAxis( ... ) INLINE hb_DynCall( { "RMC_ADDLABELAXIS", ::nHandle, HB_DYN_CALLCONV_STDCALL }, ... )
   METHOD AddDataAxis( ... )  INLINE hb_DynCall( { "RMC_ADDDATAAXIS",  ::nHandle, HB_DYN_CALLCONV_STDCALL }, ... )
   METHOD AddLegend( ... )    INLINE hb_DynCall( { "RMC_ADDLEGEND",    ::nHandle, HB_DYN_CALLCONV_STDCALL }, ... )
   METHOD AddBarSeries( ... ) INLINE hb_DynCall( { "RMC_ADDBARSERIES", ::nHandle, HB_DYN_CALLCONV_STDCALL }, ... )
   METHOD Draw( ... )         INLINE hb_DynCall( { "RMC_DRAW",         ::nHandle, hb_BIToR( HB_DYN_CTYPE_LONG, HB_DYN_CALLCONV_STDCALL ) }, ... )
   METHOD New()
   METHOD Destroy()
   ENDCLASS

METHOD New()
   ::nHandle := hb_LibLoad( "RMChart.dll" )
   RETURN SELF

METHOD Destroy()
   hb_LibFree( ::nHandle )
   RETURN NIL

RMChart

Enviado: 10 Mai 2016 16:18
por JoséQuintas
Simplificando um pouco o fonte:

Código: Selecionar todos

CREATE CLASS RmChart
   VAR nHandle
   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( ... )       INLINE ::CallDllStd( "RMC_ADDDATAAXIS",  ... )
   METHOD AddLegend( ... )         INLINE ::CallDllStd( "RMC_ADDLEGEND",    ... )
   METHOD AddBarSeries( ... )      INLINE ::CallDllStd( "RMC_ADDBARSERIES", ... )
   METHOD Draw( ... )              INLINE ::CallDllOut( "RMC_DRAW",         ... )
   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 CallDllOut( cName, ... ) INLINE hb_DynCall( { cName, ::nHandle, hb_BitOr( HB_DYN_CTYPE_LONG, HB_DYN_CALLCONV_STDCALL ) }, ... )
   ENDCLASS

RMChart

Enviado: 10 Mai 2016 16:51
por JoséQuintas
erro com o último fonte.

RMChart

Enviado: 10 Mai 2016 17:10
por asimoes
Agora usando a classe do J Quintas
#define ID_CHART 1001
#define RMC_DEFAULT 0
#define RMC_PORTRAIT 1
#define RMC_LANDSCAPE 2

Código: Selecionar todos

FUNCTION Grafico
   
   oChart:=RmChart():New()
   
   oCrt := WvgCrt():New( , , { -1, -1 }, { 25, 85 }, , .T. )
   oCrt:lModal := .T.
   oCrt:icon   := "demo.ico"
   oCrt:create()
   oCrt:resizable := .F.
   HB_gtInfo(HB_GTI_WINTITLE, "Grafico com RmChart - Dll")
   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 } }
 
   aDadosGraf:={}
   cImagem  := "" 
   cUnidade := "R$ "
   cTextoVert := ""
   nMax     := 0
   
   DECLARE oData1[12]
   DECLARE oData2[12]
   DECLARE oData3[12]
    
   FOR cTrGra1:=1 TO LEN( aDados )
   
       nMax := MAX( nMax, aMax( aDados[cTrGra1] ) )
       
       FOR cTrGra2:=1 TO LEN( aDados[cTrGra1] )
           IF cTrGra1 == 1
              oData1[cTrGra2] := aDados[cTrGra1, cTrGra2]
           ELSEIF cTrGra1 == 2
              oData2[cTrGra2] := aDados[cTrGra1, cTrGra2]
           ELSEIF cTrGra1 == 3
              oData3[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 )
   
   
   oChart:CreateChart(hb_gtInfo( HB_GTI_WINHANDLE ), ID_CHART, 0, 0, 770, 400, Azure, RMC_CTRLSTYLE3DLIGHT, .F., cImagem, "", 0, 0 )
   
   oChart:AddRegion(ID_CHART, 0, 0, 760, 400, "RmChart", .F. )                      
   
   oChart:AddCaption(ID_CHART, 1, cTitulo, Transparent, Red, 9, .T. )    
   
   oChart:AddGrid(ID_CHART, 1, LightBlue, .F., 20, 20, 685, 330, RMC_BICOLOR_LABELAXIS )
   
   oChart:AddLabelAxis(ID_CHART, 1, cLabels, 1, Len( aDados[1] ), RMC_LABELAXISBOTTOM, 8, Black, RMC_TEXTCENTER, Black, RMC_LINESTYLENONE, "" )
   
   oChart:AddDataAxis(ID_CHART, 1, RMC_DATAAXISRIGHT, 0.0, nMax, Len( aDados[1] ), 8, Black, Black, RMC_LINESTYLESOLID, 0, cUnidade, cTextoVert, "", RMC_TEXTCENTER )
   
   oChart:AddLegend(ID_CHART, 1, cLegenda, RMC_LEGEND_BOTTOM, Transparent, RMC_LEGENDNORECT, Red, 8, .T. )

   FOR x:=1 TO LEN(aDadosGraf)
       cValue:= aDadosGraf[x]
       oChart:AddBarSeries(ID_CHART, 1, @cValue, 12, RMC_BARGROUP , RMC_BAR_FLAT_GRADIENT2, .F., 0, .F., 1, RMC_VLABEL_NONE, X, RMC_HATCHBRUSH_ONPRINTING )
   NEXT

   oChart:Draw(ID_CHART)

   Inkey(0)
   
   oCrt:destroy()
   
   oChart:Destroy()

RETURN Nil

RMChart

Enviado: 10 Mai 2016 17:29
por JoséQuintas
Conclusão inicial:

O trem é doido, e seu fonte mais ainda.... rs

RMChart

Enviado: 10 Mai 2016 17:36
por JoséQuintas
Primeiro ponto, acho que vai ser problema:

Código: Selecionar todos

    ReDim aData(4)
    aData(0) = 30#: aData(1) = 20#: aData(2) = 40#: aData(3) = 60#: aData(4) = 10#
    nRetVal = RMC_AddBarSeries(ID_RMC1, 1, aData(0), 5, RMC_BARGROUP, RMC_BAR_HOVER, False, Gold, False, 1, RMC_VLABEL_NONE, 1, RMC_HATCHBRUSH_OFF)
No código acima (VB) é criado um array, e passado o primeiro elemento do array.

Segundo, seu fonte, que funcionou, reduzido, pra não perdermos.
O resultado é o mesmo, mas eliminada uma complicação anterior.
Ainda não usando a classe, porque primeiro precisava funcionar... rs

Código: Selecionar todos

#include "hbclass.ch"
#include "rmchart.ch"
#include "hbgtinfo.ch"
#include "hbdyn.ch"

FUNCTION Main

   LOCAL nHandleDll, oCrt, cLegenda, cLabels, cTitulo, aDados, cImagem, cUnidade, cTextoVert, nMax, id_Chart, ctrgra1
   LOCAL oMeses, oCompara, oElemento

   nHandleDLL := hb_libLoad( "rmchart.dll" )

   oCrt := WvgCrt():New( , , { -1, -1 }, { 25, 85 }, , .T. )
   oCrt:lModal := .T.
   oCrt:icon := "demo.ico"
   oCrt:create()
   oCrt:resizable := .F.
   hb_gtInfo( HB_GTI_WINTITLE, "Grafico com RmChart - Dll" )
   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 } }
   aDadosGraf := {}
   cImagem := ""
   cUnidade := "R$ "
   cTextoVert := ""
   nMax  := 0
   id_Chart := 1

   FOR cTrGra1 := 1 TO Len( aDados )
      nMax := Max( nMax, aMax( aDados[ cTrGra1 ] ) )
   NEXT

   nMax := Round( ( Int( nMax / 10 ) * 10 ) + 10, 2 )


   nRetVal := hb_DynCall( { "RMC_CREATECHART", nHandleDLL, HB_DYN_CALLCONV_STDCALL }, ;
      hb_gtInfo( HB_GTI_WINHANDLE ), ID_CHART, 0, 0, 770, 400, Azure, RMC_CTRLSTYLE3DLIGHT, .F., cImagem, "", 0, 0 )

   nRetVal := hb_DynCall( { "RMC_ADDREGION",  nHandleDLL, HB_DYN_CALLCONV_STDCALL }, ;
      ID_CHART, 0, 0, 760, 400, "RmChart", .F. )

   nRetVal := hb_DynCall( { "RMC_ADDCAPTION", nHandleDLL, HB_DYN_CALLCONV_STDCALL }, ;
      ID_CHART, 1, cTitulo, Transparent, Red, 9, .T. )

   nRetVal := hb_DynCall( { "RMC_ADDGRID",   nHandleDLL, HB_DYN_CALLCONV_STDCALL }, ;
      ID_CHART, 1, LightBlue, .F., 20, 20, 685, 330, RMC_BICOLOR_LABELAXIS )

   nRetVal := hb_DynCall( { "RMC_ADDLABELAXIS", nHandleDLL, HB_DYN_CALLCONV_STDCALL }, ;
      ID_CHART, 1, cLabels, 1, Len( aDados[ 1 ] ), RMC_LABELAXISBOTTOM, 8, Black, RMC_TEXTCENTER, Black, RMC_LINESTYLENONE, "" )
   // Len( aDados[1] )
   nRetVal := hb_DynCall( { "RMC_ADDDATAAXIS", nHandleDLL, HB_DYN_CALLCONV_STDCALL }, ;
      ID_CHART, 1, RMC_DATAAXISRIGHT, 0.0, nMax, Len( aDados[ 1 ] ), 8, Black, Black, RMC_LINESTYLESOLID, 0, cUnidade, cTextoVert, "", RMC_TEXTCENTER )

   nRetVal := hb_DynCall( { "RMC_ADDLEGEND", nHandleDLL, HB_DYN_CALLCONV_STDCALL }, ;
      ID_CHART, 1, cLegenda, RMC_LEGEND_BOTTOM, Transparent, RMC_LEGENDNORECT, Red, 8, .T. )

   FOR EACH oElemento IN aDados
      nRetVal := hb_DynCall( { "RMC_ADDBARSERIES", nHandleDLL, HB_DYN_CALLCONV_STDCALL }, ;
      ID_CHART, 1, @oElemento[ 1 ], 12, RMC_BARGROUP, RMC_BAR_FLAT_GRADIENT2, .F., 0, .F., 1, RMC_VLABEL_NONE, 12, RMC_HATCHBRUSH_ONPRINTING )
   NEXT

   nRetVal := hb_DynCall( { "RMC_DRAW", nHandleDLL, HB_DYN_CALLCONV_STDCALL }, ;
      ID_CHART )

   Inkey( 0 )
   oCrt:destroy()

   hb_libFree( nHandleDLL )

   RETURN NIL

CREATE CLASS RmChart

   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( ... )       INLINE ::CallDllStd( "RMC_ADDDATAAXIS",  ... )
   METHOD AddLegend( ... )         INLINE ::CallDllStd( "RMC_ADDLEGEND",    ... )
   METHOD AddBarSeries( ... )      INLINE ::CallDllStd( "RMC_ADDBARSERIES", ... )
   METHOD Draw( ... )              INLINE ::CallDllOut( "RMC_DRAW",         ... )
   METHOD CallDllStd( cName, ... ) INLINE hb_DynCall( { cName, "RMChart.dll", HB_DYN_CALLCONV_STDCALL }, ... )
   METHOD CallDllOut( cName, ... ) INLINE hb_DynCall( { cName, "RMChart.dll", hb_bitOr( HB_DYN_CTYPE_LONG, HB_DYN_CALLCONV_STDCALL ) }, ... )

ENDCLASS

FUNCTION AMax( x )

   LOCAL nVal, oElement

   nVal := x[ 1 ]
   FOR EACH oElement IN x
      IF oElement > nVal
         nVal := oElement
      ENDIF
   NEXT

   RETURN nVal

RMChart

Enviado: 10 Mai 2016 18:00
por JoséQuintas
Ainda funcionando, mas só primeira coluna.

Código: Selecionar todos

#include "hbclass.ch"
#include "rmchart.ch"
#include "hbgtinfo.ch"
#include "hbdyn.ch"

FUNCTION Main

   LOCAL oCrt, cLegenda, cLabels, cTitulo, aDados, cImagem, cUnidade, cTextoVert, nMax, id_Chart, ctrgra1
   LOCAL oMeses, oCompara, oElemento, oGrafico := RMChart():New()

   oCrt := WvgCrt():New( , , { -1, -1 }, { 25, 85 }, , .T. )
   oCrt:lModal := .T.
   oCrt:icon := "demo.ico"
   oCrt:create()
   oCrt:resizable := .F.
   hb_gtInfo( HB_GTI_WINTITLE, "Grafico com RmChart - Dll" )
   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 } }
   aDadosGraf := {}
   cImagem := ""
   cUnidade := "R$ "
   cTextoVert := ""
   nMax  := 0
   id_Chart := 1

   FOR cTrGra1 := 1 TO Len( aDados )
      nMax := Max( nMax, aMax( aDados[ cTrGra1 ] ) )
   NEXT

   nMax := Round( ( Int( nMax / 10 ) * 10 ) + 10, 2 )

   oGrafico:CreateChart( hb_gtInfo( HB_GTI_WINHANDLE ), ID_CHART, 0, 0, 770, 400, Azure, RMC_CTRLSTYLE3DLIGHT, .F., cImagem, "", 0, 0 )
   oGrafico:AddRegion( ID_CHART, 0, 0, 760, 400, "RmChart", .F. )
   oGrafico:AddCaption( ID_CHART, 1, cTitulo, Transparent, Red, 9, .T. )
   oGrafico:AddGrid( ID_CHART, 1, LightBlue, .F., 20, 20, 685, 330, RMC_BICOLOR_LABELAXIS )
   oGrafico:AddLabelAxis( ID_CHART, 1, cLabels, 1, Len( aDados[ 1 ] ), RMC_LABELAXISBOTTOM, 8, Black, RMC_TEXTCENTER, Black, RMC_LINESTYLENONE, "" )
   oGrafico:AddDataAxis( ID_CHART, 1, RMC_DATAAXISRIGHT, 0.0, nMax, Len( aDados[ 1 ] ), 8, Black, Black, RMC_LINESTYLESOLID, 0, cUnidade, cTextoVert, "", RMC_TEXTCENTER )
   oGrafico:AddLegend( ID_CHART, 1, cLegenda, RMC_LEGEND_BOTTOM, Transparent, RMC_LEGENDNORECT, Red, 8, .T. )

   FOR EACH oElemento IN aDados
      oGrafico:AddBarSeries( ID_CHART, 1, @oElemento[ 1 ], 12, RMC_BARGROUP, RMC_BAR_FLAT_GRADIENT2, .F., 0, .F., 1, RMC_VLABEL_NONE, 12, RMC_HATCHBRUSH_ONPRINTING )
   NEXT

   oGrafico:Draw( ID_CHART )

   Inkey( 0 )
   oCrt:destroy()
   oGrafico:Destroy()

   RETURN NIL

CREATE CLASS RmChart
   VAR    nHandle
   METHOD New()                    INLINE ::nHandle := hb_LibLoad( "RMChart.dll" ), SELF
   METHOD Destroy()                INLINE hb_LibFree( ::nHandle )
   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( ... )       INLINE ::CallDllStd( "RMC_ADDDATAAXIS",  ... )
   METHOD AddLegend( ... )         INLINE ::CallDllStd( "RMC_ADDLEGEND",    ... )
   METHOD AddBarSeries( ... )      INLINE ::CallDllStd( "RMC_ADDBARSERIES", ... )
   METHOD Draw( ... )              INLINE ::CallDllStd( "RMC_DRAW",         ... )
   METHOD CallDllStd( cName, ... ) INLINE hb_DynCall( { cName, ::nHandle, HB_DYN_CALLCONV_STDCALL }, ... )

ENDCLASS

FUNCTION AMax( x )

   LOCAL nVal, oElement

   nVal := x[ 1 ]
   FOR EACH oElement IN x
      IF oElement > nVal
         nVal := oElement
      ENDIF
   NEXT

   RETURN nVal

RMChart

Enviado: 10 Mai 2016 18:01
por asimoes
Quintas,

Esse código eu peguei do fórum do fivewin e adaptei para o harbour

http://fivetechsupport.com/forums/viewt ... =6&t=25908

Eu já estava jogando a toalha quando vi o byRef :
Optional ByRef nFirstDataValue (DOUBLE)

Foi então que funcionou.

RMChart

Enviado: 10 Mai 2016 18:04
por asimoes
Quintas,

Você chegou no ponto que eu estou agora, só mostra os dados de janeiro, como mostrar os 12 meses é esse o dilema.