Vous êtes sur la page 1sur 279

Artur.Gomes.Barreto@gmail.com 2011.

INTRODUO AO DESENVOLVIMENTO DE APLICATIVOS COM INTERFACE GRFICA


Faculdade 7 de Setembro Sistemas de informa0 N.E.O.

Objetivos so importantes!
O que vale na vida no o ponto de partida e sim a caminhada. Caminhando e semeando, no fim ters o que colher. Cora Carolina

Objetivos
Desenvolver aplicativos com interface grfica; Programao Orientada a Objetos (P.O.O.); Interface de Desenvolvimento (I.D.E.); Banco de dados; Compilao final; Instalador.

Interface de desenvolvimento

Interface de desenvolvimento

Programao Orientada a Objetos


Objetos Mensagens

Mtodos

Construtor

Atributos

Herana

Classe

P.O.O.

Polimorfismo

Aplicativos grficos

Editor de texto

Cadastro de Clientes

Calculadora Simples
Meu Segundo Programa

Meu Primeiro Programa

Banco de dados

Banco de dados

Compilao
Reduzir o tamanho dos executveis por meio de

uma compilao otimizada;

Instalao
Criar um instalador para os aplicativos usando o

Inno Setup Compiler;

Resumo
P.O.O. Lazarus

SQLite

Sucesso

O que o Lazarus?
IDE de cdigo aberto; Utiliza o compilador Free Pascal; um clone do Delphi; compatvel com vrios sistemas operacionais; O mesmo cdigo pode ser compilado em qualquer

plataforma.

Por que utilizar o Lazarus?


Simplicidade; Didtica; O que se aprende no Lazarus aplicado em qualquer

outra IDE;
O projeto iniciou em 1998 e cresce cada vez mais; LGLP.

Comparando as IDEs

Concluso
O conhecimeto adiquirido durante o curso

independente da I.D.E. que voc utilize no futuro!

Instalando o Lazarus
V ao site http://www.lazarus.freepascal.org/ e clique

em Download;
Selecione o arquivo adequado, dependendo de seu

sistema operacional;
recomendado que, mesmo utilizando o Windows 64

bits, baixar o Lazarus 32 bits;


A verso que utilizaremos ser a Lazarus 0.9.30 Win 32

(arquivo de 76.2 megas).

Instalando o Lazarus
A instalao bastante intuitiva;
No h necessidade de nenhuma customizao na

instalao;
Fica a gosto de cada um alterar o diretrio onde os

arquivos sero instalados, criar ou no um atalho no desktop e criar ou no uma pasta no menu iniciar, dentre outros detalhes.

Desabilitando o Debugger
Antes de comear a utilizar o Lazarus, necessrio

realizar uma configurao;


O debugger do Lazarus possui um problema em

determinadas mquinas. Esse problema surgiu em uma determinada verso e ainda est sendo analisado pelos desenvolvedores;
H uma forma de se resolver esse problema, entretanto

mais fcil simplesmente desabilitar o debugger.

Desabilitando o Debugger
Como o escopo de nosso curso bastante limitado e no

utilizaremos o recurso de debugger, no haver perdas se o desabilitarmos;


Para isso, clique em Environment, em seguida em

Options;
Procure a aba Debugger e a selecione; Na opo Debugger Type and path selecione none; Clique em OK. Pronto, o Debugger est desabilitado.

Programao Orientada a Objetos


Aproximar o mundo real do mundo virtual; Simular o mundo real dentro do computador;

Para isso, utiliza-se Objetos;


O programador descreve os Objetos por meio das

Classes.

Classe
a definio de um tipo de objeto; dividido em duas partes: atributos e mtodos;

Atributos so as caractersticas bsicas dos objetos

(so dados);
Mtodos so as aes bsicas que os objetos podem

realizar (so funes com ou sem retorno).

O homo sapiens sapiens


O homo sapiens sapiens uma classe;

Possui seus atributos: Nome; Idade; Altura; Peso; Etc.


Possui seus mtodos: Andar; Correr; Saltar; Etc.

Classes Vs. Objetos


A classe uma definio; Objeto um ente definido por uma classe;

O homo sapiens sapiens uma classe que possui

os atributos (caractersticas) e mtodos (aes) definidos anteriormente;


Eu, voc e sua me somos objetos da classe homo

sapiens sapiens.

Mais um exemplo
Cachorro uma classe; Possui seus atributos: Nome; Raa; Idade; Peso; Etc. Possui seus mtodos: Senta; Late; Finge De Morto; Etc.

Mais um exemplo
Bilu um objeto da classe Cachorro; Rex outro objeto da classe Cachorro;

Scooby outro objeto da classe cachorro.

Criao de classes
Como vimos, as classes possuem atributos e

mtodos;
Os atributos so variveis que esto dentro de cada

um dos objetos da classe em questo. Podem ser de qualquer tipo (float, int, char, bool etc);
Os mtodos so as funes que cada um dos

objetos da classe em questo pode executar. Podem ter retorno de qualquer tipo ou ser do tipo void.

Estrutura da Classe em C++


Class NomeDaClasse { Private: (Atributos); Public: (Mtodos); };

Declarao de objetos
Para declarar (instanciar) um objeto, basta colocar

um identificador depois do nome da classe;


semelhante a declarao de uma varivel; Exemplos:
HomoSapiensSapiens Artur;

HomoSapiensSapiens Luana;
Cachorro Bilu, Rex, Scooby; NomeDaClasse Obj1, Obj2;

Mensagens
Uma mensagem um texto que o objeto consegue

entender;

Dependendo da mensagem o objeto realiza uma ao

especfica; (.);

Envia-se uma mensagem a um objeto pelo operador ponto

Por exemplo: Artur.Andar; Artur.Idade = 24; Rex.Senta; Scooby.Late;

P.O.O. na prtica

Quais atributos e mtodos um classe carro possui?

Carro

Exerccios
De forma anloga ao exemplo do carro, estabelea

a classe cachorro e instancie quantos objetos quiser.

Caractersticas bsicas do desenvolvimento de aplicativos grficos


Desenha-se as janelas do programa; Utiliza-se componentes bsicos para isso; Cada componente inserido na janela um objeto; Cada objeto possui atributos (propriedades), mtodos

e respondem a mensagens; pode responder, associado.

As mensagens so os eventos que cada componente

realizando

um

procedimento

Elementos bsicos
Elemento
Form (Formulrio)

Descrio
uma janela do programa. onde os componentes so agrupados, formando a Interface grfica do usurio (G.U.I.). o lugar onde fica o cdigo em Object Pascal. Cada Form possui uma Unit.

Unit (Unidade)

Components (Componentes)
Properties (Propriedades) Mtodo Events (Eventos) Estmulos Project (Projeto)

Objetos utilizados para compor a G.U.I.


So os atributos de cada componente. Procedimento (Procedure) ou Funo (Function) de cada objeto. Resposta dos componentes aos estmulos. Um click, um duplo click, abrir ou fechar uma janela. Conjunto de formulrios, componentes e unidades que formam um aplicativo.

Conhecendo a I.D.E.
Quando iniciamos o Lazarus, a tela inicial

parecida com a figura a seguir;


Os elementos bsicos so:
Janela superior;
Object Inspector; Form1; Unit1; Messages.

Janela superior

A janela superior se divide em:


Barra de menu principal (Main Menu);
Arquivo, Editar etc.

Barra de ferramentas rpidas (Speed Bar);


Abrir, Salvar etc.

Paleta de componentes;
Base da programao visual!

Object Inspector
Encontra-se abaixo da Speed Bar;

parte superior serve para visualizar e acessar todos os componentes do formulrio selecionado;
parte inferior serve para visualizar e alterar as propriedades e eventos do componente selecionado do formulrio em questo.

Formulrios e Units

Encontram-se abaixo da paleta de componentes; Forms so as janelas que esto sendo construdas; Units so os cdigos programveis das janelas; Cada Form tem possui uma Unit exclusiva.

Messages
A janela Messages proporciona informaes

gerais para o programador, tais como erros de sintaxe.

Componentes bsicos

Componentes de banco de dados

Lembre-se: Cada componente um objeto!

Propriedades Comuns
Lembrando que propriedades so os atributos!
Propriedade
Align Caption Enabled Font Height

Descrio
Determina o alinhamento do componente em relao ao formulrio. Legenda do componente. Usa-se & antes da letra para se criar um atalho. Define se o componente est ativado. Define a fonte componente. Define a altura. utilizada pelo

Hint

Dica sobre o componente.

Propriedades Comuns
Lembrando que propriedades so os atributos!
Propriedade Descrio

Name

Nome do componente. Define o identificador do objeto. gerado um nome automaticamente, porm recomendado utilizar nomes mais adequados, definidos pelo usurio. O cdigo gerado automaticamente na Unit atualizado quando mudamos essa propriedade de um componente.
Menu de contexto do componente. Define se a dica ser mostrada. Define a largura do componente.

PopupMenu ShowHint Width

Mtodos Comuns
Lembrando que mtodos so as aes!

Mtodo

Descrio

Show
Hide SetFocus SetColor(p: tcolor)

O componente fica visvel.


O componente fica invisvel. O componente fica no foco. O componente muda de cor.

Eventos
Eventos

so aes programadas determinada manifestao acontece;

que

ocorrem

quando

Entende-se por manifestao: Um click, um duplo-click, fechar

uma janela, abrir uma janela, mudana em um componente etc.;

Por exemplo: Quando o usurio clica em um boto, o Windows

