Clipper On Line • Ver Tópico - Testando mais com RMChart
Página 1 de 1

Testando mais com RMChart

MensagemEnviado: 23 Nov 2020 20:55
por JoséQuintas
rmchart.png


Estou fazendo testes aqui pra melhorar um pouco o uso de RMChart.
Só podia abrir uma janela com RMChart por vez, agora testando mais janelas.

À primeira vista ok, mas por enquanto foi só um teste básico, sem alterar a classe.

   CLASSVAR hDLL
   VAR ID  INIT 1
   METHOD Init()                           INLINE ::hDLL := iif( ::hDLL == Nil, hb_libLoad( "RMChart.dll" ), ::hDLL )


O segredo parece ser usar uma ID pra cada gráfico, e nunca repetir.

Fiquei na dúvida sobre o detalhe de carregar/liberar a DLL.
Supondo que duas janelas usem ao mesmo tempo, o libload()/libfree() vai ser em cada uma, ou tem que ser um geral?
CLASSVAR seria pra carregar uma única vez, mas não sei se precisaria o libfree() ou se outros detalhes.
Também não sei se o ideal seria criar um controle com RMChart embutido, pra destruir os gráficos na saída, mas aparentemente não precisou disso.

Alguém fez testes mais detalhados, com uso maior do que uma simples janela?

Nota: como o RMChart "lembra" a janela/ID do gráfico, tudo indica que continua carregado enquanto existir janela com gráfico.
Nota2: Acabei de fazer esse teste com mais de uma janela, antes deste teste não funcionava.
Nota3: A tarja preta é pra não mostrar dados de cliente

Testando mais com RMChart

MensagemEnviado: 23 Nov 2020 21:10
por JoséQuintas
Com certeza vai ficar totalmente incompatível com usos anteriores.

   oRMChart:CreateChart( oCrt:hWnd, ID_RMC1, ... )
   oRMChart:AddRegion( ID_RMC1, ... )
   oRMChart:AddGrid( ID_RMC1, ... )
   oRMChart:AddDataAxis( ID_RMC1, ... )
   oRMChart:AddLabelAxis( ID_RMC1, ... )
   oRMChart:AddLegend( ID_RMC1, 1, ... )   
   oRMChart:AddBarSeries( ID_RMC1, ... )
   oRMChart:AddBarSeries( ID_RMC1, ... )
   oRMChart:AddBarSeries( ID_RMC1, ... )
   oRMChart:SetWatermark( RMC_USERWM, RMC_USERWMCOLOR, RMC_USERWMLUCENT, RMC_USERWMALIGN, RMC_USERFONTSIZE )
   oRMChart:Draw( ID_RMC1 )
   ID_RMC1 += 1


Nesse teste, alterei o programa pra somar 1 em ID_RMC1.
Se isso for feito na classe, vários métodos precisarão ser alterados pra usar o ID_RMC1, por isso vai ficar incompatível com usos anteriores.
Ou .... deixar como está e desprezar o ID_RMC1 que vém por parâmetro, pra continuar compatível, ou até pra comparar com outros fontes que possam aparecer usando RMChart.DLL, e que vão conter essa ID como parâmetro.

Simplificando: se numa janela usar 1, 2, 3, na outra deve usar 4,5,6, e assim por diante, só não pode ser um mesmo número.
Se controlar na própria classe... resolvido.

Testando mais com RMChart

MensagemEnviado: 23 Nov 2020 21:53
por JoséQuintas
rmchart.png


Pronto, simplifiquei a alteração.
Uma função que retorna a próxima ID.
Limitei em 1000 gráficos simultâneos, mas nem sei se precisaria disso, porque vai ser difícil o usuário chegar nesse limite.

Testando mais com RMChart

MensagemEnviado: 23 Nov 2020 22:03
por JoséQuintas
Antes que perguntem... NÃO PODE ser THREAD STATIC.
Mesmo em threads diferentes, o RMChart lembra do que está em uso.
Como é só leitura, nem precisa tratamento especial com mutex.
Já testei aqui e funcionou, sem precisar alterar mais nada.

Da vez anterior comentei disto:

   oRMChart:Draw( nIdChart )
   //ORMChart:Reset( nIdChart )


Com o Reset() o RMChart corta o vínculo com o gráfico, e não dá erro.
Tudo bem, funciona, mas.... a partir daí, se abrir um novo gráfico 1, por exemplo, o 1 da janela anterior some.
Também seria solução se apresentar apenas um gráfico de cada vez.

Melhor ilimitado.... nunca se sabe...

Testando mais com RMChart

MensagemEnviado: 23 Nov 2020 22:12
por JoséQuintas
Também antes que perguntem.... rs

