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

.PPU

FORM N

.PPU

FORM 1

.PPU

FORM 2

.LFM

FORM N

.LFM

UNIT 1

.PAS

UNIT 2

.PAS

.LFM

UNIT N

.PAS

ROTINAS

.PAS

Arquivos que Compem uma Aplicao


Extenso

Definio

.LPR

Arquivo do Projeto (Lazarus Project)

.LPI

Arquivo XML com Informaes sobre


o Projeto (Lazarus Project
Information)

.PAS

Cdigo fonte da Unit (Object Pascal)

.LFM

Arquivo grfico do formulrio


(Lazarus Form)

.RC

Arquivo de Recursos do Compilador

.LRS

Arquivo de Recursos (Lazarus


Resource)

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.

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;

Definio da
Classe

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;

Definio dos
Mtodos e
Propriedades

.
.
.

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;

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;

{Declarando}

<Objeto> = Classe.Create;

{Instanciando}

<Objeto>.Free;

{Destruindo}

<Objeto>.Identificador

{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

Universidade Federal de Santa Maria

17

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

Byte

Char

Ord

String

StrToInt

Integer

direto*

Real

Round / Trunc

Char
Chr

String
Chr

Integer
direto*

direto*
Varivel[ndice]

DateTime

Ord

Ord

StrToInt

StrToFloat

IntToStr
FloatToStr

Real
direto*

DateTime

Date

Time

StrToDateTime

StrToDate

StrToTime

direto*
Round / Trunc

DateTimeToStr

Date

DateToStr

Time

TimeToStr

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

// x

= 10,12

FloatToStr(var_real)
Converte uma varivel Real em String.
Ex.:
x:=IntToStr(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

e Nmero Cientfico
g Nmero Geral
s String
(existem outros menos utilizados)

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

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

// x = 1.210,25

Observe mais algumas mscaras e seus respectivos resultados

0
0.00
#.##
#,##0.00

1234
1234
1234
1234,00
1234
1.234,00

-1234
-1234
-1234
-1234,00
-1234
-1.234,00

0.5
0.5
1
0,50
,5
0,50

0
0
0
0,00

#,##0.00;(#,##0.00)
#,##0.00;;Zero
0.000E+00
#.###E-0

1.234,00
1.234,00
1,234E+03
1,234E3

(1.234,00)
-1.234,00
-1,234E+03
-1,234E3

0,50
0,50
5,000E-01
5E-1

0,00
Zero
0,000E+00
0E0

Format string

Caderno Didtico Lazarus IDE

0,00

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

// x

= cafw.exe

ExtractFilePath(caminho)
Extrai o caminho do arquivo da string passada como parmetro.
Ex.:
x:=ExtractFilePath(c:\temp\cafw.exe);

// x

= c:\temp\

ExtractFileDrive(caminho)
Extrai o drive do caminho da string passada como parmetro.
Ex.:
x:=ExtractFilePath(c:\temp\cafw.exe);

// x

= c:\

ExtractFileExt(caminho)
Extrai a extenso do arquivo da string passada como parmetro.
Ex.:
x:=ExtractFilePath(c:\temp\cafw.exe);

// x

= .exe

FileExists (caminho)
Testa se o arquivo especificado no caminho existe.
Ex.:
x:=FileExists(c:\command.com);

= true

// x

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;

Caderno Didtico Lazarus IDE

Salvar?',

'Confirme',

MB_ICONQUESTION

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

Caderno Didtico Lazarus IDE

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

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

EOF
FieldCount
FieldDefs
Fields
Filter
Filtered
IndexDefs
IndexFieldNames
IndexName
InsertSQL

MasterFields
Modified
ReadOnly
RecNo
RecordCount
SQL
State
Transaction
UpdateSQL

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).

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

Prior

Insert

Last

Edit

Delete

Cancel

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

Utilizao/Comportamento

Page header

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

Page footer

Impresso ao final de cada pgina

Master header

Impresso no incio do primeiro nvel de dados

Master data

Dados do primeiro nvel (repetidos para cada registro mestre)

Master footer

Impresso ao final do primeiro nvel de dados

Detail header

Impresso no incio do segundo nvel de dados

Detail data

Dados do segundo nvel (repetidos para cada registro detalhe)

Detail footer

Impresso ao final do segundo nvel de dados

Subdetail header

Impresso no incio do terceiro nvel de dados

Subdetail data

Dados do terceiro nvel (repetidos para cada registro sub-detalhe)

Subdetail footer

Impresso ao final do terceiro nvel de dados

Overlay

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.

Report summary

Column Header
Group Header
Group Footer
Cross Header
Cross Data

Esse grupo de bandas foi projetado para criar relatrios de tabulao cruzada, que tm uma
quantidade varivel de colunas na pgina.

Cross Footer
Caderno Didtico Lazarus IDE

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

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

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

Caderno Didtico Lazarus IDE

Pgina 65

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

Você também pode gostar