envia uma mensagem para a aplicao informando a ocorrncia do click e em qual regio ocorreu. Dependendo de qual boto foi clicado, a aplicao executa uma ao anteriormente programada;

Ou seja, dado um evento, uma ao executada; Eventos podem ser compartilhados entre os componentes.

Eventos
Resumidamente:
Um evento aquilo que o programa faz quando algo

acontece.

Eventos comuns
Evento OnChange OnClick Descrio acionado quando o contedo do componente alterado. acionado quando o componente clicado.

OnDblClick
OnEnter OnExit

acionado quando o componente clicado duas vezes.


acionado quando o componente entra no foco. acionado quando o componente sai do foco.

Janelas
Os aplicativos grficos so compostos por pelo

menos uma janela. Ela o elemento bsico desse tipo de aplicativo;


na janela que os componentes sero inseridos; As janelas so objetos da classe TForm; importante conhecer as principais propriedades,

mtodos e eventos dessa classe.

Propriedades principais dos Forms


As propriedades comuns vistas anteriormente

esto presentes no formulrio.


Propriedade BorderIcons
BorderStyle Icon Menu WindowState Position

Descrio Quais botes vo aparecer na barra de ttulo (minimizar, maximizar etc).


Define o estilo da borda. Define o cone da janela. Define o menu da janela. Maximizado, minimizado ou normal. Define a posio da janela na rea de trabalho.

Mtodos principais dos Forms


Os mtodos comuns vistos anteriormente esto

presentes no formulrio.
Mtodo Descrio

Show Close
Cascade Tile

Abre o formulrio. Fecha o formulrio.


Os formulrios so organizados em cascata. Os formulrios so organizados lado a lado.

Eventos principais dos Forms


Com exceo do OnEnter e OnExit, os eventos comuns

vistos anteriormente esto presentes no formulrio.


Evento OnShow
OnClose OnActive OnDeactive

Descrio acionado quando a janela aberta.


acionado quando a janela fechada. acionado quando a janela recebe o foco. acionado quando a janela perde o foco.

OnResize

acionado quando a janela muda de tamanho.

Descrio dos principais componentes


interessante conhecer as propriedades e mtodos

de alguns dos componentes que utilizaremos;


Vale lembrar que a melhor forma de aprender esse

contedo aliando a teoria, a prtica e o tempo;


No tente aprender tudo de uma vez. Desenvolva

seu conhecimento lentamente, mas com qualidade.

Descrio dos principais componentes


Tbutton
A forma mais simples de boto;

TBitBtn
Boto com uma figura.
Propriedade
Glyph LayOut Margin Spacing Kind

Descrio
Figura do boto. Posio da figura. Espao entre a borda e a figura. Espao entre o texto e a figura. Seleciona estilo do boto, alterando vrias propriedades (Boto OK, Cancelar etc).

Descrio dos principais componentes


TSpeedButton
Boto com figura, utilizado em barras de ferramentas.
Propriedade Down GroupIndex AllowAllUp Descrio Indica se o boto est pressionado ou no. Agrupa os botes em conjuntos. Indica se todos os botes de um grupo podem ficar no pressionados.

Descrio dos principais componentes


Tlabel
Utilizado para rotulagem.
Propriedade Alignment Descrio Alinhamento do texto do label.

AutoSize
Caption

Indica se o tamanho do componente ser do mesmo tamanho do Caption.


Conteudo do Label.

Descrio dos principais componentes


TEdit
Linha para entrada de texto.
Propriedade Text Descrio Conteudo do Edit.

MaxLength
PasswordChar

Nmero mximo de caracteres.


Indica se o Edit receber uma senha e deve exibir asteriscos.

Mtodo Clear

Descrio Limpa o contedo armazenado na propriedade Text.

Descrio dos principais componentes


TMemo
Caixa de texto com vrias linhas.
Propriedade Lines ScrollBar Descrio Conteudo do Tmemo. onde as linhas de texto so armazenadas. Define qual tipo de barras de rolagem ser apresentada.

Descrio dos principais componentes


TCheckBox
Caixa de checagem;
Propriedade Checked Descrio Determina se o componente est marcado.

State

Estado atual do Checkbox.

TRadioButton
Utilizado para se obter informao de situao em que

as opes so exclusivas. Por exemplo: Masculino ou Feminino?

Descrio dos principais componentes


TRadioGroup
Utilizado para agrupar e controlar RadioButtons.
Propriedade Columns Descrio Nmero de colunas.

Items
ItemIndex

Lista das opes. Cada item uma String e representa um RadioButton.


Nmero inteiro, iniciando em zero, que indica qual das opes foi selecionado.

Descrio dos principais componentes


TPanel
Painel utilizado para agrupar componentes em uma regio.
Propriedade BevelInner Descrio Estilo da moldura interna.

BevelOuter
BevelWidth BorderStyle BorderWidth

Estilo da moldura externa.


Largura das molduras interna e externa. Estilo da borta. Largura da borda.

Descrio dos principais componentes


TComboBox
Lista suspensa onde se escolhe uma opo.
Propriedade Items DropDownCount Style Descrio Lista das opes. Cada item uma String e representa uma opo. Nmero de itens visualizveis por vez. Estilo de formatao do ComboBox. Os mais utilizados so csDropDown e csDropDownList.

Descrio dos principais componentes


TImage
Utilizado para exibir figuras.
Propriedade Center Descrio Indica se a figura ser centralizada no componente.

Picture
Stretch

Figura mostrada.
Indica se o tamanho da figura ser ajustada ao tamanho do componente.

Descrio dos principais componentes


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

FileName
DefaultExt Filter Title Options Mtodo Execute

Nome do arquivo com caminho completo (C:\pasta\texto.txt).


Extenso padro dos arquivos abertos/salvos. Filtro dos tipos de arquivos abertos/salvos. Ttulo da caixa de dilogo. Configuraes mais especficas. Descrio Exibe a caixa de dilogo, retornando True caso o usurio clique em uma opo afirmativa (OK, Salvar etc).

Descrio dos principais componentes


TMainMenu
Menu principal;
Propriedade Items Descrio Itens do menu. aqui onde o menu construdo.

TPopUpMenu
Menu contextual, acessado pelo boto direito do

mouse. Cada componente tem a propriedade PopUpMenu, onde o programador faz a ligao entre o componente e o menu de contexto.
Propriedade Items Descrio Itens do menu contextual.

Descrio dos principais componentes


TMenuItem
Elemento constituinte de um menu principal ou

contextual.
Propriedade Descrio

Checked
GroupIndex RadioGroup

Indica se o item est marcado ou no.


ndice do grupo, assim como no SpeedButton. Indica se somente um item do grupo pode ser marcado.

ShortCut
Hint ShowHint

Tecla de atalho utilizando o teclado.


Dica que aparece quando se posiciona o mouse sobre o tem. Indica se a dica ser mostrada ou no.

Dica valiosa
Crie um diretrio para agrupar seus projetos; Crie uma pasta para cada aplicativo a ser desenvolvido

para armazenar os formulrios, unidades, cones etc;

Com isso, seus programas ficaro organizados;


Para iniciar um novo projeto, clique em File -> New... ->

Project -> Application;

interessante alterar o cone e ttulo dos seus

programas. Para isso, basta ir em Project -> Project Options e fazer as mudanas.

1 Programa
Nosso primeiro aplicativo ser algo bastante simples.

O objetivo ter um primeiro contato com o desenvolvimento de aplicativos grficos.

1 Programa
Abra o Lazarus e altere as seguintes propriedades

no formulrio:
Propriedade BorderStyle Caption Height Name Position Valor bsDialog Meu primeiro programa 130 JanelaPrincipal poDesktopCenter

Width

250

1 Programa
Salve o arquivo;
Para o nome do projeto, coloque MPP; Para o nome da Unit, coloque u_JanelaPrincipal;

Coloque um Label e o modifique da seguinte forma:

Propriedade Name Caption

Valor Rotulo Digite Aqui!

1 Programa
Coloque um Edit e o modifique da seguinte forma:
Propriedade Name Text Width Valor CaixaTexto Em branco 220

Coloque um Boto e o modifique da seguinte forma:


Propriedade Name Caption Valor Botao Clique aqui

1 Programa
Selecione o boto e clique na aba Eventos do

Inspetor de Objetos. Localize o evento OnClick e digite o seguinte cdigo :


Rotulo.Caption := CaixaTexto.Text;

Com isso, quando o usurio clicar no boto, o

contedo que estiver digitado no Edit ser copiado para o Label.

1 Programa

2 Programa
Nosso segundo aplicativo ser igualmente simples ao

primeiro projeto. O objetivo ampliar o contato com o desenvolvimento de aplicativos grficos por meio da construo de uma Gangorra Eletrnica.

2 Programa
Abra o Lazarus e altere as seguintes propriedades

no formulrio:
Propriedade BorderStyle Caption Height Name Position Valor bsDialog Gangorra Eletrnica 105 JanelaPrincipal poDesktopCenter

Width

250

2 Programa
Salve o arquivo;
Para o nome do projeto, coloque Gangorra; Para o nome da Unit, coloque u_JanelaPrincipal.

Coloque um Label e o modifique da seguinte forma:


Propriedade Name Caption Font -> Size Valor Rotulo Gangorra Eletrnica 20

2 Programa
Coloque trs botes e os modifique da seguinte

forma:
Boto Caption Name Enabled

1 2
3

ON OFF
Sair

Botao_1 Botao_2
Botao_Sair

True False
True

