Página 1 de 3

RMchart (gráficos comerciais profissionais)

Enviado: 29 Jan 2008 18:36
por Itamar M. Lins Jr.
Ola!

Funciona que é uma beleza.
Exemplo básico de como chamar.
Podemos definir o tamanho da dialog ao carregar, etc...
Muito mais simples e versátil que outros exemplos e só precisa da dll da rmchart.
O exemplo abaixo usa o grafico de barras.
O Macete está em gerar a váriavel "sTemp" na sequência

Tem vários efeito 3D, flat, etc,etc e é claro etc...

Saudações
Itamar M. Lins Jr.

Código: Selecionar todos

************************
Function GraficoVendedor
************************
*
*
Local lOk:=.f., sTemp := ""
Private inicio := bom(date())
Private fim    := eom(date())

PREPARE FONT oFont NAME "MS Sans Serif" WIDTH 0 HEIGHT -10

  INIT DIALOG oDlg CLIPPER TITLE "Gráfico Por Vendedor" Font oFont AT 0,0 SIZE 300,180 STYLE DS_CENTER 

  @ 005,035 say 'Data Inicial:' size 100,20
  @ 120,030 get oInicio Var inicio  picture '@D' size 60,20
  @ 005,065 say 'Data Final:' size 100,20
  @ 120,060 get oFim Var Fim  picture '@D' size 60,20

  @ 200,020 Button oBt Caption 'Cancelar'   Size 70,30  ON CLICK {||EndDialog()}
  @ 200,070 Button oBt Caption 'Confirmar'  Size 70,30  ON CLICK {||lOk:=.t.,EndDialog()}

  Add status to oDlg parts 300

  oDlg:Activate()
   
   if cmonth(inicio) <> cmonth(fim)
     MsgStop('Um Mes de Cada Vez !',2)
     lOk := .f.
   endif
  
 if lOk

    ano  := str(year(inicio),4)
    dAno := ano + iif(lLinux,'/','\')
    nome_mes := substr(mes(month(inicio)),1,3)+'_'+ano+'.dbf'

    if file(dDados+dAno+nome_mes)
      AbreDb(dAno+Nome_Mes,'vm',.t.)
    else
      return nil
    endif
   vm->(OrdSetFocus(10)) 
   
   vArray := {{},{}}
   
   Stor 0 to nVendedor,xTotal
   
   Do While vm->(!eof())
   
      nVendedor ++
      nCV := vm->cod_vended
      Stor 0 to nTotal
      
      Do While vm->Cod_Vended = nCV
         nTotal += Soma_Valor('vm')
         xTotal += Soma_Valor('vm')
         vm->(DbSkip())
      EndDo      
       
       aadd( vArray[1],nCV )
       aadd( vArray[2],transf(nTotal,'9999999999.99') )
      
   EndDo

    sTemp = sTemp + "00003750|00004450|000051|000061|000072|00008-984833|00009401|00011Tahoma|100011|"
    sTemp = sTemp + "100035|100045|10005-5|10006-5|1000910|100101|100111|100122|100181|100200|10021"
    sTemp = sTemp + alltrim(transf(xTotal,'99999999.99')) +'|'
    sTemp = sTemp + "1002212|100238|100272|100331|100341|1003512|100378|100481|100491|10051-13408615|"
    sTemp = sTemp + "10052-2448096|100541|100558|10056-9868951|10057-11861886|10060-2987746|10061-983041|"
    sTemp = sTemp + "100626|10063-1|100652|"
    sTemp = sTemp + "10187"
    
    For n := 1 to nVendedor
       Stemp = sTemp + vArray[1,n]
       if n = nVendedor
       else 
          sTemp = sTemp + "*"
       endif                             
    Next
    //Janeiro*Fevereiro*Março*Abril*Maio*Junho*Julho*Agosto*Setembro*Outubro*"Novembro*Dezembro
    
    sTemp = sTemp + "|110011|110021|110049|110061|110081|110121|110131|1102111|110221|"
    sTemp = sTemp + "1102312|110281|11053"
    For n := 1 to nVendedor
       
       Stemp = sTemp + vArray[2,n]
       if n = nVendedor
       else 
          sTemp = sTemp + "*"
       endif
        
     Next
      
   Grafico(sTemp)
   
 endif
 
Return nil

*********************
Function Chart(sTemp)
*********************
*
*
local  nRetVal:=0, dll
nRetVal := dllcall(hDll,DC_CALL_STD,"RMC_CREATECHARTFROMFILE",omainwindow:handle,1001,10,10,0,sTemp)
nRetVal := dllcall(hDll,DC_CALL_STD,"RMC_DRAW",1001)

return ""

******************
Function endwindow
******************
*
*
nRetVal = dllcall(hDll,DC_CALL_STD,"RMC_RESET",1001)

omainwindow:close()

return Nil 
   
************************
Function Grafico(sTemp)
************************
*
*
Private oMainWindow, oFont
private hDll

   hDll:=loadlibrary("rmchart.dll")

   PREPARE FONT oFont NAME "Times New Roman" WIDTH 0 HEIGHT -17 CHARSET 4

   INIT DIALOG oMainWindow  TITLE "GRÁFICO"  Font oFont AT 0,0 SIZE 795,500 STYLE DS_CENTER ;
   On Init {|| Chart(sTemp) }

   oMainWindow:Activate()
    

Return nil

Enviado: 30 Jan 2008 15:12
por marcos.gurupi
Onde encontro a DLL para linkar e qual lib linko no projeto para aceitar a dllcall()

Obrigado!!
Marcos Roberto

Enviado: 30 Jan 2008 18:51
por Itamar M. Lins Jr.
marcos.gurupi escreveu:Onde encontro a DLL para linkar e qual lib linko no projeto para aceitar a dllcall()

Obrigado!!
Marcos Roberto
http://www.rmchart.com/

Para dllcall não tem lib especifica.

Saudações
Itamar M. Lins Jr.

Enviado: 31 Jan 2008 11:04
por marcos.gurupi
Eu tive a informacao do Luiz Culik q ela soh funcionaria com o xhb comercial. Vc usa com que xhb?

Marcos Roberto.

Enviado: 31 Jan 2008 11:14
por software_facil
A afirmação do Culik não procede, pois eu mesmo fiz os testes, pegando os exemplos em ooHG e usando o Harbour opensource que acompanha a MiniGUI para gerar os exemplos, e funciona, tanto que se vc olhar o exemplo da pasta rmchart na distribuição da MiniGUI Extended, verá o meu nome no cabeçalho.

Abraços

PS : Não acredite em tudo o que lhe dizem, principalmente nessa história de que só o xHarbour comercial faz tudo, não é bem assim.

Enviado: 31 Jan 2008 14:45
por Maligno
PS : Não acredite em tudo o que lhe dizem, principalmente nessa história de que só o xHarbour comercial faz tudo, não é bem assim.
O Culik ganha dinheiro com o XHarbour. Logo, é suspeito pra falar certas coisas. O melhor é não botar fé log de cara. :)

