RMChart

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

Moderador: Moderadores

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 »

Em todo caso....
Vai ser trabalhoso, mas aqui tem tudo que precisa.

http://kb.elipse.com.br/pt-br/questions ... art+no+E3.

O detalhe importante é que pra usar precisa de uma hDC e não hWnd.
Não é uma janela Windows, e sim uma área pra desenho.

Se pegar o projeto em VB, tem todas as declarações, até imitada por algumas declarações Harbour.

Só como exemplo:

Código: Selecionar todos

Declare Function RMCvb_WriteRMCFile Lib "RMCHART.DLL" Alias "RMCVB_WRITERMCFILE" ( _
                            ByVal nCtrlId As Long, _
                            ByRef sFileName As String _
                            ) As RMCError
que seria meio que equivalente com: (usando a definição padrão do Harbour)

Código: Selecionar todos

nError := CallDll32( "RMCVB_WRITERMCFILE", "RMCHART.DLL", nCtlId, sFileName )
Isso sem considerar conversões de tipos de variável, caso seja necessário.

A lista de funções é grande.
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,

Usando a Dll, eu já consegui resultado, o problema é com activex da hwgui, por dll dá um trabalho extra, tem que usar do designer do rmchart para definir o gráfico que se quer mostrar, exportar as variáveis e depois fazer as substituições na variável sData
Com activex podemos usar os objetos e métodos diretamente sem a necessidade da dll. Provavelmente vou usar a dll mesmo, porque o sistema está feito em harbour/gtwvt

ex.:

Código: Selecionar todos

       
       sData += "00003600|00004450|000051|000061|000074|00008-2|00009412|00010"
       sData += "seasky.jpg"
       sData += "|00011" 
       sData += "Arial" //fonte
       sData += "|100011|100035|100045|10005-5|10006-5|1000911|100101|100111|100131|100181|100"
       sData += "200|10021100|1002211|100238|100331|100341|"
       sData += "10035" //Indice que indica o total de barras
       sData += "10" //10 = Total de barras
       sData += "|100378|100481|100491|10051-1677"
       sData += "6961|10052-256|10053-2|100541|100558|10056-103|10057-103|100582|10060-256|10061-"
       sData += "103|100626|10063-1|100651|10187"
       sData += "Label 1*Label 2*Label 3*Label 4*Label 5*Label 6*Label 7*Label 8*Label 9*Label 10"
       sData += "|110011|11"
       sData += "0021|110031|110043|110053|11006-1|110081|110091|110121|110131|11014-1|110171|110"
       sData += "2111|110221|110235|110281|11053"
       sData += "15*70*40*60*30*20*8*35*5*97" //Valores das séries
       nWidth :=600  
       nHeight:=450 
    ENDCASE
    
    RmChart( "Teste RmChart" , sData, nWidth, nHeight )
►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 »

Tem a OCX instalada?
Roda o demowvg pra ver se o gráfico aparece.
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 »

Uma dúvida, que deve ser de todos:

Se isso é grátis, e é tão bom, porque não se encontra em lugar nenhum?
Tá mais fácil desenvolver do que encontrar pra baixar.
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 »

Assim serve?
Sem LIB nenhuma, puro console.
Só alterei minha rotina que usava letra "O", pra usar estas cores { "GR/GR", "BR/BR", "BG/BG" }, assim ficou colorido e sem letra "O".
grafico.png
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,

A ocx está instalada e com a minigui funciona, agora eu gostei do seu exemplo!, mostra pra gente como fez.
►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 »

É bem artesanal, literalmente uma letra por vez, a letra "O".
Depois vou separar o restante da rotina, aqui só o desenho do gráfico.

Código: Selecionar todos

      // desenha titulo e legenda das linhas e comparacoes
      Cls()
      @ 2, 0 SAY Padc( "COMPARATIVO MES A MES", 80 )
      FOR nContResumo = 1 TO nQtContas
         @ 3, nContResumo * 20 SAY "OO" COLOR acCores[ nContResumo ]
         @ Row(), Col() + 1 SAY acResumo[ nContResumo ]
      NEXT
      @ 4, 12 TO nAlturaGrafico + 3, 12
      @ nAlturaGrafico + 4, 12 TO nAlturaGrafico + 4, 12 + Len( acTitulo ) * 4 + 2

      // desenha o grafico
      FOR nContAltura = 1 TO nAlturaGrafico
         IF Mod( 19 - nContAltura, 3 ) == 0
            @ 3 + nContAltura, 0 SAY mValLin * ( nAlturaGrafico + 1 - nContAltura ) PICTURE "9999999999"
         ENDIF
         FOR nContMes = 1 TO Len( acTitulo )
            FOR nContResumo = 1 TO nQtContas
               IF anValor[ nContResumo ][ nContMes ] >= mValLin * ( nAlturaGrafico + 1 - nContAltura )
                  @ 3 + nContAltura, 10 + nContMes * 4 + nContResumo - 1 SAY "O" COLOR acCores[ nContResumo ] // aqui desenha
               ENDIF
            NEXT
         NEXT
      NEXT

      // legenda das colunas
      @ nAlturaGrafico + 6, 0 SAY "MESES->"
      FOR nContMes = 1 TO Len( acTitulo )
         @ iif( Mod( nContMes, 2 ) == 0, nAlturaGrafico + 5, nAlturaGrafico + 6 ), 10 + nContMes * 4 - 1 SAY acTitulo[ nContMes ]
      NEXT
