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 »

Pensei que tinha descoberto o problema, mas sinceramente....

Não estava funcionando

Meu último teste foi com mingw.... funcionou.

Testei novamente com msvc2010.... funcionou.

Então.... não sei.

E até usei -rebuild, pra garantir que estava compilando tudo.

Só posso dizer que "por enquanto" está funcionando com seu exemplo, e também no demo da GTWVG.

Sem explicação.

Valeu.

Nota: reiniciar a máquina pra ver se continua funcionando.... rs

Sobre o demowvg, é o arquivo original que vém com o Harbour.
Não alterei nada nele.
demowvg.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,

Você registrou a ocx na pasta C:\Windows\system32 ou C:\Windows\SysWOW64 ?
Outra coisa que percebi é que se registrar a ocx tem rodar o setup de instalação da rmchar de novo, porque para de funcionar. ?????
►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 »

Compilando a gtwvg dá estes erros estranhos:

Código: Selecionar todos

hbmk2: Processando script local make: hbmk.hbm
hbmk2: Harbour: Compilando módulos...
Harbour 3.4.0dev (0ce7f3e) (2016-05-05 13:26)
Copyright (c) 1999-2016, https://github.com/vszakats/harbour-core/
Compiling 'demowvg.prg'...
Compiling '_activex.prg'...
Compiling '_dyndlgs.prg'...
_dyndlgs.prg(121) Error E0055  CASE requires either numeric or string constant
_dyndlgs.prg(125) Error E0055  CASE requires either numeric or string constant
_dyndlgs.prg(166) Error E0055  CASE requires either numeric or string constant
_dyndlgs.prg(179) Error E0055  CASE requires either numeric or string constant
_dyndlgs.prg(189) Error E0055  CASE requires either numeric or string constant
_dyndlgs.prg(243) Error E0055  CASE requires either numeric or string constant
_dyndlgs.prg(303) Error E0055  CASE requires either numeric or string constant
_dyndlgs.prg(307) Error E0055  CASE requires either numeric or string constant
_dyndlgs.prg(311) Error E0055  CASE requires either numeric or string constant
Compiling '_modal.prg'...
Compiling '_tbrowse.prg'...
Compiling '_utils.prg'...
Compiling '_wvtcls.prg'...
Compiling '_xbp.prg'...
9 errors
Estou compilando assim:

@echo off
set path=d:\hb32fork\bin;
set HB_DBG_PATH=.\
hbmk2 demowvg.prg -rebuild
pause
►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 »

Olha que só que legal,

O setup (instalador) da rmchart copia o rmchart.ocx e rmchart.dll para a pasta sysWow64 e registra.
►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 »

Foi isso que falei, e que fiz.

System32 é a pasta default do Windows, então vai pra lá o que for igual ao sistema operacional (32 ou 64 bits)

SysWow64 só tem no Windows 64 bits, vai pra lá quando é 32 bits

E cada uma das pastas tem o seu regsvr32.exe, um pra 32 bits e outro pra 64 bits.

Dei uma enxugada no seu fonte.
Pra ficar bom mesmo, só falta criar uma janela só para o gráfico.
Não sei se reparou, mas se mexer na janela, o gráfico some.
Isso é porque a janela default é pra texto, e o texto cobre tudo.
É aí que entram os controles, criar uma janela que não vai ser coberta por texto.

Essa é a diferença entre os controles WVT e WVG. Os controles WVT ficam repintando toda hora pelo texto ficar cobrindo os controles.

o fonte:
Nota: Ao usar gtwvg.hbc, já entram os #include da gtwvg, a hbwin, e os #include da hbwin, não costumo colocar nos fontes.

Código: Selecionar todos

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

