Página 1 de 1

Gráfico simples em HwGui

Enviado: 03 Jun 2020 23:01
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?

Gráfico simples em HwGui

Enviado: 06 Jun 2020 01:55
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.

Gráfico simples em HwGui

Enviado: 06 Jun 2020 09:57
por cjp
Muito obrigado. Vou estudar os exemplos para colocar no meu sistema.

Gráfico simples em HwGui

Enviado: 06 Jun 2020 13:06
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.