You are on page 1of 13

Tutorial de LazReport - Free Pascal wiki

Page 1 of 13

HOME NEWS DOWNLOAD WIKI COMMUNITY DOCUMENTATION BUG TRACKER

Log in / create account

freepascal wiki
OPEN SOURCE COMPILER FOR PASCAL AND OBJECT PASCAL

VIEWS

TUTORIAL DE LAZREPORT
From Lazarus-ccr

Contents

Article
Discussion
Edit
History

NAVIGATION
1 Relatrio
2 Funes
2.1 Funes nos dados:
2.2 Funes nos caracteres de conexo:
2.3 Funes Lgicas:

Relatrio

Main Page
Documentation
FAQ
Downloads
Glossary
Index
Recent changes
Random page
Help

Vamos usar um demo de banco de dados fornecido pelo Delphi (alias DBDEMOS). Voc
deve criar uma nova aplicao com o formulrio principal chamado Form1.
Ponha no formulrio os seguintes componentes:
TTable:
Table1.DataBaseName:= DBDEMOS
Table1.TableName:= ANIMALS.DBF
Table1.Active:= TRUE
TDataSource
DataSource1.DataSet:= Table1
TfrDBDataSet
frDbDataSet.DataSource:= DataSource1
TfrReport
TfrDesigner
2 TButton
Button1.Caption:= ' Editing'
Button2.Caption:= ' Preview'

TOOLBOX
What links here
Related changes
Upload file
Special pages
Printable version
Permanent link

WIKI SEARCH

Go

Search

O que resulta em:

O LazReport permite associar nomes de variveis a campos de dados ou valores do


sistema, o que possibilita evitar que o usurio final decifre os geralmente pequenos

http://wiki.freepascal.org/Tutorial_de_LazReport

18/04/2009

Tutorial de LazReport - Free Pascal wiki

Page 2 of 13

nomes de campos. Em nosso exemplo vamos tentar criar uma varivel nos campos BMP
e NAME na Tabela1.

Clique em Variables Editor...

Agora clique no boto Variables para definir o lado esquerdo desta janela.

Escreva as sentenas conforme indicado na figura acima. Demo Variables representa a


categoria e CampoXXXX as variveis. Para diferenciar as duas, as variveis comeam
com um espao. Ento clique em OK para ter o seguinte:

http://wiki.freepascal.org/Tutorial_de_LazReport

18/04/2009

Tutorial de LazReport - Free Pascal wiki

Page 3 of 13

A categoria disposta na ComboBox de variveis acima. Cada varivel precisa ser


associada a um campo. Para isso, selecione a varivel e depois o campo. A varivel
Name Field associada ao campo Name da Tabela1.
Como para as variveis, clique com o boto direito do mouse no componente frReport
e ento em New State. Voc abriu o editor:

Talvez voc tenha notado um pequeno nmero de objetos na barra de objetos.

http://wiki.freepascal.org/Tutorial_de_LazReport

18/04/2009

Tutorial de LazReport - Free Pascal wiki

Page 4 of 13

Deve ter visto que os objetos so iguais aos componentes QRLabel, QRMemo, etc, do
QuickReport.

Em nosso relatrio em branco voc deve clicar no tipo de faixa que deseja criar:
Selecione o ttulo do estado e clique OK.
Tipo de faixa
Uso
Report title
Publicado apenas na primeira pgina
Report summary Publicado apenas na ltima pgina
Page header
Publicado no topo de cada pgina
Page footer
Publicado no p de cada pgina
Master header
Publicado no comeo do primeiro nvel (detalhe/barra)
Master Data
Dados do primeiro nvel
Master Footer
Publicado no final do primeiro nvel
Detail header
Publicado no comeo do segundo nvel (barra/detalhe)
Detail Data
Dados de segundo nvel
Detail Footer
Publicado no final do segundo nvel
Subdetail Header Publicados no comeo do terceiro (barra/detalhes)
Subdetail Data
Dados de terceiro nvel
Subdetail Footer Publicados no fim do terceiro nvel
Overlay
Heading of column Publicado no topo de cada coluna
Column base
Publicado no comeo do grupo
Heading of group Publicado no topo de cada pgina
Foot of group
Publicado no final do grupo
VarColumn
Usado para tabelas cruzadas