PROCEDURE Main()

   LOCAL oChart, nWidth, nHeight, nVersion

   SetMode( 50, 100 )
   CLS
   nWIDTH  := hb_gtInfo( HB_GTI_SCREENWIDTH )
   nHEIGHT := hb_gtInfo( HB_GTI_SCREENHEIGHT )

   oChart  := HActiveX():New( hb_gtInfo( HB_GTI_WINHANDLE ), "RMChart.RMChartX", 0, 0, nWIDTH, nHEIGHT )

   nWIDTH  := hb_gtInfo( HB_GTI_SCREENWIDTH )-100
   nHEIGHT := hb_gtInfo( HB_GTI_SCREENHEIGHT )-100

   nVersion := oChart:RMCVersion

   oChart:Reset()
   oChart:RMCBackColor := Bisque
   oChart:RMCStyle   := RMC_CTRLSTYLE3DLIGHT
   oChart:RMCWidth   := nWidth
   oChart:RMCHeight   := nHeight
   oChart:RMCBgImage  := ""
   oChart:Font     := "Tahoma"

   // Add Region 1
   oChart:AddRegion()

   With object oChart:Region( 1 )

      //:Left := 5
      //:Top  := 10
      //:Width := -5
      //:Height := -5
      :Footer = 'Version' + Str(nVersion/100, 5, 2)

      // Add caption to region 1
      :AddCaption()

      With object :Caption()
         :Titel     := "Saldos por Banco año 2007"
         :BackColor := Bisque
         :TextColor := Black
         :FontSize  := 11
         :Bold      := .T.
      End

      // Add grid to region 1
      :AddGrid()

      With object :Grid
         :BackColor   := Cornsilk
         :AsGradient  := .F.
         :BicolorMode := RMC_BICOLOR_NONE
         :Left        := 0
         :Top         := 0
         :Width       := 0
         :Height      := 0
      End

      // Add data axis to region 1
      :AddDataAxis()

      With object :DataAxis( 1 )
         :Alignment     := RMC_DATAAXISLEFT
         :MinValue      := 0
         :MaxValue      := 50000
         :TickCount     := 11
         :Fontsize      := 8
         :TextColor     := Black
         :LineColor     := Black
         :LineStyle     := RMC_LINESTYLESOLID
         :DecimalDigits := 0
         :AxisUnit      := "$"
         :AxisText      := "Miles de Dólares\9b"
      End

      // Add label axis to region 1
      :AddLabelAxis()

      With object :LabelAxis
         :AxisCount     := 1
         :TickCount     := 6
         :Alignment     := RMC_LABELAXISBOTTOM
         :Fontsize      := 8
         :TextColor     := Black
         :TextAlignment := RMC_TEXTCENTER
         :LineColor     := Black
         :LineStyle     := RMC_LINESTYLESOLID
         :AxisText      := "Primer semestre"
         :LabelString   := "Enero*Febrero*Marzo*Abril*Mayo*Junio"
       End

       // Add legend to region 1
       :AddLegend()

       With object :Legend
         :Alignment     := RMC_LEGEND_CUSTOM_UL
         :BackColor     := LightYellow
         :Style         := RMC_LEGENDRECT
         :TextColor     := Blue
         :Fontsize      := 8
         :Bold          := .F.
         :LegendString  := "Citibank*Boston*BBVA*Santander"
      End

      // Add Series 1 to region 1
      :AddBarSeries()

      With object :BarSeries(1)
         :SeriesType      := RMC_BARSTACKED
         :SeriesStyle     := RMC_COLUMN_FLAT
         :Lucent          := .F.
         :Color           := DarkBlue
         :Horizontal      := .F.
         :WhichDataAxis   := 1
         :ValueLabelOn    := RMC_VLABEL_NONE
         :PointsPerColumn := 1
         :HatchMode       := RMC_HATCHBRUSH_OFF
         :DataString      := "10000*10000*16000*12000*20000*10000"
      End

      // Add Series 2 to region 1
      :AddBarSeries()

      With object :BarSeries(2)
         :SeriesType       := RMC_BARSTACKED
         :SeriesStyle      := RMC_COLUMN_FLAT
         :Lucent           := .F.
         :Color            := DarkGreen
         :Horizontal       := .F.
         :WhichDataAxis    := 1
         :ValueLabelOn     := RMC_VLABEL_NONE
         :PointsPerColumn  := 1
         :HatchMode        := RMC_HATCHBRUSH_OFF
         :DataString       := "5000*7000*4000*15000*10000*10000"
      End

      // Add Series 3 to region 1
      :AddBarSeries()

      With object :BarSeries(3)
         :SeriesType       := RMC_BARSTACKED
         :SeriesStyle      := RMC_COLUMN_FLAT
         :Lucent           := .F.
         :Color            := Maroon
         :Horizontal       := .F.
         :WhichDataAxis    := 1
         :ValueLabelOn     := RMC_VLABEL_NONE
         :PointsPerColumn  := 1
         :HatchMode        := RMC_HATCHBRUSH_OFF
         :DataString       := "10000*3000*12000*10000*5000*20000"
      End

      // Add Series 4 to region 1
      :AddBarSeries()

      With object :BarSeries(4)
        :SeriesType      := RMC_BARSTACKED
        :SeriesStyle     := RMC_COLUMN_FLAT
        :Lucent          := .F.
        :Color           := DarkGoldenrod
        :Horizontal      := .F.
        :WhichDataAxis   := 1
        :ValueLabelOn    := RMC_VLABEL_NONE
        :PointsPerColumn := 1
        :HatchMode       := RMC_HATCHBRUSH_OFF
        :DataString      := "5000*9000*12000*6000*10000*5000"
     End

   End

   oChart:Draw()

   Inkey(0)
   RETURN

