Você está na página 1de 72

Universidade Federal de Santa Maria 2011

Caderno Didtico

Bruno B. Boniati

Frederico Westphalen, 2011

Sumrio
CAPITULO I - Introduo ao Lazarus................................................................................................................................................................. 01 O que o Lazarus ......................................................................................................................................................................................... 01 Viso geral do Lazarus ............................................................................................................................................................................. 01 Caractersticas do ambiente Lazarus e da linguagem Object Pascal ...................................................................................................... 01 Caractersticas da Programao com Lazarus e Object Pascal .............................................................................................................. 02 Antes de Comear... O Projeto da Interface Grfica .............................................................................................................................. 02 Padronizao ............................................................................................................................................................................................ 02 Esquea a programao modo caractere ou console ......................................................................................................................... 02 Simplicidade ............................................................................................................................................................................................. 02 Nomenclatura ........................................................................................................................................................................................... 02 Como formado uma Aplicao em Lazarus ............................................................................................................................................ 03 Arquivos que Compem uma Aplicao................................................................................................................................................... 03 Arquivos Gerados pela Compilao ......................................................................................................................................................... 03 Cdigo fonte do arquivo Project (.LPR) .................................................................................................................................................... 04 Cdigo fonte do arquivo Unit (.PAS)......................................................................................................................................................... 05 Ambiente de Desenvolvimento Lazarus ..................................................................................................................................................... 07 Janela Principal ........................................................................................................................................................................................ 07 Object Inspector........................................................................................................................................................................................ 08 Form Designer e Program Editor .............................................................................................................................................................. 09 CAPITULO II Programao Orientada a Objetos (Conceitos) ...................................................................................................................... 10 Introduo...................................................................................................................................................................................................... 10 Abstrao de Dados ..................................................................................................................................................................................... 10 Classe ....................................................................................................................................................................................................... 10 Propriedade .............................................................................................................................................................................................. 10 Mtodos .................................................................................................................................................................................................... 10 Instncias.................................................................................................................................................................................................. 10 Objeto ....................................................................................................................................................................................................... 10 Visibilidade................................................................................................................................................................................................ 13 Declarao, Instanciamento, Destruio e Referncia a Objetos ............................................................................................................ 13 Encapsulamento ........................................................................................................................................................................................... 15 Herana .......................................................................................................................................................................................................... 15 Caractersticas / Benefcios ...................................................................................................................................................................... 15 Implementao ......................................................................................................................................................................................... 16 Polimorfismo ................................................................................................................................................................................................. 16 Caractersticas / Benefcios ...................................................................................................................................................................... 16 CAPITULO III - Object Pascal ............................................................................................................................................................................. 17 Bsico da Linguagem ................................................................................................................................................................................... 17 Comentrios ............................................................................................................................................................................................. 17 O Ponto-e-Vrgula e o Ponto .................................................................................................................................................................... 17 Tipos de Dados Padro ................................................................................................................................................................................ 18 Tipos Inteiros ............................................................................................................................................................................................ 18 Tipos Reais ............................................................................................................................................................................................... 18 Tipos Texto ............................................................................................................................................................................................... 18 Tipos Ordinais........................................................................................................................................................................................... 18 Boolean..................................................................................................................................................................................................... 18 TDateTime ................................................................................................................................................................................................ 18 Variant ...................................................................................................................................................................................................... 19 Tipos de Definidos pelo Usurio ................................................................................................................................................................. 19 Strings Limitadas ...................................................................................................................................................................................... 19 Sub-Faixa ................................................................................................................................................................................................. 19 Enumeraes............................................................................................................................................................................................ 19 Ponteiros................................................................................................................................................................................................... 20 Records .................................................................................................................................................................................................... 20 Arrays ....................................................................................................................................................................................................... 20 Sets........................................................................................................................................................................................................... 20 Elementos Fundamentais de Controle........................................................................................................................................................ 21 Operadores ............................................................................................................................................................................................... 21 Comandos de DECISO .......................................................................................................................................................................... 21 Comandos de LOOPING .......................................................................................................................................................................... 22 Procedimentos e Funes ........................................................................................................................................................................ 24 Funes e Comandos Internos (principais) ............................................................................................................................................... 26 Tratamento de Strings .............................................................................................................................................................................. 26 Tratamento de Ordinais ........................................................................................................................................................................... 27 Tratamento de valores TDateTime .......................................................................................................................................................... 27 Converses de Tipos de Dados ............................................................................................................................................................... 28 Strings de Formato ................................................................................................................................................................................... 30 Outras Funes ........................................................................................................................................................................................ 31

CAPITULO IV Classes e Objetos Padres do Lazarus ................................................................................................................................. 32 Propriedades ................................................................................................................................................................................................. 32 Tipos de Propriedade ............................................................................................................................................................................... 32 Propriedades Comuns .............................................................................................................................................................................. 32 Eventos .......................................................................................................................................................................................................... 33 Eventos Comuns ...................................................................................................................................................................................... 33 Mtodos ......................................................................................................................................................................................................... 33 Mtodos Comuns...................................................................................................................................................................................... 33 Biblioteca de Classes ................................................................................................................................................................................... 34 Janelas ..................................................................................................................................................................................................... 34 Componentes Padro ............................................................................................................................................................................... 34 Caixas de Dilogo..................................................................................................................................................................................... 40 Menus ....................................................................................................................................................................................................... 40 Classes No Visuais ................................................................................................................................................................................. 41 Excees........................................................................................................................................................................................................ 45 Blocos Protegidos ..................................................................................................................................................................................... 45 Principais Excees.................................................................................................................................................................................. 46 Blocos de Finalizao ............................................................................................................................................................................... 46 Gerao de Excees .............................................................................................................................................................................. 47 CAPTULO V Banco de Dados......................................................................................................................................................................... 48 Consideraes Iniciais ................................................................................................................................................................................. 48 Configurando a conexo e o acesso aos dados ........................................................................................................................................ 48 SQLdb Componentes de Acesso aos Dados ........................................................................................................................................ 48 DataControls Componentes de Controle aos Dados ............................................................................................................................ 61 CAPTULO VI Relatrios e Comandos de Impresso ................................................................................................................................... 63 LazReport Conceitos Bsicos ................................................................................................................................................................. 63 Utilizao de variveis do relatrio ........................................................................................................................................................... 66 Utilizando scripts....................................................................................................................................................................................... 66 Relatrios baseados em consultas de banco de dados ........................................................................................................................... 67 Visualizao e Impresso ......................................................................................................................................................................... 68 Referncias Bibliogrficas ................................................................................................................................................................................. 69 Sites Especializados (em portugus) ................................................................................................................................................................ 69

Universidade Federal de Santa Maria

CAPITULO I - Introduo ao Lazarus O que o Lazarus


O Lazarus um ambiente de desenvolvimento integrado (IDE Integrated Development Environment) para aplicaes orientadas a objetos, que utiliza a linguagem de programao Object Pascal. O Lazarus simula o funcionamento do Delphi (IDE comercial da Borland). Disponibiliza ferramentas de desenvolvimento que aumentam a produtividade, facilitando a programao. O ambiente Lazarus estvel e permite a criao de aplicaes grficas, de console e tambm para web. Representa uma importante alternativa para permitir a comunidade de programadores Pascal e Delphi o desenvolvimento de aplicaes comerciais para diferentes plataformas (MS Windows, Linux, MAC OS, etc.). uma ferramenta livre, gratuita e de cdigo aberto.

Viso geral do Lazarus


O Projeto Lazarus iniciou em 1999 com trs colaboradores Cliff Baeseman, Shane Miller e Michael A. Hess. Ambos haviam se envolvido em um projeto denominado Megido, cujo objetivo era desenvolver um clone para o IDE Delphi, mas que acabou sendo dissolvido. Frustrados com a morte do projeto eles comearam o projeto Lazarus que teve um grande crescimento de apoiadores e desenvolvedores durante os anos seguintes. Marc Weustink e Mattias Gaertner que se juntaram posteriormente ao grupo tm sido os maiores contribuidores para o ncleo que faz o Lazarus existir. Lazarus a conhecida figura bblica que foi ressuscitada por Cristo. O projeto foi chamado de Lazarus porque ele se originou da morte do Megido. O ambiente Lazarus prov um editor de cdigo personalizvel, alm de um ambiente de criao visual de formulrios (janelas) acompanhado de um gerenciador de pacotes, depurador (debugger) e completa integrao da interface grfica com o compilador Free Pascal. Em funo da produtividade que garante ao desenvolvedor pode ser classificado como uma ferramenta RAD (Rapid Application Development). Uma de suas principais vantagens a linguagem de programao utilizada: Object Pascal (uma evoluo do Pascal padro). O Pascal surgiu no final dos anos 60 e, at hoje, usada como uma das primeiras linguagens de programao para estudantes de computao, devido a sua facilidade de aprendizado. A LCL (Lazarus Component Library) a biblioteca que agrega o conjunto de classes e componentes visuais e no visuais que funcionam em mltiplas plataformas chamando as funes de diferentes bibliotecas de interfaces de usurio. Tanto a LCL do Lazarus, quanto FCL do Free Pascal so licenciadas sobre a LGPL, o que permite o desenvolvimento de aplicaes que podem ser comercializadas. A IDE Lazarus, contudo, licenciada sobre a licena GPL, ou seja, pode ser modificada, mas no pode ser vendida (deve ser disponibilizada para a comunidade). Diferentemente da plataforma Java, onde o cdigo escrito e compilado uma nica vez e pode ser executado em qualquer plataforma (sem a necessidade de uma nova compilao), o Lazarus e o Free Pascal permitem que o cdigo seja escrito uma nica vez e compilado para qualquer plataforma. No necessrio alterar o cdigo para que ele produza o mesmo efeito em diferentes plataformas, mas necessrio recompil-lo. No IDE Lazarus, a criao de aplicativos comea normalmente com a montagem de componentes grficos em janelas, tambm permite a utilizao de componentes desenvolvidos por terceiros ou o desenvolvimento de componentes prprios. A conexo com banco de dados tambm suportada por componentes especficos que acompanham o IDE.

Caractersticas do ambiente Lazarus e da linguagem Object Pascal


Gerao de um executvel verdadeiro, independente de run-time. Utilizao de um dialeto da linguagem Object Pascal para escrever os procedimentos do programa. Utilizao de componentes, que so definidos como objetos, o que permite a herana.
Caderno Didtico Lazarus IDE Pgina 1

Universidade Federal de Santa Maria

Possibilidade de criao de novos componentes na prpria linguagem e incorporao dos mesmos ao IDE. Acesso facilitado a banco de dados. Ambiente de depurao integrado.

Caractersticas da Programao com Lazarus e Object Pascal


Desenvolvimento orientado pelo desenho de formulrios (janelas). Interface com usurio feita atravs de componentes visuais. Disponibilizao de controles pr-desenvolvidos que do acesso s caractersticas do sistema. Cada controle ou componente dispe de propriedades, mtodos e pode responder a eventos. As propriedades podem ter seus valores definidos em tempo de desenvolvimento e alterados em tempo de execuo. Os eventos so as mensagens que cada componente pode responder, tendo associado a eles um procedimento de evento.

Antes de Comear... O Projeto da Interface Grfica Padronizao


Considere aplicaes existentes, os padres de sucesso. Utilize botes e controles de acesso rpido. Utilize teclas de atalho. Enfatize imagens e cones.

Esquea a programao modo caractere ou console


No utilize mltiplos nveis de menus. No exagere em cores diferentes. Utilize a tecla TAB para passar de um campo para outro. Utilize a tecla ENTER ou um boto para executar aes.

Simplicidade
Procure facilidades de uso. Permita liberdade de ao. Permita diferentes maneiras de se alcanar o mesmo resultado. Procure as solues mais intuitivas. Procure adotar os smbolos que o usurio j esteja acostumado.

Nomenclatura
Normalmente os componentes so nomeados utilizando-se uma conveno, onde as primeiras letras, minsculas e sem as vogais, identificam o tipo do componente e o restante identifica a funo deste, assim, btnSair, seria o boto de sair. Se a funo do componente for um nome composto esse nome deve ser escrito com os primeiros nomes abreviados e com letras maisculas e minsculas, como em btnRelVendas, que identifica o boto do relatrio de vendas ou btnRelVenProduto, que identifica o boto do relatrio de vendas por produto.

Caderno Didtico Lazarus IDE

Pgina 2

Universidade Federal de Santa Maria

Como formado uma Aplicao em Lazarus


Quando um projeto no Lazarus criado, ele j mostra uma UNIT (unidade bsica do cdigo fonte) com vrias linhas de cdigo. Um projeto Lazarus tem, inicialmente, duas divisrias: uma UNIT, que associada a um Form (formulrio da interface grfica), e outra UNIT que contem o Project (projeto) e que organiza todos os formulrios (Form) e cdigos (Unit) da aplicao. No Lazarus temos: o Project, os Forms e as Units. Para todo Form temos pelo menos uma Unit (Cdigo do Form), mas temos Units sem Form (cdigos de procedures, funes, etc).
TESTE

.LPR

.EXE

FORM 1

FORM 2

FORM N

.PPU

.PPU

.PPU

FORM 1

FORM 2

FORM N

.LFM .PAS

UNIT 1

.LFM .PAS

UNIT 2

.LFM .PAS

UNIT N

ROTINAS

.PAS

Arquivos que Compem uma Aplicao


Extenso .LPR Definio Arquivo do Projeto (Lazarus Project) Arquivo XML com Informaes sobre o Projeto (Lazarus Project Information) Funo Cdigo fonte em Pascal do arquivo principal do projeto. Lista todos os formulrios e units no projeto, e contm cdigo de inicializao da aplicao. Contm informaes sobre o tipo de projeto, situao da rea de trabalho, opes de ambiente especficas a este projeto, etc. Um arquivo .PAS gerado para cada formulrio que o projeto contm. Um projeto pode conter um ou mais arquivos .PAS associados com algum formulrio. Contem todas as declaraes e procedimentos incluindo eventos de um formulrio. Arquivo que contm as propriedades do desenho de um formulrio contido em um projeto. Um .LFM gerado conjuntamente com um arquivo .PAS para cada formulrio do projeto. Arquivo que contm o cone, mensagens da aplicao e outros recursos usados pelo projeto. Arquivo que contm cones, mensagens e outros recursos utilizados pelo projeto e pelos formulrios.

.LPI

.PAS

Cdigo fonte da Unit (Object Pascal)

.LFM

Arquivo grfico do formulrio (Lazarus Form) Arquivo de Recursos do Compilador Arquivo de Recursos (Lazarus Resource)

.RC .LRS

Devido grande quantidade de arquivos de uma aplicao, cada projeto deve ser montado em um diretrio especfico.

Arquivos Gerados pela Compilao


Extenso .EXE .PPU Definio Arquivo compilado executvel Funo Este um arquivo executvel pelo qual a aplicao ser distribuda. Este arquivo incorpora todos os arquivos .PPU gerados quando sua aplicao compilada. Cdigo objeto da A compilao cria um arquivo .DCU para cada .PAS no projeto. Unit

Estes arquivos podem ser apagados da mquina do desenvolvedor para economizar espao em disco.

Caderno Didtico Lazarus IDE

Pgina 3

Universidade Federal de Santa Maria

Cdigo fonte do arquivo Project (.LPR)


Neste arquivo est escrito o cdigo de criao da aplicao e seus formulrios. O arquivo Project tem apenas uma seo formada pelo seguinte cdigo: PROGRAM - Define o Projeto; USES - Clusula que inicia uma lista de outras unidades. Forms = biblioteca do Lazarus que define as classes e tipos para utilizao de formulrios Interfaces = Biblioteca que determina qual interface deve ser utilizada LResources = Biblioteca com operaes para manipulao de recursos (arquivo .LRS) Unit1 = A unidade do formulrio principal BEGIN //Cdigo de inicializao da aplicao END Abaixo o cdigo padro de uma aplicao recm-criada.
program Project1; {$mode objfpc}{$H+} uses {$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} Interfaces, // this includes the LCL widgetset Forms, Unit1, LResources { you can add units after this }; {$IFDEF WINDOWS}{$R project1.rc}{$ENDIF} begin {$I project1.lrs} Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end.

Caderno Didtico Lazarus IDE

Pgina 4

Universidade Federal de Santa Maria

Cdigo fonte do arquivo Unit (.PAS)


