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 »

Vamos precisar de ajuda de quem conheça C e talvez GTWVG.

Tomara que isso também resolva uma pendência que eu tinha.
Porque se for a mesma coisa... um novo mundo vai se abrir.
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 problema de sumir a tela só acontece com o harbour, a minigui funciona direito, provavelmente pelo fato da minigui ser 100% gui
Nota: não é somente com a rmchart que acontece o problema de sumir a tela
►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 »

Nem queira saber dos meus testes.... rs

Revirei a GTWVG, mexi no activex.prg, reduzi linhas pra usar criação de janelas padrão...

E alterei a rotina de eventos contida em activex.prg

Código: Selecionar todos

METHOD WvgActiveXControl:handleEvent( nEvent, aNM )
   MsgExclamation( Transform( nEvent, "" ) )
Um detector de chamadas!! .... rs

Ao redimensionar janela, a rotina recebe o evento 5, que deve ser o resize.
Ao mover a janela.... cadê... nenhum sinal de evento.

Pode ser bug, ou pode ser proposital, vamos aguardar a resposta.
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,

Já que ao mover a janela dispara o evento 5 , então a janela tem que ser restaurada, será que com WIN_SC_RESTORE resolve?

wapi_SendMessage(hb_gtInfo( HB_GTI_WINHANDLE ), WM_SYSCOMMAND, WIN_SC_RESTORE, 0)

https://msdn.microsoft.com/en-us/librar ... 85%29.aspx
►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 »

É justamente o contrário: Ao mover janela, na gtwvg não existe evento.
Não sei se é normal isso.
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 »

Apesar de eu ter baseado meu exemplo na GTWVG, ele está diferente.

DEMOWVG:

RMChart funciona corretamente, tanto no resize quanto no move.
Mas tem muita coisa complicada no mesmo exemplo, difícil identificar o mínimo necessário, que funcione.
O próprio DEMOWVG tem problemas nessa janela de activex, usando ou não o RMChart.
Nele são usados wvgDialog(), wvgCrt(), wvgDrawArea(), wvgActivex() além de wvgToolbar(), wvgTreeview(), wvgListBox(), wvgStatusbar(), etc.

Meu teste:

Baseado no exemplo da GTWVG, mas diferente.
A única coisa que não funcionou foi "mover janela", aonde o gráfico fica em branco.
Só usei a janela normal, e um wvgActivex().

A única idéia por enquanto é pegar o demowvg inteiro, e ir removendo o que não interessa, até chegar no RMChart isolado.

Anexo o demowvg com o rmchart funcionando até no "mover janela".
Lembrando que pode ser necessário usar o gerenciador de tarefas pra fechar o aplicativo, no final.
Anexos
demowvg.zip
(566.52 KiB) Baixado 305 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 »

Quintas,

A janela que está funcionando +- com demowvg pelo que percebi é 100% gui deve ser a wvgDialog()
►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 »

O difícil é enxugar o fonte.

No momento, pra facilitar testes, ao invés do RMChart dá pra usar o internet explorer.

Código: Selecionar todos

#include "inkey.ch"

PROCEDURE Main

   LOCAL oCom, cUrl := Pad( "www.github.com", 95 ), GetList := {}

   SetMode(40,100)
   CLS
   DO WHILE .T.
      @ 0, 0 GET cUrl PICTURE "@KX"
      READ
      IF LastKey() == K_ESC
         EXIT
      ENDIF
      oCom := WvgActiveXControl():New( wvgSetAppWindow(), , { -1, 0 }, { -MaxRow(), -MaxCol() - 1 }, , .T. )
      oCom:CLSID := "Shell.Explorer.2"
      oCom:create()
      IF HB_ISOBJECT( oCom )
         oCom:Navigate( Trim( cUrl ) )
      ENDIF
   ENDDO
   RETURN
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 »

Não, não é solução, é só pra curiosidade mesmo.
Tem até exemplo de uso no xHarbour e Fivewin.
Não tinha reparado antes, mas agora que vi, chamou a atenção o fórum: Visual Basic