Enviado: 31 Jan 2008 20:42
por Itamar M. Lins Jr.
marcos.gurupi escreveu:Eu tive a informacao do Luiz Culik q ela soh funcionaria com o xhb comercial. Vc usa com que xhb?

Marcos Roberto.
Não tem nada haver.

Funciona com xharbour.org

Rafael me ajudou e ajuda em muitas coisas, mas pisa muito na bola de vez em quando.

Ps. Alias não tem nem exemplos para o xharbour comercial.

Saudações
Itamar M. Lins Jr.

Enviado: 01 Fev 2008 18:38
por marcos.gurupi
Eu jah desconfiada disso, mas para funcionar no xhb (open) alem da dll tem outra lib q devo linkar? Qual eh o minimo da versaum do xhb?

Marcos Roberto.

Enviado: 01 Fev 2008 21:05
por Itamar M. Lins Jr.
marcos.gurupi escreveu:Eu jah desconfiada disso, mas para funcionar no xhb (open) alem da dll tem outra lib q devo linkar? Qual eh o minimo da versaum do xhb?

Marcos Roberto.
Essa do xharbour.org já funciona.
Parece que nem testou ainda. Para facilitar deveria de informar a versão do xharbour que estas a usar no momento.

Saudações
Itamar M. Lins Jr.