Um arquivo .PAS um cdigo object pascal. Dentro de um projeto cada arquivo .PAS representa uma Unit. Algumas Units so associadas a um formulrio, neste caso h um arquivo .PAS e outro .LFM com o mesmo nome. O cdigo de uma unit associada a um formulrio manipulado pelo IDE medida que componentes so adicionados ao formulrio correspondente. A seguir as principais sees de uma Unit: Seo Unit: indica o nome da unit. Seo Interface: Declaraes de constantes, tipos de variveis, funes e procedures gerais da Unit/Form. As declaraes desta seo so visveis por qualquer Unit. Seo Uses: Contm as units acessadas por este arquivo. Se um nome de uma unit aparecer dentro da clusula uses, todas as declaraes da parte interface da unit podero ser utilizados na unit ou programa atual. Algumas units geralmente utilizadas na seo uses: Classes: elementos de baixo nvel do sistema de componentes; SysUtils: utilitrios do sistema, funes de uso comum (strings, data/hora); FileUtil: funes utilitrias para tratamento de arquivos LResources = Biblioteca com operaes para manipulao de recursos (arquivo .LRS) Forms: componentes de forma e componentes invisveis de aplicativos; Controls: elementos de nvel mdio do sistema de componentes; Graphics: elementos grficos; Dialogs: componentes de dilogo comuns. Seo Type: Declara os tipos definidos pelo usurio. Subsees: Private, declaraes privativas da Unit. Public declaraes publicas da Unit. Seo Var: Declara as variveis privadas utilizadas. Seo Implementation: Contm os corpos das funes e procedures declaradas nas sees Interface e Type. Nesta seo tambm esto definidos todos os procedimentos dos componentes que esto includos no Form. As declaraes desta seo so visveis apenas por ela mesma. Inicialization: Nesta seo, que opcional, pode ser definido um cdigo para proceder s tarefas de inicializao da Unit quando o programa comea. Ela consiste na palavra reservada inicialization seguida por uma ou mais declaraes para serem executadas em ordem. Normalmente essa seo contm uma diretiva de compilao que inclui as informaes do arquivo de recursos associado unit: {$I nome_unit.lrs}. Finalization: Esta seo, tambm opcional, faz o servio oposto da inicialization. Todo o cdigo dela executado aps o programa principal ter terminado.

Caderno Didtico Lazarus IDE

Pgina 5

Universidade Federal de Santa Maria

Abaixo veja como fica a unit quando voc abre um projeto novo:
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs; type TForm1 = class(TForm) private { private declarations } public { public declarations } end; var Form1: TForm1; implementation initialization {$I unit1.lrs} end.

Caderno Didtico Lazarus IDE

Pgina 6

Universidade Federal de Santa Maria

Ambiente de Desenvolvimento Lazarus

Janela Principal
A janela principal do Lazarus composta pela barra de menus, Speed Bar e paleta de componentes:

Caderno Didtico Lazarus IDE

Pgina 7

Universidade Federal de Santa Maria

Os Speed Buttons, so atalhos para diversos comandos de menu. Oferecem o recurso das Tool Tips, que so pequenas caixas de texto amarelas, exibidas quando o ponteiro do mouse deixado por sobre um boto durante algum tempo e exibem a ao que ser acionada quando ele for clicado.

O restante da rea principal formado pela paleta de componentes:

Ela mostra todos os controles, tanto visveis como no visveis, que podem ser colocados em um formulrio. O Lazarus utiliza a construo da paleta de componentes em abas, onde cada uma rene componentes de diferentes categorias, agrupados por funcionalidade. Por exemplo, os componentes mostrados na figura anterior so todos componentes padro (aba Standard).

Object Inspector
O object inspector uma janela que aparece esquerda da janela do form designer por padro e pode ser visualizado de qualquer parte do projeto pressionando a tecla F11. Compe-se de quatro abas, sendo as duas mais importantes as abas Properties (Propriedades) e Events (Eventos).

Caderno Didtico Lazarus IDE

Pgina 8

Universidade Federal de Santa Maria

Propriedades: Refere-se a aspectos e caractersticas de um determinado componente que podem ser alterados tanto em tempo de design como em tempo de execuo. Essencialmente, propriedades so atributos que controlam a aparncia de um componente e a maneira como ele age e reage. Eventos: Eventos so grupos de cdigo que so fornecidos e que determinam a ao a ser tomada em tempo de execuo para uma determinada mensagem ou evento do sistema operacional. Clicando sobre o evento o Lazarus associa um procedimento a ele e abre a janela de edio de cdigo para que seja feita a programao. O object inspector do Lazarus oferece ainda duas outras abas: Favorities que destaca caractersticas (propriedades e eventos) especficas do componente em questo e Restricted que indica possveis restries do componente em diferentes bibliotecas grficas entre plataformas de sistemas operacionais.

Form Designer e Program Editor


O Form Designer basicamente o(s) formulrio(s) onde montamos nossa aplicao e inserimos os componentes. J o Program Editor, o editor de cdigo, onde a programao efetuada. Compe-se de abas superiores quer permitem acesso ao cdigo de outras UNITs, alm do recurso de Complemento de cdigo, que exibe automaticamente as propriedades e mtodos dos objetos.

Caderno Didtico Lazarus IDE

Pgina 9

10

Universidade Federal de Santa Maria

CAPITULO II Programao Orientada a Objetos (Conceitos) Introduo


A Metodologia Orientada a Objetos relativamente nova, pois por volta de 1970 surgiram as primeiras publicaes, mas o seu "boom" se deu nos anos 90, quando se tornou a principal metodologia de desenvolvimento de software. A orientao a objetos permite modelar de forma mais natural o mundo real, pois as estruturas de dados so vistas como objetos, ou seja, tm caractersticas e funes. Seu maior objetivo aumentar a produtividade do desenvolvimento de software atravs de uma maior expansibilidade e reutilizao de cdigo, alm de controlar a complexidade e o custo da manuteno do mesmo. Quando a metodologia orientada a objetos utilizada, a fase de projeto do desenvolvimento do software est mais intimamente ligada fase de implementao. Um dos pontos chaves da metodologia orientada a objetos centralizao das atenes nas Estruturas de Dados, ao contrrio da metodologia estruturada, onde a ateno era centralizada nos procedimentos. Na orientao a objetos h uma maior aproximao entre dados e procedimentos, pois procedimentos so definidos em termos dos dados.

Abstrao de Dados
o processo de criar novos tipos de dados, ou seja, a capacidade de abstrairmos algo, porm reconhecendo todas as suas propriedade bsicas.

Classe
Tipo de dados definido pelo usurio (uma especificao para um tipo abstrato), que tem um estado (sua representao) e algumas operaes (seu comportamento). Uma classe possui alguns dados internos e alguns mtodos, na forma de procedimentos ou funes, e normalmente descreve as caractersticas genricas de vrios objetos semelhantes. O programador ir se preocupara no que a classe possui e no naquilo que ela significa.

Propriedade
Define as caractersticas dos objetos de uma classe.

Mtodos
So os servios oferecidos por uma classe, ou seja, so as funes criadas ou utilizadas pelo programador. Os mtodos definem o comportamento dos objetos de uma classe.

Instncias
Elementos de dados individuais so instncias de uma classe. Instanciar uma classe significa criar um objeto.

Objeto
uma instncia de uma classe (da mesma forma que uma varivel numrica nada mais do que uma instncia do tipo inteiro). Objeto uma varivel do tipo de dados definido pela classe. Os objetos so entidades reais, ocupam memria, quando o programa executado. O relacionamento entre objeto e classe o mesmo que o existente entre varivel e tipo.

Caderno Didtico Lazarus IDE

Pgina 10

11

Universidade Federal de Santa Maria

Exemplo:
unit Datas; interface type TData = Class(TObject) private Dia, Mes, Ano : Integer; public constructor Init (d,m,a : integer); procedure DefVal (d,m,a : integer); function AnoBis : boolean; procedure Incrementa; procedure Decrementa; procedure Adiciona (NumDeDias : integer); procedure Subtrai (NumDeDias : integer); private function DiasNoMes : Integer; end; implementation constructor TData.Init (d,m,a : integer); begin dia := d; Mes := m; ano := a; end; procedure TData.DefVal (d,m,a : integer); begin dia := d; Mes := m; ano := a; end; function TData.AnoBis : boolean; begin if (ano mod 4 <> 0) then AnoBis := false else if (ano mod 100 <> 0) then AnoBis := true else if (ano mod 400 <> 0) then AnoBis := False else AnoBis := True; end; function TData.DiasNoMes : integer; begin case Mes of 1,3,5,7,8,10,12 : DiasNoMes := 31; 4,6,9,11 : DiasNoMes := 30; 2 : if (AnoBis) then DiasNoMes := 29 else DiasNoMes := 28; end; end;

Definio da Classe

Definio dos Mtodos e Propriedades

. . .

Caderno Didtico Lazarus IDE

Pgina 11

12

Universidade Federal de Santa Maria procedure TData.Incrementa; begin if (dia < DiasNoMes) then inc(dia) {se no for o ltimo dia do Mes} else if (Mes < 12) then begin inc(Mes); dia := 1; end else {se for o dia de ano novo} begin inc(ano); Mes := 1; dia := 1; end; end; procedure TData.Decrementa; begin if (dia > 1) then Dec(dia) {se no for o primeiro dia do ms} else if (Mes > 1) then {se no for o primeiro dia do ano} begin Dec(Mes); dia := DiasNoMes; end else begin Dec(ano); Mes := 12; dia := DiasNoMes; end; end; procedure TData.Adiciona (NumDeDias : integer); var n : integer; begin for n := 1 to NumDeDias do Incrementa; end; procedure TData.Subtrai (NumDeDias : integer); var n : integer; begin for n := 1 to NumDeDias do Decrementa; end; end.

Utilizao
var x : TData; begin x:=TData.Create; x.Init(10,10,1981) end;

Caderno Didtico Lazarus IDE

Pgina 12

13

Universidade Federal de Santa Maria

Visibilidade
Define quem tem permisso de acessar e alterar os atributos e mtodos da classe. Em uma mesma classe pode existir atributos e mtodos com visibilidade diferentes. Visibilidade Public Private Protected Published Descrio Os atributos e mtodos podem ser manipulados por qualquer classe. Os atributos e mtodos s podem ser manipulados pela prpria classe. Os atributos e mtodos podem ser manipulados pela prpria classe ou por qualquer subclasse desta e por demais classes declaradas na mesma UNIT. Semelhante a visibilidade public sendo que permite o acesso em tempo de projeto.

Declarao, Instanciamento, Destruio e Referncia a Objetos


Um objeto declarado da mesma maneira que uma varivel. Para que um objeto possa ser utilizado, este deve ser instanciado e aps o seu uso o mesmo deve ser liberado.
<Objeto> : Classe; <Objeto> = Classe.Create; <Objeto>.Free; <Objeto>.Identificador {Declarando} {Instanciando} {Destruindo} {Referenciando}

Identificador representa uma propriedade ou um mtodo. A referncia a Dados idntica a referncia a cdigo. Mtodo Construtor
constructor <identificador> ( <parmetros formais> );

Aloca memria e inicializa o objeto, baseado nos parmetros passados. Normalmente a primeira ao invocar o construtor da classe base, atravs da instruo:
inherited <construtor> ( <parmetros reais > );

Mtodo Destrutor
destructor <identificador> ( <parmetros formais> );

Destri o objeto, baseado nos parmetros passados, e libera a memria alocada para ele. Normalmente a ltima ao invocar o destrutor da classe base, atravs da instruo:
inherited <destrutor> ( <parmetros reais > );

O Parmetro Self Representa um parmetro invisvel passado a todos os mtodos de uma classe e representa a instncia da classe que esta chamando o mtodo. utilizado para evitar conflitos de nomes de objetos

Caderno Didtico Lazarus IDE

Pgina 13

14

Universidade Federal de Santa Maria

Mtodos Estticos Os mtodos declarados numa classe so por default estticos. Tem suas referncias determinadas em tempo de compilao Mtodos Virtuais O objetivo dos mtodos virtuais a possibilidade de substitu-los por novos mtodos, contendo os mesmo parmetros, das classes descendentes. Para tornar um mtodo virtual, basta acrescentar no final de sua declarao na classe, a palavra virtual. Um mtodo virtual pode ser substitudo em uma classe descendente atravs de sua redeclarao seguida da diretiva override; Mtodos Dinmicos Mtodos dinmicos so basicamente idnticos a mtodos virtuais sendo declarados com o uso da diretiva dynamic. OBS.: Os mtodos dinmicos favorecem o tamanho do cdigo enquanto os mtodos virtuais favorecem a velocidade. Mtodos Abstratos So mtodos que no fazem nada, servem apenas para definir a estrutura de uma hierarquia. Para tornar um mtodo abstrato, basta acrescentar no final de sua declarao na classe, a palavra abstract. Para um mtodo ser abstrato, necessrio que ele seja tambm virtual. Propriedades Representa um mecanismo para encapsular os campos de uma Classe sobrecarregando as operaes de leitura e escrita. So uma extenso natural s variveis de instncia de uma classe, pois permitem que o desenvolvedor parea esta trabalhando com estas, enquanto na realidade est executando chamadas a mtodos. Para utilizar as propriedades os campos (atributos) devem ser declarados como private, os mtodos como protected, e as propriedades como public.
property Identificador : TIPO [read MtodoDeLeitura] [write MtodoDeEscrita];

Identificador representa a propriedade, TIPO o tipo da propriedade, MtodoDeLeitura o mtodo associado leitura da propriedade, MdodoDeEscrita o mtodo associado escrita da propriedade. Verificao de Tipo Verifica, em tempo de execuo, se o objeto uma instncia da classe ou de alguma subclasse desta. Retorna true ou false.
<objeto> is <classe>

Converso de Tipo Converte, se possvel, uma referncia para o objeto de uma classe base em uma referncia para objeto da subclasse.
(<objeto> as <classe>).<Mtodos ou Propriedade>

Caderno Didtico Lazarus IDE

Pgina 14

15

Universidade Federal de Santa Maria

Encapsulamento
A encapsulao consiste em ocultarmos ao usurio o funcionamento interno de uma classe. Desta forma todos os detalhes de um objeto, que so insignificantes ao programador no sero aparentes. A principal vantagem da encapsulao permitir que os implementadores de classes mudem a implementao de uma classe sem que precisem alterar algum cdigo gerado. Desta forma podemos alterar os dados de um produto usando a mesma classe j previamente criada para a alterao de outro tipo de cadastro. O principal objetivo tornar o objeto independente de sua implementao interna, para isso a implementao das suas propriedades e mtodos so "escondidas" de forma que o usurio precise apenas conhecer a interface do objeto para poder utiliz-lo. Desta forma o desenvolvedor poder alterar tranquilamente a implementao de um objeto (Classe) sem causar transtornos aos usurios.

Herana
O objetivo bsico deste conceito permitir a criao de uma nova classe a partir de outras existentes sem contudo duplicar cdigo algum. A nova classe, chamada de derivada, se comportar de maneira anloga a classe que lhe deu origem, comportando-se diferentemente apenas naquilo que for alterado em relao classe original. A herana a responsvel direta pela grande reusabilidade usual nos sistemas baseados em OOP. A herana permite que avancemos gradualmente em relao aos objetivos, sem perder consistncias (alvos) anteriormente atingidos. Assim pode-se adaptar o comportamento de um componente sem mudar o prprio componente. O sistema pode ser alterado de forma incremental sem comprometimento do cdigo.

Caractersticas / Benefcios
Permite que uma nova classe seja descrita a partir de outra classe j existente (Reutilizao). A subclasse herda as caractersticas e o comportamento da superclasse. A subclasse pode adicionar novas caractersticas e comportamentos aos herdados da superclasse. A subclasse pode ter um comportamento diferente da superclasse, redefinindo o mtodo herdado. A subclasse uma especializao da superclasse. Toda instncia da subclasse tambm uma instncia da superclasse. Resultado de uma sequncia de heranas uma hierarquia de classes.

Caderno Didtico Lazarus IDE

Pgina 15

16

Universidade Federal de Santa Maria

Implementao
Segue abaixo um exemplo de herana onde criamos uma subclasse (TNewData), a partir da classe TData, j existente, incluindo o mtodo GetText.
type TNewData = Class(TData) public function GetText : string; end; function TData.GetText : string; var d, m, a : string; begin d := IntToStr(dia); case Mes of 1 : m := 'Janeiro'; 2 : m := 'Fevereiro'; 3 : m := 'Maro'; 4 : m := 'Abril'; 5 : m := 'Maio'; 6 : m := 'Junho'; 7 : m := 'Julho'; 8 : m := 'Agosto'; 9 : m := 'Setembro'; 10: m := 'Outubro'; 11: m := 'Novembro'; 12: m := 'Dezembro'; end; a := IntToStr(ano); GetText := d + ', ' + m + ' de ' + a; end;

Polimorfismo
Este conceito permite que sejam declaradas diferentes classes que por sua vez podem definir mtodos de mesmo nome e comportamentos diferentes. Isto importante na medida em que permite escrever rotinas que operem com qualquer classe que implementa os mtodos necessrios. Desta forma, as classes tornam-se mais independentes uma da outra e assim pode-se criar novas classes no gerando qualquer impacto sobre aquelas anteriormente existentes.

Caractersticas / Benefcios
a capacidade de tratarmos objetos de diferentes tipos de uma mesma maneira desde que eles tenham um ancestral em comum Objetos de classes diferentes podem ter mtodos com mesmo nome e cada objeto responder adequadamente de acordo com seu mtodo. Mtodos da mesma classe podem ter o mesmo nome, desde que possuam quantidade ou tipo de parmetros diferentes. Mtodos da classe derivada podem ter nomes iguais aos da classe base, inclusive com parmetros iguais.

