Artigo Clube Delphi Edição 12 - Personalizando o Preview no QuickReport

Artigo da Revista Clube Delphi Edição 12.

Um dos grandes recursos disponibilizados pelo QuickReport é a capacidade de personalizar sua tela de preview. Não que isto seja de extrema necessidade – já que a janela de preview padrão atende a maioria das necessidades, pois oferece o controle de zoom, a navegação entre as páginas e ainda a opção de ler ou salvar o relatório em disco. Porém, para os exigentes, existem alguns fortes argumentos:

  1. Os hits e as dicas poderão ser traduzidos;
  2. Personalizar o relatório dá a oportunidade de adequar a tela de preview ao design do software que está sendo construído
  3. É possível adicionar recursos não encontrados na versão default do preview, como a seleção personalizada de zoom (a versão padrão oferece apenas três opções de zoom)

Para criar uma nova janela de preview não será preciso recorrer a nenhum API ou outras esquisitices da programação de nossa época. O próprio QuickReport oferece o objeto TqrPreview para este fim.

A construção de uma tela de preview deve ser realizada sobre um objeto Tform, e não sobre um objeto TquickReport. Em uma nova aplicação, crie um formulário em branco, que servirá como base para o preview. Neste form, insira um objeto tQrPreview, um objeto Tpanel, um objeto TcomboBox, um objeto Tlabel, um objeto Tedit e 9 objetos TSpeedButton. Suas propriedades serão alteradas conforme a lista a seguir:

Tpanel Align AlTop TqrPreview Align AlClient
Os objetos a seguir serão incluídos dentro do Tpanel:
TcomboBox1 Left 16 Name Combobox1 Items 200 100 80 60 40 Label1 Caption % Font.Style Bold Left 72 TspeedButton Name SbFirst Glyph arrow2l.bmp Left 120 TspeedButton Name sbPrior Glyph arrow1l.bmp Left 144 Tedit Name Edit1 Text ‘’ Left 168 Tlabel Name Label1 Caption ‘’ Left 208 TspeedButton Name sbNext Left 248 Glyph arrow1r.bmp TspeedButton Name SbLast Left 272 Glyph arrow2r.bmp TspeedButton Name sbPrintSetup Glyph printer.bmp Left 320 TspeedButton Name sbPrint Glyph docsingl.bmp Left 344 TspeedButton Name sbClose Glyph dooropen.bmp Left 392 Tform Name FrmPreview

O formulário deverá estar parecido com a figura a seguir:

Conforme pode ser observado, esta janela irá permitir a seleção de qualquer porcentagem de preview além de executar as funções já encontradas na default. Vejamos a implementação de cada um dos speedbuttons inseridos no form:

Controlando o Preview

A ComboBox irá permitir a seleção ou digitação de um número porcentual para o preview. O evento OnChange deste objeto deve ser preenchido conforme a listagem abaixo:

procedure TfrmPreview.ComboBox1Change(Sender: TObject); begin try qrPreview1.Zoom:=StrToInt(ComboBox1.Text) except End; end;

Repare que a propriedade Zoom realiza toda a tarefa. A cláusula try..except está envolvendo a propriedade para evitar possíveis erros de digitação.

Navegando entre as páginas:

Outras duas propriedades irão nos ajudar no processo de permitir ao usuário a navegação entre as páginas do relatório: pagenumber e pagecount. Abaixo o código dos quatro botões de navegação:

procedure TfrmPreview.sbFirstClick(Sender: TObject); begin QrPreview1.PageNumber:=1; ChecaPaginas; end; procedure TfrmPreview.sbPriorClick(Sender: TObject); begin QrPreview1.PageNumber:=QrPreview1.PageNumber-1; ChecaPaginas; end; procedure TfrmPreview.sbNextClick(Sender: TObject); begin QrPreview1.PageNumber:=QrPreview1.PageNumber+1; ChecaPaginas; end; procedure TfrmPreview.sbLastClick(Sender: TObject); begin QrPreview1.PageNumber := QrPreview1.QrPrinter.PageCount; ChecaPaginas; end;

A procedure que acompanha os eventos, chamada ChecaPaginas, irá controlar o estado dos botões e exibir o número da página atual no objeto label1. Veja o código da procedure:

procedure TFrmPreview.ChecaPaginas; begin Edit1.Text:=IntTostr(QrPreview1.PageNumber); Label1.Caption:=' de '+ Inttostr(QrPreview1.QrPrinter.PageCount); sbFirst.Enabled := (qrPreview1.PageNumber > 1); sbPrior.Enabled := (qrPreview1.PageNumber > 1); sbNext.Enabled := (qrPreview1.PageNumber < qrPreview1.qrPrinter.PageCount); sbLast.Enabled := (qrPreview1.PageNumber < qrPreview1.qrPrinter.PageCount); end;

Temos ainda o objeto Edit1, que permite ao usuário digitar um número de página para pular direto. Precisamos modificar o seu evento OnChange:

procedure TfrmPreview.Edit1Change(Sender: TObject); begin try qrPreview1.pagenumber:=strToInt(Edit1.text); except End; end;

Imprimindo e Configurando a Impressora

O objeto tQrPrinter nos dá os métodos necessários: Print e PrintSetup. Veja o código:

procedure TfrmPreview.sbPrintSetupClick(Sender: TObject); begin qrPreview1.QRPrinter.PrintSetup end; procedure TfrmPreview.sbPrintClick(Sender: TObject); begin qrPreview1.QRPrinter.Print end;

E, por último, o botão fechar:

procedure TfrmPreview.sbcloseClick(Sender: TObject); begin close; end;

Executanto o Preview Personalizado

O último é indicar que o preview a ser executado é o nosso form, e não a janela default. Podemos utilizar o evento OnPreview do objeto QuickReport para indicar isso:

procedure TQuickReport3.QuickRepPreview(Sender: TObject); begin FrmPreview.QrPreview1.QrPrinter := TQrPrinter(Sender); FrmPreview.Show; end;

Esse formulário poderá ser utilizado em qualquer aplicação que utilize o quickreport. Para facilitar, você pode colocá-lo no Repositório de Objetos. Basta clicar com o botão direito sobre o formulário, escolher a opção Add to Repository e preencher a janela de acordo com a figura abaixo:

Como podemos perceber, personalizar o preview do QuickReport pode acrescentar mais funcionalidade ao seu aplicativo. Em nosso exemplo acrescentamos a possibilidade do usuário pular para uma página simplesmente digitando o seu número, além de acrescentar um zoom personalizado. Você pode continuar explorando a capacidade do QuickReport e acrescentar mais funções ao preview.

Artigos relacionados