Escolar Documentos
Profissional Documentos
Cultura Documentos
Caderno Didtico
Bruno B. Boniati
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
Pgina 1
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.
Pgina 2
.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
Definio
.LPR
.LPI
.PAS
.LFM
.RC
.LRS
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.
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.
Pgina 3
Pgina 4
Pgina 5
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.
Pgina 6
Janela Principal
A janela principal do Lazarus composta pela barra de menus, Speed Bar e paleta de
componentes:
Pgina 7
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.
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).
Pgina 8
Pgina 9
10
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.
Pgina 10
11
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
.
.
.
Pgina 11
12
Utilizao
var x : TData;
begin
x:=TData.Create;
x.Init(10,10,1981)
end;
Pgina 12
13
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.
{Declarando}
<Objeto> = Classe.Create;
{Instanciando}
<Objeto>.Free;
{Destruindo}
<Objeto>.Identificador
{Referenciando}
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
Pgina 13
14
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];
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>
Pgina 14
15
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.
Pgina 15
16
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.
Pgina 16
17
Comentrios:
{ }
(* *)
//
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.
Pgina 17
18
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
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.
Pgina 18
19
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;
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;
Pgina 19
20
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
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>;
Pgina 21
22
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;
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>;
Pgina 22
23
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;
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));
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;
Pgina 23
24
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;
Pgina 24
25
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);
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
Pgina 26
27
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
Pgina 27
28
DayOfWeek(data)
Retorna o dia da semana de uma data especificada
Ex.:
x:=DayOfWeek(13/03/2001); // x = 3
... tera-feira
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
Pgina 28
29
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
Pgina 29
30
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
// x = 1.210,25
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
0,00
Pgina 30
31
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
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
Pgina 32
33
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
Pgina 33
34
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
Pgina 34
35
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
Pgina 35
36
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
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
Pgina 36
37
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
Pgina 37
38
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
Pgina 38
39
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
Pgina 39
40
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
Pgina 40
41
Classes No Visuais
TApplication
Todo programa tem um objeto global nomeado Application, do tipo TApplication, esse objeto
representa a aplicao para o sistema operacional.
Propriedade
ExeName
MainForm
Hint
Title
HelpFile
Evento
OnHint
OnException
OnHelp
Mtodo
MessageBox
Run
Terminate
Descrio
Caminho e nome do arquivo executvel
Form principal da aplicao
Hint recebido pela aplicao
Ttulo da aplicao
Caminho e nome do arquivo help
Descrio
Quando um hint recebido pela aplicao
Quando ocorre uma exceo
Quando acontece uma solicitao de help
Descrio
Apresenta um quadro de mensagem
Executa a aplicao
Finaliza a aplicao normalmente
Quadros de Mensagem
O mtodo Application.MessageBox mostra quadros de mensagem com chamadas a funes da
API do sistema operacional. Os flags de mensagem mais usados e os valores de retorno desse mtodo
so mostrados abaixo (deve-se utilizar na clusula USES a biblioteca LCLType).
Application.MessageBox('Texto','Ttulo',Flags):integer;
Flag
MB_OK
MB_OKCANCEL
MB_ABORTRETRYIGNORE
MB_YESNOCANCEL
MB_YESNO
MB_RETRYCANCEL
MB_ICONERROR
MB_ICONQUESTION
MB_ICONEXCLAMATION
MB_ICONINFORMATION
Valor de Retorno
IDOK
IDCANCEL
IDABORT
IDRETRY
IDYES
IDIGNORE
IDNO
Valor
0
1
2
3
4
5
16
32
48
64
1
2
3
4
6
5
7
Item Mostrado
Boto de Ok
Botes de Ok e Cancelar
Botes de Anular, Repetir e Ignorar
Botes de Sim, No e Cancelar
Botes de Sim e No
Botes de Repetir e Cancelar
cone de erro
cone de pergunta
cone com ponto de exclamao
cone com letra i, usada para mostrar informaes
Boto Escolhido
Ok
Cancelar
Anular
Repetir
Sim
Ignorar
No
Esses quadros so usados quando se deseja uma resposta simples do usurio, principalmente
numa confirmao ou pergunta para o usurio, observe o cdigo abaixo:
if
Application.MessageBox('Deseja
MB_YESNO) = IDNO then Close;
Salvar?',
'Confirme',
MB_ICONQUESTION
Pgina 41
42
Alm do mtodo MessageBox da classe Application, existem ainda outras funes utilitrias para
construo rpida de janelas de aviso. Abaixo esto descritos alguns e suas caractersticas:
MessageDlg
A funo MessageDlg implementa basicamente a mesma funcionalidade do Mtodo MessageBox,
porm permite que sejam colocados mais que trs botes. Compe-se de 4 parmetros: a mensagem
que ser mostrada, o tipo de bitmap usado para ilustrar o dilogo, os botes que sero utilizados e o
ndice de help que a janela dever chamar caso seja solicitada, em caso de no uso, deve-se colocar
zero.
MessageDlg(Mensagem,Tipo,Botoes,Indice_Help):integer;
Tipo
mtWarning
mtError
mtInformation
mtConfirmation
MtCustom
Botes
mbYes
mbNo
mbCancel
mbHelp
mbAbort
mbRetry
mbIgnore
mbAll
Retorno
mrNone
mrYes
mrNo
mrCancel
mrHelp
mrAbort
mrRetry
mrIgnore
mrAll
Descrio
Ponto de exclamao amarelo
Um sinal de pare vermelho
Um i azul
Um ponto de interrogao azul
Sem bitmap
Descrio
Sim
No
Cancelar
Ajuda
Anular
Repetir
Ignorar
Todos
Descrio
Nenhum
Sim
No
Cancelar
Ajuda
Anular
Repetir
Ignorar
Todos
Pgina 42
43
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;
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));
Pgina 43
44
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
Pgina 44
45
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;
Pgina 45
46
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;
Pgina 46
47
Gerao de Excees
Uma exceo pode ser provocada usando a clusula raise.
raise Exception.Create('Erro ao alterar registro.');
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;
Pgina 47
48
Compontes de
Controle de Dados
SQLConnection
SQLTransaction
DataSource
Banco de Dados e
API Nativa do Fornecedor
SQLQuery
Pgina 48
49
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.
Pgina 49
50
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).
Pgina 50
51
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
Pgina 51
52
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;
Pgina 52
53
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;
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')
Pgina 53
54
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';
Pgina 54
55
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;
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:
Pgina 55
56
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
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
Pgina 57
58
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;
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
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.
Pgina 59
60
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
Pgina 60
61
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
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
Pgina 61
62
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
Pgina 62
63
Pgina 63
64
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
Page footer
Master header
Master data
Master footer
Detail header
Detail data
Detail footer
Subdetail header
Subdetail data
Subdetail footer
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
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
Pgina 65
66
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
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).
Pgina 67
68
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');
Pgina 68
69
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.
Pgina 69