http://www.tech-archive.net/Archive/VB/ ... 00090.html
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 »

Unir o útil ao agradável.

Levei um susto agora porque meu aplicativo estava lento.
Então acionei o GIT pra ver no que eu tinha mexido.
O git mostra tudo que foi alterado na pasta.
git.png
Com essa história de "caçar" algum evento pra atualizar a tela do RMChart, criei um log no disco de todos os eventos Windows.
Esqueci disso.

Se não fosse eu estar usando o GIT, ia demorar pra descobrir que esqueci de retirar isso.
Logo de cara, o arquivo de log, como sendo algo que não existia antes.
Vale a pena usar, a gente nunca sabe quando vai precisar dele.

Nota: estou usando pra todos os fontes de uma vez, não um controle por projeto.
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 »

Até dei risada agora.
Fui olhar uns emails de erro que recebi, e olha o que encontrei
Verifique as instruções abaixo
Conforme o problema, o próprio responsável da empresa poderá resolvê-lo.
Se for problema no programa, uma nova versão estará disponível com a correção.
Se o email automático falhar, envie esta página por email à JPA.
--------------------------------------------------------------------------------
Não foi possível localizar informação em erros conhecidos

Horário : 09/05/16 19:55:34
--------------------------------------------------------------------------------
19:55:29 WVGCRT 10
19:55:29 WVGCRT 10
19:55:29 WVGCRT 10
19:55:29 WVGCRT 10
...
Como usei o arquivo padrão do Harbour HB_OUT.LOG no registro de eventos, minha rotina de erros me enviou por email.... rs

Também tinha esquecido disso.
É a vantagem de, ao invés de inventar nomes, usar nomes padrão conhecidos.
A única coisa que fiz foi usar o nome do arquivo onde são gravados erros.

Fica aí a dica, simples, mas útil.
O próprio aplicativo me avisando da meleca que eu fiz.... 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
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 ao invés do activex

O único problema que eu não consegui resolver foi no AddBarSeries se colocar RMC_ADDBARSERIES dá erro, se colocar RMC_AddBarSeries não dá erro mas também não mostra as barras.

Notem que todas as funções estão em caixa alta, porque é assim que está assinado na dll, mas se colocar RMC_ADDBARSERIES com caixa alta vem o erro,
Screen Shot 05-10-16 at 09.55 AM.PNG
Screen Shot 05-10-16 at 09.24 AM.PNG

Código: Selecionar todos

FUNCTION RmChart
   nHandleDLL:=hb_LibLoad("rmchart.dll")
   
   oCrt := WvgCrt():New( , , { -1, -1 }, { 50, MaxCol() - 6 }, , .T. )
   oCrt:lModal := .T.
   oCrt:icon   := "demo.ico"
   oCrt:create()
   oCrt:resizable := .F.
   cLegenda := "Entradas*Saidas*Mais Um"
   cLabels  := "Janeiro*Fevereiro*Março*Abril*Maio*Junho*Julho*Agosto*Setembro*Outubro*Novembro*Dezembro"
   cTitulo  := "Grafico 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 } }
   aDadosGraf:={}
   cImagem := "" //"Paper.jpg"
   cUnidade := "R$ "
   cTextoVert := ""
   nMax     := 0
   
   FOR cTrGra1:=1 TO LEN( aDados )
   
       nMax := MAX( nMax, aMax( aDados[cTrGra1] ) )
       
       FOR cTrGra2:=1 TO LEN( aDados[cTrGra1] )
           IF cTrGra1 == 1
              AADD( aDadosGraf, aDados[cTrGra1, cTrGra2] )
              oData1 := aDados[cTrGra1,cTrGra2]
           ELSEIF cTrGra1 == 2
              oData2 := aDados[cTrGra1,cTrGra2]
           ELSEIF cTrGra1 == 3
              oData3 := aDados[cTrGra1,cTrGra2]
           ENDIF
      NEXT
   
   NEXT
   
   nMax := ROUND( ( INT( nMax/10 ) * 10 ) + 10 , 2 )
   
   altd()
   
   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, "" )
                          
   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. ) 

