Gráfico simples em HwGui

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Gráfico simples em HwGui

Mensagem por cjp »

Pessoal,
Sou novo em HwGui, estou apenas começando a mexer nisso.
Preciso de ajuda para aprender a fazer um gráfico bem simples, com apenas dois elementos (data X cotação). Pode ser com uma linha variável, ou com colunas X/Y. No anexo tem um exemplo, mas este foi feito em PHP. Preciso fazer algo semelhante em HwGui.
Já pesquisei no fórum, mas não consegui uma solução.
Alguém pode me ajudar?
Anexos
tela.png
Inacio de Carvalho Neto
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Gráfico simples em HwGui

Mensagem por alxsts »

Olá!

Na pasta Samples\Graph da HwGUI tem o exemplo de código reproduzido abaixo:

Código: Selecionar todos

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

Function Main
Local oMainWindow


   INIT WINDOW oMainWindow MAIN TITLE "Example" COLOR COLOR_3DLIGHT ;
     AT 200,0 SIZE 400,100

   MENU OF oMainWindow
      MENUITEM "&Exit" ACTION EndWindow()
      MENUITEM "&Graph1" ACTION Graph1()
      MENUITEM "&Graph2" ACTION Graph2()
      MENUITEM "&Graph3" ACTION Graph3()
   ENDMENU

   ACTIVATE WINDOW oMainWindow
Return nil

Static Function Graph1
Local oModDlg, oFont := HFont():Add( "MS Sans Serif",0,-13 ), oGraph
Local i, aGraph[1]

   aGraph[1] := {}
   FOR i := -40 TO 40
      Aadd( aGraph[1], { i, hwg_cos(i/10) } )
   NEXT

   INIT DIALOG oModDlg CLIPPER TITLE "Graph"        ;
           AT 210,10  SIZE 300,300                  ;
           FONT oFont

   @ 50,30 GRAPH oGraph DATA aGraph SIZE 200,100 COLOR 65280
   // oGraph:oPen := HPen():Add( PS_SOLID,2,oGraph:tcolor )

   @ 90,250 BUTTON "Close"  ;
       SIZE 120,30          ;
       ON CLICK {||EndDialog()}

   ACTIVATE DIALOG oModDlg

Return Nil

Static Function Graph2
Local oModDlg, oFont := HFont():Add( "MS Sans Serif",0,-13 ), oGraph
Local i, aGraph[1]

   aGraph[1] := {}
   FOR i := 1 TO 6
      Aadd( aGraph[1], { "",i*i } )
   NEXT

   INIT DIALOG oModDlg CLIPPER TITLE "Graph"        ;
           AT 210,10  SIZE 300,300                  ;
           FONT oFont

   @ 50,30 GRAPH oGraph DATA aGraph SIZE 200,200 COLOR 65280
   oGraph:nType := 2

   @ 90,250 BUTTON "Close"  ;
       SIZE 120,30          ;
       ON CLICK {||EndDialog()}

   ACTIVATE DIALOG oModDlg

Return Nil

Static Function Graph3
Local oModDlg, oFont := HFont():Add( "MS Sans Serif",0,-13 ), oGraph
Local i, aGraph[1]

   aGraph[1] := {}
   FOR i := 1 TO 6
      Aadd( aGraph[1], i*i )
   NEXT

   INIT DIALOG oModDlg CLIPPER TITLE "Graph"        ;
           AT 210,10  SIZE 300,300                  ;
           FONT oFont
/*
   @ 50,30 GRAPH oGraph DATA aGraph SIZE 200,200 COLOR 65280
   oGraph:nType := 3

   @ 90,250 BUTTON "Close"  ;
       SIZE 120,30          ;
       ON CLICK {||EndDialog()}
*/
   ACTIVATE DIALOG oModDlg

Return Nil
Espero que ajude.
[]´s
Alexandre Santos (AlxSts)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Gráfico simples em HwGui

Mensagem por cjp »

Muito obrigado. Vou estudar os exemplos para colocar no meu sistema.
Inacio de Carvalho Neto
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Gráfico simples em HwGui

Mensagem por cjp »

Sabe me informar se, no Graph1, a aGraph[1] só aceita números? Eu precisaria colocar data e número.
Sabe me dizer se tem como colocar legenda dos dois lados do gráfico? Quero dizer, colocar a data e o número em cada dado.
Estou obtendo uns resultados estranhos nos testes que estou fazendo. Veja, por exemplo:

Código: Selecionar todos

      Aadd( aGraph[1], { day(date()-6), 5 } )
      Aadd( aGraph[1], { day(date()-5), 6 } )
      Aadd( aGraph[1], { day(date()-4), 7 } )
      Aadd( aGraph[1], { day(date()-3), 8 } )
      Aadd( aGraph[1], { day(date()-2), 9 } )
      Aadd( aGraph[1], { day(date()-1), 10 } )
      Aadd( aGraph[1], { day(date()), 11 } )
Está resultando a imagem do anexo.
Anexos
tela.png
tela.png (7.35 KiB) Exibido 820 vezes
Inacio de Carvalho Neto
Responder