2 Programa
Selecione o boto 1 e clique na aba Eventos do

Inspetor de Objetos. Localize o evento OnClick e digite o seguinte cdigo :


Botao_1.Caption := 'OFF'; Botao_1.Enabled := False; Botao_2.Caption := 'ON'; Botao_2.Enabled := True;

2 Programa
Selecione o boto 2 e clique na aba Eventos do

Inspetor de Objetos. Localize o evento OnClick e digite o seguinte cdigo :


Botao_2.Caption := 'OFF'; Botao_2.Enabled := False; Botao_1.Caption := 'ON'; Botao_1.Enabled := True;

2 Programa
Selecione o boto Sair e clique na aba Eventos do

Inspetor de Objetos. Localize o evento OnClick e digite o seguinte mtodo:


Close;

O evento OnClick de um objeto ocorre quando o

mesmo clicado;
Nesse exemplo, as propriedades Enabled e Caption so

alteradas sempre que os evento OnClick dos botes 1 e 2 ocorrem. O programa fechado quando o evento OnClick do boto 3 chamado.

2 Programa

Calculadora
Nosso terceiro aplicativo ser uma calculadora.

Calculadora
Abra o Lazarus e altere as seguintes propriedades

no formulrio:
Propriedade BordersIcons Border Style Caption Height Name Valor biMaximize: false | biHelp: false bsSingle Calculadora 300 frm_Calculadora

Position Width

poDesktopCenter 250

Calculadora
Salve o arquivo;
Para o nome do projeto, coloque Calculadora; Para o nome da Unit, coloque u_Calculadora;

Coloque um Edit e o modifique da seguinte forma:


Propriedade Name Alignment Text Width Valor Visor taRightJustify 0 235

Calculadora
Colocaremos 16 TButtons. Todos tero as seguintes

propriedades:
Propriedade Height Width Valor 45 45

Calculadora
10 botes tero as seguintes propriedades:
Name Original Button1 Button2 Button3 Button4 Button5 Button6 Button7 Button8 Button9 Button10 Caption 1 2 3 4 5 6 7 8 9 0 Name Bt_1 Bt_2 Bt_3 Bt_4 Bt_5 Bt_6 Bt_7 Bt_8 Bt_9 Bt_0

Calculadora
6 botes tero as seguintes propriedades:
Name Original Button11 Button12 Button13 Button14 Button15 Button16 Caption + * / , = Name Bt_soma Bt_subtracao Bt_multiplicacao Bt_divisao Bt_virgula Bt_igual

Calculadora
A calculadora deve ter a seguinte aparncia:

Calculadora
Com a janela finalizada, chegou o momento de

desenvolver o cdigo de nossa calculadora;

Declare as seguintes variveis globais: Valor_1: Real; Valor_2: Real; Total: Real; Operacao: Integer; LimparTela: Boolean; Essas variveis devem ser colocadas abaixo da varivel

frm_Calculadora: Tfrm_Calculadora;

Calculadora
No evento OnShow da janela frm_Calculadora, coloque o seguinte

cdigo:

LimparTela := True;

No evento OnClick de cada boto numrico, coloque o seguinte cdigo:

if LimparTela then Begin Visor.Text := ''; Visor.Text := 'X'; LimparTela := False; end else Visor.Text := Visor.Text + 'X';
X vai de 0 at 9, dependendo do boto;

Calculadora
Coloque o seguinte cdigo no evento OnClick do

boto virgula(,):
Visor.Text := Visor.Text + ',';

Com isso, o Visor receber o valor do boto clicado.

Calculadora
No evento OnClick do boto adio, coloque o

seguinte cdigo: if (Visor.Text <> '') then begin Valor_1 := StrToFloat(Visor.Text); Operacao := 1; LimparTela := True; end;

Calculadora
No evento OnClick do boto subtrao, coloque o

seguinte cdigo: if (Visor.Text <> '') then begin Valor_1 := StrToFloat(Visor.Text); Operacao := 2; LimparTela := True; end;

Calculadora
No evento OnClick do boto multiplicao,

coloque o seguinte cdigo: if (Visor.Text <> '') then begin Valor_1 := StrToFloat(Visor.Text); Operacao := 3; LimparTela := True; end;

Calculadora
No evento OnClick do boto diviso, coloque o

seguinte cdigo: if (Visor.Text <> '') then begin Valor_1 := StrToFloat(Visor.Text); Operacao := 4; LimparTela := True; end;

Calculadora
No evento OnClick do boto igual, coloque o seguinte cdigo:

if (Visor.Text <> '') then begin


Valor_2 := StrToFloat(Visor.Text); Case Operacao of 1: Begin Total := Valor_1 + Valor_2; Visor.Text := FloatToStr(Total); end; 2: Begin Total := Valor_1 - Valor_2; Visor.Text := FloatToStr(Total); end;

Calculadora
3: Begin Total := Valor_1 * Valor_2; Visor.Text := FloatToStr(Total); end; 4: Begin if Valor_2 <> 0 then Begin Total := Valor_1 / Valor_2; Visor.Text := FloatToStr(Total); end else Begin Visor.Text:= 'Erro!'; end; end; end; LimparTela := True;

end;

Calculadora

Editor de textos
Nosso quarto aplicativo ser um editor de textos.

Editor de textos
Inicie o Lazarus e crie uma nova aplicao;
Mude a propriedade Name do formulrio para

frmPrincipal; de Textos;

Mude a propriedade Caption do formulrio para Editor

Mude a propriedade WindowState do formulrio para

wsMaximized;

Salve, escolhendo Editor para nome do projeto e

u_Principal para nome da Unit.

Editor de textos

Adicione um Main Menu ao formulrio com a seguinte estrutura:

Arquivo

Novo Abrir Salvar ---------Sair Recortar Copiar Colar ---------Alinhamento


Esquerda Centralizado Direita Fonte... Cor... ---------Negrito Itlico Sublinhado

Editar

Formatar Fonte...

Ajuda

Sobre

Editor de textos
Altere a propriedade Checked do Item

Alinhamento -> Esquerda para True;

Isso necessrio, pois o alinhamento default de

nosso editor ser esquerda.

Editor de textos
Altere a propriedade ShortCut de cada item

conforme a tabela abaixo.


Opo Atalho Opo Alinhamento Esquerda Alinhamento Central Alinhamento Direita Negrito Itlico Sublinhado Sobre Atalho Ctrl + Alt + L Ctrl + Alt + C Ctrl + Alt + R Ctrl + Alt + N Ctrl + Alt + I Ctrl + Alt + U F12

Novo
Abrir Salvar Sair

Ctrl + N
Ctrl + O Ctrl + S Ctrl + Q

Recortar
Copiar Colar

Ctrl + X
Ctrl + C Ctrl + V

Editor de textos
Adicione um Memo (aba Standard); Altere a propriedade Name para Texto;

Altere a propriedade Align para alClient;


Altere a propriedade ScrollBars para ssVertical; Deixe a propriedade Lines vazia.

Editor de textos
Adicione um TOpenDialog (aba Dialogs); Adicione um TSaveDialog (aba Dialogs); Adicione um TFontDialog (aba Dialogs);

Adicione um TColorDialog (aba Dialogs).

Editor de textos
Nosso projeto deve estar assim:

Editor de textos
No evento OnClick do item Arquivo -> Novo do

Main Menu do formulrio Principal digite o seguinte cdigo:


Texto.Clear;

No evento OnClick do item Arquivo -> Sair do

Main Menu do formulrio Principal digite o seguinte cdigo:


Close;

Editor de textos
No evento OnClick do item Editar-> Recortar do
Texto.CutToClipboard;

Main Menu do formulrio Principal digite o seguinte cdigo:

No evento OnClick do item Editar-> Copiar do Main


Texto.CopyToClipboard;

Menu do formulrio Principal digite o seguinte cdigo:

No evento OnClick do item Editar-> Colar do Main


Texto.PasteFromClipboard;

Menu do formulrio Principal digite o seguinte cdigo:

Editor de textos
As caixas de dilogos (abrir, salvar, configuraes da

fonte etc) so exibidas no programa pelo mtodo Execute; OK;

O mtodo retorna True se o usurio clicar no boto

O mtodo retorna False se o usurio fechar a caixa de

dilogo ou clicar em Cancelar;

No primeiro caso, o programa respoder s alteraes

da caixa de dilogo exibida.

Editor de textos
No evento OnClick do item Arquivo -> Abrir do

Main Menu do formulrio Principal digite o seguinte cdigo:


If OpenDialog1.Execute then Texto.Lines.LoadFromFile(OpenDialog1.FileName);
Ou seja, se o usurio selecionar um arquivo de texto

pela caixa de dilogo e clicar em OK, o contedo do mesmo ser carregado para as linhas do Memo Texto.

Editor de textos
No evento OnClick do item Arquivo -> Salvar do

Main Menu do formulrio Principal digite o seguinte cdigo:


If SaveDialog1.Execute then Texto.Lines.SaveToFile(SaveDialog1.FileName);
Ou seja, se o usurio selecionar um diretrio e um

nome de arquivo pela caixa de dilogo e clicar em OK, o contedo das linhas do Memo Texto ser salvo no local escolhido.

Editor de textos
Altere as seguintes propriedades do OpenDialog e

do SaveDialog adicionados para que o programa abra e salve arquivos no formato.txt;


Coloque .txt na propriedade DefaultExt; Coloque os seguintes filtros na propriedade Filter;
Filter Name Arquivos de texto Todos os arquivos Filter *.txt *.*

