Página 4 de 23
RMChart
Enviado: 06 Mai 2016 22:30
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.
RMChart
Enviado: 06 Mai 2016 22:39
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.

??
RMChart
Enviado: 06 Mai 2016 22:46
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
RMChart
Enviado: 06 Mai 2016 22:53
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.
RMChart
Enviado: 06 Mai 2016 23:17
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
RMChart
Enviado: 06 Mai 2016 23:23
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.
ou
Mas se tentasse mostrar o gráfico antes disso, não existiria janela pra ele, por isso a observação lá no fonte.
RMChart
Enviado: 07 Mai 2016 07:37
por asimoes
Quintas,
A rmchart é uma biblioteca muito legal pena que foi descontinuada.
Bem que poderia fazer parte da contrib
RMChart
Enviado: 07 Mai 2016 10:18
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.
RMChart
Enviado: 07 Mai 2016 12:16
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.
RMChart
Enviado: 07 Mai 2016 12:44
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
RMChart
Enviado: 07 Mai 2016 19:25
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.
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")
RMChart
Enviado: 07 Mai 2016 19:37
por JoséQuintas
Só pra constar, este também faz parte dos exemplos no fonte acima, da GTWVG.
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.
RMChart
Enviado: 07 Mai 2016 19:46
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).
RMChart
Enviado: 07 Mai 2016 19:52
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
RMChart
Enviado: 07 Mai 2016 20:57
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.