natalia_tavares Postado Abril 2, 2007 Denunciar Share Postado Abril 2, 2007 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! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Abril 7, 2007 Denunciar Share Postado Abril 7, 2007 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest natalia_tavares Postado Abril 11, 2007 Denunciar Share Postado Abril 11, 2007 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! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
natalia_tavares
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
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.