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:

img

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;
img

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:

img

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.