Nesse vídeo demonstraremos a utilização da classe FWChartFactory, que serve para criar gráficos em uma dialog.
Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:
//Bibliotecas #Include "TOTVS.ch" /*/{Protheus.doc} User Function zExe210 Cria gráficos em Dialogs do Protheus @type Function @author Atilio @since 20/02/2023 @see https://tdn.totvs.com/display/public/framework/FwChartFactory @obs **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao **** /*/ User Function zExe210() Local aArea := FWGetArea() Local oFWChart Local oDlg Local aRand := {} //Cria a Janela DEFINE MSDIALOG oDlg PIXEL FROM 0,0 TO 400,600 //Instância a classe oFWChart := FWChartFactory():New() oFWChart := oFWChart:getInstance(BARCHART) //BARCOMPCHART ; LINECHART ; PIECHART //Inicializa pertencendo a janela oFWChart:Init(oDlg, .T., .T. ) //Seta o título do gráfico oFWChart:SetTitle("Título", CONTROL_ALIGN_CENTER) //Adiciona as séries, com as descrições e valores oFWChart:addSerie("Ano 2011", 20044453.50) oFWChart:addSerie("Ano 2012", 21044453.35) oFWChart:addSerie("Ano 2013", 22044453.15) oFWChart:addSerie("Ano 2014", 23044453.10) oFWChart:addSerie("Ano 2015", 25544453.01) //Define que a legenda será mostrada na esquerda oFWChart:setLegend( CONTROL_ALIGN_LEFT ) //Seta a máscara mostrada na régua oFWChart:cPicture := "@E 999,999,999,999,999.99" //Define as cores que serão utilizadas no gráfico aAdd(aRand, {"084,120,164", "007,013,017"}) aAdd(aRand, {"171,225,108", "017,019,010"}) aAdd(aRand, {"207,136,077", "020,020,006"}) aAdd(aRand, {"166,085,082", "017,007,007"}) aAdd(aRand, {"130,130,130", "008,008,008"}) //Seta as cores utilizadas oFWChart:oFWChartColor:aRandom := aRand oFWChart:oFWChartColor:SetColor("Random") //Constrói o gráfico oFWChart:Build() ACTIVATE MSDIALOG oDlg CENTERED FWRestArea(aArea) Return
Bom pessoal, por hoje é só.
Abraços e até a próxima
Show Daniel
é possivel usar um TTimer() e Refresh() no objeto do grafico para atualiza-lo a cada XX segundos?
Para criar painéis on-line …
Bom dia Juarez, tudo joia?
Eu nunca precisei fazer, mas acredito que, se a classe permitir zerar as séries para readicionar ou atualizar o valor delas, ai daria pra tentar acionar algum refresh.
Caso não seja possível, ai você poderia simplesmente matar o objeto e recriar ele nas mesmas coordenadas.
Um grande abraço.