Editor de textos
No evento OnClick do item Editar -> Formatar

Fonte... -> Fonte do Main Menu do formulrio Principal digite o seguinte cdigo:
FontDialog1.Font := Texto.Font; If FontDialog1.Execute then Texto.Font := FontDialog1.Font;

Primeiramente a fonte inicializada. Em seguida, se o

usurio selecionar uma fonte pela caixa de dilogo e clicar em OK, o contedo da mesma ser carregado para as linhas do Memo Texto.

Editor de textos
No evento OnClick do item Editar -> Formatar

Fonte... -> Cor do Main Menu do formulrio Principal digite o seguinte cdigo:
ColorDialog1.Color := Texto.Font.Color; If ColorDialog1.Execute then Texto.Font.Color := ColorDialog1.Color;

Primeiramente a cor inicializada. Em seguida, se o

usurio selecionar uma cor pela caixa de dilogo e clicar em OK, o contedo da mesma ser carregado para as linhas do Memo Texto.

Editor de textos
No evento OnClick do item Editar -> Alinhamento ->

Esquerda do Main Menu do formulrio Principal digite o seguinte cdigo:


Mn_Esquerda.Checked:= True; Texto.Alignment := taLeftJustify; Mn_Centralizado.Checked := False; Mn_Direita.Checked := False;
atribudo True para o valor da propriedade Checked do

objeto Mn_Esquerda. Em seguida, o texto alinhado esquerda e as outras opes de alinhamento tem valor False atribudo a suas propriedades Checked.

Editor de textos
No evento OnClick do item Editar -> Alinhamento ->

Centralizado do Main Menu do formulrio Principal digite o seguinte cdigo:


Mn_Centralizado.Checked:= True; Texto.Alignment := taCenter; Mn_Esquerda.Checked := False; Mn_Direita.Checked := False;
atribudo True para o valor da propriedade Checked do

objeto Mn_Centralizado. Em seguida, o texto centralizado e as outras opes de alinhamento tem valor False atribudo a suas propriedades Checked.

Editor de textos
No evento OnClick do item Editar -> Alinhamento ->

Direita do Main Menu do formulrio Principal digite o seguinte cdigo:


Mn_Direita.Checked:= True; Texto.Alignment := taRightJustify; Mn_Centralizado.Checked := False; Mn_Esquerda.Checked := False;
atribudo True para o valor da propriedade Checked do

objeto Mn_Direita. Em seguida, o texto alinhado direita e as outras opes de alinhamento tem valor False atribudo a suas propriedades Checked.

Editor de textos
No evento OnClick do item Editar -> Formatar Fonte... ->

Negrito do Main Menu do formulrio Principal digite o seguinte cdigo:


Mn_Negrito.Checked := Not Mn_Negrito.Checked; If Mn_Negrito.Checked = True then Texto.Font.Style := Texto.Font.Style + [fsBold] else Texto.Font.Style := Texto.Font.Style - [fsBold];

O valor da propriedade Checked do objeto Mn_Negrito

invertido, pois se a mesma estiver true e ocorreu um clique no boto, sinal que o usurio deseja desmarcar essa opo. Em seguida, feito um teste. Se a propriedade Checked for igual a True, o estilo Negrito adicionado ao estilo da fonte do Memo Texto.

Editor de textos
No evento OnClick do item Editar -> Formatar Fonte... ->

Itlico do Main Menu do formulrio Principal digite o seguinte cdigo:


Mn_Italico.Checked := Not Mn_Italico.Checked; If Mn_Italico.Checked = True then Texto.Font.Style := Texto.Font.Style + [fsItalic] else Texto.Font.Style := Texto.Font.Style - [fsItalic];

O valor da propriedade Checked do objeto Mn_Italico

invertido, pois se a mesma estiver true e ocorreu um clique no boto, sinal que o usurio deseja desmarcar essa opo. Em seguida, feito um teste. Se a propriedade Checked for igual a True, o estilo Itlico adicionado ao estilo da fonte do Memo Texto.

Editor de textos
No evento OnClick do item Editar -> Formatar Fonte... ->

Sublinhado do Main Menu do formulrio Principal digite o seguinte cdigo:


Mn_Sublinhado.Checked := Not Mn_Sublinhado.Checked; If Mn_Sublinhado.Checked = True then Texto.Font.Style := Texto.Font.Style + [fsUnderline] else Texto.Font.Style := Texto.Font.Style - [fsUnderline];

O valor da propriedade Checked do objeto Mn_Sublinhado

invertido, pois se a mesma estiver true e ocorreu um clique no boto, sinal que o usurio deseja desmarcar essa opo. Em seguida, feito um teste. Se a propriedade Checked for igual a True, o estilo Sublinhado adicionado ao estilo da fonte do Memo Texto.

Editor de textos
Para criarmos a janela Sobre, utilizaremos o

mtodo MessageBox pertencente a aplicao;


Esse mtodo possui trs parmetros:
O primeiro o texto que aparecer no corpo da caixa

de mensagem; O segundo o ttulo da caixa de mensagem; O terceiro um inteiro que representa um conjunto de cone e botes que aparecer na caixa de mensagem.

Editor de textos
No evento OnClick do item Ajuda -> Sobre do

Main Menu do formulrio Principal digite o seguinte cdigo:


