Ir para conteúdo
Fórum Script Brasil
  • 0

Duvida Com Charts


natalia_tavares

Pergunta

Boa tarde!

Montei um dbchart relativamente grande, e ele está dividido em várias páginas.

Coloquei dois botoes avancar e retroceder com os métodos dbchart.previouspage e dbchart.nextpage em seus eventos onclick.

Mas ao clicar nesses botoes, nada acontece.

alguém pode me dar uma dica do que está acontecendo?

Outra coisa.. como vocês fazem para imprimir gráficos que tem mais de uma página???

Obrigada!

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
Montei um dbchart relativamente grande, e ele está dividido em várias páginas.

Coloquei dois botoes avancar e retroceder com os métodos dbchart.previouspage e dbchart.nextpage em seus eventos onclick.

Mas ao clicar nesses botoes, nada acontece.

alguém pode me dar uma dica do que está acontecendo?

Fiz uns testes aqui e não tive qualquer problema. Defini a propriedade MaxPointPerPage = 3, utilizei um dataset com 11 itens e funcionou perfeitamente.

você está conseguindo ver o gráfico? Em design-time você consegue utilizar a pré-visualização das páginas na guia Paging (duplo click no DBChart - botões com setas esquerda, direita, ...)?

Outra coisa.. como vocês fazem para imprimir gráficos que tem mais de uma página???
Isto é relativamente simples. Depende do lay-out do seu relatório.

1) Se será impresso apenas o gráfico (um único gráfico). Voce pode colocar em um QuickRep uma banda Title para adicionar os items que você queira mostrar (dados diversos) e uma banda detail aonde você colocará seu componente TQRChart. Não vincula qualquer dataset a respectiva propriedade do QuickReport.

a. você define uma variável global no form, do tipo inteira, (tipo em private - ex. QtdPag :integer) para conter o número de páginas do gráfico;

b. antes de chamar o Preview do Quickreport, você calcula o nº de páginas que seu gráfico tem:

procedure TForm1.VisualizaGrafico;
begin
 // se as séries tiverem que ser inicializadas na mão, este é o local aonde deve ser feito

  QtdPag := QRChart1.Chart.Series[0].Count div QRChart1.Chart.MaxPointsPerPage;
  if (QRChart1.Chart.Series[0].Count mod QRChart1.Chart.MaxPointsPerPage) > 0 then
    Inc(QtdPag);
  QuickRep1.Preview;
end;
c. no evento BeforePrint (QuickRep) você posiciona na primeira página do Chart. Com isso ao visualizar ou imprimir, você garante que a impressão do gráfico comece no início:
procedure TForm1.QuickRep1BeforePrint(Sender: TCustomQuickRep; var PrintReport: Boolean);
begin
  QRChart1.Chart.Page := 1;
end;
d. no evento OnNeedData (QuickRep) você informa até quando o relatório será impresso, ou seja, enquanto todas as páginas do gráfico não tiverem sido impressas:
procedure TForm1.QuickRep1NeedData(Sender: TObject; var MoreData: Boolean);
begin
  MoreData := QRChart1.Chart.Page < QtdPag;
end;
e. no evento AfterPrint (banda Detal), após a impressão da página do Chart atual, você avança a página:
procedure TForm1.QRSubDetail1AfterPrint(Sender: TQRCustomBand; BandPrinted: Boolean);
begin
  QRChart1.Chart.NextPage;
end;
2) Se for para imprimir várias páginas de gráficos para cada item listado na banda detalhe (vários itens em uma consulata), o procedimento é parecido. Neste caso, teremos um dataset vinculado a respectiva propriedade do QuickReport, na banda Detail você terá os dados provenientes deste dataset. Então, utilizaremos uma banda SubDetail para fazer o processo similar ao item 1: a. você define uma variável global no form, do tipo inteira, (tipo em private - ex. QtdPag :integer) para conter o número de páginas do gráfico; b. no evento BeforePrint (banda Detail) você determina a quantidade de páginas que o Chart tem e posiciona na primeira página do mesmo. Com isso, a cada banda impressa, você garante que a impressão do gráfico comece no início:
procedure TForm1.QRBand1BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean);
begin
 // se as séries tiverem que ser inicializadas na mão, este é o local aonde deve ser feito
  QtdPag := QRChart1.Chart.Series[0].Count div QRChart1.Chart.MaxPointsPerPage;
  if (QRChart1.Chart.Series[0].Count mod QRChart1.Chart.MaxPointsPerPage) > 0 then
    Inc(QtdPag);

  QRChart1.Chart.Page := 1;
end;
c. no evento OnNeedData (banda SubDetail) você informa até quando o relatório será impresso, ou seja, enquanto todas as páginas do gráfico não tiverem sido impressas:
procedure TForm1.QRSubDetail1NeedData(Sender: TObject; var MoreData: Boolean);
begin
  MoreData := QRChart1.Chart.Page < QtdPag;
end;
d. no evento AfterPrint (banda SubDetail), após a impressão da página do Chart atual, você avança a página:
procedure TForm1.QRSubDetail1AfterPrint(Sender: TQRCustomBand; BandPrinted: Boolean);
begin
  QRChart1.Chart.NextPage;
end;

Tudo isso assumindo que a quantidade de itens de cada série é a mesma, do contrário, você terá que saber qual o maior número de itens para atribuir à QtdPag.

Eu não consegui vincular o meu dataset ao TQRChart, então movi valores na mão (parece-me um bug), mas isso não influenciará em nada, apenas que se você passar pelo mesmo problema...

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Guest natalia_tavares

Não conseguia passar o gráfico não.. mas deletei o grafico antigo e fiz de novo, aí funcionou. Vai entender!!!

E vlw pelas dicas de imprimir! Usei sua ideia e ficou show!!!

Brigadão!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...