CREATE CLASS HActiveX

   VAR oOLE
   VAR hWnd
   METHOD New( hWnd, cProgId, nTop, nLeft, nWidth, nHeight, cID )
   METHOD Event( ... )
   ERROR HANDLER OnError()
   DESTRUCTOR Close()

ENDCLASS

METHOD New( hWnd, cProgId, nTop, nLeft, nWidth, nHeight, cID ) CLASS HActiveX

   LOCAL nStyle := WIN_WS_CHILD + WIN_WS_VISIBLE + WIN_WS_CLIPCHILDREN

   win_axInit()
   ::hWnd := wapi_CreateWindowEx( 0, "AtlAxWin", cProgId, nStyle, nLeft, nTop, nWidth, nHeight, hWnd, 0 )
   ::oOLE := win_axGetControl( ::hWnd, {| event, ... | ::Event( event, ... ) }, cID )

   RETURN self

PROCEDURE Event( ... ) CLASS HActiveX

   LOCAL cEvents := ""
   LOCAL aEvents := { ... }

   AEval( aEvents, {| xEvent | cEvents += hb_ValToStr( xEvent ) + ", " } )

   RETURN

METHOD OnError() CLASS HActiveX
   RETURN hb_ExecFromArray( ::oOLE, __GetMessage(), hb_AParams() )

METHOD PROCEDURE Close() CLASS HActiveX

   wapi_DestroyWindow( ::hWnd )
   ::hWnd := NIL
   ::oOLE := NIL

   RETURN

FUNCTION HB_GTSYS()
   REQUEST HB_GT_WVG_DEFAULT

   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 »

Outra coisa:

A janela da GTWVG aparece em qualquer alteração de texto da tela.
Tinha uma linha com algo assim ? "não retire esta linha pra janela aparecer...."

Não precisa, porque o CLS já faz a janela aparecer.

Código: Selecionar todos

PROCEDURE Test
   CLS // aqui a janela aparece
ou

Código: Selecionar todos

PROCEDURE Test
   ? "x" // aqui a janela aparece
Mas se tentasse mostrar o gráfico antes disso, não existiria janela pra ele, por isso a observação lá no fonte.
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 rmchart é uma biblioteca muito legal pena que foi descontinuada.
Bem que poderia fazer parte da contrib
►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 »

Eu tô achando que o setup acrescenta algo mais no registro do Windows, tipo uma licença, por isso não funciona só registrando.

Aqueles erros compilando GTWVG, tá parecendo falta de #define/#include.
Acrescenta gtwvg.hbc, deveria incluir o que falta automático.
Aliás... não sei porque inkey.ch e outros não ficam automático também.

Não confundir:
gtwvg.hbc // correto, já acrescenta pastas de include e arquivos include da gtwvg
-gtwvg.hbc // errado. no Harbour 3.4 existe o alerta
-lgtwvg // apenas acrescenta a LIB, depende da intenção geral


Outra coisa:
No Harbour 3.2 ainda não foi corrigido o uso da variável HB_INSTALL_PREFIX
No Harbour 3.2 ela tem precedência sobre o PATH pra indicar aonde está o Harbour, pode atrapalhar com mais de um Harbour instalado.
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 »

