Tutorial de LazReport - Free Pascal wikiPage 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 Relatório 2 Funções 2.1 Funções nos dados: 2.2 Funções nos caracteres de conexão: 2.3 Funções Lógicas: Relatório 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 aplicação com o formulário principal chamado Form1. Ponha no formulário 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 variáveis a campos de dados ou valores do sistema, o que possibilita evitar que o usuário final decifre os geralmente pequenos http://wiki.freepascal.org/Tutorial_de_LazReport 18/04/2009 Escreva as sentenças conforme indicado na figura acima. as variáveis começam com um espaço.freepascal. Agora clique no botão “Variables” para definir o lado esquerdo desta janela.org/Tutorial_de_LazReport 18/04/2009 . Então clique em OK para ter o seguinte: http://wiki. Demo Variables representa a categoria e CampoXXXX as variáveis.. Em nosso exemplo vamos tentar criar uma variável nos campos BMP e NAME na Tabela1.Tutorial de LazReport . Para diferenciar as duas..Free Pascal wiki Page 2 of 13 nomes de campos. Clique em Variables Editor. Cada variável precisa ser associada a um campo. Para isso.Free Pascal wiki Page 3 of 13 A categoria é disposta na ComboBox de variáveis acima.freepascal.Tutorial de LazReport .org/Tutorial_de_LazReport 18/04/2009 . Você abriu o editor: Talvez você tenha notado um pequeno número de objetos na barra de objetos. http://wiki. clique com o botão direito do mouse no componente frReport e então em New State. A variável Name Field é associada ao campo Name da Tabela1. Como para as variáveis. selecione a variável e depois o campo. Escolha uma cor para o plano de fundo com o botão Baldinho Cheio.Tutorial de LazReport . Em nosso relatório em branco você deve clicar no tipo de faixa que deseja criar: Selecione o título do estado e clique OK. http://wiki. do QuickReport. QRMemo. etc. então clique duas vezes no retângulo para indicar o título. Tipo de faixa Uso Report title Publicado apenas na primeira página Report summary Publicado apenas na última página Page header Publicado no topo de cada página Page footer Publicado no pé de cada página Master header Publicado no começo do primeiro nível (detalhe/barra) Master Data Dados do primeiro nível Master Footer Publicado no final do primeiro nível Detail header Publicado no começo do segundo nível (barra/detalhe) Detail Data Dados de segundo nível Detail Footer Publicado no final do segundo nível Subdetail Header Publicados no começo do terceiro (barra/detalhes) Subdetail Data Dados de terceiro nível Subdetail Footer Publicados no fim do terceiro nível Overlay Heading of column Publicado no topo de cada coluna Column base Publicado no começo do grupo Heading of group Publicado no topo de cada página Foot of group Publicado no final do grupo VarColumn Usado para tabelas cruzadas Nesta faixa.org/Tutorial_de_LazReport 18/04/2009 . adicione um retângulo e o dimensione como quiser.freepascal.Free Pascal wiki Page 4 of 13 Deve ter visto que os objetos são iguais aos componentes QRLabel. multiplicamos este campo por 2. com o botão Variable. Eles são obtidos clicando em DB Field e depois em Other na ComboBox.Free Pascal wiki Page 5 of 13 Na primeira linha deve ser indicado o título do relatório e na segunda. Aqui podem ser colocados vários campos. então clique duas vezes nessa faixa para selecionar frDBDataSet1. “SIZE”]*2. duas informações do sistema precisam ser adicionados. a principal fonte de dados do nosso exemplo. Agora temos: Vamos inserir a faixa como dados mestre. Size[[Table1.freepascal.Tutorial de LazReport . Na metade esquerda da faixa insira um retângulo e dê um duplo clique.org/Tutorial_de_LazReport 18/04/2009 . Pode-se ver o poder do http://wiki. expresso em polegadas. por exemplo. mas pode ser mantido um retângulo para um único campo a fim de aplicar formatos. inserindo a variável [Field Name] (poderíamos ter escrito isto diretamente). Para a segunda linha.54]. para centímetros. nós escrevemos Size e com o botão DB Field escolhemos o tamanho do campo de Table1 e para converter este campo. A primeira linha Name [Field Name] é obtida escrevendo-se Name e então.54. Para mostrar sempre a mesma figura. Deve ser gravado com o mesmo nome rapff. Você tem uma edição com pré-visualização que dá a possibilidade de os usuários finais modificarem o relatório sem precisar modificar a aplicação básica.frf').frf'). Isso transforma a figura em um objeto associado com o campo de dados. incluindo um calculado. Agora no lado direito da faixa selecione uma imagem. Agora vamos adicionar funcionalidades ao nosso exemplo básico. end.DesignReport. FrReport1. Você deve adicionar um componente TButton com a propriedade Caption:= ‘Print’. begin frReport1.LoadFromFile(' rap1. Para isto adicione ao projeto o seguinte código: TForm1. end. Nós queremos uma figura associada com o pressionamento da tecla F11. Informe a propriedade do Memo com a propriedade [ImageField]. dois campos. Com apenas um retângulo coloca-se em nosso estado. e um TPrintDialog.LoadFromFile(' rap1. Obtemos isso: Adicione também as unidades de impressora na cláusula uses do seu formulário e ponha o seguinte código no evento OnClick do botão Print: http://wiki. TForm1.org/Tutorial_de_LazReport 18/04/2009 . a segunda nomeação. O nosso primeiro estado está concluído.Free Pascal wiki Page 6 of 13 fastreport.ButtonClick(Sender procedure: TObject). seria suficiente dar um duplo clique nessa figura e carregar a figura desejada.ShowReport.Tutorial de LazReport . begin frReport1. para mostrar o Inspetor de Objetos.freepascal. frReport1. Um clique na pré-visualizaçao nos dá: Agora vamos escrever o código necessário para carregar e visualizar ou editar o nosso relaltório rap1frf.Button2Click(Sender procedure: TObject). Collap). / / exemplares ordenados // recorte de edição da página FromPg com ToPg . var FromPg.org/Tutorial_de_LazReport 18/04/2009 .EMFPages. / / número máximo de página if Execute then / / limpeza do diálogo begin if (Printer. end. " Cpy " // exemplares ordenados (Collap)) frReport1.Copies. No menu Edit File > Page Options você obtém isso: Para escolher o tamanho do papel http://wiki. / / página do começo ToPage: = frReport1. frReport1.EMFPages. St: String. / / Mudando a impressora padrão ind: = Printer. ind: Integer.Count. / / número de cópias Collap :=PrintDialog1. / / primeira página ToPg : = PrintDialog1. / / apenas uma espécie Collate: = True.LoadFromFile(St+' rap1. / / a mudança de impressora ocorreu de forma errônea if PrintDialog1. / / última end. / / Preparar o estado. // última página MaxPage: = frReport1.Free Pascal wiki Page 7 of 13 TForm1. Cpy.PrepareReport else Exit. Collap: Boolean. / / autoriza a seleção de páginas Copies: = 1. Cpy: Integer.FromPage.ChangePrinter(ind.PrepareReport then Exit. ToPg. crie um procedimento PrintReport(letat: string) que carregue o relatório e o imprima. begin / / Carregar o estado St:=ExtractFilePath(ParamStr(0)).freepascal. ToPg.Tutorial de LazReport . para sair se a preparação não funcionar if not frReport1. / / inicializa a limpeza do diálogo para edição de parâmetros with PrintDialog1 C begin Options:=[poPageNums ]. É um pouco longo mas nada impede que você crie uma classe herdada do TfrReport com um método de impressão ou.ToPage. Cpy :=PrintDialog1. mais fácil.Count.PrinterIndex < > ind )/ / a impressora mudou? or frReport1. end.PrinterIndex. Printer. end.Collate.bPrintClick(Sender procedure: TObject).PrinterIndex) then frReport1.frf').PrintPreparedReport(FromPg. / / cópias ordenadas FromPage: = 1.CanRebuild / / possui uma regeneração de estado? // mudança de impressora or frReport1.PrintRange = prPageNums then / / fez-se uma seleção de páginas begin FromPg : = PrintDialog1. org/Tutorial_de_LazReport 18/04/2009 .Free Pascal wiki Page 8 of 13 Para escolher as margens Para especificar o número de colunas e o espaço entre as colunas. Com uma variável Test. você deve escolher a opção Two-pass Report. por exemplo. mostrar as diferentes nomeações de acordo com o contexto. Se você quer numerar suas páginas com a página atual a partir do número total de páginas. Aqui serão adicionadas ao nosso exemplo algumas variáveis não relacionadas aos dados. abra o editor de relatórios e selecione o menu File e a Lista de Variáveis. Publique um dos objetos e adicione a variável Test como visto anteriormente.freepascal. No menu principal do editor. Elas tornarão possível. como explicado anteriormente. Retorne ao Delphi (não esquecer de salvar seu relatório) e publique o evento OnGetValue do componente FrRepor1 adicionando o seguinte código: http://wiki. selecione File > Report options para mostrar a seguinte caixa de diálogo: Aqui você especifica a impressora necessária para o carregamento de estados e se a preparação é feita em duas formas.Tutorial de LazReport . Para isso. a única diferença é que você não vai selecionar um campo de valor. mas deixar None (o valor padrão). mas para permitir formatar os dados com DisplayFormat. Agora vamos definir um formato para as variáveis de uma área.org/Tutorial_de_LazReport 18/04/2009 . =.Tutorial de LazReport . frReport1. Ou também é possível passar o valor diretamente para a variável através do seguinte código: procedure TForm1. AND. Selecione uma nova variável e escolha um valor da ComboBox " Other " e " Expression ". Para mostrar o editor de formatos.Values. clique com o botão direito em uma área e então em Variable Format. end.freepascal. <. +. VAr fld: TField). Escreva o seguinte: [Table1. MOD. NOT. vamos criar uma nova categoria (opcional) e uma variável. < >. var ParValue: Varying. mas isso nós veremos mais adiante.Button1Click(Sender:TObject).FindVariable('test').frReport1GetValue(const ParName: String. Um formato é válido para todas as variáveis de uma área de display. *. http://wiki. begin frReport1. Dessa forma você obterá o sumário dos campos de dados Size e Weight. Como antes."SIZE"] + [Table1. begin // trata o caso de variáveis não dependentes if UpperCase(ParName)=' TEST' then ParValue:=' Answer: Variable " test1 " '. end. Você também pode colocar nome nas variáveis. < = Mathematics -. E pode utilizar os seguintes operadores: Tipos de Operadores Operadores Logic >. Test Calculation. BUT. / Mais à frente você poderá dispor dos seguintes funções padronizadas: Função Descrição Exemplos SUM Soma AVG Média MIN Mínimo MAX Máximo FORMATDATETIME Data e hora formatadas FORMATFLOAT Ponto flutuante formatado LOWERCASE Letras minúsculas NAMECASE Primeira maiúscula STRTODATE Data para string STRTOTIME Hora para string UPPERCASE Letras maiúsculas Se não for suficiente você pode criar suas próprias funções. Essa seleção ativa a área de dados de entrada Expression."WEIGHT"] .Field := QuotedStr('test1'). Agora vamos ver como criar uma variável calculada.ShowReport. > =. Isto não é usado para os dados.Free Pascal wiki Page 9 of 13 procedure TForm1. O tipo Text não permite qualquer formatação e o tipo Number requer um número decimal com vírgula. Cada parâmetro é separado por vírgula e pode ser uma expressão. "Field_Name" Funções Estatísticas: http://wiki. FCT(<X>. é o nome da categoria. Então você pode definir a cor do plano de fundo. o estilo e a cor da fonte a ser usada selecionando Intesified brightness. lógico). hora. Os campos de dados são limitados como as variáveis e tem o seguinte formato: Dataset_Name.. | é um separador. é uma pequena Ajuda que deve tornar possívell ao usuário entender o objetivo da função.Tutorial de LazReport . Por padrão o highlighter é um simples negrito sobre fundo branco. Você pode definir esses parâmetros para uma área clicando no botão Realce. que é muito útil para enfatizar dados. CATEGORY. é a visualização dos parâmetros necessários. Aqui é requisitado o highlighting para todos os valores maiores que 1000. <Z >) | Help on the function onde: FCT é o nome da função. Você pode incluir também o conceito de highlighting. Você pode especificar uma condição para aplicar o highlighting.lng a linha seguinte: FCT = CATEGORY | FCT(<X>. As variáveir são limitadas por and. data. Para isso use a palavra-chave Value para indicar o valor da variável. Help. Funções É necessário adicionar ao arquivo FR.freepascal. A não ser para os tipos Text e Logic. um campo ou dados. uma variável. <Y>. <Z >). você pode usar as funções de formatação do Delphi. A segunda permite selecionar o formato preestabelecido.org/Tutorial_de_LazReport 18/04/2009 . <Y>. com no máximo 3 parâmetros.Free Pascal wiki Page 10 of 13 A primeira ComboBox indica o tipo de dado (texto. numérico. As constantes de tipo alfanumérico devem ser limitadas por um caractere. uma constante. COUNT Meter. <Y >) Retorna os dados abreviados em (TDateTime) < Y > no formato < X >. em maiúsculas. na posição < Y > e comprimento< Z >. <Z >) Retorna a string <X> em letras minúsculas. Funções nos dados: FORMATDATETIME(<X>.org/Tutorial_de_LazReport 18/04/2009 . o número inteiro correspondente ao arredondamento de < X >. MAX(<X >) Retorna o valor máximo dos valores dados em <X >. Funções nos numerais: FRAC(<X >) Retorna INT(<X >) Retorna ROUND(<X >) Retorna STR(<X >) Retorna a parte decimal do número < X >. < X > deve respeitar o formato de dados STRTOTIME(<X >) Retorna A representação digital (TDateTime) da string < X >. com a primeira letra maiúscula. <Y >) Retorna o numeral < Y > no formato < X >. Funções Lógicas: IF(<X>. se falsa retorna < Z >. Retorna a soma dos valores dados por <X>. <Z >) Retorna < Y > se a expresssão < X > é verdadeira. Aqui um código-fonte para adicionar as funções POS e SQRT: http://wiki.Tutorial de LazReport . < X > usa a descrição padrão Delphi para formatos. FORMATFLOAT(<X>. < X > deve respeitar o formato de horas. Funções nos caracteres de conexão: LOWERCASE(<X >) Retorna a string <X> UPPERCASE(<X >) Retorna a string <X> NAMECASE(<X >) Retorna a string <X> COPY(<X>. Para adicionar suas próprias funções é realmente muito simples. < X > usa o padrão de descrição Delphi para formatos. a string correspondente de um número < X >.freepascal. <Y>. STRTODATE(<X >) Retorna a repesentação (TdateTime) da string < X >. que é geralmente um campo de dados. <Y>. a parte inteira do número < X >. MIN(<X >) Retorna o valor mínimo dos valores dados em <X>.Free Pascal wiki Page 11 of 13 SUM(<X >) . AVG(<X >) Retorna a média dos valores dados por <X>. p3:Variant. begin frRegisterFunctionLibrary(TfrOGFunctionLibrary). override. Resultat:=Pos(Par1.Tutorial de LazReport . override. end. p2. Par2:=VarToStr(Parser. Par2: Varying. Except // String resultante se der erro Resultat:='Erreur fonction '+List. ADD('SQRT'). No arquivo FR. Var valley:String). p3:Variant. begin inherited Create. end.Calc(p1)). end. Procedure DoInit. begin Try Case FNo of //FNo é um íindice das funções declaradas no constructor 0 : Begin //função POS Par1:=VarToStr(Parser. procedure DoFunction(FNo:integer procedure.DoFunction(FNo:Integer procedure. VAr Par1. anexe as seguintes linhas: SQRT = Matemática e Trigonometria | SQRT(<X>) |Retorna a raiz quadrada de <X> POS = Strings | POS(<X>.lng. interface implementation uses FR_Pars.Par2). end. //************************** / / * TfrOGFunctionLibrary constructor TfrOGFunctionLibrary. var valley:string). //função SQRT end.Strings[FNo]. end.freepascal. 1 : Resultat:=SQRT(Parser. Result: Variantying. // String resultante end. então em File>List esta janela aparecerá: http://wiki. p2. FR_Class. Val:=VarToStr(Resultat).Free Pascal wiki Page 12 of 13 Unit FR_OGFct. p1. p1. p3:Variant. / / Declaração-padrão type //Declaração de TBrOGFunctionLibrary TfrOGFunctionLibrary = class(TfrFunctionLibrary) public constructor Create.Create.Calc(P1)).Calc(P2)). end.org/Tutorial_de_LazReport 18/04/2009 . Procedure TfrOGFunctionLibrary.<Y>) Retorna a posição da string <X> em <Y> Publique um estado. var valley:string). with List do begin Add('POS'). . você terá mais ou menos zonas de edição.Free Pascal wiki Page 13 of 13 Você pode notar o aparecimento de um pequeno botão (.org/Tutorial_de_LazReport 18/04/2009 . tradução: Ana Carolina Simplicio de Oliveira Retrieved from "http://wiki. Se clicar no botão Add você vai carregar o editor de parâmetros: De acordo com o número de parâmetros.org/Tutorial_de_LazReport" This page was last modified 20:21.freepascal.) torna possível abrir o gerador de expressões para informar o parâmetro.freepascal.). Clique para abrir o editor abaixo: Você pode notar a semelhança.Tutorial de LazReport . http://wiki. ativo somente se for o caso de uma expressão. Content is available under . 24 May 2007. O botão (....