Nesta faixa, adicione um retngulo e o dimensione como quiser. Escolha uma cor para
o plano de fundo com o boto Baldinho Cheio, ento clique duas vezes no retngulo
para indicar o ttulo.

http://wiki.freepascal.org/Tutorial_de_LazReport

18/04/2009

Tutorial de LazReport - Free Pascal wiki

Page 5 of 13

Na primeira linha deve ser indicado o ttulo do relatrio e na segunda, duas


informaes do sistema precisam ser adicionados. Eles so obtidos clicando em DB
Field e depois em Other na ComboBox. Agora temos:

Vamos inserir a faixa como dados mestre, ento clique duas vezes nessa faixa para
selecionar frDBDataSet1, a principal fonte de dados do nosso exemplo.

Na metade esquerda da faixa insira um retngulo e d um duplo clique.

Aqui podem ser colocados vrios campos, mas pode ser mantido um retngulo para um
nico campo a fim de aplicar formatos, por exemplo. A primeira linha Name [Field
Name] obtida escrevendo-se Name e ento, com o boto Variable, inserindo a
varivel [Field Name] (poderamos ter escrito isto diretamente). Para a segunda linha,
Size[[Table1, SIZE]*2.54], ns escrevemos Size e com o boto DB Field escolhemos o
tamanho do campo de Table1 e para converter este campo, expresso em polegadas,
para centmetros, multiplicamos este campo por 2.54. Pode-se ver o poder do

http://wiki.freepascal.org/Tutorial_de_LazReport

18/04/2009

Tutorial de LazReport - Free Pascal wiki

Page 6 of 13

fastreport. Com apenas um retngulo coloca-se em nosso estado, a segunda nomeao,


dois campos, incluindo um calculado. Agora no lado direito da faixa selecione uma
imagem. Para mostrar sempre a mesma figura, seria suficiente dar um duplo clique
nessa figura e carregar a figura desejada. Ns queremos uma figura associada com o
pressionamento da tecla F11, para mostrar o Inspetor de Objetos.

Informe a propriedade do Memo com a propriedade [ImageField]. Isso transforma a


figura em um objeto associado com o campo de dados. O nosso primeiro estado est
concludo. Deve ser gravado com o mesmo nome rapff. Um clique na pr-visualizaao
nos d:

Agora vamos escrever o cdigo necessrio para carregar e visualizar ou editar o nosso
relaltrio rap1frf. Para isto adicione ao projeto o seguinte cdigo:
TForm1.Button2Click(Sender procedure: TObject);
begin
frReport1.LoadFromFile(' rap1.frf');
FrReport1.ShowReport;
end;
TForm1.ButtonClick(Sender procedure: TObject);
begin
frReport1.LoadFromFile(' rap1.frf');
frReport1.DesignReport;
end;

Voc tem uma edio com pr-visualizao que d a possibilidade de os usurios finais
modificarem o relatrio sem precisar modificar a aplicao bsica.
Agora vamos adicionar funcionalidades ao nosso exemplo bsico. Voc deve adicionar
um componente TButton com a propriedade Caption:= Print; e um TPrintDialog.
Obtemos isso:

Adicione tambm as unidades de impressora na clusula uses do seu formulrio e


ponha o seguinte cdigo no evento OnClick do boto Print:

http://wiki.freepascal.org/Tutorial_de_LazReport

18/04/2009

Tutorial de LazReport - Free Pascal wiki

Page 7 of 13

TForm1.bPrintClick(Sender procedure: TObject);