https://github.com/JoseQuintas/wvgtst/blob/master/rmchart/printscreen2.png

https://github.com/JoseQuintas/wvgtst/tree/master/rmchart

Ainda não subi a função que mencionei, apesar que cada um vai acabar criando com o nome que achar melhor.

Poderia ser um método da classe, mas não sei se o número pode zerar quando a classe ficar fora de uso.

Testando mais com RMChart

MensagemEnviado: 23 Nov 2020 22:22
por JoséQuintas
Moleza... depois subo a alteração.

   CLASSVAR ChartID INIT 0
   METHOD GetChartID()                     INLINE ::ChartID += 1, ::ChartID


E no uso:

   nIdChart := oRMChart:GetChartID()


Já testei e deu certo, tanto abrir mais de um, quanto fechar as janelas e abrir uma nova.

Testando mais com RMChart

MensagemEnviado: 23 Nov 2020 22:32
por Itamar M. Lins Jr.
Olá!
Podemos usar a DLL em OS 64Bit, e o aplicativo Harbour compilado com 64 ?
Fiquei na dúvida quanto a isso, pois acredito que não funciona.
Dai eu postar aquele exemplo usando o google chart

Saudações,
Itamar M. Lins Jr.

Testando mais com RMChart

MensagemEnviado: 23 Nov 2020 22:38
por JoséQuintas
Pra quem não conhece.... eu também não conhecia até pouco tempo atrás...

CLASSVAR indica uma variável que vai ser sempre a mesma, não importa quantas instâncias existem.
Isso é usado, por exemplo, na HWGUI, pra ter a lista das janelas em qualquer janela, ou dialogs em qualquer dialog CLASSVAR aWindows/aDialogs

INLINE é pra economizar... é o codeblock diretamente ao invés de criar METHOD com mais linhas
Quando chamar o GetChartID() vai somar 1 e retornar.

Seria o mesmo que fazer separado:

METHOD GetChartID() CLASS RMChartClass

   ::ChartId += 1

   RETURN ::ChartID


Acaba sendo mais econômico colocar na própria declaração com INLINE.

METHOD GetChardID() INLINE ::ChartId += 1, ::ChartId


Lembrando que num codeblock, os comandos são separados por vírgula, e o último vai ser o retorno.
Na compilação isso vira o codeblock.

{ || ::ChartId += 1, ::ChartId }


É interessante saber, porque sempre aparece classe com isso, e... acabo de ter uma utilidade pro CLASSVAR kkkk

Itamar M. Lins Jr. escreveu:Podemos usar a DLL em OS 64Bit, e o aplicativo Harbour compilado com 64 ?


Eu vi na internet que dá pra usar DLL 32 bits em 64 bits
Agora não sei se precisaria um LoadLibrary() diferente.
Bem lembrado, porque não se sabe por quanto mais tempo teremos 32 bits.

Testando mais com RMChart

MensagemEnviado: 24 Nov 2020 21:13
por JoséQuintas
Não consegui testar em 64 bits.
Instalei o GCC 10.2, e nele é separado pra instalar 32/64 bits
E mesmo assim, não deu certo gerar 64 bits.

Me pareceu tudo mais rápido com ele.

Nota:
Por enquanto em 32 bits só temos o limite de 4GB.
Vai depender se o sistema operacional precisar abandonar 32 bits pra evoluir.
Seria estranho criar compatibilidade com Linux, e abandonar compatibilidade com 32 bits, mas nunca se sabe.

Testando mais com RMChart

MensagemEnviado: 01 Dez 2020 19:30
por asimoes
Quintas,

Onde eu baixo a sua classe para RmChart?

Testando mais com RMChart

MensagemEnviado: 01 Dez 2020 20:46
por JoséQuintas
na dúvida, no github é só procurar josequintas

tava evitando de criar muitos projetos, e como dependia da janela gtwvg, deixei junto.

https://github.com/JoseQuintas/wvgtst/tree/master/rmchart

Testando mais com RMChart

MensagemEnviado: 01 Dez 2020 21:53
por asimoes
Quintas,

Como é que baixa a pasta?

Testando mais com RMChart

MensagemEnviado: 02 Dez 2020 10:38
por JoséQuintas
asimoes escreveu:Quintas,
Como é que baixa a pasta?


Só junto com wvgtst, porque precisava da janela pro exemplo funcionar.
Depois vou ver o que fazer.

Até que meu conjunto tá aumentando, nem percebi isso:
Tem sefazclass, pdfclass, rmchartclass, wvgtst

Vou ver o que fazer.
Talvez deixar separado, e mais um projeto indicando os outros como subprojetos.
Quem quiser baixa separado, ou o central com tudo junto.