Precisaria tentar descobrir o que o install faz a mais, assim daria pra fazer pelo próprio Harbour.
Se fosse arquivo MSI, tem um utilitário da Microsoft que ajuda, mas é EXE.

Aparentemente a rotina existente na GTWVG resolve o problema de tela, agora falta isolar do exemplo dela.
Como o exemplo mostra tudo de uma vez, ele acaba ficando mais complicado do que deveria.
A partir daí, até mais fácil definir uma janela para o gráfico.

No exemplo parece que são usados 3 controles: o wvgCrt() que é uma tela, o wvgActivex() para o controle, e o wvgDA() pra escrita direta.
Talvez até algum daqueles controles que inventei seja mais interessante, já que será janela Windows sem a parte de texto, ao contrário do wvgCrt() que é a janela GTWVG com texto atualizando toda hora.

Depois vou testar mais, até mesmo esse wvgDA(), pra ver se serve pra "deenhar" à vontade.
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,

Eu não consegui sucesso com a demowgv, não exibe o gráfico.

A versão do harbour (atualizada ontem pelo github) que eu tenho é a 3.4 fork compilada com mingw 5.3

Tem como isolar somente o uso referente a activex rmchart ?

Embora já tenha obtido sucesso com hbwin
►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 »

Ainda some o gráfico ao mover janela, acho que precisamos encontrar o evento de mover janela e acrescentar um InvalidateRect() ou Refresh() se houver.
Conforme a tecla pressionada um gráfico diferente. São 5 ou 6 exemplos de gráfico, mas usando configuração pronta.
Nunca tinha visto esse exemplo da gtwvg funcionando até agora.

Resumindo: o recurso estava na GTWVG faz anos, e ninguém nunca percebeu.
wvgrmchart.png
Com EXE e tudo.

Harbour 3.4 compilado com msvc2010.
Precisa de rmchart instalado - significa OCX + DLL, à primeira vista, instalados pelo setup.
No restante, tudo neste tópico (rmchart e exemplo de uso com configuração "manual")
Anexos
test.zip
(354.79 KiB) Baixado 537 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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

RMChart

Mensagem por JoséQuintas »

Só pra constar, este também faz parte dos exemplos no fonte acima, da GTWVG.
rmchart.png
Importante:
Eu já estava quase desistindo, como puderam ler nos posts, sem entender porque não funcionava.
Foi graças à insistência do ASimões, que acabou chegando ao funcionamento.
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 »

Aproveitando:
Isso reforça o que tenho dito: centralizar as coisas no Harbour, ou pelo menos no padrão do Harbour.
As LIBs fornecerem de forma diferente, acabam não deixando enxergar o que já existe no Harbour, ou impedindo o aproveitamento de rotinas.
Além do mais, centralizando no Harbour fica compatível com qualquer compilador C.

Lembrando que o Harbour tem a opção de adicionar addons pra geração conjunta, que poderiam ser LIBs.

Infelizmente isso não vale pra xHarbour, ou pra versões antigas de Harbour (nem sei porque tem gente que usa versão antiga).
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,

Compilei o seu exemplo aqui, funcionou.
Com mingw

Constatei o problema de ficar movendo a tela, a exibição do gráfico some.
O mesmo acontece com hbwin
►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 »

Só pra constar:
O uso do activex do RmChart se resumiu a isto na gtwvg:

Código: Selecionar todos

   SetMode(40,100)
   CLS
   oCom := WvgActiveXControl():New( wvgSetAppWindow(), , { 0, 0 }, { 800, 600 }, , .T. )
   oCom:CLSID := "RMChart.RMChartX"
   oCom:create()
A partir daí, as propriedades/métodos do RMChart ficam disponíveis, exemplo oCom:Draw( .T. )

Lógico, pra montar um gráfico, com tanta opção disponível, é muita propriedade/método pra configurar.
isso já faz parte do RMChart, tem a ver com usar o RMChart, e não com complicação adicional do Harbour.
Se não estiver tudo configurado certo, o gráfico não aparece.

Sobre o problema: não sei se a mesma solução poderia servir pra qualquer activex. Caso contrário, só mesmo um activex específico pra 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/
Responder