Application.MessageBox('Verso 1.0 do editor de

texto','Sobre o Editor de Texto', 0);


Consulte a documentao para um conjunto

diferente de cone e botes.

Editor de textos
Adicione um TToolBar (aba Common Controls);

Apertando com o boto direito do mouse no

ToolBar que acabamos de colocar, adicione botes, separadores e botes de checagem (Check Botton) de acordo com a figura:
Separator

Separator

Separator

Separator

Botton

Botton

Check Botton

Check Botton

Botton

Editor de textos
Adicione um TImageList (aba Common Controls);

Apertando com o boto direito do mouse no

ImageList que acabamos de colocar, selecione a opo ImageList Editor...;


Adicione os cones (disponveis na pasta ICO).

Altere a ordem utilizando as opes disponveis caso seja necessrio. Clique em OK.

Editor de textos
Selecione o ToolBar que foi adicionado e altere a

propriedade Images para ImageList1;

Altere as propriedades de cada elemento do

ToolBar de acordo com a tabela a seguir:

Editor de textos
Boto ToolButton1 ToolButton2 Name Tb_Novo Tb_Abrir Image Index 0 1 Boto ToolButton8 ToolButton9 Name Tb_Centralizado Tb_Direita Image Index 7 8

ToolButton3
ToolButton4 ToolButton5 ToolButton6 ToolButton7

Tb_Salvar
Tb_Recortar Tb_Copiar Tb_Colar Tb_Esquerda

2
3 4 5 6

ToolButton10
ToolButton11 ToolButton12 ToolButton13 TollButton14

Tb_Negrito
Tb_Italico Tb_Sublinhado Tb_Ajuda Tb_Sair

9
10 11 12 13

A propriedade Image Index vincula cada boto na

barra de ferramenta com um cone armazenado na ImageList que adicionamos, seguindo a ordem preestabelecida.

Editor de textos
Selecione o Tb_Esquerda e altere a propriedade Down

para True;

Isso se deve ao fato de o texto estar alinhado esquerda

quando o aplicativo aberto;

Selecione o Tb_Esquerda, Tb_Centralizar e Tb_Direita

(utilizando o shift) e altere a propriedade Grouped para True; alinhamento, as outras sero desmarcadas.

Com isso, quando selecionarmos uma opo de

Editor de textos
Como os atalhos criados so equivalentes s opes

programadas no Menu Principal, reaproveitaremos todos os eventos OnClick do Menu Principal na barra de ferramentas;
ferramentas tem como evento OnClick o mesmo evento OnClick do boto Novo localizado no Menu Principal; OnClick respectivo opo do menu Principal, conforme tabela a seguir.

Por exemplo: O boto Novo localizado na barra de

Para isso, em cada boto do ToolBar, selecione o evento

Editor de textos

Boto Tb_Novo Tb_Abrir Tb_Salvar Tb_Recortar Tb_Copiar

Evento OnClick Mn_Novo Mn_Abrir Mn_Salvar Mn_Recortar Mn_Copiar

Boto Tb_Centralizado Tb_Direita Tb_Negrito Tb_Italico Tb_Sublinhado Tb_Ajuda Tb_Sair

Evento OnClick Mn_Centralizado Mn_Direita Mn_Negrito Mn_Italico Mn_Sublinhado Mn_Ajuda Mn_Sair

Tb_Colar
Tb_Esquerda

Mn_Colar
Mn_Esquerda

Editor de textos
Note que quando clicamos em algum tipo de

alinhamento ou estilo pelo menu principal, o boto na barra de ferramentas no altera seu aspecto para pressionado;
O mesmo ocorre no menu principal quando

clicamos pela barra de ferramentas;


Logo, para o programa ficar mais coeso, devemos

adicionar algumas alteraes.

Editor de textos
Adicione o seguinte texto no evento OnClick Mn_EsquerdaClick: Tb_Esquerda.Down := Mn_Esquerda.Checked; Adicione o seguinte texto no evento OnClick

Mn_CentralizadoClick:

Tb_Centralizado.Down := Mn_Centralizado.Checked;

Adicione o seguinte texto no evento OnClick Mn_DireitaClick: Tb_Direita.Down := Mn_Direita.Checked.

Assim, quando determinado evento se manifestar, o valor

verdadeiro ou falso da propriedade Checked do objeto do menu principal ser atribudo propriedade Down do objeto da barra de ferramenta.

Editor de textos
Adicione o seguinte texto no evento OnClick Mn_NegritoClick: Tb_Negrito.Down := Mn_Negrito.Checked; Adicione o seguinte texto no evento OnClick Mn_ItalicoClick: Tb_Italico.Down := Mn_Italico.Checked;

Adicione o seguinte texto no evento OnClick

Mn_SublinhadoClick:

Tb_Sublinhado.Down := Mn_Sublinhado.Checked.

Assim, quando determinado evento se manifestar, o valor

verdadeiro ou falso da propriedade Checked do objeto do menu principal ser atribudo propriedade Down do objeto da barra de ferramenta.

Editor de textos

Banco de dados
Um Banco de dados um conjunto de dados inter-

relacionados, constituindo informaes sobre um determinado assunto;

Banco de Dados Relacional: Tipo de B.D. mais comum; Os dados so organizados em tabelas bidimensionais; Exemplos: Cadastro de clientes; Cadastro de fornecedores; Estoque.

Banco de dados Conceitos Importantes


Entidade Objetos sobre os quais se mantem informaes; Cada entidade est representa uma tabela; Atributos Caractersticas especficas de cada entidade; Cada atributo uma coluna de uma tabela; Registro Informao especfica sobre um representante da entidade; Cada registro uma linha de uma tabela; Chave primria Identificador exclusivo para cada registro; um atributo especial.

Banco de dados Relacionamentos


Os relacionamentos representam as ligaes entre as

tabelas. Podem ser dos seguintes tipos:


Um para um

Quando os campos das duas tabelas relacionadas so chaves

primrias; o relacionamento mais raro;


Um para muitos

Quando o campo da primeira tabela relacionada chave primria e

o campo da segunda no chave primria; o relacionamento mais comum;


Muitos para muitos

Quando os campos das duas tabelas relacionadas no so chaves

primrias; No ocorre na prtica, pois h muita redundncia. Para evitar isso, utilizado dois relacionamentos Um para muitos.

Banco de dados SGBD


Um Sistema Gerenciador de Banco de Dados um

software utilizado para:


Definir a estrutura de armazenamento de informaes

em um Banco de Dados; Fornecer meios para manipula-lo e consulta-lo;


Seus principais recursos so:
Linguagem de definio de dados;

Dicionrio de dados;
Linguagem de manipulao de dados.

Banco de dados Linguagem de definio de dados


utilizada para definir a estrutura bsica do banco

de dados;

Cria-se as tabelas;

Define-se os seus campos.

Banco de dados Dicionrio de dados


Contem as definies dos elementos de dados

juntamente com suas caractersticas;


Possui o nome, tipo, tamanho, descrio e formato

de todos os campos;
Dentre outras informaes, indica o histrico de

uso e quem pode usar cada elemento de dado.

Banco de dados Linguagem de manipulao de dados


Utilizada para manipular dados. As aes bsicas

so:
Acrescentar; Alterar; Apagar; Recuperar;

A linguagem mais utilizada a SQL (Structured

Query Language).

Banco de dados Operaes em SQL


Select Consulta registros de tabelas que obedecem a determinados parmetros; Sintaxe:
Select *Campos* From *Tabelas* Where *Parmetros*;

Update Altera os valores dos registros de tabelas;

Delete Remove registros de tabelas.

SQLite3
SQLite uma biblioteca que prov um motor de

banco de dados SQL;


No h necessidade de um servidor ou

configurao;
Est disponvel para Window, Linux e Mac OS; Pode-se fazer aplicativos comerciais sem pagar

nada aos criadores do SQLite.

Baixando o SQLite3
V ao site oficial e click em Downloads;
http://www.sqlite.org/

Procure a parte Precompiled Binaries For

Windows;
Baixe o arquivo sqlite-dll-win32-x86-

XXXXXXX.zip;
uma DLL de aproximadamente 280 kb.

Instalando o SQLite3
Instalar o SQLite muito simples. Basta

descompactar o DLL que voc baixou na pasta:


C:\Windows\System32 se voc usa o Windows XP ou

anteriores;
C:\Windows\System32 se voc usa o Windows Vista

ou Seven 32 bits;
C:\Windows\SysWOW64 se voc usa o Windows

Vista ou Seven 64 bits.

SQLite Studio
SQLite Studio aplicativo bem simples que

utilizaremos para criar o nosso banco de dados e as suas tabelas com seus respectivos campos;
Est disponvel para Windows, Linux e Mac OS;
Pode-se fazer aplicativos comerciais sem pagar

nada aos criadores do SQLite Studio.

Instalando o SQLite Studio


V ao site oficial e click em Downloads;
http://sqlitestudio.one.pl/

Escolha a verso adequada, dependendo de seu

sistema operacional;

Basta rodar. O programa no possui instalador.

Cadastro de Clientes
Nosso quinto aplicativo

ser um Cadastro de Clientes utilizando um banco de dados;

O SQLite 3 deve estar

devidamente instalado;

Retirei esse tutorial do

site http://professorcarlos.bl ogspot.com/, adaptando alguns detalhes.

Cadastro de Clientes Estruturando o BD


Utilizando o SQLite Studio, crie um banco de dados chamado

Banco.db e o salve na pasta do projeto; propriedades:

Adicione duas tabelas com os seguintes nomes, campos e


Cidade id_cidade -> Integer, Primary Key Nome -> Varchar(30) Cliente Id_cliente -> Integer, Primary Key Nome -> Varchar(40) Endereco -> Varchar(40) Id_cidade -> Integer, Foreign Key Telefone -> Varchar(14) Tipo -> Char(1)

Cadastro de Clientes Formulrio Principal


Inicie o Lazarus e crie uma nova aplicao; Adicione um Main Menu ao formulrio com a seguinte

estrutura:
Arquivo Sair Cadastro Cidade Cliente Consulta Cidade Cliente

Cadastro de Clientes Formulrio Principal


No evento OnClick do item Arquivo-> Sair do Main Menu do

formulrio Princial digite o seguinte cdigo:


Close;

Mude a propriedade Name desse form para frmPrincipal ; Mude a propriedade BorderStyle desse form para bsSingle; Mude a propriedade Caption desse form para Cadastro de

Clientes;

Salve, escolhendo Clientes para nome do projeto e u_principal

para nome da Unit.

Cadastro de Clientes Data Module


Adicione um Data Module. Para isso, selecione o

menu Arquivo -> Novo. Selecione Data Module , no grupo Mdulo e pressione o boto OK;
Mude a propriedade Name do Data Module para

dmDados e mande salvar. O nome da Unit do dmDados deve ser u_dmdados.

Cadastro de Clientes Data Module


Adicione um TSQLite3Connection (aba SQLdb) no

DataModule;

Altere a propriedade Name para dbCliente;

Na propriedade DatabaseName coloque banco.db

(sem aspas);

Mude a propriedade Connected para True a fim de

testar se a conexo pode ser estabelecida. Se no ocorrer nenhum erro, tudo est OK;

Mude a propriedade Connected para False.

Cadastro de Clientes Data Module


Adicione um TSQLTransaction (aba SQLdb) no

DataModule;
Altere a propriedade Name para trGeral; Selecione dbCliente na propriedade Database; Selecione o SQLite3Connection que voc adicionou

no Data Module e escolha trGeral na propriedade Transaction.

Cadastro de Clientes Data Module


Adicione um TSQLQuery (aba SQLdb) no

DataModule;
Altere a propriedade Name para queCidade; Selecione dbCliente na propriedade Database; Digite select * from cidade na propriedade SQL; Selecione trGeral na propriedade Transaction.

Cadastro de Clientes Data Module


Adicione outro TSQLQuery (aba SQLdb) no

DataModule;
Altere a propriedade Name para queCliente; Selecione dbCliente na propriedade Database; Digite select * from cliente na propriedade SQL; Selecione trGeral na propriedade Transaction.

Cadastro de Clientes Data Module


Adicione um TDataSource (aba Data Access) no

DataModule;
Altere a propriedade Name para dsCidade; Selecione queCidade em DataSet.

Cadastro de Clientes Data Module


Adicione outro TDataSource (aba Data Access)

no DataModule;
Altere a propriedade Name para dsCliente; Selecione queCliente em DataSet.

Cadastro de Clientes Data Module


Resumo: SQLite3Connection
Estabelece a conexo com o banco de dados;

TSQLTransaction Controla as transaes; TSQLQuery Define uma conexo com uma tabela do banco; TDataSource Estabelece uma ligao entre a tabela e os componentes grficos que iro ler os campos dessa tabela.

Cadastro de Clientes Data Module


Nesse estgio, o data module deve estar assim:

Cadastro de Clientes Formulrio Principal


Selecione o formulrio principal e, em sua respectiva Unit,

adicione u_dmdados em Uses;


data module;

Isso faz com que o formulrio principal acesse os objetos do

Selecione o formulrio principal. Clique na aba Eventos do

Inspetor de Objetos. Localize o evento OnShow e digite o seguinte cdigo:


dmDados.dbCliente.Open;

Com isso, a conexo com o banco de dados ser estabeleida

sempre que o programa for inicializado.

Cadastro de Clientes Formulrio Cidade


Devemos criar uma janela para adicionar, remover

e editar os registros da tabela Cidade;


O desenho desse form deve ter a seguinte

aparncia:

Cadastro de Clientes Formulrio Cidade


Insira um novo form na aplicao; Altere a propriedade Name para frmCidade;

Altere a propriedade Caption para Cidades;


Salve, utilizando u_cidade como o nome da Unit.

Cadastro de Clientes Formulrio Cidade


Digite u_dmdados no Uses da Unit do formulrio

Cidades;

Isso faz com que esse formulrio acesse os objetos

do Data Module.

Cadastro de Clientes Formulrio Cidade


Adicione um Tpanel (aba Standard); Altere a propriedade Align para alTop;

Deixe a propriedade Caption vazia;


Altere a propriedade BevelInner para bvLowered; Altere a propriedade BevelOuter bvRaised.

Cadastro de Clientes Formulrio Cidade


Adicione um TDBNavigator (aba Data Controls)

sobre o painel;
Altere a propriedade DataSource para dsCidade; Adicione dois TDBEdit (aba Data Controls) no

form Cidade.

Cadastro de Clientes Formulrio Cidade


No primeiro TDBEdit :
Altere a propriedade Name para edIdCidade;
Altere a propriedade DataSource para dsCidade; Digite ID_CIDADE em DataField (Provocar um erro,

mas basta clicar em OK);


No segundo TDBEdit:
Altere a propriedade Name para edNome;

Altere a proprieade DataSource para dsCidade;


Digite NOME em DataField(Provocar um erro, mas

basta clicar em OK).

Cadastro de Clientes Formulrio Cidade


Adicione dois TLabel (aba Standard) e coloque um

esquerda de cada TDBEdit para identific-los;

Altere suas propriedades Caption para ID e Nome,

respectivamente.

Cadastro de Clientes Formulrio Cidade


Adicione um TSpeedButton (aba Additional) sobre o painel; Altere a propriedade Name para btnSair; Altere a propriedades Caption para Sair; Altere a propriedades Height para 25; Altere a propriedades Widrh para 25;

Clique na aba Eventos do Inspetor de Objetos. Localize o

evento OnClick deste boto e digite:


Close;

Cadastro de Clientes Formulrio Cidade


Vamos programar a abertura e o fechamento da

Query no formulrio cidade;

A abertura ser programada no evento OnShow;

O fechamento ser programado no evento

OnClose.

Cadastro de Clientes Formulrio Cidade


Selecione o formulrio Cidade. Clique na aba

Eventos do Inspetor de Objetos. Localize o evento OnShow e digite o seguinte cdigo:


dmDados.queCidade.Open;

No evento OnClose do formulrio Cidade digite o

seguinte cdigo:
dmDados.queCidade.Close.

Cadastro de Clientes Enviando os dados


Vamos programar o envio dos dados para o banco;

Isso feito no evento AfterPost da Query;

Este evento ocorre sempre depois que um registro

gravado no banco.

Cadastro de Clientes Data Module


Selecione o queCidade presente no DataModule;

Clique na aba Eventos do Inspetor de Objetos.

Localize o evento AfterPost e digite o seguinte cdigo:

Cadastro de Clientes Data Module


procedure TdmDados.queCidadeAfterPost(DataSet: TDataSet); var posicao: TBookMark; begin try posicao := queCidade.GetBookmark; queCidade.ApplyUpdates; if trGeral.Active then begin trGeral.CommitRetaining; queCidade.GotoBookmark(posicao); end; except trGeral.Rollback; end; end;

Cadastro de Clientes Data Module


Clique na aba Eventos do Inspetor de Objetos.

Localize o evento AfterDelete e selecione queCidadeAfterPost;

Assim, o cdigo que executa a mesma operao

necessria no AfterDelete reaproveitado.

Cadastro de Clientes Formulrio Principal


Vamos programar a abertura do formulrio Cidade

(frmCidade) a partir no formulrio Principal (frmPrincipal);


digite u_cidade no Uses; formulrio Cidade;

Selecione a Unit do formulrio Principal (u_principal) e

Isso faz com que esse formulrio acesse os objetos do

No evento OnClick do item Cadastros -> Cidades do


frmCidade.Show;

Main Menu do formulrio Princial digite o seguinte cdigo:

Cadastro de Clientes Formulrio Cliente


Devemos criar uma janela para adicionar, remover

e editar os registros da tabela Cliente;


O desenho desse form deve

ter a seguinte aparncia:

Cadastro de Clientes Formulrio Cliente


Insira um novo form na aplicao; Altere a propriedade Name para frmCliente;

Altere a propriedade Caption para Clientes;


Salve, utilizando u_cliente como o nome da Unit.

Cadastro de Clientes Formulrio Cliente


Digite u_dmdados no Uses da Unit do formulrio

Cliente;

Isso faz com que esse formulrio acesse os objetos

do Data Module.

Cadastro de Clientes Formulrio Cliente


Adicione um Tpanel (aba Standard); Altere a propriedade Align para alTop;

Deixe a propriedade Caption vazia;


Altere a propriedade BevelInner para bvLowered; Altere a propriedade BevelOuter bvRaised.

Cadastro de Clientes Formulrio Cliente


Adicione um TDBNavigator (aba Data Controls)

sobre o painel;

Altere a propriedade DataSource para dsCliente.

Cadastro de Clientes Formulrio Cliente


Adicione um TSpeedButton (aba Additional) sobre o painel; Altere a propriedade Name para btnSair; Altere a propriedades Caption para Sair; Altere a propriedades Height para 25; Altere a propriedades Widrh para 25;

Clique na aba Eventos do Inspetor de Objetos. Localize o

evento OnClick deste boto e digite:


Close;

Cadastro de Clientes Formulrio Cliente


Adicione dois TDBEdit (aba Data Controls ) no form

Cliente;

No primeiro TDBEdit : Altere a propriedade Name para edIdCliente; Altere a propriedade DataSource para dsCliente; Digite ID_CLIENTE em DataField (Provocar um erro, mas basta clicar em OK);
No segundo TDBEdit: Altere a propriedade Name para edNome; Altere a proprieade DataSource para dsCliente; Digite NOME em DataField(Provocar um erro, mas basta clicar em OK).

Cadastro de Clientes Formulrio Cliente


Adicione dois TLabel (aba Standard) e coloque um

esquerda de cada TDBEdit para identific-los;

Altere suas propriedades Caption para ID e Nome,

respectivamente.

Cadastro de Clientes Formulrio Cliente


Adicione um TDBLookupComboBox (aba Data

Controls) no form Cliente;

Altere a propriedade Name para dblIdCidade.

Cadastro de Clientes Formulrio Cliente


Altere a propriedade DataSource para dsCliente; Altere a propriedade DataField para ID_CIDADE;

Altere a propriedade ListSource para dsCidade;


Altere a propriedade ListField para NOME; Altere a propriedade KeyField para ID_CIDADE.

Cadastro de Clientes Formulrio Cliente


Altere a propriedade Sorted para True;

Altere a propriedade Style para dsDropDownList.

Cadastro de Clientes Formulrio Cliente


Adicione um TLabel (aba Standard) para

identificar esse campo;

Altere a propriedade Caption para Cidade.

Cadastro de Clientes Formulrio Cliente


Adicione um TDBEdit (aba Data Controls) no

form Cliente;
Altere a propriedade Name para edTelefone; Altere a propriedade DataSource para dsCliente ;

Digite TELEFONE em DataField (Provocar um

erro, mas basta clicar em OK).

Cadastro de Clientes Formulrio Cliente


Adicione um TLabel (aba Standard) para

identificar este campo;

Altere a propriedade Caption para Telefone.

Cadastro de Clientes Formulrio Cliente


Adicione um TDBRadioGroup (aba Data Controls )

no form Cliente;
Altere a propriedade Caption para Tipo; Altere a propriedade Name para rgTipo; Altere a propriedade DataSource para dsCliente; Altere a propriedade DataField para TIPO.

Cadastro de Clientes Formulrio Cliente


Altere a propriedade Items, digitando Pessoa fsica na

primeira linha e Pessoa jurdica na segunda e pressione OK;


Altere a propriedade Values, digite F na primeria linha e

J na segunda;
A letra F ser gravada no banco de dados quando for

selecionada a opo Pessoa fsica. Caso contrrio, J ser gravado;


Altere a propriedade Columns para 2.

Cadastro de Clientes Formulrio Cliente


Vamos programar a abertura e o fechamento da

Query no formulrio Cliente;

A abertura ser programada no evento OnShow;

O fechamento ser programado no evento

OnClose.

Cadastro de Clientes Formulrio Cliente


Selecione o formulrio Cliente. Clique na aba

Eventos do Inspetor de Objetos. Localize o evento OnShow e digite o seguinte cdigo:


dmDados.queCliente.Open;

No evento OnClose do formulrio Cliente digite o

seguinte cdigo:
dmDados.queCliente.Close;

Cadastro de Clientes Enviando os dados


Vamos programar o envio dos dados para o banco;

Isso feito no evento AfterPost da Query;

Este evento ocorre sempre depois que um registro

gravado no banco.

Cadastro de Clientes Data Module


Selecione o queCliente presente no DataModule;

Clique na aba Eventos do Inspetor de Objetos.

Localize o evento AfterPost e digite o seguinte cdigo:

Cadastro de Clientes Data Module


procedure TdmDados.queClienteAfterPost(DataSet: TDataSet); var posicao: TBookMark; begin try posicao := queCliente.GetBookmark; queCliente.ApplyUpdates; if trGeral.Active then begin trGeral.CommitRetaining; queCliente.GotoBookmark(posicao); end; except trGeral.Rollback; end; end;

Cadastro de Clientes Data Module


Clique na aba Eventos do Inspetor de Objetos.

Localize o evento AfterDelete e selecione queClienteAfterPost;

Assim, o cdigo que executa a mesma operao

necessria no AfterDelete reaproveitado.

Cadastro de Clientes Formulrio Principal


Vamos programar a abertura do formulrio Cliente

(frmCidade) a partir no formulrio Principal (frmPrincipal);


digite u_cliente no Uses; formulrio Cliente;

Selecione a Unit do formulrio Principal (u_principal) e

Isso faz com que esse formulrio acesse os objetos do

No evento OnClick do item Cadastros -> Clientes do


frmCliente.Show;

Main Menu do formulrio Princial digite o seguinte cdigo:

Cadastro de Clientes Consulta Cidade


Devemos criar uma janela para consultar os

registros da tabela Cidade;


O desenho desse

form deve ter a seguinte aparncia:

Cadastro de Clientes Data Module


Adicione um TSQLQuery (aba SQLdb) no

DataModule;
Altere a propriedade Name para queConsCidade; Selecione dbCliente na propriedade Database;

Selecione trGeral na propriedade Transaction.

Cadastro de Clientes Data Module


Adicione um TDataSource (aba Data Access) no

DataModule;
Altere a propriedade Name para dsConsCidade; Selecione queConsCidade em DataSet.

Cadastro de Clientes Consulta Cidade


Insira um novo form na aplicao; Altere a propriedade Name para frmConsCidade;

Altere a propriedade Caption para Consulta de

cidades;
Salve, utilizando u_conscidade como o nome da

Unit.

Cadastro de Clientes Consulta Cidade


Digite u_dmdados no Uses da Unit do formulrio

da Consulta Cidade;

Isso faz com que esse formulrio acesse os objetos

do Data Module.

Cadastro de Clientes Consulta Cidade


Adicione um Tpanel (aba Standard); Altere a propriedade Align para alTop;

Deixe a propriedade Caption vazia;


Altere a propriedade BevelInner para bvLowered; Altere a propriedade BevelOuter bvRaised.

Cadastro de Clientes Consulta Cidade


Adicione um TRadioGroup (aba Standard) no

painel;
Altere a propriedade Caption para Campo; Altere a propriedade Items, digitando Cdigo na

primeira linha e Nome na segunda e pressione OK;


Altere a propriedade Name para rgCampo.

Cadastro de Clientes Consulta Cidade


Adicione um TEdit (aba Standard) no painel; Altere a propriedade Name para edDado;

Delete o contedo da propriedade Text;


Adicione um TLabel (aba Standard); Altere a propriedade Caption para Dado a

consultar.

Cadastro de Clientes Consulta Cidade


Adicione um TDBGrid (aba Data Controls) no form

Cliente;
Altere a propriedade Name para dbgDados; Altere a propriedade DataSource para dsConsCidade; Altere a propriedade Align para alClient; Altere a propriedade Options ->

dgAutoSizeColumns para True.

Cadastro de Clientes Consulta Cidade


Adicione um Tbutton (aba Standard) no painel; Altere a propriedade Name para btnConsultar;

Altere a propriedade Caption para Consultar;


Clique na aba Eventos do Inspetor de Objetos.

Localize o evento OnClick e digite o seguinte cdigo:

Cadastro de Clientes Consulta Cidade


procedure TfrmConsCidade.btnConsultarClick(Sender: TObject); begin with dmDados.queConsCidade do begin Close; SQL.Clear; if rgCampo.ItemIndex = 0 then begin SQL.Add('select * from cidade where id_cidade = :pIdCidade'); Params[0].Value:= StrToInt(edDado.Text); end else begin SQL.Add('select * from cidade where nome like :pNome'); Params[0].Value := edDado.Text + '%'; end; Open; end; end;

Cadastro de Clientes Formulrio Principal


Vamos programar a abertura do formulrio de Consulta

Cidade (frmConsCidade) a partir no formulrio Principal (frmPrincipal);


digite u_conscidade no Uses; formulrio Consulta Cidade;

Selecione a Unit do formulrio Principal (u_principal) e

Isso faz com que esse formulrio acesse os objetos do

No evento OnClick do item Consultas -> Cidade do Main

Menu do formulrio Princial digite o seguinte cdigo:


frmConsCidade.Show;

Cadastro de Clientes Consulta Clientes


Devemos criar uma janela para consultar os

registros da tabela Cliente;


O desenho desse

form deve ter a seguinte aparncia:

Cadastro de Clientes Data Module


Adicione um TSQLQuery (aba SQLdb) no

DataModule;
Altere a propriedade Name para queConsCliente; Selecione dbCliente na propriedade Database;

Selecione trGeral na propriedade Transaction.

Cadastro de Clientes Data Module


Adicione um TDataSource (aba Data Access) no

DataModule;
Altere a propriedade Name para dsConsCliente; Selecione queConsCidade em DataSet.

Cadastro de Clientes Consulta Cliente


Insira um novo form na aplicao; Altere a propriedade Name para frmConsCliente;

Altere a propriedade Caption para Consulta de

clientes;
Salve, utilizando u_conscliente como o nome da

Unit.

Cadastro de Clientes Consulta Cliente


Digite u_dmdados no Uses da Unit do formulrio

da Consulta Cliente;

Isso faz com que esse formulrio acesse os objetos

do Data Module.

Cadastro de Clientes Consulta Cliente


Adicione um TPanel (aba Standard); Altere a propriedade Align para alTop;

Deixe a propriedade Caption vazia;


Altere a propriedade BevelInner para bvLowered; Altere a propriedade BevelOuter bvRaised.

Cadastro de Clientes Consulta Cliente


Adicione um TRadioGroup (aba Standard) no

painel;
Altere a propriedade Caption para Campo; Altere a propriedade Items, digitando Cdigo na

primeira linha e Nome na segunda, Cidade na terceira, Tipo na quarta e pressione OK;
Altere a propriedade Name para rgCampo.

Cadastro de Clientes Consulta Cliente


Adicione um TEdit (aba Standard) no painel; Altere a propriedade Name para edDado;

Delete o contedo da propriedade Text;


Adicione um TLabel (aba Standard) no painel; Altere a propriedade Caption para Dado a

consultar.

Cadastro de Clientes Consulta Cliente


Adicione um TDBLookupComboBox (aba Data

Controls) no painel;

Altere a propriedade Name para dblIdCidade.

Cadastro de Clientes Consulta Cliente


Altere a propriedade DataSource para dsCliente; Altere a propriedade DataField para ID_CIDADE;

Altere a propriedade ListSource para dsCidade;


Altere a propriedade ListField para NOME; Altere a propriedade KeyField para ID_CIDADE.

Cadastro de Clientes Consulta Cliente


Altere a propriedade Sorted para True;

Altere a propriedade Style para dsDropDownList.

Cadastro de Clientes Consulta Cliente


Adicione um TRadioGroup (aba Standard) no painel; Altere a propriedade Caption para Tipo; Altere a propriedade Items, digitando Pessoa fsica na

primeira linha e Pessoa jurdica na segunda e pressione OK;

Altere a propriedade Columns para 2; Altere a propriedade Name para rgTipo.

Cadastro de Clientes Consulta Cliente


Adicione um TDBGrid (aba Data Controls) no

formulrio Consulta Cliente;


Altere a propriedade Name para dbgDados; Altere a propriedade DataSource para dsConsCliente; Altere a propriedade Align para alClient; Altere a propriedade Options ->

dgAutoSizeColumns para True.

Cadastro de Clientes Consulta Cliente


Adicione um Tbutton (aba Standard) no painel; Altere a propriedade Name para btnConsultar;

Altere a propriedade Caption para Consultar;


Clique na aba Eventos do Inspetor de Objetos.

Localize o evento OnClick e digite o seguinte cdigo:

Cadastro de Clientes Consulta Cliente


procedure TfrmConsCliente.btnConsultarClick(Sender: TObject); begin with dmDados.queConsCliente do begin Close; SQL.Clear; case rgCampo.ItemIndex of 0: begin SQL.Add('select cl.id_cliente, cl.nome, cl.endereco, ci.nome, cl.telefone, cl.tipo from cliente as cl, cidade as ci where ci.id_cidade = cl.id_cidade and cl.id_cliente = :pIdCliente'); Params[0].Value:= StrToInt(edDado.Text); end; 1: begin SQL.Add('select cl.id_cliente, cl.nome, cl.endereco, ci.nome, cl.telefone, cl.tipo from cliente as cl, cidade as ci where ci.id_cidade = cl.id_cidade and cl.nome like :pNome'); Params[0].Value := edDado.Text + '%'; end;

Cadastro de Clientes Consulta Cliente


2: begin SQL.Add('select cl.id_cliente, cl.nome, cl.endereco, ci.nome, cl.telefone, cl.tipo from cliente as cl, cidade as ci where ci.id_cidade = cl.id_cidade and ci.nome like :pCiNome'); Params[0].Value := dbIdCidade.Text + '%'; end; 3: begin SQL.Add('select cl.id_cliente, cl.nome, cl.endereco, ci.nome, cl.telefone, cl.tipo from cliente as cl, cidade as ci where ci.id_cidade = cl.id_cidade and cl.tipo like :pTipo'); if rgTipo.ItemIndex = 0 then Params[0].Value := 'F%' else Params[0].Value:= 'J%'; end; end; Open; end; end;

Cadastro de Clientes Consulta Cliente


Selecione o objeto rgCampo; Clique na aba Eventos do Inspetor de Objetos.

Localize o evento OnClick e digite o seguinte cdigo:

Cadastro de Clientes Consulta Cliente


case rgCampo.ItemIndex of 2: begin edDado.Enabled:= false; dbIdCidade.Enabled:= true; rgTipo.Enabled:= false; end; 3: begin edDado.Enabled:= false; dbIdCidade.Enabled := false; rgTipo.Enabled:= true; end; else begin edDado.Enabled:= true; dbIdCidade.Enabled := false; rgTipo.Enabled:= false; end; end;

Cadastro de Clientes Formulrio Principal


Vamos programar a abertura do formulrio de Consulta

Cliente (frmConsCliente) a partir no formulrio Principal (frmPrincipal);


digite u_conscliente no Uses; formulrio Consulta Cliente;

Selecione a Unit do formulrio Principal (u_principal) e

Isso faz com que esse formulrio acesse os objetos do

No evento OnClick do item Consultas -> Cliente do Main

Menu do formulrio Princial digite o seguinte cdigo:


frmConsCliente.Show;

Cadastro de Clientes

Reduzindo o executvel compilado


Os

executveis gerados pelo compilador do Lazarus so grandes porque eles incluem informaes utilizadas pelo depurador (Debugger);

Para o usurio final, essas informaes no tem

utilidade. Por isso recomendado remove-las, por meio de uma compilao diferenciada.

Reduzindo o executvel compilado


Alm disso, um programa vazio no Lazarus j

inclui uma imensa quantia de recursos, tais como:


Biblioteca de manipulao de XML; Biblioteca de manipulao de Imagem para arquivos

png, xpm, bmp e ico; Aproximadamente todos os widgets da Biblioteca de Componentes Lazarus; Toda a Biblioteca de RunTime do Free Pascal;
Sendo assim, o executvel muito grande, mas j

inclui de antemo tudo que uma aplicao sria precisar.

Reduzindo o executvel compilado


O tamanho do executvel do Lazarus inicia grande

e cresce muito devagar;

Um projeto em C++ inicia pequeno, porm

aumenta rapidamente de tamanho quando os recursos so inseridos para escrever uma aplicao sria.

Reduzindo o executvel compilado


Para reduzir o tamanho do executvel basta fazer a

seguinte configurao:
1. Project -> Compiler Options -> Code -> Smart

Linkable (-CX) -> Marcado;


2. Project -> Compiler Options -> Linking -> Debugging

-> Desmarque todos, com exceo de Strip Symbols From Executable (-Xs) que deve ficar marcado;
3. Project -> Compiler Options -> Linking -> Link Style

-> Link Smart (-XX) -> Marcado.

Reduzindo o executvel compilado


Com essa configurao, o executvel ter um

tamanho de aproximadamente 3 megas, em vez de 15 megas;

recomendado fazer essa compilao diferenciada

apenas quando o aplicativo estiver pronto, pois o processo de compilao fica mais lento com as configuraes indicadas, retardando a atividade de desenvolvimento/teste.

Instalador
Utilizaremos o Inno Setup Compiler; gratuito; Pode ser usado em aplicativos comerciais sem pagar

aos criadores;

Fcil de utilizar; Com conhecimento mais profundo, pode ser utilizado

para criao de instaladores complexos.

Inno Setup Compiler - Caractersticas


Compatvel com todas as verses do Windows; Compatvel com aplicativos da arquitetura 64-bits; Criao de um nico executvel, facilitando a redistribuio

online;
XP;

Instaladores com aparncia agradvel com estilo Windows

Tipos de instalao customizvel (Mnimo, padro,

mximo).

Inno Setup Compiler - Caractersticas


Acompanha desinstalador; Instalao de arquivos avanado; Criao de atalhos no desktop ou menu iniciar; Atualizao de registro; Suporte a vrias lnguas; Suporte a instalao encriptada, com assinatura digital ou

senha.

Instalando o Inno Setup Compiler


V ao site http://www.jrsoftware.org/; Clique em Inno Setup;

Clique em Download Inno Setup;


Baixe o executvel (compatvel com qualquer

verso do Windows);
A verso que utilizaremos ser a 5.4.2.

Instalando o Inno Setup Compiler


A instalao bastante intuitiva; No h necessidade de nenhuma customizao na

instalao;
Fica a gosto de cada um alterar o diretrio onde os

arquivos sero instalados, criar ou no um atalho no desktop e criar ou no uma pasta no menu iniciar, dentre outros detalhes.

Criando um Instalador
Criar um instalador para um aplicativo utilizando

o Script Wizard do Inno uma tarefa simples;


No entraremos em detalhes visando a criao de

instaladores complexos;
Caso deseje aprofundar seus conhecimentos, h

vasto material no site oficial contendo informaes sobre como usar as funcionalidades avanadas do Inno Setup Compiler.

Criando um Instalador
Criaremos o instalador do Cadastro de clientes; Escolhemos esse aplicativo, pois o seu instalador

o mais complexo;
Se desejar, faa o instalador dos outros aplicativos

desenvolvidos durante o curso a fim de assimilar o funcionamento do Inno.

Criando o Instalador do Cadastro de Clientes


Inicie o Inno Setup Compiler; Na janela Welcome, selecione a opo Create a new

script file using the Script Wizard e clique em OK.

Criando o Instalador do Cadastro de Clientes


Aparecer a janela abaixo. Clique em Next.

Criando o Instalador do Cadastro de Clientes


Especifique algumas informaes bsicas sobre o aplicativo

e clique em Next.

Criando o Instalador do Cadastro de Clientes


Especifique algumas informaes sobre o diretrio onde o

aplicativo ser instalado e clique em Next.

Criando o Instalador do Cadastro de Clientes


Em Application main executable file clique em Browse... e

selecione o executvel do aplicativo compilado pelo Lazarus.

Criando o Instalador do Cadastro de Clientes


Em Other application files clique em Add file(s)... e adicione o

banco de dados (banco.db) e o DLL do SQLite3;

Selecione o sqlite3.dll e clique em Edit....

Criando o Instalador do Cadastro de Clientes


Em Destination base folder selecione Windows system

directory e clique em OK;

Isso instalar o SQLite na pasta System do Windows do usurio.

Criando o Instalador do Cadastro de Clientes


Escolha se o usurio poder iniciar o aplicativo aps a

concluso da instalao e clique em Next.

Criando o Instalador do Cadastro de Clientes


Configure a paste do aplicativo no menu iniciar e a criao de cones

conforme desejar; aconselhvel marcar as opes:

Create na Internet shortcut in the Start Menu folder; Create na Uninstall icon in the Start Menu folder.

Criando o Instalador do Cadastro de Clientes


Especifique quais arquivos de documentao devero

aparecer durante a instalao (licena de uso, antes e depois da instalao) e clique em Next.

Criando o Instalador do Cadastro de Clientes


Especifique em quais lnguas o instalador estar disposio do usurio

e clique em Next;

No nosso caso, deixamos somente Brazilian Portuguese marcado.

Criando o Instalador do Cadastro de Clientes


Selecione um diretrio onde o instalador ser salvo quando compilado. Em

seguida, selecione um nome para o instalador. Caso queira, selecione um cone e uma senha para o instalador;

Clique em Next.

Criando o Instalador do Cadastro de Clientes


Clique em Next.

Criando o Instalador do Cadastro de Clientes


Clique em Finish.

Criando o Instalador do Cadastro de Clientes


Com isso,

finalizamos o Inno Setup Script Wizard e o cdigo do instalador foi gerado automaticamente, com base nos parmetros que passamos;

O programa perguntar se voc deseja compilar o

instalador agora. Clique em Sim.

Criando o Instalador do Cadastro de Clientes


O programa perguntar se voc deseja salvar script

do instalador agora. Clique em Sim e escolha uma pasta adequada;

Sempre que desejar fazer uma alterao no

instalador de um aplicativo, abra o Script, altere o que desejar e compile novamente.

Criando o Instalador do Cadastro de Clientes


O instalador est criado e pronto para ser

distribuido.

Links Interessantes
http://www.hardware.com.br/artigos/programacao-

orientada-objetos/ - timo artigo sobre P.O.O.;

http://www.t2ti.com/curso/video/delphi/iniciante/delphi_

starter.php - Material gratuito sobre Object Pascal e Delphi. Possui outros materiais gratuitos (Java, PHP e C); tutorial-lazarus-delphi - Vdeo aula de 2 horas sobre o Lazarus; maior quantidade de informaes sobre o Lazarus em portugus. Possui tutoriais de todos os nveis.

http://www2.explorando.com.br/m/2010/06/videoaula-

http://professorcarlos.blogspot.com/ - Blog que rene a

Livros

Lazarus - The Complete Guide

Autores: M. van Canneyt, M. Grtner, S. Heinig, F. Monteiro de Cavalho, I. Ouedraogo. Idioma: Ingls e Alemo Aproximadamente 720 pginas http://www.blaisepascal.eu/index.php?actie=./subscribers/lazarusbookinfoEnglish

Desenvolvendo Aplicativos com Lazarus

Autor: Jean Patrick Idioma: Portugus 346 pginas http://www.clubedeautores.com.br/book/33568--Desenvolvendo_Aplicativos_com_Lazarus http://agbook.com.br/book/46758--Desenvolvendo_Aplicativos_com_Lazarus

Programando com o Lazarus

Autor: Vitor Amadeu Souza Idioma: Portugus 64 pginas http://www.clubedeautores.com.br/book/24590--Programando_com_o_Lazarus http://agbook.com.br/book/44784--Programando_com_o_Lazarus

Vous aimerez peut-être aussi