var
FromPg, ToPg, Cpy: Integer;
ind: Integer;
St: String;
Collap: Boolean;
begin
/ / Carregar o estado
St:=ExtractFilePath(ParamStr(0));
frReport1.LoadFromFile(St+' rap1.frf');
/ / Mudando a impressora padro
ind: = Printer.PrinterIndex;
/ / Preparar o estado; para sair se a preparao no funcionar
if not frReport1.PrepareReport then Exit;
/ / inicializa a limpeza do dilogo para edio de parmetros
with PrintDialog1 C
begin
Options:=[poPageNums ]; / / autoriza a seleo de pginas
Copies: = 1;
/ / apenas uma espcie
Collate: = True;
/ / cpias ordenadas
FromPage: = 1;
/ / pgina do comeo
ToPage: = frReport1.EMFPages.Count; // ltima pgina
MaxPage: = frReport1.EMFPages.Count; / / nmero mximo de pgina
if Execute then
/ /
limpeza do dilogo
begin
if (Printer.PrinterIndex < > ind )/ / a impressora mudou?
or frReport1.CanRebuild / / possui uma regenerao de estado?
// mudana de impressora
or frReport1.ChangePrinter(ind, Printer.PrinterIndex) then
frReport1.PrepareReport
else Exit; / / a mudana de impressora ocorreu de forma errnea
if PrintDialog1.PrintRange = prPageNums then / / fez-se uma seleo de pginas
begin
FromPg : = PrintDialog1.FromPage; / / primeira pgina
ToPg : = PrintDialog1.ToPage;
/ / ltima
end;
Cpy :=PrintDialog1.Copies;
/ / nmero de cpias
Collap :=PrintDialog1.Collate; / / exemplares ordenados
// recorte de edio da pgina FromPg com ToPg , " Cpy "
// exemplares ordenados (Collap))
frReport1.PrintPreparedReport(FromPg, ToPg, Cpy, Collap);
end;
end;
end;

um pouco longo mas nada impede que voc crie uma classe herdada do TfrReport
com um mtodo de impresso ou, mais fcil, crie um procedimento PrintReport(letat:
string) que carregue o relatrio e o imprima.
No menu Edit File > Page Options voc obtm isso:

Para escolher o tamanho do papel

http://wiki.freepascal.org/Tutorial_de_LazReport

18/04/2009

Tutorial de LazReport - Free Pascal wiki

Page 8 of 13

Para escolher as margens

Para especificar o nmero de colunas e o espao entre as colunas.


No menu principal do editor, selecione File > Report options para mostrar a seguinte
caixa de dilogo:

Aqui voc especifica a impressora necessria para o carregamento de estados e se a


preparao feita em duas formas.
Se voc quer numerar suas pginas com a pgina atual a partir do nmero total de
pginas, voc deve escolher a opo Two-pass Report.
Aqui sero adicionadas ao nosso exemplo algumas variveis no relacionadas aos
dados. Elas tornaro possvel, por exemplo, mostrar as diferentes nomeaes de
acordo com o contexto. Para isso, abra o editor de relatrios e selecione o menu File e
a Lista de Variveis. Com uma varivel Test, como explicado anteriormente, a nica
diferena que voc no vai selecionar um campo de valor, mas deixar None (o valor
padro). Publique um dos objetos e adicione a varivel Test como visto anteriormente.
Retorne ao Delphi (no esquecer de salvar seu relatrio) e publique o evento
OnGetValue do componente FrRepor1 adicionando o seguinte cdigo:

http://wiki.freepascal.org/Tutorial_de_LazReport

18/04/2009

Tutorial de LazReport - Free Pascal wiki

Page 9 of 13

procedure TForm1.frReport1GetValue(const ParName: String;


var ParValue: Varying; VAr fld: TField);
begin
// trata o caso de variveis no dependentes
if UpperCase(ParName)=' TEST' then
ParValue:=' Answer: Variable " test1 " ';
end;

Ou tambm possvel passar o valor diretamente para a varivel atravs do seguinte


cdigo:
procedure TForm1.Button1Click(Sender:TObject);
begin
frReport1.Values.FindVariable('test').Field := QuotedStr('test1');
frReport1.ShowReport;
end;

Isto no usado para os dados, mas para permitir formatar os dados com
DisplayFormat. Agora vamos ver como criar uma varivel calculada. Como antes,
vamos criar uma nova categoria (opcional) e uma varivel. Test Calculation. Selecione
uma nova varivel e escolha um valor da ComboBox " Other " e " Expression ". Essa
seleo ativa a rea de dados de entrada Expression. Escreva o seguinte:
[Table1."SIZE"] + [Table1."WEIGHT"] . Dessa forma voc obter o sumrio dos campos
de dados Size e Weight. Voc tambm pode colocar nome nas variveis. E pode utilizar
os seguintes operadores:
Tipos de Operadores Operadores
Logic
>, <, BUT, AND, NOT, =, < >, > =, < =
Mathematics
-, *, +, MOD, /
Mais frente voc poder dispor dos seguintes funes padronizadas:
Funo
Descrio
Exemplos
SUM
Soma
AVG
Mdia
MIN
Mnimo
MAX
Mximo
FORMATDATETIME Data e hora formatadas
FORMATFLOAT
Ponto flutuante formatado
LOWERCASE
Letras minsculas
NAMECASE
Primeira maiscula
STRTODATE
Data para string
STRTOTIME
Hora para string
UPPERCASE
Letras maisculas
Se no for suficiente voc pode criar suas prprias funes, mas isso ns veremos mais
adiante.
Agora vamos definir um formato para as variveis de uma rea. Um formato vlido
para todas as variveis de uma rea de display. Para mostrar o editor de formatos,
clique com o boto direito em uma rea e ento em Variable Format.

http://wiki.freepascal.org/Tutorial_de_LazReport

18/04/2009

Tutorial de LazReport - Free Pascal wiki

Page 10 of 13

A primeira ComboBox indica o tipo de dado (texto, numrico, data, hora, lgico). A
segunda permite selecionar o formato preestabelecido. O tipo Text no permite
qualquer formatao e o tipo Number requer um nmero decimal com vrgula. A no
ser para os tipos Text e Logic, voc pode usar as funes de formatao do Delphi.
Voc pode incluir tambm o conceito de highlighting, que muito til para enfatizar
dados. Voc pode especificar uma condio para aplicar o highlighting. Para isso use a
palavra-chave Value para indicar o valor da varivel. Aqui requisitado o highlighting
para todos os valores maiores que 1000. Por padro o highlighter um simples negrito
sobre fundo branco. Voc pode definir esses parmetros para uma rea clicando no
boto Realce.

Ento voc pode definir a cor do plano de fundo, o estilo e a cor da fonte a ser usada
selecionando Intesified brightness.

Funes
necessrio adicionar ao arquivo FR.lng a linha seguinte:
FCT = CATEGORY | FCT(<X>, <Y>, <Z >) | Help on the function
onde: FCT o nome da funo. CATEGORY, o nome da categoria. FCT(<X>, <Y>, <Z
>), a visualizao dos parmetros necessrios, com no mximo 3 parmetros. Help.,
uma pequena Ajuda que deve tornar possvell ao usurio entender o objetivo da
funo. | um separador. Cada parmetro separado por vrgula e pode ser uma
expresso, uma constante, uma varivel, um campo ou dados. As constantes de tipo
alfanumrico devem ser limitadas por um caractere. As variveir so limitadas por
and. Os campos de dados so limitados como as variveis e tem o seguinte formato:
Dataset_Name. "Field_Name"
Funes Estatsticas:

http://wiki.freepascal.org/Tutorial_de_LazReport

18/04/2009

Tutorial de LazReport - Free Pascal wiki

Page 11 of 13

SUM(<X >)
. Retorna a soma dos valores dados por <X>, que geralmente um campo de
dados.
AVG(<X >)
Retorna a mdia dos valores dados por <X>.
COUNT
Meter.
MIN(<X >)
Retorna o valor mnimo dos valores dados em <X>.
MAX(<X >)
Retorna o valor mximo dos valores dados em <X >.

Funes nos dados:


FORMATDATETIME(<X>, <Y >)
Retorna os dados abreviados em (TDateTime) < Y > no formato < X >. < X > usa a
descrio padro Delphi para formatos.
FORMATFLOAT(<X>, <Y >)
Retorna o numeral < Y > no formato < X >. < X > usa o padro de descrio Delphi
para formatos.
STRTODATE(<X >)
Retorna a repesentao (TdateTime) da string < X >. < X > deve respeitar o
formato de dados
STRTOTIME(<X >)
Retorna A representao digital (TDateTime) da string < X >. < X > deve respeitar
o formato de horas.