Nota: Como usei array, vai ser fácil transformar em uma rotina genérica, aliás, era essa a idéia.

acResumo: Nome de cada "comparação"
nQtContas: Tamanho do array acResumo
acTitulo: Nome de cada coluna
nQtMeses: Tamanho do array Titulo (qtde. colunas)
anValor[ nQtContas ] [ nQtMeses ]: Valores

** alterei os traços "-----" pra @ TO depois da postagem
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 »

É praticamente o mesmo do anterior.
Acho que pareceu diferente porque tem muitas coiunas, e tem comparações.
Mas o princípio é o mesmo.
É o bom e velho estilo DOS... com mais linhas x colunas... rs

Em Windows a vantagem vai ser didivir por pixels, e escolher milhões de cores, mas pode ser do mesmo jeito.
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 »

Com activex podemos usar os objetos e métodos diretamente sem a necessidade da dll. Provavelmente vou usar a dll mesmo, porque o sistema está feito em harbour/gtwvt
Voltar atrás nisto. Aonde usa pelos objetos/métodos?

O problema do mschart é que ele é pago $$$
Nisto também. Pode ser oficialmente grátis, então o problema deixa de ser esse.
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,

Usando ocx, esse exemplo tá na minigui, veja que não preciso usar o sData

Código: Selecionar todos

          oActiveX := TActiveX():New( ThisWindow.Name, 'RMChart.RMChartX' , 0 , 0 , ;
                          GetProperty(ThisWindow.Name, "width") -  2 * GetBorderWidth() , ;
                          GetProperty(ThisWindow.Name, "height") - 2 * GetBorderHeight() - ;
                                                                       GetTitleHeight() )
          oChart := oActiveX:Load()

          nVersion := oChart:RMCVersion

          oChart:RMCStyle         := RMC_CTRLSTYLEFLAT // pode ser alterado, consultar documentação do rmchart
          oChart:RMCUserWatermark := 'Texto de Fundo - Opcional'

          oChart:AddRegion()

          WITH OBJECT oChart:Region( 1 )

               :Footer = 'RMChart version' + Str(nVersion/100, 5, 2)
               :AddCaption()

               WITH OBJECT :Caption()
                    :Titel     := 'Gráfico Teste'
                    :FontSize  := 10
                    :Bold      := .T.
               END

               :AddGridlessSeries()

               WITH OBJECT :GridLessSeries
                    :SeriesStyle      := RMC_PIE_GRADIENT
                    :Alignment        := RMC_FULL
                    :Explodemode      := RMC_EXPLODE_NONE
                    :Lucent           := .F.
                    :ValueLabelOn     := RMC_VLABEL_ABSOLUTE
                    :HatchMode        := RMC_HATCHBRUSH_OFF
                    :StartAngle       := 0
                    :DataString       := '30*15*40*35'
               END

          END

          oChart:Draw()
►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 »

A GTWVG tem a activex.prg, que pelo nome deveria ser pra isso.

Não sei se dá pra isolar essa rotina de activex da minigui, se for o caso.

Se é que entendi direito.
Parece que no activex as rotinas são numeradas, e existe uma tabela dessas referências.
O que o Harbour (a rotina de activex) faz é justamente carregar a tabela e fazer o relacionamento.
E isso através da atl.dll do Windows.

Seria estranho o Harbour não ter nada pra algo tão útil.

De repente dá pra copiar essa rotina.
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 »

Esse exemplo da minigui fica nesta pasta:

D:\MiniGUI\SAMPLES\Advanced\RMChart

Eu tentei utilizar o código da minigui com a hwgui mas dá um monte de erro e dependências que eu desisti, melhor criar uma solução usando a própria minigui
►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 »

Boas e más notícias.
Boa: O Harbour tem isso.
Má: Não faço idéia de como usar.

Faz parte da hbwin
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 »

E no changelog:
2009-08-23 11:58 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/contrib/hbwin/axcore.c
* added automatic activex initialization to __AXDOVERB().
__AXGETCONTROL()/hb_oleAxControlNew() also make automatic
initialization so it's not necessary to explicitly call
WIN_AXINIT()/hb_oleAxInit()
É como eu digo. Ao invés de centralizar no Harbour... tudo se espalha.
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 »

Pois é Quintas,

Activex na Minigui/HMG tem vários exemplos
Activex na hwgui nem tanto
Harbour também tem poucos exemplos.

E nenhuma das 3 são compatíveis
►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