Enviado: 02 Fev 2008 20:27
por sygecom
marcos, é só copiar o codigo que o colega postou , compilar e testar.
fiz um teste com 1.0.0 e funcionou.

Enviado: 08 Fev 2008 11:10
por Luciano Bonfim
testei e está dando o seguinte erro ao executar:

variavel DC_CALL_STD nao exeiste....

tem algum include específico?

Muito Obrigado

Enviado: 08 Fev 2008 13:19
por Itamar M. Lins Jr.
Luciano Bonfim escreveu:testei e está dando o seguinte erro ao executar:

variavel DC_CALL_STD nao exeiste....

tem algum include específico?

Muito Obrigado

Código: Selecionar todos

#define DC_CALL_STD 0x0020
Ola!

Estava esperando alguem falar sobre isso :-)

Esse foi o primeiro exemplo de como usar.
É só copiar colar e compilar, não precisa de mais nada.

Test this prg.

Código: Selecionar todos

#include "windows.ch"
#include "guilib.ch"

#define DC_CALL_STD 0x0020

Function Main
Private oMainWindow, oFont
private hDll

   hDll:=loadlibrary("rmchart.dll")

   PREPARE FONT oFont NAME "Times New Roman" WIDTH 0 HEIGHT -17 CHARSET 4

   INIT WINDOW oMainWindow MAIN TITLE "Example RMCHART"  ;
     COLOR COLOR_3DLIGHT+1                       ;
     AT 0,0 SIZE 800,600                       ;
     FONT oFont                                  ;
     ON EXIT {||MsgYesNo("Really want to quit ?")}

   @ 100,500 BUTTON "Close"  SIZE 150,30  ON CLICK {||EndWindow()}
   @ 300,500 BUTTON "RMCHART"  SIZE 150,30  ON CLICK {||Chart()}

   ACTIVATE WINDOW oMainWindow

Return nil

function chart
  local  sTemp:=""
  local  nRetVal:=0, dll

    sTemp = sTemp +
"00003650|00004450|000051|000061|000071|00008-6697831|00009412|00011Tahoma|100011"
    sTemp = sTemp +
"|1000310|1000410|10005-5|10006-5|1000910|100101|100111|100121|100131|100181|1002"
    sTemp = sTemp +
"00|100217|1002215|100238|100272|100331|100341|100358|100378|100411|100482|100492"
    sTemp = sTemp +
"|10051-6751336|10052-15132304|10053-983041|100541|100558|10056-16777077|10057-16"
    sTemp = sTemp +
"777077|100586|10060-16777077|10061-1468806|100622|10180data source:
www.federalr"
    sTemp = sTemp + "eserve.gov + www.ecb.int|10181Prime Rates in USA und
Euroland|10183 %|101871999*"
    sTemp = sTemp +
"2000*2001*2002*2003*2004*2005*2006|110011|1100221|110035|1100434|110052|110063|1"
    sTemp = sTemp +
"10073|1100970|1101312|110171|11019-16744448|1102115|110221|1102396|110262|110521"
    sTemp = sTemp +
"2|110534.75*4.75*4.75*4.75*4.75*5*5*5.25*5.25*5.25*5.5*5.5*5.5*5.75*6*6*6.5*6.5*"
    sTemp = sTemp +
"6.5*6.5*6.5*6.5*6.5*6.5*5.5*5.5*5*4.5*4*3.75*3.75*3.5*3*2.5*2*1.75*1.75*1.75*1.7"
    sTemp = sTemp +