Funes nos caracteres de conexo:


LOWERCASE(<X >)
Retorna a string <X>
UPPERCASE(<X >)
Retorna a string <X>
NAMECASE(<X >)
Retorna a string <X>
COPY(<X>, <Y>, <Z >)
Retorna a string <X>

em letras minsculas.
em maisculas.
com a primeira letra maiscula.
na posio < Y > e comprimento< Z >.

Funes nos numerais:


FRAC(<X >)
Retorna
INT(<X >)
Retorna
ROUND(<X >)
Retorna
STR(<X >)
Retorna

a parte decimal do nmero < X >.


a parte inteira do nmero < X >.
o nmero inteiro correspondente ao arredondamento de < X >.
a string correspondente de um nmero < X >.

Funes Lgicas:
IF(<X>, <Y>, <Z >)
Retorna < Y > se a expressso < X > verdadeira, se falsa retorna < Z >.
Para adicionar suas prprias funes realmente muito simples. Aqui um cdigo-fonte
para adicionar as funes POS e SQRT:

http://wiki.freepascal.org/Tutorial_de_LazReport

18/04/2009

Tutorial de LazReport - Free Pascal wiki

Page 12 of 13

Unit FR_OGFct;
interface
implementation
uses FR_Pars, FR_Class; / / Declarao-padro
type
//Declarao de TBrOGFunctionLibrary
TfrOGFunctionLibrary = class(TfrFunctionLibrary)
public
constructor Create; override;
procedure DoFunction(FNo:integer procedure; p1, p2,
p3:Variant; var valley:string); override;
p3:Variant; var valley:string);
end;
//************************** / / * TfrOGFunctionLibrary
constructor TfrOGFunctionLibrary.Create;
begin
inherited Create;
with List do
begin
Add('POS');
ADD('SQRT');
end;
end;
Procedure TfrOGFunctionLibrary.DoFunction(FNo:Integer procedure; p1,
p2, p3:Variant; Var valley:String);
VAr Par1, Par2: Varying;
Result: Variantying;
begin
Try
Case FNo of //FNo um indice das funes declaradas no constructor
0 : Begin
//funo POS
Par1:=VarToStr(Parser.Calc(p1));
Par2:=VarToStr(Parser.Calc(P2));
Resultat:=Pos(Par1,Par2);
end;
1 : Resultat:=SQRT(Parser.Calc(P1)); //funo SQRT
end;
Except
// String resultante se der erro
Resultat:='Erreur fonction '+List.Strings[FNo];
end;
Val:=VarToStr(Resultat); // String resultante
end;
Procedure DoInit;
begin
frRegisterFunctionLibrary(TfrOGFunctionLibrary);
end;

No arquivo FR.lng, anexe as seguintes linhas:


SQRT = Matemtica e Trigonometria | SQRT(<X>) |Retorna a raiz quadrada de <X>
POS = Strings | POS(<X>,<Y>) Retorna a posio da string <X> em <Y>
Publique um estado, ento em File>List esta janela aparecer:

http://wiki.freepascal.org/Tutorial_de_LazReport

18/04/2009

Tutorial de LazReport - Free Pascal wiki

Page 13 of 13

Voc pode notar o aparecimento de um pequeno boto (...), ativo somente se for o
caso de uma expresso. Clique para abrir o editor abaixo:

Voc pode notar a semelhana. Se clicar no boto Add voc vai carregar o editor de
parmetros:

De acordo com o nmero de parmetros, voc ter mais ou menos zonas de edio. O
boto (...) torna possvel abrir o gerador de expresses para informar o parmetro.

traduo: Ana Carolina Simplicio de Oliveira


Retrieved from "http://wiki.freepascal.org/Tutorial_de_LazReport"
This page was last modified 20:21, 24 May 2007.
Content is available under .

http://wiki.freepascal.org/Tutorial_de_LazReport

18/04/2009