//nResult (LONG) = RMC_AddBarSeries(
//ByVal nCtrlId (LONG),
//ByVal nRegion (LONG),
//Optional ByRef nFirstDataValue (DOUBLE),
//Optional ByVal nDataValuesCount (LONG),
//Optional ByVal nType (LONG),
//Optional ByVal nStyle (LONG),
//Optional ByVal nIsLucent (LONG),
//Optional Byval nColor (LONG),
//Optional ByVal nIsHorizontal (LONG),
//Optional ByVal nWhichDataAxis (LONG),
//Optional ByVal nValueLabelOn (LONG),
//Optional ByVal nPointsPerColumn (LONG),
//Optional ByVal nHatchMode (LONG)

   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
   
   nRetVal:=hb_dynCall( { "RMC_DRAW", nHandleDLL, hb_bitOr( HB_DYN_CTYPE_LONG , HB_DYN_CALLCONV_STDCALL ) },;
                        ID_CHART)
   
   Inkey(0)
   oCrt:destroy()
   
   hb_LibFree(nHandleDLL)

RETURN Nil
O Erro

Código: Selecionar todos

Application Internal Error - D:\Harbour\h-RMChart\HARBOUR\demo.exe
Terminated at: 2016-05-10 09:57:46
Erro irrecuper vel 6005: Exception error:

    Exception Code:C0000005 ACCESS_VIOLATION
    Exception Address:0095DDE1
    EAX:00000000  EBX:00000000  ECX:00000000  EDX:00000002
    ESI:00000000  EDI:00000000  EBP:0028F820
    CS:EIP:0023:0095DDE1  SS:ESP:002B:0028F784
    DS:002B  ES:002B  FS:0053  GS:002B
    Flags:00010246
    Exception Parameters: 00000000 00000000
    CS:EIP: DD 03 8B 5D 08 B8 01 00 00 00 03 C6 2B 43 18 8B
    SS:ESP: 406C27FF 00000000 00000000 00000000 00000000 00000000 00000000 0000B009 00000000 00000000 0095DD5D FFFFFFFF 0028F958 00000000 FFFFFE80 009782C9

    C stack:
    EIP:     EBP:       Frame: OldEBP, RetAddr, Params...
    0095DDE1 0028F820   0028F958 0091211F 0028F834 00000000 406C2800 00000000 01160208 406C2800 00000008 00000000


Modules:
00400000 002D9000 D:\Harbour\h-RMChart\HARBOUR\demo.exe
77D20000 0016F000 C:\WINDOWS\SYSTEM32\ntdll.dll
77A00000 00140000 C:\WINDOWS\SYSTEM32\KERNEL32.DLL
75EF0000 000D7000 C:\WINDOWS\SYSTEM32\KERNELBASE.dll
75B60000 0007C000 C:\WINDOWS\SYSTEM32\ADVAPI32.dll
72FA0000 00206000 C:\WINDOWS\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.9600.18006_none_a9ec6aab013aafee\COMCTL32.DLL
766A0000 0009B000 C:\WINDOWS\SYSTEM32\COMDLG32.DLL
75820000 0010F000 C:\WINDOWS\SYSTEM32\GDI32.dll
76560000 000C3000 C:\WINDOWS\SYSTEM32\msvcrt.dll
76020000 00129000 C:\WINDOWS\SYSTEM32\ole32.dll
764C0000 00095000 C:\WINDOWS\SYSTEM32\OLEAUT32.dll
76740000 012BC000 C:\WINDOWS\SYSTEM32\SHELL32.dll
75D90000 00153000 C:\WINDOWS\SYSTEM32\USER32.dll
72790000 00065000 C:\WINDOWS\SYSTEM32\WINSPOOL.DRV
75620000 00041000 C:\WINDOWS\SYSTEM32\sechost.dll
77B40000 000BA000 C:\WINDOWS\SYSTEM32\RPCRT4.dll
757D0000 00045000 C:\WINDOWS\SYSTEM32\SHLWAPI.dll
76150000 0017D000 C:\WINDOWS\SYSTEM32\combase.dll
75510000 0001E000 C:\WINDOWS\SYSTEM32\SspiCli.dll
75500000 0000A000 C:\WINDOWS\SYSTEM32\CRYPTBASE.dll
74610000 0008B000 C:\WINDOWS\SYSTEM32\SHCORE.DLL
754A0000 00054000 C:\WINDOWS\SYSTEM32\bcryptPrimitives.dll
75FE0000 00027000 C:\WINDOWS\system32\IMM32.DLL
756B0000 00112000 C:\WINDOWS\SYSTEM32\MSCTF.dll
71180000 000ED000 C:\WINDOWS\SYSTEM32\UxTheme.dll
5DDF0000 0000E000 C:\Program Files\Acer\Acer Power Management\CBT_DLL.dll
6FEA0000 0001A000 C:\WINDOWS\SYSTEM32\dwmapi.dll
753D0000 00009000 C:\WINDOWS\SYSTEM32\kernel.appcore.dll
008D0000 000BA000 D:\Harbour\h-RMChart\HARBOUR\rmchart.dll
742B0000 00170000 C:\WINDOWS\WinSxS\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.9600.18123_none_dad9a2585bcb0fd8\gdiplus.dll
72800000 00006000 C:\WINDOWS\system32\msimg32.dll
64840000 00181000 C:\WINDOWS\SYSTEM32\DWrite.dll

