RMChart

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

RMChart

Mensagem por asimoes »

Quintas,

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

Qual é o ch que traduz esse declare?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

RMChart

Mensagem por asimoes »

Assim Quintas usando a dll o problema da tela fica resolvido, só resta resolver o problema da RMC_ADDBARSERIES
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

RMChart

Mensagem 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
Anexos
Screen Shot 05-10-16 at 12.50 PM.PNG
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

RMChart

Mensagem por asimoes »

RmChart usando somente a dll sem sData
Barras com RmChart
Barras com RmChart
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

RMChart

Mensagem 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 !!!.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

RMChart

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

RMChart

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

RMChart

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

RMChart

Mensagem por JoséQuintas »

erro com o último fonte.
Anexos
erro.png
erro.png (2.91 KiB) Exibido 9804 vezes
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

RMChart

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

RMChart

Mensagem por JoséQuintas »

Conclusão inicial:

O trem é doido, e seu fonte mais ainda.... rs
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

RMChart

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

RMChart

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

RMChart

Mensagem 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.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

RMChart

Mensagem 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.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder