Página 1 de 1

Dados em um gráfico.

Enviado: 18 Jan 2016 19:13
por rbonotto
Boa tarde pessoal,

Estou começando a estudar a MiniGui e usei um arquivo da pasta SAMPLE para gerar um gráfico.

Ficou uma dúvida que não consigo resolver, como substituir os valores pré definidos por valores que consten em um DBF

Especificamente nesta seguinte linha de código:

Código: Selecionar todos

  
    SERIES {1500,1800,200,500,800};
    DEPTH 25;
    SERIENAMES {"Product 1","Product 2","Product 3","Product 4","Product 5"};
    COLORS {{255,0,0},{0,0,255},{255,255,0},{0,255,0},{255,128,64},{128,0,128}};
Estou com um banco de dados simples: descricao e valor e não sei como colocar o campo descricao no SERIESNAMES e onde jogar o valor.

Se alguém pudesse dar uma orientação agradeceria muito.
Abraços !


O código completo do exemplo é este:

Código: Selecionar todos

#include "minigui.ch"

function main

define window m at 0,0 width 720 height 600 main ;
	Title "Print Pie Graph" ;
	backcolor {216,208,200}
   define button x
      row 10
      col 10
      caption "Grafico"
      action showpie()
   end button
   define button x1
      row 40
      col 10
      caption "Print"
      action ( showpie(), printpie() )
   end button
end window
m.center
m.activate
return nil


function showpie

ERASE WINDOW m

DRAW GRAPH IN WINDOW m AT 100,100;
      TO 500,500 ;
      TITLE "Sales in 2010 (1,000$)" ;
      TYPE PIE;
      SERIES {1500,1800,200,500,800};
		DEPTH 25;
		SERIENAMES {"Product 1","Product 2","Product 3","Product 4","Product 5"};
		COLORS {{255,0,0},{0,0,255},{255,255,0},{0,255,0},{255,128,64},{128,0,128}};
		3DVIEW;
		SHOWXVALUES;
		SHOWLEGENDS DATAMASK "99,999"
return nil


function printpie
Local cPrinter

cPrinter := GetPrinter()

If Empty (cPrinter)
   return nil
EndIf

SetDefaultPrinter (cPrinter)

PRINT GRAPH IN WINDOW m AT 100,100;
      TO 500,500 ;
      TITLE "Sales in 2010 (1,000$)" ;
      TYPE PIE;
      SERIES {1500,1800,200,500,800};
		DEPTH 25;
		SERIENAMES {"Product 1","Product 2","Product 3","Product 4","Product 5"};
		COLORS {{255,0,0},{0,0,255},{255,255,0},{0,255,0},{255,128,64},{128,0,128}};
		3DVIEW;
		SHOWXVALUES;
		SHOWLEGENDS DATAMASK "99,999"
return nil


#ifndef __XHARBOUR__

#pragma BEGINDUMP

#include "hbapi.h"

HB_FUNC_EXTERN( WIN_PRINTERSETDEFAULT ) ; HB_FUNC( SETDEFAULTPRINTER ) { HB_FUNC_EXEC( WIN_PRINTERSETDEFAULT ); }

#pragma ENDDUMP

#endif


Dados em um gráfico.

Enviado: 27 Jan 2016 14:39
por Daniel
Fica assim no banco com cinco campos descrição e valor

Código: Selecionar todos

SERIES {banco->valor1, banco->valor2, banco->valor3, banco->valor4, banco->valor5};
DEPTH 25;
SERIENAMES {banco->descricao1, banco->descricao2, banco->descricao3, banco->descricao4, banco->descricao5};
COLORS {{255,0,0},{0,0,255},{255,255,0},{0,255,0},{255,128,64},{128,0,128}};

Dados em um gráfico.

Enviado: 17 Fev 2016 11:52
por rbonotto
Daniel, muito obrigado pela resposta.
Fiz uma adaptação do codigo que colocou e funcionou.

O que notei é que ele trabalha com um registro no bando de dados e com vários campos.:
download/file.php?mode=view&id=3031

Como a tabela original era resultado de um relatório:
download/file.php?mode=view&id=3032

Como ficariam as linhas NAMES e SERIENAMES quando o resultado do relatório é imprevisivel, poderia ser 20 produtos, 6 produtos, 50 produtos
dependendo de como o usuário setar o inicio do relatório; por exemplo ele pode ver a movimentação do dia mas pode
tambem querer ver a movimentação do mês.

Desculpe minha falta de conhecimento no assunto gráficos e mais uma vez obrigado pela resposta.

Dados em um gráfico.

Enviado: 17 Fev 2016 18:06
por rbonotto
Fiz da seguinte forma:

Código: Selecionar todos

#include "minigui.ch"
**************************************
FUNCTION main
**************************************
SELE 0
USE RELAT ALIAS RELAT EXCLUSIVE
DBGOTOP()

SELE 0
USE RELAT1 ALIAS RELAT1 EXCLUSIVE
DBGOTOP()
nUmrEgs := 0
WHILE !EOF()
   FLOCK()
   relat1->valor_c := TRANSF(valor,'999,999.99')
   DBUNLOCK()
   SKIP
   nUmrEgs := nUmrEgs +1
END

*** limitado a 30 produtos, senão o gráfico fica horrivel....
IF nUmrEgs > 30
   nUmrEgs := 30
END
INDEX ON DESCEND(valor_c) TO ind1
SET INDEX TO ind1
SUM valor to tOtMvgraf
tOtMvgraf := ALLTRIM(TRANS(tOtMvgraf,'999,999.99'))

nUmCampo := 1
DBGOTOP()
WHILE !EOF()
   SELE relat
   vArSbs_v := 'v' + ALLTRIM(STR(nUmCampo))
   vArSbs_d := 'd' + ALLTRIM(STR(nUmCampo))
   FLOCK()
      relat->&vArSbs_v.   := relat1->valor
      relat->&vArSbs_d.   := relat1->desc
   DBUNLOCK()
   nUmCampo ++
   SELE relat1; SKIP
END
SELE relat; DBGOTOP()

**** SERIES
mAin_nUmrEgs := nUmrEgs
vArdnUm      := 1
vArdvAlor    := 'relat->'
WHILE mAin_nUmrEgs > 1
   IF mAin_nUmrEgs == 2
      vArdvAlor := vArdvAlor +  'v' + ALLTRIM(STR(vArdnUm))
   ELSE
      vArdvAlor := vArdvAlor +  'v' + ALLTRIM(STR(vArdnUm)) + ', '
   END
   IF mAin_nUmrEgs # 2
      vArdvAlor :=  vArdvAlor + 'relat->'
   END

   mAin_nUmrEgs --
   vArdnUm ++
END


**** SERIESNAMES
mAin_nUmrEgs := nUmrEgs
vArdnUm      := 1
vArddEscr    := 'relat->'
WHILE mAin_nUmrEgs > 1
   IF mAin_nUmrEgs == 2
      vArddEscr := vArddEscr +  'd' + ALLTRIM(STR(vArdnUm))
   ELSE
      vArddEscr := vArddEscr +  'd' + ALLTRIM(STR(vArdnUm)) + ', '
   END
   IF mAin_nUmrEgs # 2
      vArddEscr :=  vArddEscr + 'relat->'
   END
   mAin_nUmrEgs --
   vArdnUm ++
END

define window m at 0,0 width 920 height 800 main ;
   Title 'VENDAS';
   backcolor {204,204,204}
   cOrGraf := ''
   geracor()
   showpie()
end window
m.center
m.activate
CLOSE DATABASE
RETURN NIL

**************************************
FUNCTION showpie()
**************************************
ERASE WINDOW m

