Universidade Federal do Rio de Janeiro
Núcleo de Computação Eletrônica
Divisão de Assistência ao Usuário
Capítulo 10
IMPRESSÃO
O processo de impressão no ambiente Windows não é tão simples quanto no DOS. O
Delphi simplificou esta tarefa, disponibilizando uma grande quantidade de rotinas de
impressão.
TPRINTER
O objeto TPrinter encapsula a interface de impressão do Windows, tornando-a quase
imperceptível para o usuário. Os métodos e propriedades de TPrinter permitem que se
imprima um canvas da mesma forma que se desenha sobre a superfície de um form.
A inicialização de uma impressora é feita na seção Initialization da Unit Printers.
Observe que a variável global Printer é do tipo TPrinter e também está definida na Unit
Printers.
As tabelas abaixo listam as principais propriedades e métodos de TPrinter.
PROPRIEDADES DE TPRINTER.
Propriedade
Aborted
Canvas
Fonts
Orientation
PageHeight
PageWidth
PrinterIndex
Printers
Printing
Title
Propósito
Variável booleana que determina se o print job foi abortado ou não
pelo usuário
Área de impressão da página
Contém a lista de fontes suportados pela impressora
Determina se a impressão será horizontal (poLandscape) ou vertical
(poPortrait)
Altura em pixels da página
Largura em pixels da página
Indica qual a impressora está selecionada, a lista eé obtida a partir da
lista de impressoras do sistema
Lista das impressora disponíveis no sistema
Determina se o print job está sendo impresso
Texto exibido no gerenciador de impressão
MÉTODOS DE TPRINTER.
Método
Abort
BeginDoc
EndDoc
Delphi 4
Propósito
Finaliza um Print Job
Inicia um Print Job
Termina um print job(termina o print job após a finalização da
impressão, o método Abort finaliza o print job antes do término)
Pag. 154
Universidade Federal do Rio de Janeiro
Núcleo de Computação Eletrônica
Divisão de Assistência ao Usuário
GetPrinter
NewPage
SetPrinter
impressão, o método Abort finaliza o print job antes do término)
Recupera a impressão corrente
Força a impressora a iniciar a impressão numa nova página, também
incrementa a propriedade PageCount.
Indica qual a impressora será ativada
TPRINTER.CANVAS
TPrinter.Canvas funciona como o canvas de um formulário, representa a superfície
onde o texto ou gráfico será construído no dispositivo de saída, neste caso, uma
impressora. A maioria das rotinas para construir um texto, formas e imagens em tela
são usadas de maneira análoga para a impressão. As diferenças estão listas abaixo:
•
•
•
•
Desenho na tela é um processo dinâmico, pode-se apagar elementos da tela sem que
haja nenhum problema, porém desenhar na impressora não é tão flexível. O que for
desenhado em TPrinter.Canvas será impresso.
Desenhar texto ou gráfico na tela é instantâneo, enquanto que desenhar na
impressora é lento, mesmo em impressoras de alto desempenho. Deve0-se sempre
permitir que o usuário aborte a operação de impressão usando-se uma janela do tipo
Abort box, ou qualquer outro método que permita a finalização do Print Job.
Pode-se assumir que os monitores possuem alta capacidade gráfico, o que não é
verdade com relação a impressoras, deve-se levar em consideração as diferentes
resoluções.
É necessário prover tratamento de erros as rotinas de impressão.
IMPRESSÃO
A impressão em aplicativos Delphi podem ser feitas de várias formas, em muito casos,
simplesmente deseja-se apenas imprimir um arquivo texto, sem maiores preocupações
com formatações ou posicionamento do texto no papel. O Delphi facilita
tremendamente esta tarefa, veja:
IMPRIMINDO UM TMEMO
Imprimir linha de texto é extremamente simples quando se usa a procedure
AssignPrn( ). Esta procedure permite que se atribua uma variável texto a impressora.
Esta procedure é usada em conjunto com as procedures Rewrite( ) e CloseFile( ).
Vela o exemplo abaixo:
Var
F : TextFile;
Begin
AssignPrn(F);
Rewrite(F);
// Aqui você monta a rotina de impressão
Delphi 4
Pag. 155
Universidade Federal do Rio de Janeiro
Núcleo de Computação Eletrônica
Divisão de Assistência ao Usuário
CloseFile(F);
End;
Imprimir uma linha de texto é idêntico a escrever uma linha num arquivo texto. Veja:
Writeln(F,'Aqui imprimo uma linha!');
O código necessário para imprimir o conteúdo de um TMemo é:
Procedure TEditForm.Print1Click(Sender: TObject);
Var
I : Integer;
PText : TextFile;
Begin
If PrintDialog1.Execute then
Begin
AssignPrn(PText);
Rewrite(PText);
Try
Printer.Canvas.ont := Memo1.Font;
For I := 0 to Memo1.Lines.Count –1 do
Writeln(Ptext, Memo1.Lines[I]);
Finally
CloseFile(PText);
End;
End;
End;
Observe que a fonte do TMemo foi atribuída a Printer, ocasionando que a fonte de saída
seja a mesma apresentado no TMemo.
IMPRIMINDO UM FORM
Conceitualmente, imprimir um formulário pode ser uma das tarefas mais difíceis de ser
executada, todavia, esta tarefa foi facilitada graças a existência do método Print( ) de
TForm.
O trecho de código abaixo, imprime
componentes nele residentes.
a Client Area do form, bem como todos os
Procedure TForm1.PrintMyorm(Sender: TObject);
Begin
Print;
End;
QUICKREPORT
QuickReport é um conjunto de componentes de impressão desenvolvido por Allan
Lochert e inicialmente foi incorporado ao Delphi na versão 2.0. Estes componentes
executam tarefas de confecção, impressão e visualização de relatórios.
Delphi 4
Pag. 156
Universidade Federal do Rio de Janeiro
Núcleo de Computação Eletrônica
Divisão de Assistência ao Usuário
O QuickReport é uma ferramenta de construção de relatórios totalmente integrada ao
Delphi, suas principais características são:
•
•
•
•
•
•
•
Usar o ambiente de construção de formulários para criar relatórios
Compatibilidade com todas a s versões do Delphi
Multithread
Preview instantâneo
Criar relatórios sobre tabelas, queries ou stores procedures
Criar relatórios de etiquetas e malas diretas
Usar todo os recursos de fontes e cores do Windows
CONCEITOS BÁSICOS
Os componentes do QuickReport estão localizados na guia QReport. Quando se usa o
QuickReport, todos os relatórios são desenhados exatamente como um formulário do
Delphi, permitindo ao desenvolvedor criar os relatórios interativamente.
QUICKREPORT E SUAS BANDAS
O QuickReport gera relatórios usando bandas, onde cada banda do relatório possui um
objetivo. Um relatório poder ser constituído de inúmeras bandas. Para constituir um
relatório utiliza-se o componente TQuickRep, que é o relatório propriamente dito e
QRBand, que é um tipo especial de painel. O QRBand possui a propriedade
BandType , onde se define o tipo da banda.
As bandas do TQuickRep são:
Title
PageHeader
ColumnHeader
Detail
PageFooter
Delphi 4
Representa o título do relatório, é impresso uma única vez no início
do relatório. É possível ter diversas bandas deste tipo, elas serão
impressas umas após as outras somente na primeira página.
Representa o cabeçalho de uma página, ela será impressa a cada
nova página do relatório, incluindo a primeira página do relatório.
Representa o cabeçalho de uma coluna, é muito parecida com
PageHeader, diferindo apenas no fato de ser impressa no topo de
cada coluna em um relatório multicolunado.
Representa o corpo do relatório, repete-se automaticamente para
cada registro. Geralmente só existe uma banda Detail por relatório.
Representa o rodapé de uma página , sempre é impressa a cada
nova página, incluindo a primeira.
Pag. 157
Universidade Federal do Rio de Janeiro
Núcleo de Computação Eletrônica
Divisão de Assistência ao Usuário
Summary
SubDetail
GroupHeader
GroupFooter
Child
Representa o rodapé de um relatório , é impressa somente na
última página.
Banda especial usada pelo componente TQRSubDetail, é usada na
confecção de relatórios Master/Detail.
Usada para agregar valores (relatórios Master/Detail) usada para
efetuar somatórios de pequenos grupos de valores.
Finaliza a banda GroupHeader
Banda especial usada pelo componente TQRChilBand
A ilustração abaixo mostra um relatório construído com QuickReport
ORDENAÇÃO DAS BANDAS DE IMPRESSÃO
A ordem de aparecimento das bandas de impressão em design -time não tem nenhuma
importância, pois elas serão automaticamente ordenadas no momento da impressão. A
ordem seguida pelo QuickReport é:
PageHeader
⇓
Title
⇓
ColunmHeader
⇓
Detail
⇓
SubDetail(caso haja)
⇓
Summary
⇓
PageFooter
Delphi 4
Pag. 158
Universidade Federal do Rio de Janeiro
Núcleo de Computação Eletrônica
Divisão de Assistência ao Usuário
CONECTANDO DADOS
O QuickReport pode receber dados de componentes do tipo Dataset, isto é, T Table ou
TQuery. O dataset poder estar no mesmo formulário, ou em outro formulário do
projeto ou mesmo em um DataModule. A propriedade DataSet de TQuickRep permite
a conexão ao dataset.
NOTA
O Dataset deve estar ativo para que o relatório seja impresso.
ORDENANDO E FILTRANDO DADOS
O QuickReport NÃO possui nenhum mecanismo de ordenação de dados. Os dados
sempre são impressos na ordem que a BDE os apresenta. Para alterar esta ordem, a
tabela deve possuir um único índice de ordenação. Ao imprimir a partir de um TQuery,
é possível definir a ordem de impressão através da ordenação indicada na declaração
SQL.
A filtragem de dados pode ser feita de diversas formas. Caso esteja obtendo os dados de
TTable, usa-se a propriedade Filter para definir o filtro, lembre-se que a propriedade
Filtered de TTable dever ser True.
Outra forma de filtrar é através do uso do componente TQuery e especificar na cláusula
Where do SQL a condição de filtragem adequada.
CAMPOS DE BANCO DE DADOS E ETIQUETAS
Para imprimir um texto em um relatório, é necessário adicionar componentes
imprimíveis no relatório. Os dois componentes básicos são: TQRLabel e TQRDBText.
O componente TQRLabel é usado para imprimir texto estáticos (Etiquetas) ou texto e
números que podem ser calculados pela aplicação durante a geração do relatório. Para
imprimir um texto estático basta adicionar o componente no Form a alterar a
propriedade Caption.
O componente TQRDBText é usado para imprimir campos de um DataSet. Para
imprimí-los, basta adicionar o component ao form e associar a propriedade Dataset de
TQRDBText para a tabela ou query que armazena os dados.
O componente TQRExpr é usado para imprimir textos estáticos, dinâmicos e campos de
um dataset.
Delphi 4
Pag. 159
Universidade Federal do Rio de Janeiro
Núcleo de Computação Eletrônica
Divisão de Assistência ao Usuário
RELATÓRIOS COM QUICKREPORT
A etapa inicial na construção de um relatório é adicionar o componente TQuickRep ao
formulário, as próximas etapas são: configurar margens, grids, tamanho de papel,
fontes, campos, etc..
MARGENS, PAPEL E FONTES
Para configurar a página, basta expandir a propriedade Page do componente
TQuickRep no Object Inspector, veja:
As propriedades de Page permitem que se escolha o tipo de papel, layout de página,
número de colunas, espaço entre colunas, margens.
A propriedade de Fonts permitem que se escolha uma fonte e suas principais
características tais como: cor, tamanho, estilo e espaçamento.
TEXTO ESTÁTICO
Para imprimir textos estáticos em um relatório tais como títulos, nomes de colunas, usase o componente TQRLabel(já mencionado) Este componente permite a impressão de
Delphi 4
Pag. 160
Universidade Federal do Rio de Janeiro
Núcleo de Computação Eletrônica
Divisão de Assistência ao Usuário
várias linhas (propriedade WordWrap) no mesmo
automaticamente seu tamanho (propriedade AutoSize).
componente
e
calcula
Caso se queira imprimir textos estáticos muito grandes, usa-se o componente
TQRMemo. Este componente possui a propriedade Lines, onde se armazena o texto a
ser impresso. O texto é carregado de uma stream através do método LoadFromStream
ou a partir de um arquivo pelo método LoadFromFile.
IMPRESSÃO DE CAMPOS DE BANCOS DE DADOS
A maneira mais fácil de imprimir campos de uma tabela ou query é usar o componente
T QRBDText, seu funcionamento é parecido com o TQRLabel, a diferença consiste no
texto a ser exibido é oriundo de um bando de dados. A propriedade DataSet e
DataField devem ser usadas para fazer a ligação entre o componente e o campo da
tabela ou query.
Ao selecionar o campo, o componente exibirá FIELD<Nome do Campo> em design time. Caso nenhum campo seja ligado, a palavra None aparecerá.
Uma característica importante do TQRDBText é que ele suporta trabalhar com
controles de dados desabilitados. Os componen tes TTable e TQuery possuem um
método chamado Disable Controls que faz com que todos os controles ligados a eles
não façam mais atualizações dos dados, esta característica permite um ganho de
performance na execução do programa.
A formatação da saída de dados do componente TQRDBText é definida através de um
conjunto de propriedades tais como: Font, Size, Frame, Color,etc…
Caso seja necessário imprimir campos Memo, utiliza-se o componente TQRMemo ,
porém não se deve esquecer de configurar as propriedades AutoSize e AutoStretch
para False, assim, somente o texto que couber no retângulo será exibido. Para fazer o
componente crescer de acordo com a necessidade, basta configurar a propriedade
AutoStretch para True.
IMPRESSÃO DE IMAGENS
O QuickReport pode imprimir imagens estáticas ou imagens de um campo de uma
tabela. Para inserir uma imagem no relatório, usa -se o componente TQRImage e para
imagens de uma tabela o componente TQRDBImage. Os formatos de imagens
suportados podem ser: Bitmap, Metafiles e Ícones.
IMP RESSÃO DE RICHTEXT
O QuickReport permite imprimir campos Memo formatados com os componentes
TQRRichText e TQRDBRichText. O componente TQRRichText pode ser apontado
para o componente TRichEdit de um formulário da aplicação usando-se a propriedade
ParentRic hEdit. Assim o TQRRichText imprime qualquer que seja o texto do
Delphi 4
Pag. 161
Universidade Federal do Rio de Janeiro
Núcleo de Computação Eletrônica
Divisão de Assistência ao Usuário
TRichEdit. Pode-se ainda carregar as informações para TQRRichText a partir de uma
stream usando o método LoadFromStream da propriedade Lines , ou ainda a partir do
arquivo com o método LoadFromFile.
Campos RichText podem ser expandidos e divididos em várias colunas se a
propriedade AutoStrech é True. O componente TQRBDRichText obtém os dados a
partir de uma tabela ou query.
CONSTRUTOR DE EXPRESSÕES
O QuickReport possui um recurso chamado Expression Evaluator. Ele permite que
pequenos cálculos sejam efetuados durante a composição de um relatório. O avaliador
possui operador lógicos, aritméticos e funções pré-definidas. Para usar este recurso,
basta adicionar o componente TQRExpr na banda onde se deseja efetuar uma
expressão, através da propriedade Expression.
Delphi 4
Pag. 162
Download

Capítulo 10