"5*1.75*1.75*1.75*1.75*1.75*1.75*1.75*1.25*1.25*1.25*1.25*1.25*1.25*1.25*1*1*1*1*"
    sTemp = sTemp +
"1*1*1*1*1*1*1*1*1*1*1.25*1.5*1.75*2*2.25*2.25*2.5*2.75*2.75*3*3.25*3.25*3.5*3.75"
    sTemp = sTemp +
"*3.75*4*4.25*4.5*4.5*4.75*4.75*5*5.25*5.25*5.25*5.25*5.25*5.25*5.25|120011|12002"
    sTemp = sTemp +
"21|120035|1200434|120052|120063|120073|1200950|1201312|120171|12019-2448096|1202"
    sTemp = sTemp +
"115|120221|1202396|120262|1205212|120533*3*3*2.5*2.5*2.5*2.5*2.5*2.5*2.5*3*3*3*3"
    sTemp = sTemp +
".25*3.5*3.75*3.75*4.25*4.25*4.5*4.5*4.75*4.75*4.75*4.75*4.75*4.75*4.75*4.5*4.5*4"
    sTemp = sTemp +
".5*4.25*3.75*3.75*3.25*3.25*3.25*3.25*3.25*3.25*3.25*3.25*3.25*3.25*3.25*3.25*3."
    sTemp = sTemp +
"25*2.75*2.75*2.75*2.5*2.5*2.5*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*"
    sTemp = sTemp +
"2*2*2*2*2*2.25*2.25*2.25*2.5*2.5*2.5*2.75*2.75*3*3*3.25*3.25*3.5|010011|010054|0"
    sTemp = sTemp +
"100721|01014-16744448|010222|01024216*287|01025109*109|010272|010283|010012|0100"
    sTemp = sTemp + "51|01010295|01011102|010191|01026USA (Federal Funds
Rate)|010013|010054|0100721|"
    sTemp = sTemp +
"01014-10496|010222|01024260*287|01025192*192|010272|010283|010014|010051|0101029"
    sTemp = sTemp + "5|01011185|010191|01026Euroland (Prime Rate)"

    nRetVal :=
dllcall(hDll,DC_CALL_STD,"RMC_CREATECHARTFROMFILE",omainwindow:handle,1001,10,10,0,sTemp)
    nRetVal = dllcall(hDll,DC_CALL_STD,"RMC_DRAW",1001)

return ""

function endwindow

    nRetVal = dllcall(hDll,DC_CALL_STD,"RMC_RESET",1001)

   omainwindow:close()

   return Nil
Saudações
Itamar M. Lins Jr.

Enviado: 08 Fev 2008 14:00
por Luciano Bonfim
agora funcionou perfeitamente...

valeu... show de bola, e eu que já estava feliz com os gráficos da HWGUI agora estou nas nuvens...

valeu mesmo

Enviado: 08 Fev 2008 16:47
por Luciano Bonfim
só näo consegui entender direito como é formada a variável stemp... o que quer dizer cada linha/coluna dela...

pode me dar uma luz?

muito obrigado

Enviado: 08 Fev 2008 23:02
por Itamar M. Lins Jr.
Luciano Bonfim escreveu:só näo consegui entender direito como é formada a variável stemp... o que quer dizer cada linha/coluna dela...

pode me dar uma luz?

muito obrigado
Muito fácil... agora depois de alguns dias estudando.... :-)


Tem um programa que vem com a rmchart. Voce baixa o programa de nome setup.exe tem que renomear para rmchart.exe. Acabei de instala-lo no 2003 server não precisou renomea-lo.
rmcdesigner é o aplicativo... xiiii no 2003 server da pau...
Vem uns exemplos é só abrir cada um e ir estudando.

Estou no 2003, no note passo mais dicas...

Saudações
Itamar M. Lins Jr.