DRAW GRAPH IN WINDOW m AT 5,5;
      TO 750,550 ;
      TITLE "VENDAS NO PERIODO " + tOtMvgraf;
      TYPE PIE;
      SERIES {&vArdvAlor.};
      DEPTH 25;
      SERIENAMES {&vArddEscr.};
      COLORS {&cOrGraf.};
      3DVIEW;
      SHOWXVALUES;
      SHOWLEGENDS DATAMASK "99,999"
      
RETURN NIL

***************************************
FUNCTION geracor()
***************************************
IF nUmrEgs == 1
   cOrGraf := '{255,000,000}'
ELSEIF nUmrEgs == 2
   cOrGraf := '{255,000,000},{000,255,255}'
ELSEIF nUmrEgs == 3
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212}'
ELSEIF nUmrEgs == 4
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255}'
ELSEIF nUmrEgs == 5
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226}'
ELSEIF nUmrEgs == 6
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042}'
ELSEIF nUmrEgs == 7
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000}'
ELSEIF nUmrEgs == 8
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000},{210,105,030}'
ELSEIF nUmrEgs == 9
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000},{210,105,030},{100,149,237}'
ELSEIF nUmrEgs == 10    
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000},{210,105,030},{100,149,237},{095,158,160}'

ELSEIF nUmrEgs == 11
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000},{210,105,030},{100,149,237},{095,158,160},{220,020,060}'

ELSEIF nUmrEgs == 12
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000},{210,105,030},{100,149,237},{095,158,160},{220,020,060},{000,000,139}'

ELSEIF nUmrEgs == 13
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000},{210,105,030},{100,149,237},{095,158,160},{220,020,060},{000,000,139},{000,100,000}'

ELSEIF nUmrEgs == 14
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000},{210,105,030},{100,149,237},{095,158,160},{220,020,060},{000,000,139},{000,100,000},{255,140,000}'

ELSEIF nUmrEgs == 15
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000},{210,105,030},{100,149,237},{095,158,160},{220,020,060},{000,000,139},{000,100,000},{255,140,000},{139,000,000}'

ELSEIF nUmrEgs == 16
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000},{210,105,030},{100,149,237},{095,158,160},{220,020,060},{000,000,139},{000,100,000},{255,140,000},{139,000,000},{047,079,079}'

ELSEIF nUmrEgs == 17
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000},{210,105,030},{100,149,237},{095,158,160},{220,020,060},{000,000,139},{000,100,000},{255,140,000},{139,000,000},{047,079,079},{105,105,105}'

ELSEIF nUmrEgs == 18
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000},{210,105,030},{100,149,237},{095,158,160},{220,020,060},{000,000,139},{000,100,000},{255,140,000},{139,000,000},{047,079,079},{105,105,105},{034,139,034}'

ELSEIF nUmrEgs == 19
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000},{210,105,030},{100,149,237},{095,158,160},{220,020,060},{000,000,139},{000,100,000},{255,140,000},{139,000,000},{047,079,079},{105,105,105},{034,139,034},{220,220,220}'

ELSEIF nUmrEgs == 20
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000},{210,105,030},{100,149,237},{095,158,160},{220,020,060},{000,000,139},{000,100,000},{255,140,000},{139,000,000},{047,079,079},{105,105,105},{034,139,034},{220,220,220},{173,255,047}'

ELSEIF nUmrEgs == 21
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000},{210,105,030},{100,149,237},{095,158,160},{220,020,060},{000,000,139},{000,100,000},{255,140,000},{139,000,000},{047,079,079},{105,105,105},{034,139,034},{220,220,220},{173,255,047},{205,092,092}'

ELSEIF nUmrEgs == 22
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000},{210,105,030},{100,149,237},{095,158,160},{220,020,060},{000,000,139},{000,100,000},{255,140,000},{139,000,000},{047,079,079},{105,105,105},{034,139,034},{220,220,220},{173,255,047},{205,092,092},{075,000,130}'