Called from HB_DYNCALL(0)
Called from RMCHART(199) in DEMO.PRG
Called from CHART(118) in DEMO.PRG
Called from MAIN(24) in DEMO.PRG
------------------------------------------------------------------------
►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 »

Desse jeito, o problema de atualização de tela fica resolvido?
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 »

Sugestão, somente se o problema de tela estiver resolvido dessa forma.
Algo mais ou menos assim:

Código: Selecionar todos

CREATE CLASS RmChart
   VAR hHandle
   VAR hWnd
   METHOD New()
   METHOD Destroy() // não sei o nome pra destruir automático
   METHOD ... cada um dos existentes na DLL
   END CLASS

METHOD New( hWnd )
   nHandle := hb_LibLoad(...)
   RETURN SELF

METHOD AddBarSeries( ... )
   RETURN hb_DynCall( ::hHandle, ::hWnd, ... )

METHOD Destroy()
   hb_LibFree(...)
   RETURN NIL
No uso:

Código: Selecionar todos

oRmChar := RMChart():New( hWnd )
oRmChart:AddBarSeries( xxxxxxxxxxx )
...
oRmChart:Destroy() // se não for automático
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 »

Ah sim, o uso, veja se ajuda:

Código: Selecionar todos

Declare Function RMC_AddBarSeries Lib "RMCHART.DLL" Alias "RMC_ADDBARSERIES" ( _
                            ByVal nCtrlId As Long, _
                            ByVal nRegion As Long, _
                            Optional ByRef nFirstDataValue As Double, _
                            Optional ByVal nDataValuesCount As Long, _
                            Optional ByVal nType As BarSeriesType, _
                            Optional ByVal nStyle As BarSeriesStyle, _
                            Optional ByVal nIsLucent As Long, _
                            Optional ByVal nColor As RMC_Colors, _
                            Optional ByVal nIsHorizontal As Long, _
                            Optional ByVal nWhichDataAxis As Long, _
                            Optional ByVal nValueLabelOn As ValueLabels, _
                            Optional ByVal nPointsPerColumn As Long, _
                            Optional ByVal nHatchMode As Hatchmodes _
                            ) As RMCError
Declare Function RMC_AddBarSeriesI Lib "RMCHART.DLL" Alias "RMC_ADDBARSERIESI" ( _
                            ByVal nCtrlId As Long, _
                            ByVal nRegion As Long, _
                            ByRef nFirstDataValue As Double, _
                            ByVal nDataValuesCount As Long, _
                            T As tRMC_BARSERIES _
                            ) As RMCError
tem parâmetro BYREF, para o Harbour significa @variavel
Por isso é sempre bom criar uma rotina intermediária, pra não esquecer disso.
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