Caderno Didtico Lazarus IDE

Pgina 16

17

Universidade Federal de Santa Maria

CAPITULO III - Object Pascal Bsico da Linguagem


Programa, procedures e funes so todos compostos de instrues que so, cada uma, uma linha de cdigo executvel. Instrues podem ser simples ou compostas. Veja alguns exemplos:
x := 13; //atribui o valor 13 varivel x. y := x + 12; //atribui o resultado da soma varivel y. TestaArquivo('config.sys'); //executa o procedimento TestaArquivo

Comentrios:
{ } (* *) // Tudo o que est entre as chaves ignorado; Tudo o que est entre * ignorado; Tudo aps o marcador do comentrio ignorado at o final da linha.

O Ponto-e-Vrgula e o Ponto:
Como regra geral, todas as instrues em um programa Pascal devem ser separadas por um ponto-e-vrgula. Neste caso, note que instruo refere-se tanto a instrues simples como instrues compostas. por esta razo que no existe um ponto-e-vrgula aps um BEGIN e significa tambm que um ponto-e-vrgula antes de qualquer END opcional. Assim, no cdigo a seguir, a instruo de atribuio no possui um ponto-e-vrgula aps ela porque imediatamente seguida por um END, mas o END deve ter um ponto-e-vrgula aps, porque ele o final da instruo composta:
if x = 13 then begin ShowMessage(X vale Treze`); x:=14 // aqui o ponto e vrgula opcional end; //aqui o ponto e vrgula obrigatrio pois termina a instruo composta.

Na maioria dos caso o par BEGIN ... END esto sempre juntos. Entretanto, existem poucos casos onde voc tem um END sem BEGIN. A ocorrncia mais comum a instruo CASE.

O END final do programa seguido de um ponto e no de um ponto e vrgula.

Caderno Didtico Lazarus IDE

Pgina 17

18

Universidade Federal de Santa Maria

Tipos de Dados Padro


Observe as tabelas abaixo com a descrio dos tipos de dados:

Tipos Inteiros
So tipos numricos exatos, sem casas decimais. O tipo integer o tipo inteiro padro.
Tipo ShortInt SmallInt ou Integer Longint Byte Word Cardinal Tam. (bytes) 1 2 4 1 2 4 Valor Mn. -128 -32768 -2147483648 0 0 0 Valor Mx. 127 32767 2147483647 255 65535 2147483647

Tipos Reais
So tipos numricos exatos com casas decimais. O tipo Double o tipo real padro.
Tipo Real Single Double Extended Comp Currency Tam. (bytes) 6 4 8 10 8 8 Valor Mn. -39 10 -45 10 -324 10 -4932 10 18 -10 12 -10 Valor Mx. 38 10 38 10 308 10 4932 10 18 10 12 10 Dgitos Significativos 11-12 7-8 15-16 19-20 19-20 19-20

Tipos Texto
Os tipos texto podem operar com caracteres simples ou grupos de caracteres. O tipo String o tipo texto padro.
Char String ou shortstring Ansistring Um nico caractere ASCII Conjunto de caracteres de tamanho 1 a 256 bytes, sendo que o primeiro byte guarda o comprimento do conjunto. Conjunto de caracteres em limite de tamanho, terminada em nulo (#0)

Tipos Ordinais
Tipos ordinais so tipos que tem uma sequncia incremental, ou seja, pode-se dizer qual o prximo valor ou qual o valor anterior a um determinado valor ordinal. So tipos ordinais o Char, os tipos inteiros, o Boolean e os tipos enumerados.

Boolean
Variveis do tipo Boolean podem receber os valores lgicos True ou False, verdadeiro ou falso. Uma varivel Boolean ocupa 1 byte de memria.
x := true;

TDateTime
O tipo TDateTime guarda data e hora em uma estrutura interna igual ao tipo Double, onde a parte inteira o nmero de dias desde 31/12/1899 e a parte decimal guarda a hora, minuto, segundo e milissegundo. As datas podem ser somadas ou subtradas normalmente.

Caderno Didtico Lazarus IDE

Pgina 18

19

Universidade Federal de Santa Maria

Variant
Tipo genrico, que pode atribuir e receber valores de qualquer outro tipo. Deve-se evitar a utilizao de variveis do tipo Variant, pois seu uso pode prejudicar a performance do programa, alm de diminuir a legibilidade do cdigo fonte e a integridade do executvel, no trecho de cdigo abaixo se observa como esse tipo de varivel tem um comportamento estranho.
var V1, V2, V3: Variant; begin V1 := True; V2 := 1234.5678; V3 := Date; ShowMessage(V1 + V2 + V3); end;

Tipos de Definidos pelo Usurio


Na linguagem object pascal permite a declarao de tipos que no foram inicialmente disponibilizados pela linguagem de programao. Essas declaraes so feitas na seo type, da interface ou implementation, sendo que na implementation esses tipos no podero ser usados em outras Units.

Strings Limitadas
No caso de se desejar limitar o nmero de caracteres de uma string, podemos criar um tipo de string limitada:
TEstado = string[2]; x := RS;

Se, por exemplo, for tentado atribuir o valor: RGS a uma varivel do tipo TEstado, a mesma receber apenas os dois primeiros caracteres ... RG.

Sub-Faixa
um subconjunto de um tipo ordinal e possui as mesmas propriedades do tipo original:
TMaiusculas = A .. Z; TMes = 1 .. 12; x := C; y := 7;

Enumeraes
Sequncia de identificadores como valores vlidos para o tipo. A cada elemento da lista de identificadores associado internamente um nmero inteiro, iniciando pelo nmero 0.
TDiaSemana = (Dom, Seg, Ter, Qua, Qui, Sex, Sab); x := Ter; // podemos usar o comando CASE para testar atribuies

Caderno Didtico Lazarus IDE

Pgina 19

20

Universidade Federal de Santa Maria

Ponteiros
Ponteiros armazenam endereos de memria. Todas as classes em Object Pascal so implementadas como ponteiros, mas raramente o programador vai precisar us-los como tal.
TPonteiroInt = ^Integer;

Records
O tipo record uma forma de criar uma nica estrutura com valores de diferentes tipos de dados. Cada um dos dados de um record chamado de campo.
type TData Ano: Mes: Dia: end; = record Integer; TMes; Byte;

var Festa: TData; begin Festa.Ano := 1997; Festa.Mes := Mai; Festa.Dia := 8; end;

Arrays
Arrays fornecem uma forma de criar variveis que contenham mltiplos valores, como em uma lista ou tabela, cujos elementos so do mesmo tipo. Abaixo alguns exemplos de arrays de dimenses variadas.
TTempDia = array [1..24] of Integer; // uma dimenso - vetor TTempMes = array [1..31, 1..24] of Integer; // duas dimenses - matriz TTempAno = array [1..12, 1..31, 1..24] of Integer; // tridimensional

Um array pode ser definido como constante tipada, onde todos os seus elementos devem ser inicializados.
Fatorial: array[1..7] of Integer = (1, 2, 6, 24, 120, 720, 5040);

O tipo dos elementos de um array pode ser qualquer um, voc pode ter uma array de objetos, de conjuntos, de qualquer tipo que quiser, at mesmo um array de arrays.
TTempMes = array [1..31] of TTempDia; TBtnList = array [1..10] of TButton;

Sets So conjuntos de dados de um mesmo tipo, sem ordem, como os conjuntos matemticos. Conjuntos podem conter apenas valores ordinais, o menor que um elemento pode assumir zero e o maior, 255.
TBorderIcons = set of TBorderIcon; BorderIcons := [biSystemMenu, biMinimize]; if MesAtual in [Jul, Jan, Fev] then ShowMessage('Frias'); Caderno Didtico Lazarus IDE Pgina 20

21

Universidade Federal de Santa Maria

Elementos Fundamentais de Controle Operadores


1. Atribuio e Igualdade: o operador de atribuio em Object Pascal o smbolo dois pontos igual ( := ). diferente do sinal igual ( = ) usado para testa a igualdade e definio de tipos. 2. Numricos: observe a tabela a seguir: Operador + * / DIV MOD Operao Adio Subtrao Multiplicao Diviso Diviso de Inteiros Resto de Diviso Tipos de Operandos Integer, real Integer, real Integer, real Integer, real Integer Integer Tipos de Resultado Integer, real Integer, real Integer, real Real, real Integer Integer

3. Relacionais: a tabela a seguir contm os operadores relacionais que retornam dois valores booleanos (true e false): Operador = <> < > <= >= NOT AND OR Operao Igual No Igual Menor que Maior que Menor ou igual Maior ou igual Negao E lgico OU lgico

Comandos de DECISO
IF ... THEN ... ELSE ... (SE ... ENTO ... SENO) O formato bsico da instruo IF ... THEN mostrado abaixo:
if <expresso lgica> then <instruo>;

Esta sintaxe bsica pode ser incrementada pela adio da clusula ELSE:
if <expresso lgica> then <instruo> // no vai ponto-e-vrgula else <instruo>;

Caderno Didtico Lazarus IDE

Pgina 21

22

Universidade Federal de Santa Maria

Para utilizar instrues compostas, a sintaxe bsica deve ser incrementada pelos comandos de bloco de cdigo:
if <expresso lgica> then begin <instruo 1>; <instruo 2>; <instruo 3>; end // no vai ponto-e-vrgula else begin <instruo 1>; <instruo 2>; <instruo 3>; end;

Obs.: No existe ponto-e-vrgula aps o END que aparece antes do ELSE; CASE ... OF (ESCOLHA ... DE) A instruo IF ... THEN ... ELSE mostrada anteriormente funciona bem para uma pouca quantidade de opes, mas torna-se invivel se voc tiver muitas mais. Nesta situao, a construo CASE mais fcil para se escrever. A sintaxe geral para a instruo CASE :
case <varivel> of <valor 1> : <instruo 1>; <valor 2> : <instruo 2>; <valor n> : <instruo n>; else <instruo>; end;

A instruo CASE toma uma varivel e a compara com os valores possveis. Mltiplos valores podem aparecer sob o mesmo caso, separados por vrgulas. Observe:
case x of 'A' .. 'Z', 'a' .. 'z' : ShowMessage('Letra'); '0' .. '9' : ShowMessage('Nmero'); '+', '-', '*', '/' : ShowMessage('Operador'); else ShowMessage('Caractere Especial'); end;

Comandos de LOOPING
WHILE ... DO (ENQUANTO ... FAA) O Loop while executa instrues at que a condio do loop torne-se falsa. Observe sua sintaxe:
while <expresso lgica> do <instruo>;

Caderno Didtico Lazarus IDE

Pgina 22

23

Universidade Federal de Santa Maria

Como nas outras estruturas, aqui voc tambm pode ter uma instruo simples ou composta aps o DO, basta para isso utilizar o par BEGIN END. Observe:
i:=10; while i > 0 do begin i:=i-1; ShowMessage(Passando pelo loop + IntToStr(i)); end;

FOR ... DO (DE ... FAA) O Loop FOR difere do while por executar uma quantidade especfica de vezes a ao, determinada pela varivel de controle, sua sintaxe bsica :
For <varivel de controle> := <valor inicial> to <valor final> do <instruo>;

Usando a clusula DOWNTO ao invs de TO, a varivel de controle sofre um decremento de valor. Observe os exemplos:
For i:=10 to 100 do ShowMessage(IntToStr(i)); For i:=100 downto 10 do ShowMessage(IntToStr(i));

REPEAT ... UNTIL (REPITA ... AT QUE) A terceira construo de loop o REPEAT ... UNTIL, ele executa todas as instrues dentro do loop at que a expresso lgica torne-se verdadeira (o contrrio do WHILE). Observe a sintaxe geral:
repeat <instruo 1>; <instruo 2>; <instruo n>; until <expresso lgica>;

Note que essa construo pode conter diversas instrues e no requer o par BEGIN .. END. Observe o exemplo:
j:=0; repeat j:=j+1; ShowMessage(Looping); until j>= 10;

BREAK e CONTINUE (PARE e CONTINUE) So palavras reservadas que podem ser usadas em qualquer um dos laos de repetio. Observe o exemplo:
while true do begin readln(inputFile,i); if strtoint(i) = 5 then break; ShowMessage(i); end; Caderno Didtico Lazarus IDE Pgina 23

24

Universidade Federal de Santa Maria

Neste exemplo, o loop executado eternamente (uma vez eu true sempre true). O loop continuar a ler a entrada de dados de um arquivo e exibir um caixa de mensagem at que seja lido o nmero 5, pois o comando BREAK interrompera o lao. O outro modificador de execuo do loop a instruo CONTINUE. Ela ignorar o restante do loop e voltar a avaliar a condio. Assim, se algo for alterado que altere a condio, voc pode utilizar CONTINUE para pular para o topo do loop e avaliar novamente a condio. Observe:
while i<10 do begin readln(inputFile,i); if strtoint(i) < 5 then continue; ShowMessage(Este nmero ser maior que 5: + i); end;

Neste caso, CONTINUE impedir que qualquer nmero menor que 5 seja impresso. Este comando til para ser usado com entradas invlidas dentro de um loop.

Procedimentos e Funes
Procedimentos e funes so blocos bsicos de programas Object Pascal. Para tornar o programa mais fcil de lidar, melhor quebrar a funcionalidade em blocos ao invs de enormes programas monolticos, onde o cdigo reside no arquivo de programa principal. PROCEDURE Procedures so as sub-rotinas mais comuns em Object Pascal, para criar mdulos deste tipo, observe a sintaxe:
procedure NomeDaProcedure(<parmetro 1> : <tipo 1>; <parmetro n> : <tipo 2>); const <nome da constante> = <valor literal>; var <nome da varivel> : <tipo>; begin <instruo 1> <instruo n> end;

Observe um exemplo de declarao de procedure:


procedure MostraEstrelas(NumEstrelas : integer); var i : integer; s : string; begin for i:=1 to NumEstrelas do s:= s + *; ShowMessage(s); end;

Caderno Didtico Lazarus IDE

Pgina 24

25

Universidade Federal de Santa Maria

Neste exemplo, uma caixa de mensagem com n asteriscos ser exibida. A quantidade de asteriscos passada como parmetro quando a procedure chamada, sendo assim para exibir 20 asteriscos faz-se a seguinte chamada:
MostraEstrelas(20);

A passagem de parmetros em um procedimento no obrigatria, a seguir um exemplo:


procedure Mostra10Estrelas; const NumEstrelas = 10; var i : integer; s : string; begin for i:=1 to NumEstrelas do s:= s + *; ShowMessage(s); end;

Neste caso, para fazer a chamada do procedimento, utiliza-se o nome do mesmo:


Mostra10Estrelas;

FUNCTION Funes so basicamente o mesmo que procedimentos, porm com uma grande diferena: a funo retorna um valor de algum tipo. Para tanto, ao declarar uma funo, declara-se tambm qual o tipo de valor que ela retorna. A sintaxe bsica de uma funo a seguinte:
function NomeDaFuncao(<param. 1> : <tipo>; <param. n> : <tipo>): <tipo retorno>; const <nome da constante> = <valor literal>; var <nome da varivel> : <tipo>; begin <instruo 1> <instruo n> end;

O valor de retorno de uma funo pode ser especificado de duas formas: fazendo a atribuio diretamente ao nome da funo:
function Cubo(base : integer): integer; begin Cubo:=base*base*base; end;

Ou usando a palavra reservada RESULT dentro da funo para receber o resultado de retorno:
function Quadrado(base : integer): integer; begin Result:=base*base; end;

Quando a funo chamada, o valor de retorno deve ser atribudo a uma varivel de mesmo tipo:
x:=Cubo(2); // x ser igual a 8 y:=Quadrado(3); // y ser igual a 9 Caderno Didtico Lazarus IDE Pgina 25

26

Universidade Federal de Santa Maria

Funes e Comandos Internos (principais) Tratamento de Strings


CompareText(texto1, texto2) Compara 2 strings sem sensitividade de maisculo-minsculas e devolve um valor inteiro. Se este valor for menor que zero, o texto1 menor que o texto2, caso o valor for maior que zero, o texto2 menor que o texto1 e os dois so iguais se o valor de retorno for zero. Ex.: x:=CompareText(Casa,casa); // x = 0 x:=CompareText(apartamento,casa); // x < 0 x:=CompareText(casa,apartamento); // x > 0 CompareStr(texto1, texto2) Compara 2 strings com sensitividade de maisculo-minsculas e devolve um valor inteiro. Se este valor for menor que zero, o texto1 menor que o texto2, caso o valor for maior que zero, o texto2 menor que o texto1 e os dois so iguais se o valor de retorno for zero. Ex.: x:=CompareStr(Casa,casa); // x < 0 x:=CompareStr(casa,casa); // x = 0 x:=CompareStr(casa,apartamento); // x > 1 LowerCase(texto) Converte todas as letras do texto passado como parmetro para minsculas. Ex.: y:=LowerText(CASA); // y = casa UpperCase(texto) Converte todas as letras do texto passado como parmetro para maisculas. Ex.: y:=UpperText(casa); // y = CASA Copy(texto, pos_inicial, num_posies) Retorna um subtexto de um texto passado como parmetro, de acordo com a posio e a quantidade de caracteres predefinidos. Ex.: y:=Copy(Universidade Pblica,14,7); // y = Pblica Delete(varivel, pos_inicial, num_posies) Remove um nmero determinado de caracteres a partir de uma posio inicial. Ex.: y:=Universidade Pblica; Delete(y,7,6); // y = Univer Pblica Insert(texto, variavel_destino, posio) Insere um subtexto em um texto, em uma posio preestabelecida. Ex.: y:=Universidade Pblica; Insert(UFSM ,y,1); // y = UFSM - Universidade Pblica Length(texto) Retorna o nmero de caracteres do texto passado como parmetro. Ex.: x:=length(UFSM); // x = 4 Pos(texto_pesquisado, texto_objeto) Retorna a posio do texto pesquisado dentro do texto objeto da pesquisa. Se a funo retornar zero, o texto pesquisado no existe no texto objeto Ex.: x:=Pos(S,UFSM); // x = 3 Trim(texto) Remove os espaos em branco direita e esquerda do texto passado como parmetro Ex.: y:=Trim( FRED. WESTPHALEN RS ); // y:=FRED. WESTPHALEN RS TrimLeft(texto) Remove os espaos em branco esquerda do texto passado como parmetro Ex.: y:=Trim( FRED. WESTPHALEN ); // y:= FRED. WESTPHALEN

Caderno Didtico Lazarus IDE

Pgina 26

27

Universidade Federal de Santa Maria

TrimRight(texto) Remove os espaos em branco direita do texto passado como parmetro Ex.: y:=Trim( FRED. WESTPHALEN ); // y:= FRED. WESTPHALEN

Tratamento de Ordinais
Dec(ordinal, quantidade) Decrementa um valor ordinal em uma quantidade determinada de unidades; Ex.: x:=10; Dec(x); // x = 9 Dec(x,6); // x = 4 Inc(ordinal, quantidade) Incrementa um valor ordinal em uma quantidade determinada de unidades; Ex.: x:=10; Inc(x); // x = 11 Inc(x,6); // x = 14 Odd(ordinal) Testa se o ordinal passado como parmetro impar (neste caso retorna true), ou se par (retornando false). Ex.: z:=Odd(10); // z = false z:=Odd(5); // z = true; Pred(ordinal) Retorna o predecessor do ordinal; Ex.: x:=Pred(b); // x = a; Succ(ordinal) Retorna o sucessor do ordinal; Ex.: x:=Succ(b); // x = c; Ord(ordinal) Retorna a ordem do valor ordinal na faixa de valores do tipo a qual ele faz parte; Ex.: x:=Ord(A); // x = 65 (valor de A na tab. ASCII); z:=Odd(5); // x =5 Low(ordinal) Valor mais baixo da faixa de valores do tipo a qual o ordinal faz parte; Ex.: x:=10; // inteiro; x:=Low(x); // x = -2147483648 High(ordinal) Valor mais alto da faixa de valores do tipo a qual o ordinal faz parte; Ex.: x:=10; // inteiro; x:=Low(x); // x = 2147483647

Tratamento de valores TDateTime


Date Retorna a data atual do sistema, no formato preestabelecido no painel de controle. Ex.: x:=date; // x = 13/03/2001 Time Retorna a hora atual do sistema, no formato preestabelecido no painel de controle. Ex.: x:=time; // x = 09:41:57 Now Retorna a data e a hora atual do sistema. Ex.: x:=now; // x = 13/03/2001 09:45:57 Caderno Didtico Lazarus IDE Pgina 27

28

Universidade Federal de Santa Maria

DayOfWeek(data) Retorna o dia da semana de uma data especificada Ex.: x:=DayOfWeek(13/03/2001); // x = 3

... tera-feira

DecodeDate(DateTime, ano, ms, dia) Decodifica um valor TDateTime em trs variveis word ... dia, ms e ano. Ex.: DecodeDate(now,a,m,d); // a = 2001 // m = 03 // d = 12 DecodeTime(DateTime, hora, minutos, segundos, milissegundos) Decodifica um valor TDateTime em quatro variveis word ... hora, minutos, segundos, milissegundos. Ex.: DecodeTime(now,h,m,s,ms); // h = 09 // m = 45 // s = 57 // ms = 23 EncodeDate(ano, ms, dia) Retorna uma data a partir de trs variveis word ... dia, ms e ano. Ex.: x:=EncodeDate(a,m,d); // x = 13/03/2001 EncodeTime(hora, minutos, segundos, milissegundos) Retorna o valor do horrio a partir de quatro variveis word ... hora, minutos, segundos, milissegundos. Ex.: x:=EncodeTime(h,m,s,ms); // x = 09:45:57

Converses de Tipos de Dados


A tabela abaixo ilustra algumas converses possveis entre tipos de dados:
Orig. /Dest. Byte Char String Integer Real DateTime Date Time Byte Ord StrToInt direto* Round / Trunc Varivel[ndice] IntToStr FloatToStr DateTimeToStr DateToStr TimeToStr Round / Trunc Char Chr String Chr direto* Integer direto* Ord StrToInt Real direto* Ord StrToFloat direto* StrToDateTime StrToDate StrToTime DateTime Date Time

As clulas com fundo preto representam converses inexistentes. As converses diretas, como Integer para Byte levam em considerao que o tamanho do dado da origem no maior que o mximo suportado pelo dado de destino.
Chr(var_byte) Converte uma varivel Byte em Char. utilizada para saber o caractere ASCII de um valor. Ex.: x:=Chr(65); // x = A StrToInt(var_string) Converte uma varivel String em Integer. Ex.: x:=StrToInt(10); // x

= 10

IntToStr(var_integer) Converte uma varivel Integer em String. Ex.: x:=IntToStr(10); // x = 10

Caderno Didtico Lazarus IDE

Pgina 28

29

Universidade Federal de Santa Maria StrToIntDef(var_string, valor_padro) Converte uma varivel String em Integer e em caso de erro atribui o valor padro (inteiro) Ex.: x:=StrToIntDef(abc,0); // x = 0 x:=StrToIntDef(112,0); // x = 112 IntToHex(var_integer, num_casas) Converte uma varivel Integer em um valor String Hexadecimal Ex.: x:= IntToHex(1100,5) // x = 0044C Round(var_real) Arredonda um nmero real em um Integer. Ex.: x:= Round(50.8) // x = 51 x:= Round(50.5) // x = 50

... maior que 5 ... menor ou igual a 5

Trunc(var_real) Trunca um nmero real em um Integer, pega a parte inteira do valor real. Ex.: x:= Trunc(50.8) // x = 50 x:= Trunc(50.5) // x = 50 StrToFloat(var_string) Converte uma varivel String em Real. Ex.: x:=StrToInt(10.12); FloatToStr(var_real) Converte uma varivel Real em String. Ex.: x:=IntToStr(10.12);

// x

= 10,12

// x

= 10,12

DateToStr(data) Converte uma varivel do tipo TDateTime em string de data, de acordo com as configuraes regionais do sistema operacional. Ex.: x:=DateToStr(date); // x = 13/03/2001 StrToDate(var_string) Converte uma varivel do tipo string de data em TDateTime. Ex.: x:=StrToDate(13/03/2001); // x = 13/03/2001 TimeToStr(hora) Converte uma varivel do tipo TDateTime em string de hora. Ex.: x:=TimeToStr(time); // x = 09:45:57 StrToTime(var_string) Converte uma varivel do tipo string de hora em TDateTime. Ex.: x:=StrToTime(09:45:57); // x = 09:45:57 DateTimeToStr(hora) Converte uma varivel do tipo TDateTime em string de data e hora. Ex.: x:=DateTimeToStr(time); // x = 13/03/2001 09:45:57 StrToDateTime(var_string) Converte uma varivel do tipo string de data e hora em TDateTime. Ex.: x:=StrToDateTime(13/03/2001 09:45:57); // x

= 13/03/2001 09:45:57

Val(texto, variavel_destino, var_erro) Converte uma string passada como parmetro em um valor numrico. Caso o contedo da string no seja numrico, a varivel de erro estar armazenando um nmero diferente de zero. Ex.: Val(teste, x, erro); // x = 0 erro = 1 Val(100, x, erro); // x = 100 erro = 0 Str(valor, variavel_destino) Comando que converte um valor numrico em string e armazena o resultado em uma varivel destino. Ex.: Str(950.25:3:2,x); // x = 950.25 Caderno Didtico Lazarus IDE Pgina 29

30

Universidade Federal de Santa Maria

Strings de Formato
Algumas funes permitem criar mscaras de sada a partir de alguns cdigos, alguns exemplos:
Format(texto_p_formatar,[argumentos]) Formata uma string com uma srie de argumentos de vrios tipos: d Nmero Decimal (inteiros); f Nmero Fixado m Formato Dinheiro (money) x Hexadecimal Ex.: Format('O numero %d a parte inteira do nmero %f.', [10,10.5]); Resultado: O numero 10 a parte inteira do nmero 10,50. Format('Este texto %s foi formatado %s usando o caractere #%d.',[#13,#13,13]); Resultado: Este texto foi formatado usando o caractere #13 Format('O preo do livro %s %m.',['Como programar em Pascal',50.7]); Resultado: O preo do livro Como Programar em Pascal R$ 50,70 Format('O numero %d equivale ao valor %x em hexadecimal',[10,10]); Resultado: O nmero 10 eqivale ao valor A em hexadecimal FormatFloat(texto_p_formatar,[argumentos]) Converte um nmero real em string, utilizando uma string de formato com as seguintes especificaes: 0 Dgitos obrigatrios # Dgitos opcionais . Ponto flutuante , Separador de milhar E Notao Cientfica e Nmero Cientfico g Nmero Geral s String (existem outros menos utilizados)

Ex.: x:= FormatFloat('###,##0.00',1210.25)

// x = 1.210,25

Observe mais algumas mscaras e seus respectivos resultados Format string 0 0.00 #.## #,##0.00 #,##0.00;(#,##0.00) #,##0.00;;Zero 0.000E+00 #.###E-0 1234 1234 1234 1234,00 1234 1.234,00 1.234,00 1.234,00 1,234E+03 1,234E3 -1234 -1234 -1234 -1234,00 -1234 -1.234,00 (1.234,00) -1.234,00 -1,234E+03 -1,234E3 0.5 0.5 1 0,50 ,5 0,50 0,50 0,50 5,000E-01 5E-1 0 0 0 0,00 0,00 0,00 Zero 0,000E+00 0E0

Caderno Didtico Lazarus IDE

Pgina 30

31

Universidade Federal de Santa Maria

Outras Funes
As bibliotecas do Lazarus e Free Pascal implementam ainda diversas outras funes veja mais alguns exemplos teis:
Int(var_real) Retorna a parte inteira do argumento real e devolve o valor como real tambm Ex.: x:= Int(50.8) // x = 50,0 x:= Int(50.5) // x = 50,0 Frac(var_real) Retorna a parte fracionria do argumento real e devolve o valor como real tambm Ex.: x:= Frac(14.56) // x = 0,56 Abs(numero) Fornece o valor absoluto do argumento numrico. O resultado pode ser inteiro ou real. Ex.: x:=Abs(-4.21); // x = 4,21 Pi Fornece o valor do , com 14 casas decimais. Ex.: x:=Pi; // x = 3,14159265358979 Sqr(numero) Eleva o valor passado como parmetro ao quadrado e retorna um valor real. Ex.: x:=Sqr(5); // x = 25 Sqrt(numero) Fornece a raiz quadrada do valor passado como parmetro e retorna um valor real. Ex.: x:=Sqrt(9); // x = 3 ExtractFileName(caminho) Extrai o nome do arquivo da string passada como parmetro. Ex.: x:=ExtractFileName(c:\temp\cafw.exe); ExtractFilePath(caminho) Extrai o caminho do arquivo da string passada como parmetro. Ex.: x:=ExtractFilePath(c:\temp\cafw.exe); ExtractFileDrive(caminho) Extrai o drive do caminho da string passada como parmetro. Ex.: x:=ExtractFilePath(c:\temp\cafw.exe); ExtractFileExt(caminho) Extrai a extenso do arquivo da string passada como parmetro. Ex.: x:=ExtractFilePath(c:\temp\cafw.exe); FileExists (caminho) Testa se o arquivo especificado no caminho existe. Ex.: x:=FileExists(c:\command.com);

// x

= cafw.exe

// x

= c:\temp\

// x

= c:\

// x

= .exe

// x

= true

Random Retorna um nmero (pseudo)-randmico. A sequncia de valores randmicos sempre ser a mesma. Randomize utilizado antes do comando Random, para forar o uso do relgio e da sim gerar nmero randmicos em ordem que no se repete. Sleep(tempo) Efetua uma pausa nas operaes. O tempo de durao da pausa determinado pelo parmetro tempo. Os valores informados para a pausa so em milissegundos. Beep Procedimento que emite o som padro do sistema operacional definido no painel de controle. Caderno Didtico Lazarus IDE Pgina 31

32

Universidade Federal de Santa Maria

CAPITULO IV Classes e Objetos Padres do Lazarus Propriedades


As propriedades so caractersticas dos componentes. Para alterar propriedades em cdigo use a sintaxe de ponto, observe:
Objeto.Propriedade := valor;

Tipos de Propriedade
Tipo String Button1.Caption := 'Fechar'; Label1.Caption := Edit1.Text + '/' + Edit2.Text; Tipo Numrico Button2.Height := Button2.Height * 2; Width := Button1.Width + Button2.Width + 12; Tipo Enumerado BorderStyle := bsDialog; Panel1.Color := clWindow; Propriedades Aninhadas de Classe Memo1.Lines.Text := 'E agora, Jos?'; Label1.Font.Color := clBlue; Propriedades Aninhadas de Conjunto BorderIcons := [biSystemMenu, biMaximize]; Label1.Font.Style := [fsBold, fsItalic];

Propriedades Comuns
Propriedade Align Canvas Caption Color ComponentCount Components Enabled Font Height HelpContext Hint Left Name PopupMenu ShowHint TabOrder TabStop Tag Top Visible Width Descrio Determina o alinhamento do componente Superfcie de desenho, do tipo TCanvas, onde pode se desenhar a imagem do componente Legenda do componente (& indica tecla de atalho para alguns componentes) Cor do componente O nmero de componentes possudos Matriz de componentes possudos Define se o componente est ativo, se pode ser usado Fonte utilizada no componente Altura Nmero utilizado para chamar o Help on-line String utilizada em dicas instantneas Posio esquerda Nome do componente Menu de contexto do componente Define se o Hint ser mostrado A ordem de tabulao do componente, usada quando o usurio tecla TAB Indica se o componente ser selecionado quando o usurio teclar TAB Propriedade no utilizada pelo Lazarus, que pode ser usada como propriedade personalizada Posio superior Define se o componente est visvel Largura

Caderno Didtico Lazarus IDE

Pgina 32

33

Universidade Federal de Santa Maria

Eventos
Os Eventos acontecem em resposta a uma ao do usurio ou do prprio sistema, ao programar um mtodo de evento, deve-se considerar que o cdigo s ser executado quando o evento acontecer. Uma das tarefas mais importantes na programao baseada em eventos determinar quais eventos sero usados e qual a ordem desses eventos, por exemplo, quando o usurio clicar em um boto, qual evento acontecer primeiro, OnEnter, OnMouseDown ou OnClick? Os cdigos dos eventos podem ser compartilhados entre componentes, dessa Forma, voc pode ter um boto na barra de ferramentas que faz a mesma coisa que uma opo de menu. Para isso, basta escolher o evento na lista em vez de clicar duas vezes no Object Inspector. permitido mudar os mtodos de evento atravs de cdigo, uma vez que os eventos tambm so propriedades e podem ser usados como tal. Pode-se atribuir um evento de outro componente ou diretamente o nome do mtodo:
Button1.OnClick := Edit1.OnExit; Button2.OnClick := Edit2Click;

Eventos Comuns
Evento OnChange OnClick OnDblClick OnEnter OnExit OnKeyDown OnKeyPress OnKeyUp Descrio O contedo do componente alterado O componente acionado Duplo-clique no componente O componente recebe o foco O componente perde o foco Tecla pressionada Uma tecla pressionada e solta Tecla solta

Mtodos
Os mtodos realizam aes definidas pelo componente, veja os exemplos abaixo e atente para os parmetros passados. Note que podemos chamar os mtodos de evento como qualquer outro mtodo e que os mtodos de evento pertencem ao Form, no aos componentes.
Edit1.Clear; Form2.Show; Close; ScaleBy(110, 100); Button1.ScrollBy(10, 10); Button1.OnClick(Sender); Button1Click(Self); Form2.Button1Click(Sender);

Mtodos Comuns
Mtodo Create Free Show Hide SetFocus Focused BringToFront SendToBack ScrollBy SetBounds Descrio Cria um novo Objeto de uma Classe Destri um Objeto e libera a memria ocupada por ele Torna o componente visvel Torna o componente invisvel Coloca o foco no componente Determina se o componente tem o foco Coloca o componente na frente dos outros Coloca o componente atrs dos outros Move o componente Muda a posio e o tamanho do componente

Caderno Didtico Lazarus IDE

Pgina 33

34

Universidade Federal de Santa Maria

Biblioteca de Classes Janelas


Janelas so os elementos bsicos no desenvolvimento sobre o qual um aplicativo construdo no Lazarus. O tipo TForm usado pelo Lazarus como classe base para todas as janelas, abaixo algumas propriedades, eventos e mtodos dessa classe.
Propriedade Active ActiveControl AutoScroll BorderIcons BorderStyle FormStyle Icon Menu Position WindowState Evento OnCreate OnDestroy OnShow OnCloseQuery OnClose OnActivate OnDeactivate OnResize Mtodo ShowModal Show Close Descrio Indica se o Form est ativo Determina o controle que receber o foco por default Adiciona barras de rolagem automaticamente, quando necessrio Define quais cones de controle sero visveis, quais botes vo aparecer na barra de ttulo Estilo da borda do Form Tipo de Form, normal, MDI pai, MDI filho ou sempre visvel cone do Form Indica qual o menu do Form Permite controlar a posio e tamanho do Form na exibio Estado do Form, maximizada, minimizada ou normal Descrio Quando o Form instanciado Quando o Form liberado da memria Exatamente antes de mostrar o Form chamada para validar se o Form pode ser fechado Quando o Form fechado Quando o Form recebe o foco Quando o Form perde o foco Quando o Form muda de tamanho Descrio Ativa o Form modal, que o usurio tem que fechar para poder continuar a usar a aplicao Mostra o Form Fecha o Form

Componentes Padro
TButton Boto padro para executar aes.
Propriedade Cancel Default ModalResult Mtodo Click Descrio Dispara o evento OnClick do boto quando a tecla ESC pressionada em qualquer controle Dispara o evento OnClick do boto quando a tecla ENTER pressionada em qualquer controle Associa o boto a opo de fechamento de um Form modal Descrio Ativa o evento OnClick do boto

TBitBtn Boto especializado, com Bitmap.


Propriedade Glyph LayOut Margin Spacing Kind Descrio Bitmap exibido pelo boto Posio do Bitmap no Boto Indica o espao entre a borda do boto e o Bitmap Indica o espao entre o Bitmap e o texto do boto Seleciona um tipo padro para o boto, mudando vrias propriedades, como Glyph e ModalResult

Caderno Didtico Lazarus IDE

Pgina 34

35

Universidade Federal de Santa Maria

TSpeedButton Boto com Bitmap, normalmente utilizado em barras de ferramentas.


Propriedade Down GroupIndex AllowAllUp Flat Descrio Estado do boto (Pressionado ou no) Indica quais botes pertencero ao mesmo grupo Permite que todos os botes de um grupo possam ficar no pressionados Define se a borda do boto deve aparecer apenas quando ele for apontado

TLabel Utilizado para exibir rtulos


Propriedade Alignment AutoSize WordWrap Transparent FocusControl ShowAccelChar Descrio Alinhamento do texto no componente Define se o tamanho do componente ser automaticamente ajustado ao tamanho do Caption Retorno automtico de linha Define se o componente ser transparente Componente que receber o foco quando a tecla de atalho do Caption (&) for pressionada Indica se o caractere & ser usado para definir tecla de atalho

TEdit Utilizado para entrada de texto em uma nica linha.


Propriedade Text AutoSelect MaxLength CharCase PasswordChar ReadOnly Descrio Texto do componente Indica se o texto ser ou no selecionado quando o componente receber o foco Nmero mximo de caracteres permitidos Define se as letras aparecero em maisculo, minsculo ou normal Caractere utilizado para esconder o texto digitado (Senhas) Define se ser permitido alterar o texto

Mtodo Clear ClearSelection

Descrio Limpa o contedo do componente Limpa o texto selecionado no componente

TMemo Permite entrada de dados texto em mltiplas linhas. Contm propriedades e mtodos do TEdit.
Propriedade Lines WantReturns WantTabs ScrollBar Descrio Propriedade do tipo TStrings que armazena as linhas de texto do componente Define se a tecla ENTER ser tratada como quebra de linha Define se a tecla TAB ser tratada como espao de tabulao Define as barras de rolagem

TMaskEdit Permite entrada de dados texto em uma linha, utilizando uma mscara de edio. Possui todas as propriedades do componente TEdit.
Propriedade EditMask Descrio Mscara de edio

Caderno Didtico Lazarus IDE

Pgina 35

36

Universidade Federal de Santa Maria

Mscaras Uma mscara composta por trs partes, a primeira parte a mscara propriamente dita, a segunda parte indica se os caracteres literais sero salvos e a terceira parte indica qual o caractere utilizado para representar os espaos a serem digitados no texto. Estes so os caracteres especiais que podem compor a mscara de edio:
Caractere ! > < \ L L A A 9 0 C C # : / Descrio Espaos em branco no sero considerados no texto Todos os caracteres seguintes sero maisculos at que aparea o caractere < Todos os caracteres seguintes sero minsculos at que aparea o caractere > Indica um caractere literal Somente caractere alfabtico Obrigatoriamente um caractere alfabtico Somente caractere alfanumrico Obrigatoriamente caractere alfanumrico Somente caractere numrico Obrigatoriamente caractere numrico Permite um caractere Obrigatoriamente um caractere Permite um caractere numrico ou sinal de mais ou de menos, mas no os requer. Separador de horas, minutos e segundos Separador de dias, meses e anos

Alguns exemplos de mscaras: !90/90/00;1;_ !90:00;1;_ !\(999\)\ 000-0000;1;_ 00000\-999;1;_ Mscara de data. Ex.: 10/10/1981 Mscara de hora. Ex.: 12:00 Mscara de Telefone. Ex.: (055) 332-7100 Cep - Brasil

TStrings Muitos componentes, como o TMemo, possuem propriedades do tipo TStrings, essa classe permite armazenar e manipular uma lista de Strings. Toda propriedade do tipo TStrings permite acesso indexado aos itens da lista.
Propriedade Count Text Mtodo Add Insert Move Delete Clear IndexOf LoadFromFile SaveToFile Descrio Nmero de strings Contedo do memo na Forma de uma nica string Descrio Adiciona uma nova string no final da lista Insere uma nova string numa posio especificada Move uma string de um lugar para outro Apaga uma string Apaga toda a lista Retorna o ndice do item e - 1 caso no encontre Carrega texto de um arquivo Salva texto para um arquivo

Caderno Didtico Lazarus IDE

Pgina 36

37

Universidade Federal de Santa Maria

TCheckBox Utilizado para obter informaes de checagem.


Propriedade AllowGrayed Checked State Descrio Determina se o checkbox ter trs possibilidades de estado Determina se o checkbox est marcado Estado atual do checkbox

TRadioButton Usado em grupo, pode ser utilizado para obter informaes lgicas mutuamente exclusivas, mas recomendado usar o RadioGroup em vez de RadioButtons. TRadioGroup Componente que agrupa e controla RadioButtons automaticamente.
Propriedade Columns Items ItemIndex Descrio Nmero de colunas de RadioButtons Lista de strings com os itens do RadioGroup, cada item da lista representa um RadioButton Item selecionado, iniciando em 0

TPanel Componente Container utilizado para agrupar componentes em um painel.


Propriedade BevelInner BevelOuter BevelWidth BorderStyle BorderWidth Descrio Estilo da moldura interna do painel Estilo da moldura externa do painel Largura das molduras Estilo da Borda Largura da borda, distncia entre as molduras interna e externa

TScrollBox Container com barras de rolagem automticas. TGroupBox Componente container com um ttulo e borda 3D. TBevel Moldura ou linha com aparncia 3D.
Propriedade Shape Style Descrio Tipo de moldura a ser desenhada Define alto ou baixo relevo para a linha

TListBox Utilizado para exibir opes em uma lista.


Propriedade Columns MultiSelect ExtendedSelect IntegralHeight Items ItemIndex Selected SelCount Sorted Descrio Nmero de colunas de texto da lista Define se ser permitida a seleo de mltiplos itens Define se a seleo poder ser estendida pelo uso das teclas Shift e Ctrl Define se os itens podero aparecer parcialmente ou somente por completo Lista de strings com os itens da lista ndice do item selecionado, comeando em 0 De acordo com o ndice indica se um item em particular esta selecionado Indica quantos itens esto selecionado Define se os itens aparecero ordenados

Caderno Didtico Lazarus IDE

Pgina 37

38

Universidade Federal de Santa Maria

TComboBox Caixa combinada com lista suspensa.


Propriedade Items DropDownCount Style Descrio Lista de strings com os itens da lista Nmero de itens visveis da lista suspensa Estilo do ComboBox, os principais estilos so csDropDown, csDropDownList, csSimple

TImage Componente usado para exibir figuras.


Propriedade Center Picture Stretch Descrio Determina de a figura ser centralizada no componente Figura a exibida, pode ser BMP, ICO, WMF ou EMF Define se o tamanho da figura deve ser ajustada ao do componente

TPicture Classe usada para guardar cones, bitmaps, fotos e figuras definidas pelo usurio.
Mtodo LoadFromFile SaveToFile Descrio Carrega figura de um arquivo Salva figura para um arquivo

TPageControl Usado para criar controles com mltiplas pginas, que podem ser manipuladas, em tempo de projeto, atravs do menu de contexto. Cada pgina criada um objeto do tipo TTabSheet.
Propriedade ActivePage Evento OnChange OnChanging Mtodo FindNextPage SelectNextPage Descrio Pgina ativa Descrio Aps uma mudana de pgina Permite a validao de uma mudana de pgina Descrio Retorna a prxima pgina Seleciona a prxima pgina

TTabSheet Pgina de um PageControl.


Propriedade PageIndex TabVisible Descrio Ordem da pgina Define se a aba da pgina visvel

TShape Grfico de uma Forma geomtrica.


Propriedade Brush Pen Shape Descrio Preenchimento da figura, objeto do tipo Tbrush Tipo da linha, objeto do tipo Tpen Forma geomtrica

Caderno Didtico Lazarus IDE

Pgina 38

39

Universidade Federal de Santa Maria

TTimer Permite a execuo de um evento a cada intervalo de tempo.


Propriedade Interval Evento OnTimer Descrio Tempo em milissegundos quando o componente ir disparar o evento OnTimer Descrio Chamado a cada ciclo de tempo determinado em Interval

TStatusBar Utilizado para criar barras de status para exibir informaes.


Propriedade SimplePanel SimpleText SizeGrip Panels Descrio Indica se haver apenas um panel Texto exibido caso SimplePanel seja True Define se a ala de redimensionamento padro deve ser mostrada Propriedade do tipo TStatusPanels, com os painis do StatusBar

TStatusPanels Lista de panels de um StatusBar.


Propriedade Count Items Mtodo Add Descrio Nmero de panels Lista de panels, cada panel um objeto do tipo TStatusPanel Descrio Adiciona um novo panel lista

TStatusPanel Panel de um StatusBar.


Propriedade Text Width Bevel Alignment Descrio Texto do panel Largura em pixels Moldura do panel Alinhamento do texto de um panel

TProgressBar Barra de progresso.


Propriedade Max Min Position Step Descrio Valor mximo do progresso (ponto de chegada) Valor mnimo (ponto de partida) Posio atual (progresso atual) Avano padro

Caderno Didtico Lazarus IDE

Pgina 39

40

Universidade Federal de Santa Maria

Caixas de Dilogo
Grupo de caixas de dilogo comuns da maioria dos aplicativos.
Mtodo Execute Descrio Mostra a caixa de dilogo e retorna True caso o usurio clique em Ok

TOpenDialog / TSaveDialog Caixas de dilogo para abrir e salvar arquivos.


Propriedade FileName DefaultExt Filter FilterIndex InitialDir Title Options Descrio Nome do arquivo Extenso padro para os arquivos Filtro, com os tipos de arquivos que sero abertos ou salvos ndice do filtro default Pasta inicial Ttulo da janela Define caractersticas gerais do dilogo

TFontDialog Caixa de dilogo de escolha de fonte.


Propriedade MinFontSize MaxFontSize Options Evento OnApplyClicked Descrio Tamanho mnimo da fonte Tamanho mximo da fonte Define caractersticas das fontes Descrio Ocorre aps o usurio pressionar o boto Aplicar, antes de a janela fechar

Menus
No Lazarus os menus sero desenhados no Menu Editor, que pode ser acessado com um duplo clique sobre o componente de menu. TMainMenu Menu principal de um Form.
Propriedade Items Descrio Itens de menu, essa propriedade guarda todas as alteraes feitas no Menu Designer

TPopUpMenu Menu de contexto de um componente. Cada componente tem uma propriedade PopUpMenu, que indica seu menu de contexto. TMenuItem Item de menu.
Propriedade Checked GroupIndex RadioGroup ShortCut Descrio Indica se o item est marcado ou no ndice do grupo do item, semelhante ao SpeedButton Indica se o item pode ser mutuamente exclusivo com outros itens do mesmo grupo Tecla de atalho do item

Caderno Didtico Lazarus IDE

Pgina 40

41

Universidade Federal de Santa Maria

Classes No Visuais
TApplication Todo programa tem um objeto global nomeado Application, do tipo TApplication, esse objeto representa a aplicao para o sistema operacional.
Propriedade ExeName MainForm Hint Title HelpFile Evento OnHint OnException OnHelp Mtodo MessageBox Run Terminate Descrio Caminho e nome do arquivo executvel Form principal da aplicao Hint recebido pela aplicao Ttulo da aplicao Caminho e nome do arquivo help Descrio Quando um hint recebido pela aplicao Quando ocorre uma exceo Quando acontece uma solicitao de help Descrio Apresenta um quadro de mensagem Executa a aplicao Finaliza a aplicao normalmente

Quadros de Mensagem O mtodo Application.MessageBox mostra quadros de mensagem com chamadas a funes da API do sistema operacional. Os flags de mensagem mais usados e os valores de retorno desse mtodo so mostrados abaixo (deve-se utilizar na clusula USES a biblioteca LCLType).
Application.MessageBox('Texto','Ttulo',Flags):integer;
Flag MB_OK MB_OKCANCEL MB_ABORTRETRYIGNORE MB_YESNOCANCEL MB_YESNO MB_RETRYCANCEL MB_ICONERROR MB_ICONQUESTION MB_ICONEXCLAMATION MB_ICONINFORMATION Valor de Retorno IDOK IDCANCEL IDABORT IDRETRY IDYES IDIGNORE IDNO Valor 0 1 2 3 4 5 16 32 48 64 1 2 3 4 6 5 7 Item Mostrado Boto de Ok Botes de Ok e Cancelar Botes de Anular, Repetir e Ignorar Botes de Sim, No e Cancelar Botes de Sim e No Botes de Repetir e Cancelar cone de erro cone de pergunta cone com ponto de exclamao cone com letra i, usada para mostrar informaes Boto Escolhido Ok Cancelar Anular Repetir Sim Ignorar No

Esses quadros so usados quando se deseja uma resposta simples do usurio, principalmente numa confirmao ou pergunta para o usurio, observe o cdigo abaixo:
if Application.MessageBox('Deseja MB_YESNO) = IDNO then Close; Salvar?', 'Confirme', MB_ICONQUESTION +

Caderno Didtico Lazarus IDE

Pgina 41

42

Universidade Federal de Santa Maria

Observe que este outro cdigo tambm teria o mesmo resultado:


if Application.MessageBox('Deseja Salvar?', 'Confirme', 36) = 7 then Close

Alm do mtodo MessageBox da classe Application, existem ainda outras funes utilitrias para construo rpida de janelas de aviso. Abaixo esto descritos alguns e suas caractersticas: MessageDlg A funo MessageDlg implementa basicamente a mesma funcionalidade do Mtodo MessageBox, porm permite que sejam colocados mais que trs botes. Compe-se de 4 parmetros: a mensagem que ser mostrada, o tipo de bitmap usado para ilustrar o dilogo, os botes que sero utilizados e o ndice de help que a janela dever chamar caso seja solicitada, em caso de no uso, deve-se colocar zero.
MessageDlg(Mensagem,Tipo,Botoes,Indice_Help):integer;

Tipo mtWarning mtError mtInformation mtConfirmation MtCustom Botes mbYes mbNo mbCancel mbHelp mbAbort mbRetry mbIgnore mbAll Retorno mrNone mrYes mrNo mrCancel mrHelp mrAbort mrRetry mrIgnore mrAll

Descrio Ponto de exclamao amarelo Um sinal de pare vermelho Um i azul Um ponto de interrogao azul Sem bitmap Descrio Sim No Cancelar Ajuda Anular Repetir Ignorar Todos Descrio Nenhum Sim No Cancelar Ajuda Anular Repetir Ignorar Todos

Caderno Didtico Lazarus IDE

Pgina 42

43

Universidade Federal de Santa Maria

Observe o cdigo abaixo e o resultado visual:


if MessageDlg('O arquivo j est em uso. Finalizar?', mtError, [mbYes,mbCancel,mbRetry,mbIgnore],0) = mrYes then Table1.Close;

MessageDlgPos semelhante funo MessageDlg, porm permite escolher a posio onde ser mostrado o quadro de mensagem
MessageDlg(Mensagem,Tipo,Botoes,Indice_Help,X,Y):integer;

A diferena que ela implementa dois parmetros: X e Y que representam as coordenadas do canto superior esquerdo do quadro da mensagem (em pixels, referentes tela).
if MessageDlgPos('O arquivo j est em uso. Finalizar?', mtError, [mbYes,mbNo],0,120,150) = mrYes then Table1.Close;

ShowMessage A funo ShowMessage simplesmente mostra um quadro de mensagem contendo apenas a mensagem passada como parmetro e o boto de Ok.
ShowMessage(Mensagem); ShowMessage('Agora so ' + TimeToStr(time));

Caderno Didtico Lazarus IDE

Pgina 43

44

Universidade Federal de Santa Maria

InputBox A funo InputBox permite ao usurio informar valores, uma funo de entrada de dados. Compe-se de trs parmetros: ttulo, pergunta e valor default. Observe:
InputBox(Ttulo,Pergunta,ValorPadro):string InputBox('Senha','Digite a Senha de Acesso','');

TScreen O Lazarus automaticamente cria a varivel Screen do tipo TScreen, essa varivel guarda caractersticas do vdeo, como mostrado abaixo.
Propriedade ActiveForm FormCount Cursor Forms Fonts PixelsPerInch Height Width Descrio Form com o foco Nmero de Forms no vdeo Cursor do mouse Lista dos Forms disponveis Lista de Fontes de tela disponveis Nmero de pixels por polegada da Fonte usada pelo sistema Altura da tela em pixels Largura da tela em pixels

TList Estrutura de dados polimrfica que pode gerenciar uma lista de objetos de qualquer classe e possui mtodos semelhantes aos de TStrings. TStringList Lista de strings descendente de TStrings usada para manter listas de strings independentes de qualquer componente. TCanvas Um objeto da classe TCanvas uma superfcie de desenho, onde podem ser usados vrios mtodos de plotagem grfica. Todos os controles visveis possuem uma propriedade Canvas, do tipo TCanvas, que geralmente usada nos Forms e no objeto Printer.
Propriedade Brush Pen Font Mtodo TextOut Ellipse Polygon Rectangle Descrio Padro de preenchimento, propriedade do tipo Tbrush Estilo de linha, propriedade do tipo Tpen Fonte usada nas plotagens de texto Descrio Desenha texto na superfcie Desenha uma elipse Desenha um polgono Desenha um retngulo

Caderno Didtico Lazarus IDE

Pgina 44

45

Universidade Federal de Santa Maria

Excees
O tratamento de excees um mecanismo capaz de dar robustez a uma aplicao, permitindo que os erros sejam manipulados de uma maneira consistente e fazendo com que a aplicao possa se recuperar de erros, se possvel, ou finalizar a execuo quando necessrio, sem perda de dados ou recursos. Para que uma aplicao seja segura, seu cdigo necessita reconhecer uma exceo quando esta ocorrer e responder adequadamente a essa exceo. Se no houver tratamento para uma exceo, ser exibida uma mensagem padro descrevendo o erro e todos os processamentos pendentes no sero executados. Uma exceo deve ser respondida sempre que houver perigo de perda de dados ou de recursos do sistema. Basicamente o conceito de excees de classes definidas pelo Object Pascal para o tratamento de erros. Quando uma exceo criada, todos os procedimentos pendentes so cancelados e, geralmente mostrada uma mensagem de erro para o usurio. As mensagens padro nem sempre so claras, por isso indicado criar seus prprios blocos protegidos.

Blocos Protegidos
Um bloco protegido um grupo de comandos com uma seo de tratamento de excees.
try A := StrToFloat(EdtA.Text); B := StrToFloat(EdtB.Text); ShowMessage(Format('%f / %f = %f', [A, B, A + B])); except ShowMessage('Nmeros invlidos.'); end;

Algumas vezes pode-se precisar especificar quais excees quer tratar, como mostrado abaixo.
try Soma := StrToFloat(EdtSoma.Text); NumAlunos := StrToInt(EdtNum.Text); ShowMessage(Format('Mdia igual a %f.', [Soma / NumAlunos])); except on EConvertError do ShowMessage('Valor invlido para soma ou nmero de alunos.'); on EZeroDivide do ShowMessage('O nmero de alunos tem que ser maior que zero.'); else ShowMessage('Erro na operao, verifique os valores digitados.'); end;

Caderno Didtico Lazarus IDE

Pgina 45

46

Universidade Federal de Santa Maria

Principais Excees
O Lazarus define muitas excees, para cada erro existe uma exceo correspondente.
Classe Exception EAbort EAccessViolation EConvertError EDivByZero EInOutError EIntOverFlow EInvalidCast EInvalidOp EOutOfMemory EOverflow ERangeError EUnderflow EVariantError EZeroDivide Descrio Exceo genrica, usada apenas como ancestral de todas as outras excees Exceo silenciosa, pode ser gerada pelo procedimento Abort e no mostra nenhuma mensagem Acesso invlido memria, geralmente ocorre com objetos no inicializados Erro de converso de tipos Diviso de inteiro por zero Erro de Entrada ou Sada reportado pelo sistema operacional Resultado de um clculo inteiro excedeu o limite TypeCast invlido com o operador as Operao invlida com nmero de ponto flutuante Memria insuficiente Resultado de um clculo com nmero real excedeu o limite Valor excede o limite do tipo inteiro ao qual foi atribuda Resultado de um clculo com nmero real menor que a faixa vlida Erro em operao com variant Diviso de real por zero

Blocos de Finalizao
Blocos de finalizao so executados sempre, haja ou no uma exceo. Geralmente os blocos de finalizao so usados para liberar recursos.
FrmSobre := TFrmSobre.Create(Application); try FrmSobre.Img.LoadFromFile('Lazarus.png'); FrmSobre.ShowModal; finally FrmSobre.Release; end;

Pode-se usar blocos de proteo e finalizao aninhados


FrmOptions := TFrmOptions.Create(Application); try FrmOptions.ShowModal; try Soma := StrToFloat(EdtSoma.Text); NumAlunos := StrToInt(EdtNum.Text); ShowMessage(Format('Mdia igual a %f.', [Soma / NumAlunos])); except on EConvertError do ShowMessage('Valor invlido para soma ou nmero de alunos.'); on EZeroDivide do ShowMessage('O nmero de alunos tem que ser maior que zero.'); else ShowMessage('Erro na operao, verifique os valores digitados.'); end; finally FrmOptions.Release; end; Caderno Didtico Lazarus IDE Pgina 46

47

Universidade Federal de Santa Maria

Gerao de Excees
Uma exceo pode ser provocada usando a clusula raise.
raise Exception.Create('Erro ao alterar registro.');

Tambm possvel criar tipos prprios de excees.


type EInvalidUser = class (Exception); raise EInvalidUser.Create('Voc no tem acesso a essa operao.');

Para que uma exceo continue ativa, mesmo depois de tratada, deve-se utilizar a clusula raise dentro do bloco de tratamento da exceo. Geralmente isso feito com excees aninhadas.
try SQLQuery1.Edit; SQLQuery1.FieldByName('contador').asInteger := StrToInt(Edit1.Text); SQLQuery1.Post; except ShowMessage('Erro ao alterar contador.'); raise; end;

Caderno Didtico Lazarus IDE

Pgina 47

48

Universidade Federal de Santa Maria

CAPTULO V Banco de Dados Consideraes Iniciais


Uma caracterstica importante do Lazarus o seu suporte prtico a uma diversidade de bancos de dados. O ambiente define um componente com comportamento padro que especializado por cada fornecedor de banco de dados para oferecer conexo e acesso nativo aos dados (sem a necessidade de softwares intermedirios). Alm do suporte que oferecido com a instalao padro do Lazarus, existem ainda alguns pacotes de componentes para acesso a banco de dados, ZeosLib um exemplo. O Lazarus permite que os dados sejam acessados por cdigo ou atravs de componentes visuais, os chamados componentes data-aware. Os componentes data-aware esto ligados a fontes de dados por meio de propriedades e representam os campos de tabelas ou consultas. Para acessar uma base de dados atravs do Lazarus necessrio antes estabelecer alguns conceitos importantes. A figura abaixo demonstra a infra-estrutura de acesso aos dados no Lazarus.

Compontes de Acesso a Dados

Compontes de Controle de Dados

SQLConnection
SQLTransaction

DataSource

Banco de Dados e API Nativa do Fornecedor

SQLQuery

Configurando a conexo e o acesso aos dados


Para desenvolver uma aplicao em Lazarus conectada a um banco de dados necessrio no mnimo a utilizao de trs tipos de componentes: Componentes de Acesso aos Dados (conexo, transao, consulta), localizados na aba SQLdb; Componentes de Controle de Dados (caixas de texto, barras de navegao, grades), localizados na aba Data Controls; Componentes que fazem a ligao entre aqueles que acessam e os que controlam, onde o exemplo mais prtico o DataSource (pertencente a aba Data Access);

SQLdb Componentes de Acesso aos Dados

TSQLConnection (PQConnection, OracleConnection, MySQL50Connection, IBConnection, ODBCConnection, SQLite3Connection, etc.) Componentes derivados da classe TSQLConnection representam a conexo com o banco de dados. O componente SQLConnection no existe como um componente que pode ser utilizados, deve-se portanto utilizar um componente que oferea as capacidades especficas de conexo com o banco de
Caderno Didtico Lazarus IDE Pgina 48

49

Universidade Federal de Santa Maria

dados que se est utilizando. Em uma aplicao comercial, a eventual troca do fornecedor de banco de dados pode ser facilmente atendida atravs da alterao deste componente. Alguns exemplos de componentes que representam a conexo com um banco de dados so: PQConnection, OracleConnection, MySQL50Connection, IBConnection, ODBCConnection, SQLite3Connection, etc.
Propriedades Connected DatabaseName KeepConnection LoginPrompt UserName Password HostName Port CharSet Transaction Params Mtodos Close CloseDataSets Open Eventos OnLogin Descrio Define se a conexo com o banco de dados est ativa Nome do banco de dados (nome que identifica o banco de dados que se deseja conectar) Define se a conexo com o banco de dados ser mantida, mesmo sem DataSets abertos Define se ser mostrado o quadro de login solicitando a identificao do usurio (login e senha) Identificao do usurio para servidor de banco de dados Senha do usurio Nome ou endereo IP do servidor de banco de dados Nmero da porta de conexo com o servidor de banco de dados Codificao de caracteres utilizada pelo banco de dados Componente do tipo SQLTransaction que identifica uma transao no banco de dados Parmetros adicionais que determinados bancos de dados podem exigir Descrio Encerra a conexo com o banco de dados, todos os DataSets sero fechados Fecha todos os DataSets abertos, mas a conexo no encerrada Abre a conexo com o banco de dados Descrio Evento disparado durante o processo de login do banco de dados.

TSQLTransaction SQLTransaction o componente que controla as transaes no banco de dados. Em um banco de dados as operaes ocorrem no contexto de uma transao. Uma transao finalizada com sucesso atravs de um COMMIT. Um comando de ROLLBACK desfaz as operaes realizadas anteriormente.
Propriedades Active Action DataBase Mtodos StartTransaction Commit CommitRetaining Rollback RollbackRetaining Descrio Indica o estado da transao (ativa ou inativa) Define o tipo de transao padro Indica qual conexo essa transao est vinculada Descrio Inicia a transao (os comandos somente sero persistidos aps um commit ou ento todos sero cancelados atravs de um rollback) Encerra a transao persistindo todas as alteraes Persiste todas as alteraes sem encerrar a transao Desfaz as alteraes e encerra a transao Desfaz as alteraes mas no encerra a transao

TDataModule Um DataModule como se fosse um Form invisvel, onde sero inseridos os componentes de acesso a dados, como o SQLConnection, SQLTransaction, SQLQuery e DataSource. Uma vez que os DataModules so classes eles permitem a fcil implementao de modelos de objetos, permitindo herana, criao de mtodos, dentre outros aspectos. Para inserir um DataModule em um projeto, escolha New... no menu File e escolha a opo Data Module (dentro da opo Module). Os Data Modules no gastam recursos do sistema, servem apenas para agrupar os componentes de acesso a dados e potencializar a organizao do programador.

Caderno Didtico Lazarus IDE

Pgina 49

50

Universidade Federal de Santa Maria

Exemplo de DataModule

TSQLQuery O componente SQLQuery a principal via de acesso para interao com o banco de dados. atravs dele que utilizamos instrues em linguagem SQL para representar acessos a tabelas e/ou consultas personalizadas no banco de dados. um componente ancestral de uma classe denominada de TDataSet, que contm um conjunto de propriedades e mtodos para representar o estado e as operaes sobre um conjunto de dados.
Propriedades Active AutoCalcFields BOF Database DataSource DeleteSQL Descrio Define se a consulta est aberta ou fechada Indica se os campos calculados devem sofrer atualizao automtica Informa se o cursor est no incio do conjunto de dados Componente TSQLConnection que fornece a conexo para a consulta Define o DataSource para se obter os valores das variveis na consulta. Instruo SQL alternativa para execuo de excluses (delete). Exemplo de utilizao: delete from clientes where codigo = :old_codigo and nome is not null; O prefixo :old_ utilizado para referenciar o valor que est sendo excludo. Informa se o cursor est no final do conjunto de dados Nmero de campos da consulta Lista com a definio dos campos da consulta Lista de objetos do tipo TField, que representam os campos da consulta String com uma condio de filtragem Define se a consulta est filtrada Lista com a definio dos ndices Nome dos campos de ndice, usados para ordenar os registros da consulta Nome do ndice atual, vazia quando o ndice for a chave primria Instruo SQL alternativa para execuo de incluses (insert). Exemplo de utilizao: insert into clientes (codigo, nome) values (:codigo, :nome); Os nomes dos campos na clusula values devem ser exatamente iguais aos nomes dos campos na tabela destino. Campos usados no relacionamento com a tabela mestre Define se o registro atual foi modificado Define se a consulta somente leitura Nmero do registro atual Nmero de registros Instruo SQL normalmente utilizada para acessar o contedo de uma tabela (select * from tabela) ou para fazer consultas personalizadas. Estado do conjunto de dados (edio, insero, inativo, etc). Componente que controla as transaes realizadas por essa consulta Instruo SQL alternativa para execuo de atualizaes (update). Exemplo de utilizao: update clientes set nome = :nome where codigo = :old_codigo and nome is not null; O prefixo :old_ utilizado para referenciar o valor anterior (antes da atualizao).

EOF FieldCount FieldDefs Fields Filter Filtered IndexDefs IndexFieldNames IndexName InsertSQL

MasterFields Modified ReadOnly RecNo RecordCount SQL State Transaction UpdateSQL

Caderno Didtico Lazarus IDE

Pgina 50

51

Universidade Federal de Santa Maria

Mtodo Append AppendRecord ApplyUpdates Cancel Close Delete DisableControls Edit EnableControls ExecSQL FieldByName First Insert InsertRecord IsEmpty Last Locate Lookup MoveBy Next Open Post Prepare Prior Refresh Evento AfterCancel AfterClose AfterDelete AfterEdit AfterInsert AfterOpen AfterPost AfterScroll BeforeCancel BeforeClose BeforeDelete BeforeEdit BeforeInsert BeforeOpen BeforePost BeforeScroll OnCalcFields OnDeleteError OnEditError OnFilterRecord OnNewRecord OnPostError

Descrio Entra em modo de insero e, ao gravar, o registro ser colocado no fim do conjunto Insere um registro no final do arquivo atravs de cdigo O mtodo ApplyUpdates faz com que as alteraes feitas na cache do conjunto de dados (alteraes apenas em memria) sejam enviadas para o banco de dados. Cancela as alteraes feitas no registro atual Fecha a tabela Exclui o registro corrente Desabilita a atualizao dos controles visuais Permite a alterao dos campos do registro atual Habilita os controles visuais Executa uma instruo, exceto SELECT Acessa um campo, do tipo TField, pelo nome Move para o primeiro registro Entra em modo de insero de um novo registro na posio atual Adiciona um novo registro, j com os dados, na posio atual Define se a tabela est vazia Move para o ltimo registro Procura um registro, usando ou no ndices, de acordo com a disponibilidade Procura um registro e retorna valores dos campos deste Move um nmero especfico de registros Move para o prximo registro Abre a tabela Grava as alteraes no registro atual Prepara uma instruo SQL para ser aberta ou executada Move para o primeiro registro Atualiza a tabela com os dados j gravados Descrio Aps do mtodo Cancel Aps o fechamento da consulta Aps do mtodo Delete Aps do mtodo Edit Aps do mtodo Insert Aps do mtodo Open Aps do mtodo Post Aps mudar de registro Antes do mtodo Cancel Antes do fechamento da consulta Antes do mtodo Delete Antes do mtodo Edit Antes do mtodo Insert Antes do mtodo Open Antes do mtodo Post Antes de mudar o registro Evento usado para calcular os valores dos campos calculados Quando ocorre um erro ao chamar o mtodo Delete Quando ocorre um erro ao chamar o mtodo Edit Evento usado com filtragem varivel Quando a consulta entra em modo de insero (obs.: no deixa Modified igual a True) Quando ocorre um erro ao chamar o mtodo Post

Caderno Didtico Lazarus IDE

Pgina 51

52

Universidade Federal de Santa Maria

Construindo uma consulta em tempo de projeto Para construir uma consulta SQL em tempo de projeto, utiliza-se a propriedade SQL do componente TSQLQuery. Ao clicar no boto de reticncias, o Lazarus abre a janela do Editing SQL, e nele a consulta digitada normalmente, utilizando os comandos SQL padro do banco de dados a ser utilizado:

Caso a conexo (SQLConnection) ao qual a SQLQuery est conectada estiver ativa possvel testar a consulta e exibir o resultado na aba Results Passagem de Parmetros Geralmente em uma instruo SQL genrica necessrio especificar alguns parmetros, por exemplo: selecionar todos os clientes de uma determinada cidade. Para isto, o nome do parmetro deve ser includo na expresso, precedido pelo smbolo de : (dois pontos).

No primeiro caso o SQL escrito em tempo de execuo passando o valor 1 para o critrio a.id_cidade = como condio filtrante da consulta. J no segundo caso, a maneira como o parmetro :ID_CIDADE foi escrito, permite alter-lo em tempo de execuo:
SQLQuery1.Close; SQLQuery1.Params[0].AsInteger := StrToInt(Edit1.Text); // ou Params.ParamByName('ID_CIDADE').asInteger := StrToInt(Edit1.Text); SQLQuery1.Open;

Caderno Didtico Lazarus IDE

Pgina 52

53

Universidade Federal de Santa Maria

Construindo uma consulta em tempo de execuo Para construir uma consulta SQL em tempo de execuo a propriedade SQL do componente SQLQuery deve ser manipulado. O mtod ADD parmite adicionar os comandos, um a um:
SQLQuery1.Close; SQLQuery1.SQL.Clear; SQLQuery1.SQL.ADD('select a.id_cliente, a.nome, a.endereco, b.nome as cidade'); SQLQuery1.SQL.ADD('from CLIENTE a, CIDADE b'); SQLQuery1.SQL.ADD('where a.id_cidade = b.id_cidade and a.id_cidade = 1'); SQLQuery1.Open;

Esta consulta faz a mesma coisa que aquela criada em tempo de projeto, porm permite alterar ou criar novas consultas em tempo de execuo, via cdigo. Da mesma forma, para alterar valores de parmetros em tempo de execuo utiliza-se a propriedade Params do componente SQLQuery.
SQLQuery1.Close; SQLQuery1.SQL.Clear; SQLQuery1.SQL.ADD('select * from cidade where id_cidade = :ID_CIDADE'); SQLQuery1. Params.ParamByName('ID_CIDADE').asInteger := StrToInt(Edit1.Text); SQLQuery1.Open;

Executando um Comando SQL Para executar um comando SQL (insert, update, create table ...), necessrio utilizar o mtodo execSQL, diferente do comando select, onde apenas utiliza-se o mtodo open, do componente SQLQuery.
SQLQuery1.SQL.Clear; SQLQuery1.SQL.Add(create table senhas_telefone (sn_rgfunc char(6) not null,); SQLQuery1.SQL.Add(sn_nome varchar(40) not null, sn_ramal char(3),); SQLQuery1.SQL.Add(sn_senha char(5) not null);); SQLQuery1.execSQL;

Neste exemplo uma tabela criada pelo comando CREATE TABLE e no exemplo seguinte so inseridos alguns registros na tabela recm criada, utilizando-se de dados de campos de formulrio (Edits)
SQLQuery1.Close; SQLQuery1.SQL.Clear; SQLQuery1.SQL.Add('insert into senhas_telefone values ( ''' + Edit1.Text + ''', ''' + Edit2.Text + ''', ''' + Edit3.Text + ''', ''' + Edit4.Text + ''')' ); SQLQuery1.execSQL;

Filtros A propriedade Filter, permite filtrar os registros em cache de uma consulta usando uma expresso lgica (abaixo alguns exemplos). Para tornar um filtro ativo, a propriedade Filtered deve ser igual a True.
Data = '20/04/1998' (Data = '20/04/1998') AND (Vendedor = 'Guilherme Augusto da Fonseca') (Nome > 'A') AND (Nome < 'B')

Caderno Didtico Lazarus IDE

Pgina 53

54

Universidade Federal de Santa Maria

Ao filtrar uma consulta, a propriedade RecordCount do componente SQLQuery mostra o nmero total de registros da consulta, ignorando se a consulta est com o filtro ativado ou no. Alterando Registros Para alterar registros atravs de cdigo, a consulta deve ser colocada em modo de edio e s ento o valor dos campos desejados devem ser alterados e posteriormente gravados (lembrando que as alteraes so feitas nos dados em cache e precisam ser efetivadas no banco de dados atravs do mtodo ApplyUpdates e do encerramento da transao).
SQLQuery1.Edit; SQLQuery2.FieldByName('ID').asInteger := 1; SQLQuery2.FieldByName('DESCRICAO').asString := 'Teste'; SQLQuery2.Post;

Inserindo Registros Para inserir registros em cdigo utiliza-se o mtodo Insert e posteriormente a atribuio de valores aos campos utilizando o mtodo FieldByName. Da mesma forma que a alterao a operao de insero apenas coloca o DataSet da consulta em modo de incluso e realiza alteraes na cache do SQLQuery. Para efetivar as incluses na base de dados o mtodo ApplyUpdates precisa ser executado assim como a transao precisa ser finalizada.
SQLQuery1.Insert; SQLQuery2.FieldByName('ID').asInteger := 10; SQLQuery2.Post;

Localizando Registros O mtodo Locate o mais indicado para fazer pesquisas na cache de dados da consulta, no exemplo abaixo feita uma pesquisa exata.
if not SQLQuery3.Locate('ID_CIDADE', Edit1.Text, []) then ShowMessage('Cidade no encontrada.');

Tambm podem ser feitas pesquisas parciais e/ou sem sensitividade de caso usando o terceiro parmetro, que um conjunto de opes.
SQLQuery3.Locate('NOME', Edit1.Text, [loPartialKey, loCaseInsensitive]);

As pesquisas em mais de um campo tambm so permitidas, neste caso, os nomes dos campos devem ser separados por ponto e vrgula e a funo VarArrayOf (unit variants) deve ser usada para criar um array com os valores que se deseja procurar.
if not SQLQuery3.Locate('Vendedor;Data', VarArrayOf([EdtVendedor.Text, EdtData.Text]), [loCaseInsensitive]) then ShowMessage('O vendedor no realizou nenhuma venda nessa data');

Indexao A indexao usada para ordenar os registros da tabela, para isso deve-se escolher os campos pelos quais se deseja ordenar na propriedade IndexFieldNames, inclusive em cdigo, como mostrado abaixo, todos os campos devem ser indexados e separados por ponto e vrgula.
SQLQuery3.IndexFieldNames := 'ID_CIDADE'; SQLQuery3.IndexFieldNames := 'ID_CIDADE;NOME';

Caderno Didtico Lazarus IDE

Pgina 54

55

Universidade Federal de Santa Maria

Verificando Alteraes Existem situaes onde necessrio verificar se houveram alteraes na cache de uma consulta, por exemplo, no evento OnClose de um Form de manuteno, pode-se usar a propriedade Modified, como mostrado no exemplo abaixo.
if SQLQuery1.Modified then if Application.MessageBox('Gravar alteraes?', 'Dados Alterados', MB_ICONQUESTION + MB_YESNO) = IDYES then begin SQLQuery1.ApplyUpdates; SQLTransaction1.CommitRetaining; end else SQLQuery1.Cancel;

Percorrendo uma Consulta O cdigo semelhante a este mostrada abaixo pode ser utilizado para percorrer uma consulta do incio ao fim.
SQLQuery1.DisableControls; Total := 0; SQLQuery1.First; while not SQLQuery1.EOF do begin Total := Total + SQLQuery1.FieldByName('IGC_CONTINUO').asFloat; SQLQuery1.Next; end; SQLQuery1.EnableControls;

Mestre/Detalhe Nos relacionamentos de 1 para N, uma tabela pode estar ligada a outra em uma relao Mestre/Detalhe, nesse tipo de relao os registros da tabela de ordem N so filtrados pelo campo de relacionamento com a tabela de ordem 1. Por exemplo, se o relacionamento de Clientes com Cidades for mestre/detalhe, s sero acessados em Clientes, os registros cujo campo Id_Cidade seja igual ao Id_Cidade da tabela de Cidades. Para fazer esse tipo de relacionamento utilizamos a propriedade DataSource do componente SQLQuery que representa os dados da tabela detalhe (o valor da propriedade DataSource ser o componente DataSource que representa a tabela Mestre). Na consulta da tabela detalhe os campos dependentes da tabela mestre devem ser especificados na clusula where com parmetros cujos nomes devem ser exatamente os mesmos contidos na clusula SLQ da SQLQuery da tabela mestre (precedidos do sinal de :). Abaixo uma relao mestre/detalhe que mostra todos os clientes de uma cidade. Na aplicao existem dois componentes SQLQuery, conforme consultas exibidas abaixo:

Caderno Didtico Lazarus IDE

Pgina 55

56

Universidade Federal de Santa Maria

Marcando Dados Os mtodos para marcar so: GetBookmark - Pega a posio do registro e coloca em uma varivel do tipo TBookmark; GotoBookmark - Leva o apontador para uma varivel do tipo TBookmark; FreeBookmark - Desaloca uma varivel do tipo TBookmark;
procedure DoSomething; var Marca: TBookmark; begin Marca := SQLQuery1.GetBookmark; {Marca a posio} SQLQuery1.DisableControls; {Desabilita o controle de dados} try Table1.First; while not Table1.EOF do begin {Faz alguma coisa} Table1.Next; end; finally SQLQuery1.GotoBookmark(Marca); SQLQuery1.EnableControls; SQLQuery1.FreeBookmark(Marca); {Desaloca a varivel} end; end;

Fields Editor Para criar objetos para os campos de uma consulta clica-se duas vezes no componente TSQLQuery. Na janela seguinte (Edit Fields) clica-se com o boto direito do mouse e escolhe-se Add Fields, na janela Add Fields, escolhe-se os campos que se deseja utilizar e confirma-se no boto Ok. No Fields Editor pode-se remover os campos criados, alterar sua ordem de apresentao e usar suas propriedades e eventos no Object Inspector. Para cada campo criado um objeto de um tipo descendente de TField, como TStringField, TIntegerField, TFloatField. As principais propriedades dos objetos TField esto listadas na tabela abaixo. Se nenhum objeto TField for criado para uma determinada consulta, todos os campos da consulta estaro disponveis, mas caso algum seja criado, somente os campos que estiverem criados estaro disponveis.
Caderno Didtico Lazarus IDE Pgina 56

57

Universidade Federal de Santa Maria

TField A classe TField usada como ancestral para todos as classes dos campos. Geralmente so utilizados objetos de classes descendentes de TField, mas em todos eles pode-se encontrar os itens mostrados abaixo.
Propriedades Alignment AsBoolean AsCurrency AsDateTime AsFloat AsInteger AsString AsVariant Calculated CanModify ConstraintErrorMessage CustomConstraint DataSet DataSize DataType DefaultExpression DisplayLabel DisplayText DisplayWidth FieldKind FieldName FieldNo Index IsIndexField IsNull KeyFields Lookup LookupCache LookupDataSet LookupKeyFields LookupResultField ReadOnly Required Size Text Value Visible Eventos OnChange OnSetText OnGetText OnValidate Mtodo Assign FocusControl Clear Descrio Alinhamento do texto do campo nos controles visuais Valor do campo convertido para Boolean Valor do campo convertido para Currency Valor do campo convertido para DataTime Valor do campo convertido para Double Valor do campo convertido para Integer Valor do campo convertido para string Valor do campo convertido para Variant Indica se o campo calculado em tempo de execuo Indica se um campo pode ser modificado Mensagem de erro se a condio de CustomConstraint no for satisfeita Condio de validao do campo DataSet onde est o campo Tamanho do campo, em Bytes Propriedade do tipo TFieldType, que indica o tipo do campo Expresso com valor Default do campo para novos registros Ttulo a ser exibido para o campo Texto exibido nos controles visuais associados ao campo Nmero de caracteres que deve ser usado para mostrar o campo no controles visuais Propriedade do tipo TFieldKind que indica o tipo do campo, como Calculado ou Lookup Nome do campo na tabela Posio fsica do campo na tabela Posio do campo nos controles visuais Indica se um campo vlido para ser usado como ndice Indica se o campo est vazio Campo chave da tabela no relacionamento com LookupDataSet, usado em campos Lookup Indica se um campo Lookup Define se ser usado cache para campos Lookup DataSet onde est definido o valor do campo Lookup Campo chave do relacionamento em LookupDataSet Valor do campo, que ser mostrado nos controles visuais Define se um campo somente para leitura Define se o campo obrigatrio Tamanho fsico do campo Texto de edio do campo Acesso direto ao valor do campo Define se um campo visvel Descrio Chamado quando o valor do campo mudado Chamado pelos controles visuais para atribuir o texto digitado pelo usurio ao campo Chamado para formatar o texto de exibio do campo Validao do valor atribudo ao campo, caso o valor no seja vlido, gere uma exceo Descrio Atribui um valor de um campo a outro, inclusive nulo Seta o foco para o controle visual ligado ao campo nos Forms Limpa o contedo do campo

Caderno Didtico Lazarus IDE

Pgina 57

58

Universidade Federal de Santa Maria

Abaixo esto listadas as classes que so manipuladas no tratamento dos campos de uma consulta, so classes descendentes de TField.
TStringField TSmallintField TFloatField TCurrencyField TBooleanField TDateField TBlobField TIntegerField TWordField TAutoIncField TBCDField TDateTimeField TTimeField TBytesField TVarBytesField TGraphicField TMemoField

Em algumas dessas classes podero ser encontradas outras propriedades e mtodos que no esto presentes em TField.
Propriedades MaxValue MinValue DisplayFormat EditFormat Currency DisplayValues Mtodos LoadFromFile SaveToFile Descrio Valor mximo para o campo Valor mnimo para campo Formato de apresentao do campo, como ,0.00 % ou ,0.## Km Formato de edio do campo Define se um campo monetrio Usado com campos Boolean, define o texto para True e False, como Sim;No Descrio Carrega o contedo do campo de um arquivo Salva o contedo do campo para um arquivo

Para acessar os campo de uma tabela, existem vrias abordagens, como mostrado abaixo.. Usando o objeto TField ligado ao campo.
sqlQryDescri.Value := sqlQryVend.Value + ' em ' + sqlQryDta.asString;

Atravs do mtodo FieldByName


sqlQry.FieldByName('Descricao').Value := sqlQry.FieldByName('Vendedor').Value + ' em ' + sqlQry.FieldByName('Data').AsString;

Usando a lista Fields do TSQLQuery


sqlQry.Fields[5].Value := sqlQry.Fields[3].Value + ' em ' + sqlQry.Fields[4].AsString;

Converso de Tipos A converso de tipo de um campo pode ser feita atravs as propriedades tipo As..., como AsString.
SQLQuery1.AsString := EdtData.Text; SQLQuery1.AsInteger := 10; SQLQuery1.AsFloat := StrToFloat(EdtValor.Text);

Validao Para validar os valores de um campo, utiliza-se a propriedade CustomConstraint. Para garantir que a quantidade de um item seja maior que zero, por exemplo, utiliza-se em CustomConstraint Quantidade>0, e em CustomConstraint coloca-se a mensagem para o usurio caso a condio seja falsa. Outra forma, mais flexvel, usando o evento OnValidate, com um cdigo como abaixo, onde gerada uma exceo para cancelar a atribuio do valor ao campo.
Caderno Didtico Lazarus IDE Pgina 58

59

Universidade Federal de Santa Maria if CampoQuantidade.Value <= 0 then raise Exception.Create('Quantidade deve ser maior que zero.');

Formatao Personalizada Para fazer uma formatao personalizada do campo, pode usar os eventos OnGetText e OnSetText. Por exemplo, se existir um campo Estado Civil, e se desejar que quando o valor do campo for C seja mostrado Casado e S: Solteiro, no evento OnGetText utiliza-se um cdigo como o abaixo.
if sqlQryEstado.Value = 'C' then Text := 'Casado' else if sqlQryEstado.Value = 'S' then Text := 'Solteiro';

Como controle visual para o usurio escolher o valor do campo, voc poderia usar o DBComboBox, com Solteiro e Casado na propriedade Items, e no evento OnGetText do campo o cdigo mostrado abaixo.
if Text = 'Casado' then sqlQryEstado.Value := 'C' else if Text := 'Solteiro' then sqlQryEstado.Value = 'S';

Campos Calculados Para criar campos calculados, clica-se com o boto direito do mouse no Fields Editor e escolhe-se New Field, no quadro NewField, digita-se o nome do campo, o nome do objeto ser automaticamente informado, o tipo do campo, seu tamanho e escolhe-se Calculated em Field type. Para colocar um valor nesse campo utiliza-se o evento OnCalcFields do componente TSQLQuery, em nenhuma outra parte os valores desses campos podem ser alterados. O cdigo do evento OnCalcFields deve ser enxuto, pois este chamado vrias vezes durante a edio de um registro e um procedimento pesado pode comprometer a performance do sistema.
procedure TDtmAluno.SQLQueryCalcFields(DataSet: TDataSet); begin if SQLQryFaltas.Value > SQLQryMaxFaltas.Value then SQLQrySituacao.Value := 'Evadido' else if SQLQryNota.Value >= 7 then SQLQrySituacao.Value := 'Aprovado' else SQLQrySituacao.Value := 'Retido' end;

Campos Lookup Para criar um relacionamento, s vezes necessrio criar um campo de descrio, por exemplo, na tabela de clientes guardamos o identificador da cidade, mas gostaramos de exibir o nome da cidade, esses campos so chamados de campos Lookup. Para criar um campo Lookup, siga os passos abaixo, tomando como exemplo o caso da relao entre cidade e cliente.

Caderno Didtico Lazarus IDE

Pgina 59

60

Universidade Federal de Santa Maria

Abra o Fields Editor do SQLQuery onde o campo ser adicionado, no caso a consulta de Clientes. Clique com o direito e escolha New No quadro New Field, em Field type, escolha Lookup. Em Key Fields escolha o campo da tabela que faz parte do relacionamento (neste caso ID_CIDADE) DataSet a consulta (SQLQuery) onde est a descrio que se deseja buscar (consulta Cidades) Em Lookup Keys, escolha o campo de DataSet que faz parte do relacionamento (ID_CIDADE da consulta Cidades) Finalmente, escolha em Result Fields o campo de DataSet que vai ser mostrado para o usurio (o nome da cidade)

Essas opes correspondem a algumas propriedades do objeto TField gerado, que podem ser alteradas no Object Inspector, KeyFields, LookupDataSet, LookupKeyFields, LookupDataSet e LookupResultField. Quando esses campo so exibidos em um DBGrid, por padro criado um boto de lookup que mostrar os valores da outra tabela uma lista. Para colocar esses campos em um Form, devemos usar o DBLookupComboBox, apenas com as propriedades padro, DataSource e DataField. TDataSource Componente usado para fazer a ligao entre um DataSet (SQLQuery) e os componentes visuais, encontrado na guia Data Access.
Propriedade AutoEdit DataSet Evento OnDataChange OnStateChange OnUpdateData Descrio Define se a consulta entrar em modo de edio assim que o usurio digitar novos valores nos controles DataSet (consulta) ao qual o TDataSource faz referncia Descrio Ocorre quando o DataSet alterado, ao mudar de registro ou mudar os valores dos campos Ocorre quando o estado do DataSet alterado Ocorre antes de uma atualizao

Obtendo o Estado de uma Consulta Manipulando o evento StateChange da DataSource podemos obter o estado de uma consulta em qualquer momento, atualizando-o quando houver alteraes.
procedure TForm1.DataSource1.StateChange(Sender:TObject); var S:String; begin case SQLQuery1.State of dsInactive: S := 'Inactive'; //o data set est fechado dsBrowse: S := 'Browse'; //estado de espera (visualizao/navegao) dsEdit: S := 'Edit'; //o data set est sendo editado dsInsert: S := 'Insert'; //o data set est recebendo um novo registro end; Label1.Caption := S; end; Caderno Didtico Lazarus IDE Pgina 60

61

Universidade Federal de Santa Maria

DataControls Componentes de Controle aos Dados

TDBNavigator O DBNavigator permite que o usurio realize operaes padro de controle de dados. Cada um dos botes do DBNavigator chama um mtodo do componente SQLQuery ao qual est ligado.
First Next Insert Edit Cancel

Prior

Last

Delete

Post

Refresh

Podemos personalizar o DBNavigator usando as suas propriedades e eventos.


Propriedades VisibleButtons Hints ConfirmDelete Eventos BeforeAction OnClick Descrio Define os botes que sero visveis Hints exibidos pelos botes Define se ser solicitado uma confirmao antes da excluso Descrio Quando um boto do Navigator pressionado, antes da ao ser executada Quando um boto do Navigator pressionado, depois da ao ser executada

TDBGrid Mostra os registros de uma consulta na forma de uma grade ou tabela (cada coluna um campo e cada linha um registro).
Propriedades Columns Options SelectedField SelectedIndex SelectedRows TitleFont FixedColor Eventos OnCellClick OnColEnter OnColExit OnColumnMoved OnEditButtonClick OnTitleClick Descrio Lista do tipo TGridColumns, com as colunas da Grid, cada item da lista do tipo TColumn Set com as opes da Grid, como ConfirmDelete, MultiSelect, ColumnResize Campo da coluna selecionada ndice da coluna selecionada Lista do tipo TBookmarkList, com os registros selecionados em uma Grid com MultiSelect Fonte do ttulo das colunas Cor Fixa, usada nas colunas e indicadores Descrio Ao clicar em uma clula da Grid Quando uma clula de alguma coluna da Grid recebe o foco Quando uma clula de alguma coluna da Grid perde o foco Quando o usurio mover uma coluna Ao clicar no boto de edio de uma clula, mostrado pela propriedade ButtonStyle da coluna Ao clicar no ttulo das colunas

TColumn Representa uma coluna do DBGrid, um item da lista TGridColumns (propriedade Columns).
Propriedades ButtonStyle FieldName PickList Title Descrio Boto mostrado ao editar as clulas da coluna Nome do campo ligado coluna Tstrings com os itens da lista DropDown usada nas clulas da coluna Propriedade do tipo TColumnTitle com as opes do ttulo da coluna

Caderno Didtico Lazarus IDE

Pgina 61

62

Universidade Federal de Santa Maria

TDBText, TDBEdit, TDBMemo, TDBListBox, TDBComboBox, TDBImage, TDBCalendar Controles genricos ligados a um campo de uma tabela.
Propriedades DataField Descrio Campo ao qual o controle est ligado

TDBCheckBox Usado em campos que podem receber apenas dois valores, como campos lgicos.
Propriedades ValueChecked ValueUnchecked Descrio Valor a ser armazenado quando est selecionado Valor a ser armazenado quando no est selecionado

TDBRadioGroup Mostra algumas opes para o preenchimento de um campo.


Propriedades Values Descrio Valor a ser armazenado para cada boto de rdio

TDBLookupListBox, TDBLookupComboBox Preenche um campo com dados contidos em outra tabela.


Propriedades ListSource ListField KeyField Descrio DataSource que contm os valores a serem exibidos na lista Campo de ListSource que ser exibido Campo de ListSource usado no relacionamento

Caderno Didtico Lazarus IDE

Pgina 62

63

Universidade Federal de Santa Maria

CAPTULO VI Relatrios e Comandos de Impresso


Existem diferentes componentes para construo de relatrios no Lazarus. Normalmente a instalao padro do Lazarus acompanhada pelo pacote de componentes LazReport (Report Generator for Lazarus).

LazReport Conceitos Bsicos


O funcionamento do LazReport relativamente simples, um arquivo template gerado com o layout do relatrio que construdo em tempo de execuo e este mesmo arquivo carregado no momento da exibio do relatrio. Um relatrio organizado em um conjunto de faixas de informao (Band) sobre as quais so inseridos campos de informao varivel (dados de um registro do banco de dados, campos calculados, texto fixo, expresses condicionais, etc.). O principal componente para construo de relatrios usando LazReport o componente TfrReport. Um relatrio feito em LazReport um arquivo com extenso (lrf Lazarus Report Form), logo, no necessria a utilizao de vrios componentes TfrReport em um mesmo projeto (um para cada relatrio, por exemplo), uma vez que o relatrio no fica armazenado no componente. Ao clicar duas vezes sobre o componente TfrReport ser exibida a janela de Designer do relatrio:

Um relatrio recm-criado basicamente uma folha em branco onde sero inseridas faixas de contedo e campos de dados. Uma faixa de contedo (Band) define uma rea no relatrio que seguir um determinado comportamento padro, por exemplo, ser impressa no incio de cada pgina, ou ento, ser impressa ao final do relatrio. Para inserir uma faixa de contedo utilizamos a barra de componentes a esquerda, escolhendo o segundo boto:

Caderno Didtico Lazarus IDE

Pgina 63

64

Universidade Federal de Santa Maria

Cada Band (faixa de contedo) possui um comportamento especfico, logo, no importa o local onde a mesma adicionada na pgina ela ir obedecer prioritariamente seu comportamento. Antes de adicionar uma faixa de contedo necessrio indicar o seu tipo de comportamento, uma janela ser exibida para que a escolha seja feita:

Tipo de faixa Report title Report summary Page header Page footer Master header Master data Master footer Detail header Detail data Detail footer Subdetail header Subdetail data Subdetail footer Overlay Column Header Group Header Group Footer Cross Header Cross Data Cross Footer Caderno Didtico Lazarus IDE

Utilizao/Comportamento Impresso no incio do relatrio (apenas na primeira pgina) Impresso no final do relatrio (apenas na ltima pgina e no necessariamente na parte inferior da mesma) Impresso no incio de cada pgina Impresso ao final de cada pgina Impresso no incio do primeiro nvel de dados Dados do primeiro nvel (repetidos para cada registro mestre) Impresso ao final do primeiro nvel de dados Impresso no incio do segundo nvel de dados Dados do segundo nvel (repetidos para cada registro detalhe) Impresso ao final do segundo nvel de dados Impresso no incio do terceiro nvel de dados Dados do terceiro nvel (repetidos para cada registro sub-detalhe) Impresso ao final do terceiro nvel de dados Impresso em cada pgina usando uma camada inferior da pgina (utilizado para marcas d'gua) Ttulo das colunas, utilizado geralmente em relatrios em formato de tabela onde necessrio indicar o ttulo de cada coluna (impresso no incio de cada pgina, aps o cabealho da pgina) Banda agrupadora (agrupa registros ordenados por determinado campo). Impressa sempre que o valor do campo que condio para o grupo alterado. Impresso aps os dados agrupados, antes do valor do campo que condio para o grupo ser alterado. Esse grupo de bandas foi projetado para criar relatrios de tabulao cruzada, que tm uma quantidade varivel de colunas na pgina.

Pgina 64

65

Universidade Federal de Santa Maria

Sobre as Bands so adicionados objetos retngulo. Um objeto retngulo normalmente um texto organizado com expresses fixas, variveis e campos de uma consulta. A figura abaixo demonstra como inserir um objeto retngulo:

A janela a seguir exibida logo que o objeto retngulo includo sobre a faixa de contedo:

Podem compor o contedo de um objeto retngulo dados estticos como a palavra Instituio na figura acima, campos de uma consulta como o campo NOME da consulta sqlqryUF_IGC alm de variveis pr-definidas:
Tipo de faixa Utilizao/Comportamento Nmero da pgina Data atual Hora atual Nmero da linha (considerando o conjunto de dados que est sendo percorrido) Numero da linha geral Nmero da coluna Numero da linha atual Total de pginas Pgina 65

[PAGE#] [DATE] [TIME] [LINE#] [LINETHROUGH#] [COLUMN#] [CURRENT#] [TOTALPAGES]

Caderno Didtico Lazarus IDE

66

Universidade Federal de Santa Maria

Utilizao de variveis do relatrio Alm de usar textos fixos, campos de uma consulta ou variveis pr-definidas tambm possvel definir outras variveis que podem ser controladas atravs de cdigo. Para fazer isso, na tela de Designer do relatrio escolhe-se o menu File/Variables list .... A seguir, na janela que surge clica-se sobre o boto Variables e na janela Variables List digita-se inicialmente um nome de categoria para as variveis seguido dos nomes de variveis, sendo que cada nome deve obrigatoriamente iniciar por um espao em branco. Depois de concludo, na janela de escolha das variveis as mesmas aparecero agrupadas por categoria.

Para informar os dados de uma varivel utiliza-se o evento OnGetValue do componente TfrReport. Este evento recebe dois parmetros: ParName (que se refere ao nome da varivel que se quer obter o valor) e ParValue (que se refere ao valor que dever ser atribudo a varivel). O cdigo atribui a varivel VarNome o contedo do campo EditNome de um formulrio de dados:
procedure TForm1.frReport1GetValue(const ParName: String; var ParValue: Variant); begin if ParName = 'VarNome' then ParValue:= EdtNome.Text; end;

Diferentemente dos scripts, os dados de variveis definidas pelo usurio somente podem ser testados/visualizados em tempo de execuo. Utilizando Scripts Um objeto retngulo pode ter suas propriedades modificadas por meio da utilizao de scripts. Para utilizar um script a opo Script da janela Text Editor deve estar selecionada. Um script LazReport baseado um Pascal e possui as seguintes capacidades: Operadores (>, <, =, >=, <=, <>); Atribuio (por meio do operador de atribuio (:=); Desvios condicionais (por meio de estruturas if ... then ... else) Laos de repetio (while ... do e repeat ... until) Delimitadores de blocos (begin e end); Utilizao de variveis temporrias no tipadas;
Caderno Didtico Lazarus IDE Pgina 66

67

Universidade Federal de Santa Maria

Acesso a alguns objetos do LazReport e suas propriedades:


o o o o o o Visible - determina a visibilidade do objeto (boolean); FillColor - determina a cor de fundo do objeto. Valores possveis: clRed, clBlue, etc.; Text - contedo do memo; FontName, FontSize, FontColor - nome, tamanho e cor da fonte; FontStyle - estilo da fonte (1 - itlico, 2 - negrito e 3 - sublinhado); Adjust - alinhamento do texto (1 - direita, 2 - centro).

A cada vez que um objeto retngulo impresso, o script associado a ele executado. A janela abaixo demonstra um script LazReport que testa se o valor do campo IGC_Faixa for maior ou igual a 4 e neste caso troca a cor da fonte para Verde (clGreen) e em no sendo troca para vermelho).

Relatrios baseados em consultas de banco de dados Relatrios que acessam bancos de dados precisam de alguns cuidados especiais. O primeiro deles a utilizao de um componente TfrDBDataSet (guia LazReport). O componente TfrDBDataSet nada mais do que uma extenso da consulta (TSQLQuery), utilizado por motivos de compatibilidade com outras bibliotecas de relatrios. Cada consulta que ser utilizada no relatrio ir precisar de um TfrDBDataSet com a propriedade DataSource configurada. Na tela de construo do relatrio existem algumas faixas de contedo (Bands) com comportamentos especficos para utilizao de dados de consultas: Master data, Detail data e Subdetail data. Essas faixas so impressas uma vez para cada registro das consultas aos quais esto ligadas. A ligao entre a faixa de contedo (Band) e a consulta feita por meio da componente TfrDBDataSet. Ao adicionar uma faixa de contedo baseada em banco de dados ser necessrio indicar qual componente TfrDBDataSet ir controlar o comportamento da faixa: Um tipo especial de DataSource pode ser utilizado quando no temos um especfico, neste caso na tela de escolha Band data source deve-se indicar assim como a quantidade de linhas que devero ser criadas para essa faixa no relatrio.

Caderno Didtico Lazarus IDE

Pgina 67

68

Universidade Federal de Santa Maria

Visualizao e Impresso Conforme detalhado anteriormente, um relatrio feito em LazReport salvo separadamente da aplicao como um arquivo (lrf) que precisa necessariamente ser distribudo junto com o arquivo executvel. Para fazer a impresso de um relatrio precisamos inicialmente carregar o arquivo que contm o relatrio:
frReport1.LoadFromFile('relatorio1.lrf');

Para exibir um relatrio j carregado pode-se utilizar o mtodo ShowReport:


frReport1.ShowReport;

Caderno Didtico Lazarus IDE

Pgina 68

69

Universidade Federal de Santa Maria

Referncias Bibliogrficas
CANT, M. Dominando o Delphi 2005: A Bblia. Prentice Hall, 2006. CANT, M. Dominando o Delphi 5: A Bblia. Makron Books, 2000. CANT, M. Essential Pascal. 4 Edio. Paperback, 2008. EVARISTO, J. Programando com Pascal. 2 Edio. Ed. Book Express, 2004. MANZANO, J. A.; YAMATUMI, W. Y. Free Pascal - Programao de Computadores. Ed. rica, 2007. SOUZA, V. A. Programando com o Lazarus. Cerne Tecnologia e Treinamento Ltda, 2010.

Sites Especializados (em portugus) http://lazarusbrasil.org http://lazarus.codigolivre.org.br http://professorcarlos.blogspot.com/ http://wiki.lazarus.freepascal.org/Lazarus_Tutorial/pt

Caderno Didtico Lazarus IDE

Pgina 69