ELSEIF nUmrEgs == 23
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000},{210,105,030},{100,149,237},{095,158,160},{220,020,060},{000,000,139},{000,100,000},{255,140,000},{139,000,000},{047,079,079},{105,105,105},{034,139,034},{220,220,220},{173,255,047},{205,092,092},{075,000,130},{240,230,140}'

ELSEIF nUmrEgs == 24
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000},{210,105,030},{100,149,237},{095,158,160},{220,020,060},{000,000,139},{000,100,000},{255,140,000},{139,000,000},{047,079,079},{105,105,105},{034,139,034},{220,220,220},{173,255,047},{205,092,092},{075,000,130},{240,230,140},{230,230,250}'

ELSEIF nUmrEgs == 25
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000},{210,105,030},{100,149,237},{095,158,160},{220,020,060},{000,000,139},{000,100,000},{255,140,000},{139,000,000},{047,079,079},{105,105,105},{034,139,034},{220,220,220},{173,255,047},{205,092,092},{075,000,130},{240,230,140},{230,230,250},{032,178,170}'

ELSEIF nUmrEgs == 26
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000},{210,105,030},{100,149,237},{095,158,160},{220,020,060},{000,000,139},{000,100,000},{255,140,000},{139,000,000},{047,079,079},{105,105,105},{034,139,034},{220,220,220},{173,255,047},{205,092,092},{075,000,130},{240,230,140},{230,230,250},{032,178,170},{119,186,153}'

ELSEIF nUmrEgs == 27
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000},{210,105,030},{100,149,237},{095,158,160},{220,020,060},{000,000,139},{000,100,000},{255,140,000},{139,000,000},{047,079,079},{105,105,105},{034,139,034},{220,220,220},{173,255,047},{205,092,092},{075,000,130},{240,230,140},{230,230,250},{032,178,170},{119,186,153},{128,000,000}'

ELSEIF nUmrEgs == 28
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000},{210,105,030},{100,149,237},{095,158,160},{220,020,060},{000,000,139},{000,100,000},{255,140,000},{139,000,000},{047,079,079},{105,105,105},{034,139,034},{220,220,220},{173,255,047},{205,092,092},{075,000,130},{240,230,140},{230,230,250},{032,178,170},{119,186,153},{128,000,000},{250,250,112}'

ELSEIF nUmrEgs == 29
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000},{210,105,030},{100,149,237},{095,158,160},{220,020,060},{000,000,139},{000,100,000},{255,140,000},{139,000,000},{047,079,079},{105,105,105},{034,139,034},{220,220,220},{173,255,047},{205,092,092},{075,000,130},{240,230,140},{230,230,250},{032,178,170},{119,186,153},{128,000,000},{250,250,112},{255,150,112}'

ELSEIF nUmrEgs == 30
   cOrGraf := '{255,000,000},{000,255,255},{127,255,212},{000,000,255},{138,043,226},{165,042,042},{127,255,000},{210,105,030},{100,149,237},{095,158,160},{220,020,060},{000,000,139},{000,100,000},{255,140,000},{139,000,000},{047,079,079},{105,105,105},{034,139,034},{220,220,220},{173,255,047},{205,092,092},{075,000,130},{240,230,140},{230,230,250},{032,178,170},{119,186,153},{128,000,000},{250,250,112},{255,150,112},{102,102,000}'
END

#ifndef __XHARBOUR__

#pragma BEGINDUMP

#include "hbapi.h"

#pragma ENDDUMP

#endif

Compilei com compile.bat

Código: Selecionar todos

call C:\MiniGUI\BATCH\compile.bat demo %1 %2 %3 %4 %5 %6 %7 %8 %9 
Arquivos relat1.dbf e relat.dbf:
http://www.4shared.com/file/K0uN8aG0ce/RELAT1.html

http://www.4shared.com/file/-JuH3GEZba/RELAT.html

O esquema de cores acho que teria como melhorar, alguma idéia seria bem vinda !

Abraços