Вы находитесь на странице: 1из 84

Adaptado do trabalho do Prof. Manoel Pantoja A. Jr.

1. IDE
O ambiente de desenvolvimento composto de vrias partes compondo um conjunto integrado de
janelas que interagem entre si.



























Figura 1 Tela do Ambiente de Desenvolvimento Delphi.


1.1 FORM DESIGN


O Form representa as janelas do Windows que compem a aplicao. O form responsvel pela
interao entre usurio e mquina, alm de servir de base para os demais componentes. O form tem
caractersticas de uma janela comum do windows, botes (Maximizar,
Minimizar, fechar e controle) e cones que podem ser modificados para uma aplicao.


















Figura 1.1 Tela do Formulrio

1.2 BARRA DE MENU PRINCIPAL


A barra de menu principal, contm todos os menus da aplicao.






Figura 2 Barra de Menu Principal

1.3 PALETA DE COMPONENTES

6


Todos os componentes que podem ser utilizados no Delphi2007 encontram-se na
janela Tool Palette localizado ao lado direito da tela.























Figura 3 Tool Palette

7
Para que os componentes disponveis na tool palette sejam inseridos no form,
podemos proceder das seguintes formas:
Clicando duas vezes sobre o componente deseja;
Clicar uma vez sobre o componente e em seguida clicar no form;
Clicando sobre o compoente e arrast-lo at o form;


1.4 OBJECT INSPECTOR


uma das janelas mais importantes do Delphi2007, pois nela podemos definir as
caractersticas dos componentes utilizados na aplicao.
Nela encontramos 2 (duas) guias:
Properties responsvel pelas informaes a respeito das propriedades de cada
componente selecionado.
Events Define quais os eventos que um determinado componente pode realizar e
que sero definidos pelo desenvolvedor.
Temos ainda uma caixa de combinao, onde podemos selecionar um componente
de forma mais rapidamente.






























Figura 4 Object Inspector
Por exemplo, ao selecionarmos o componente Form, temos algumas propriedades:
Caption permite a insero de um rtulo de dados no componente;


Align Permite a definio do alinhamento;
Font Permite a definio de uma fonte padro para o form.
Icon Define o cone que ser apresentado no form.

8
Perceba que ao lado esquerdo da propriedade Font existe um sinal de +, isto
significa que toda e qualquer propriedade que possua este smbolo tem a
caracterstica de mostrar subpropriedades.
J a propriedade Icon possui
todo e qualquer propriedade que possua este smbolo abrir um caixa de dilogo ao
ser acionado.


1.5 CODE EDITOR


o responsvel por toda parte de programao do Delphi2007, tais como:
declaraes de variveis, definio de objetos, bibliotecas, etc. Todas as
implementaes realizadas pelo desenvolvedor no Delphi2007, ser feito do Code
Editor.



























Figura 5 Code Editor

Uma caracterstica muito interessante no Code Editor que ao inserirmos um
componente no form, o mesmo declarado automaticamente no editor de cdigo.


















Figura 6 Tela de Formulrio Figura 7 Tela do Code Editor

1.6 CODE INSIGHT

9


Um recurso que vai facilitar nossa vida no momento de desenvolvimento de cdigo
o Code Insight do Code Editor.
Ele atua como um ajudante de complemento junto ao cdigo do desenvolvedor. Por
exemplo, ao digitar o nome de um objeto seguido de ponto (.) abre-se uma listagem
de mtodos e propriedades que podem ser utilizadas neste objeto.






















Figura 8 Code Insight



1.7 CONFIGURAES DE AMBIENTE


Voc pode personalizar o ambiente atravs do menu Tools | Options | Environment
Options, algumas opes podemos julgar importantes:




1.7.1 Autosave Options

10


Editor files Grava os arquivos fonte (.PAS) no momento da compilao, evitando
perda de cdigo em caso de travamento da mquina. Porm, no permite compilar
um determinado projeto sem salva-lo antes.


Project Desktop - Grava a posio das janelas do projeto atual.


1.7.2 Compiling and Running


Show Compiler Progress Mostra o progresso da compilao do projeto;
Minimize on run Minimiza o codegear durante a execuo do projeto;




2. TECLAS IMPORTANTES



F12
F11
F10

F9


Tecla


Funo
Alterna entre o code editor e o form designer.
Alterna entre o code editor, form designer e a object inspector.
Torna o foco para a janela principal.
(RUN) Permite compilar e executar o projeto para testes. Este processo gera
automaticamente o arquivo .EXE no diretrio onde foi gravado o arquivo de projeto
(.DPR).
CTRL + F9 Permite compilar o projeto sem executar. Ideal para conferncia de cdigo.
SHIFT + F12 Permite alternar entre os formulrios do projeto.

CTRL + F2
Equivalente ao cone View Form na SpeedBar.
Permiteexcees, como
veremos mais adiante.


3. PROJETOS


Um projeto nada mais do que um conjunto de arquivos necessrios para gerar
uma aplicao.


Vamos destacar alguns arquivos:




Extenso




Tipo e descrio




Criao




Necessrio para
compilar?

11


.PAS


.DPROJ



.DFM







.DCU
Arquivo Pascal: o cdigo-fonte de
uma unidade Pascal, ou uma
unidade relacionada a um
formulrio ou uma unidade
independente.
Arquivo Delphi Project. (Contm
cdigo-fonte em Pascal.)
Delphi Form File: um arquivo
binrio (na verso 5 pode ser
convertido para texto) com a
descrio das propriedades de um
formulrio e dos componentes que
ele contm.
Delphi Compiled Unit: o resultado
da compilao de um arquivo
Pascal.







Arquivos de bitmap, cone e
Desenvolvimento Sim.




Desenvolvimento Sim.

Desenvolvimento Sim. Todo formulrio
armazenado em um
arquivo PAS e em um
arquivo DFM.


Compilao Apenas se o cdigo-
fonte no estiver
disponvel. Os arquivos
DCU para as unidades
que voc escreve so
um passo
intermedirio; portanto,
eles tornam a
compilao mais
rpida.
Desenvolvimento: Normalmente no, mas
.BMP, .ICO,
.CUR
cursor: arquivos padro do
Windows usados para armazenar
imagens de bitmap.
Image Editor eles podem ser
necessrios em tempo
de execuo e para
edio adicional.

.CFG



.DOF



.DSK




.EXE




.~PAS
Arquivo de configurao com
opes de projeto. Semelhante
aos arquivos DOF.

Delphi Option File: um arquivo de
texto com as configuraes atuais
para as opes de projeto.

Arquivo de Desktop: contm
informaes sobre a posio das
janelas do Delphi, os arquivos
abertos no editor e outros ajustes
da rea de trabalho.
Arquivo executvel: o aplicativo
Windows que voc produziu.



Backup do arquivo Pascal
Pode ser ativado ou desativado
atravs do Menu Tools Options
Editor Options - Item: Create
backup file.
Desenvolvimento Necessrio apenas se
opes de compilao
especiais foram
configuradas.
Desenvolvimento Exigido apenas se
opes de compilao
especiais foram
configuradas.
Desenvolvimento No. Voc deve exclu-
lo se copiar o projeto
em um novo diretrio.


Compilao: No. Esse o arquivo
Ligao (linking) que voc vai distribuir.
Ele inclui todas as
unidades compiladas,
formulrios e recursos.
Desenvolvimento No. Esse arquivo
gerado
automaticamente pelo
Delphi, quando voc
salva uma nova verso
do cdigo-fonte.


3.1 SALVAR PROJETO


Para salvar um projeto no delphi, voc tem 4 opes :





Save




Comando




Objetivo
Salvar apenas a unidade selecionada

12
Save As...

Save Project As...
Save All
Salvar a unidade selecionada como... pode-se renomear ou trocar de pasta
(duplicando) o arquivo.
Salvar-se renomear ou trocar de pasta (duplicando) o
arquivo.
Grava todos os arquivos do projeto, e atualiza-os caso j sejam salvos.

Caso seja a primeira vez que o projeto ser salvo, aparecer a janela padro do
Windows, onde deve ser preenchido o nome do arquivo e o local onde o mesmo
ser salvo.


3.2 ABRIR O PROJETO


Todo projeto identificado por um arquivo com extenso .DPROJ, desta forma para
abrir um projeto no codegear, basta ir no menu File e escolher uma das 3 (trs)
opes Open; Open Project; Reopen.



Open


Comando


Objetivo
Permite abrir um arquivo .DPROJ, .PAS entre grupos de projeto.
Open Project...
Reopen
Permite abrir um arquivo de projeto.
Permite reabrir um arquivo (DPROJ ou PAS) utilizado anteriormente.

3.3 OPES DE PROJETO


possvel configurar vrios itens do sistema atravs do Projects | Options:






















Figura 9 Tela de Opes do Projeto


Forms :
Main form Permite a escolha do formulrio principal da aplicao;

13
Available forms Os formulrios available (disponveis) em caso de criao
em tempo de execuo.


Application:
Title Define um nome para a aplicao diferente do nome do arquivo .DPR;
Help File Define o nome do arquivo de Help associado aplicao;
Icon Define o cone utilizado no arquivo executvel;


Compiler
Estas opes permitem especificar uma compilao personalizada, ou seja,
cada projeto pode ser compilado com uma caracterstica.


Linker
Estas opes incluem informaes para a depurao.


Directories/Conditionals
Nesta guia pode-se configurar o diretrio de sada para os arquivos gerados
pela aplicao.


Version Info
Estas informaes podem ser visualizadas no Windows atravs do menu
rpido do mouse no arquivo executvel.


Packages
Os
externas ao executvel entre outros recursos.


4 CONVENO DE NOMEAO


Para qualquer componente existente no projeto a principal propriedade a name,
pois ela define o nome da varivel que ser utilizado no cdigo escrito em Object
Pascal Grande parte dos desenvolvedores adota uma conveno para facilitar/organizar o
desenvolvimento/manuteno de sistemas. O Delphi 2007 adota

14
como padro o nome da classe da qual o componente instanciado e um nmero
crescente de acordo com o nmero de vez que aquele componente utilizado no
form. Exemplo: Button1; Button2, Label1, etc.


5 MANIPULANDO COMPONENTES


Vimos anteriormente que existem 3 formas de adicionarmos um componente no
objeto form. Uma vez que os objetos estejam adicionados podemos manipul-los de
diversas formas.
Para selecionar um objeto, basta apenas clicar sobre o mesmo ou ir janela do
object inspector e selecionarmos o componente desejado na caixa de dilogo. Para
selecionarmos um conjunto de objetos, basta pressionarmos a tecla SHIFT e clicar
nos objetos desejados.
Estando o(s) objeto(s) selecionado(s), para posicion-los no local desejado, basta
arrastar com o mouse ou utilizar as teclas de combinao CTRL + SETAS. Para
redimension-los, utilize a combinao SHIFT + SETAS.















Figura 10 Selecionando Vrios Objetos



6 MANIPULANDO EVENTOS


A guia Events do object Inspector permite ao desenvolvedor criar um manipulador de
evento, onde o usurio ou o prprio sistema poder disparar um determinado evento.
Um evento uma ao disparada dentro de uma aplicao. Exemplo:


Evento
OnClick
OnDblClick


Ocorrncia
Quando o usurio clicar uma vez com o boto esquerdo do mouse sobre o
componente.
Quando o usurio d um duplo clique no componente com o boto




OnEnter
OnExit
OnKeyPress


esquerdo do mouse.
Quando o componente recebe o foco.
Quando o componente perde o foco.
Quando pressiona uma nica tecla de caractere.

15

Exemplo 1 : Codificando um objeto button.
Insira um componente button no form;
Na object inspector selecione o componente button e altere sua propriedade
caption
D um clique duplo no componente button;
Aparecer no Code Editor a declarao do evento na clusula interface e a
implementao do procedimento na clusula implementation.


procedure TForm1.Button1Click(Sender: TObject);
begin
form1.Caption := 'Meu Primeiro Programa';
ShowMessage(MeuDelphi 2007');
end;

Executando a aplicao


Para executar a aplicao acima, pressione a tecla F9 ou clique no cone RUN.


6.1 COMENTRIOS


Os comentrios no cdigo fonte so importantes e podem ser feitos atravs dos
seguintes smbolos:


//Comentrio de linha
{ Comentrio de bloco }
(*Comentrio de bloco *)


7 VCL VISUAL COMPONENT LIBRARY


Vamos explanar alguns objetos com suas propriedades e seus respectivos mtodos.


7.1 OBJETO FORM


Propriedades
ActiveControl Permite definir qual o primeiro componente a receber foco assim que o




Align
AutoScroll
AutoSize
BorderIcons
BorderStyle




BorderWidth
Caption
ClientHeight /
ClientWidth
Color
Cursor


formulrio criado.
Altera o alinhamento e preenchimento do objeto.
Permite habilitar as barras de rolagem.
Determina se o controle ser automaticamente redimensionado.
Determina os cones a serem exibidos na barra de ttulo do formulrio.
Define o estilo da borda do formulrio.
bsDialog Borda no redimensionvel, comum em caixa de dilogo
bsSingle Borda simples e redimensionvel.
bsNone Borda invisvel, no redimensionvel, sem botes de controle.
bsSizeable Borda padro redimensionvel.
Define a espessura da borda.
Indica o rtulo exibido para o componente.
Define a altura e largura da rea cliente.

Define a cor de fundo de um componente.
Indica a imagem exibida pelo ponteiro do mouse quando este ficar sobre o
objeto.

16
DefaultMonitor Associa o form a um monitor especfico em uma aplicao que utiliza vrios
monitores.
Enabled
Font
FormStyle






Height
HelpContext
HelpFile
Hint

HorzScrollBar
Icon
KeyPreview

Left
Menu
Name
PopupMenu
Position

ShowHint

Tag

Top
VertScrol Bar
Visible
Width
WindowMenu

WindowState

Mtodos
Show
ShowModal
Close
Define se o componente est habilitado ou no.
Permite controlar os atributos do texto exibido em um componente.
Determina o estilo do formulrio.
fsNormal Definio padro do formulrio.
fsMDIChild O formulrio ser uma janela-filha de uma aplicao MDI.
fsMDIForm O formulrio ser o formulrio-pai de uma aplicao MDI.
fsStayOnTop O formulrio permanece sobre todos os outros formulrios do
projeto, exceto aqueles que tambm tm a propriedade FormStyle igual a
fsStayOnTop.
Define a altura do objeto.
Define o tpico do arquivo help que ser exibido ao pressionar a tecla F1.
Define um arquivo de help especfico.
Permite exibir um texto de auxlio no momento em que o ponteiro do mouse
permanece sobre o controle.
Define o comportamento de uma barra de rolagem horizontal.
Define o cone que ser usado pelo formulrio.
Define se o formulrio deve ou no responder a um pressionamento de tecla,
atravs do evento OnKeyPress, por exemplo.
Define a coordenada da extremidade esquerda de um componente.
Permite escolher entre mais de um componente MainMenu.
Define o nome interno que identifica o componente dentro da aplicao.
Define o componente PopupMenu a ser utilizado pelo objeto.
Permite definir o tamanho e posio de um formulrio no momento em que ele
aparece na sua aplicao.
Define se a string de auxlio deve ou no ser exibida quando o usurio mantm
o ponteiro do mouse sobre um controle.
A propriedade Tag uma varivel do tipo Longint que o Delphi coloca
disposio do usurio, que pode atribuir o significado mais conveniente.
Define a coordenada da extremidade superior de um componente.
Define o comportamento de uma barra de rolagem vertical.
Define se o componente aparece ou no na tela.
Define a largura do objeto.
Permite definir qual o menu responsvel por manipular as janelas-filhas de
uma aplicao MDI.
Define o estado de exibio de um formulrio.



Exibe o formulrio de manipulao no-modal.
Exibe o formulrio de manipulao modal.
Permite fechar o formulrio.


7.2 OBJETO TBUTTON


um dos objetos mais importantes para confirmar e
disparar eventos associados.










Propriedades
















Figura 11 - Button

17
Action
Anchors

Cancel
Default
ModalResult

Parent...

TabOrder

TabStop

Mtodos
SetFocus
Referencia uma ao definida em um objeto TActionList.
Permite
redimencionado.
Associa o evento OnClick do objeto ao pressionamento da tecla Esc.
Associa ao evento OnClick do objeto ao pressionamento da tecla Enter.
Propriedade utilizada para encerrar a execuo de um formulrio Modal quando
selecionado um valor diferente de mrNone.
As propriedades Parent permitem que o componente receba a mesma
formatao do objeto proprietrio.
Define a ordem na passagem de foco no momento de pressionamento da tecla
TAB.
Define se o foco pra no componente.



Envia o foco do windows para o componente.

7.3 OBJETO TEDIT
Um dos principais componentes para a entrada de
dados.









Propriedades












Figura 12 - Edit
AutoSelect

AutoSize

BorderStyle
CharCase
HideSelection
Maxlength
Define se o texto exibido pelo controle ser selecionado quando este receber o
foco da aplicao.
Para componentes TEdit a propriedade determina se a altura do controle ser
redimensionada quando o tamanho da fonte for alterado.
Determina o tipo da borda do componente.
Determina o se tipo da fonte ser maiscula, minscula ou normal.
Define se o texto perde a seleo ao perder o foco.
Define um limite para a insero de caracteres.
PasswordChar Define qual caractere ser usado para ocultar o texto inserido no componente.
Text Permite manipular os caracteres inseridos no componente pelo usurio.


Mtodos
Clear
SetFocus




Limpa o contedo da propriedade text.
Envia o foco do windows para o componente.

18

7.4 OBJETO LABEL
Orienta os usurios escolha de componentes.











Propriedades













Figura 13 - Label
Alignment
AutoSize

FocusControl

Layout
ShowAccelChar
Transparent
WordWrap
Define o alinhamento da string na rea do componente.
Para componentes TDBText e TLabel, esta propriedade define se o controle
ser automaticamente redimensionado para acomodar o texto.
Define qual o componente receber foco quando o usurio selecionar a
combinao de teclas aceleradoras (atalho) se existir.
Define o alinhamento vertical do texto na rea do componente.
Define
Define se
Define
a largura definida e se a propriedade AutoSize estiver falsa.




EXERCCIO PROPOSTO 1


Objetivo: Trabalhar com objetos e elementos bsicos em Object Pascal, introduzindo
tcnica de manipulao de propriedades e eventos.
Componentes Utilizados: TLabel, TEdit e TButton
Enfoque: Quando o usurio digitar uma string, este texto deve ser exibido no ttulo
do formulrio e em uma mensagem de caixa de dilogo.


Resoluo:


1. Primeiramente solicite um novo projeto clicando no menu File | New | VCL
Forms Application Delphi for Win32;
2. Salve o projeto antes de prosseguir, criando uma pasta Exerccio 1 e dentro
dela salve a unit com o nome ufrmPrimeiroExercicio e o projeto com o nome
prjPrimeiroExercicio;





















Figura 14 Salvando a Aplicao

19

3. Insira os seguintes componentes no objeto form: 1 Label; 1 Edit; 2 Button.
Modifique as propriedades conforme abaixo:
a. Edit MaxLength = 10; Name = edtMensagem;
b. Label Caption = Digite: ; Focus Control = edtMensagem;
c. Form Active Control = edtMensagem ; Caption = Formulrio Principal;
Name = frmPrincipal;
d. Button1 Caption = Confirmar; Hint = Executar uma ao; ShowHint =
True;
e. Button2 Caption = Sair;


Para definirmos os eventos para os objetos Buttons, faa o seguinte procedimento:
- Selecione o Button1 (Confirmar) e na guia events da object inspector, identifique o
evento onclick e d dois cliques no espao em branco ao lado do evento. Um
procedimento ser exibido no code editor.
- Insira o cdigo entre o Begin e o End, como no exemplo abaixo:


begin
frmPrincipal.Caption := edtmensagem.Text;
ShowMessage(edtmensagem.Text);
edtmensagem.Clear;
end;

Para o Button2 (Sair) realize o mesmo procedimento:
begin
frmPrincipal.Close;
end;

Salve seu projeto e atravs do comando RUN compile e faa os testes necessrios.




7.5 OBJETO MEMO
Permite a digitao de um texto bem mais
extenso do que no componente edit.









Propriedades















Figura 15 - Memo

20
Lines
MaxLength

ReadOnly
ScrollBars
WantReturns
WantTabs



Mtodos
Propriedade do tipo TStrings que contm as linhas de texto do componente.
Define o limite mximo de caracteres no componente em sua propriedade
Lines.
Define se o componente do tipo somente leitura.
Define se o componente pode trabalhar com barras de rolagem.
Define
Define a tecla Tab como tabulao ou mudana de foco. Caso falso pode-se
utilizar CTRL+TAB para produzir o efeito desejado.
LoadFromFile Permite
SaveToFile Permite salvar o contedo da propriedade Lines em um arquivo especificado.

7.6 Objeto ComboBox
Cria uma lista suspensa de opes a escolha do
usurio atravs do boto dropDown.









Propriedades












Figura 16 ComboBox
Items
Sorted
Text

Mtodos
Clear
Define uma lista de Strings que aparece no componente.
Define se os dados sero ordenados.
Define o texto atual da Combobox.



Permite limpar o contedo da propriedade Items.
LoadFromFile Permite
SaveToFile Permite salvar o contedo da propriedade Items para um arquivo.


7.7 OBJETO GROUPBOX
um objeto continer, pois permite que possam
ser inseridos outro componentes dentro dele.








Propriedades












Figura 17 GroupBox

21
Align
Caption
Pemite definir um alinhamento no objeto proprietrio.
Define o texto informativo na parte superior do componente.

7.8 OBJETO RADIOGROUP
Permite a criao de opes para o usurio
escolher apenas um dentre todas existentes.









Propriedades
Items Define os itens disponveis ao usurio.
ItemIndex Define qual dos itens est selecionado.












Figura 18 - RadioGroup
Columns Define o nmero de colunas para organizao dos componentes.

7.9 OBJETO MAINMENU E POPUPMENU
Permite a criao de Menus principais e menus
rpidos.









Propriedades
Items Define um novo item de Menu.
Images Define












Figura 19 - MainMenu


7.10 OBJETO CHECKBOX (CAIXA DE VERIFICAO)

Permite verificar opes boolenas pr-definidas ou
re-definidas pelo usurio.





Figura 20 - CheckBox


Propriedades
AllowGrayed Define caso verdadeiro, trs estados possveis para o checkbox: checked
(ligado), unchecked (desligado) e grayed (parcial). Caso falso, dois estados:
checked (ligado) e unchecked (desligado).
Checked Define se o componente est ligado ou no, caso tenha apenas dois estados.
State Permite definir trs estados se AllowGrayed for verdadeiro.

7.11 OBJETO RADIOBUTTON

Permite escolher entre um grupo, pelo menos uma
opo.






Figura 21 - RadioButton


Propriedades
Checked Define se o componente est ligado ou desligado.

7.12 OBJETO LISTBOX (CAIXA DE LISTAGEM)

Permite o usurio entrar ou manipular uma lista de
dados.






Figura 22 - ListBox


Propriedades
Items Define uma lista de Strings que aparece no componente.
MultiSelect Permite selecionar vrios itens (Strings) no componente.
Sorted Define se a lista de Strings ser ordenada ou no.

22



Mtodos
Clear




Permite limpar o contedo da propriedade Items.

23
LoadFromFile Permite
SaveToFile Permite salvar o contedo da propriedade Items para um arquivo.

7.13 OBJETO PANEL (PAINEL)

Permite agrupar outros objetos e estabelecer um
efeito visual nas aplicaes.








Propriedades











Figura 23 - Painel
Align
Bevel...
BorderStyle
Define o alinhamento do componente em relao ao seu proprietrio.
Define a caracterstica das bordas (interna e externa) bem como sua espessura.
Define o tipo da borda.

7.14 OBJETO SPEEDBUTTON (BOTO PARA BARRA DE CONES)
Permite ao usurio manipular os botes individuais
ou atravs do conceito de grupo.







Figura 24 - SpeedButton


Propriedades
Glyph
GroupIndex

AllowAllUp

Flat
Down
Define um Bitmap para o componente.
Permite agrupar um conjunto de SpeedButtons quando ao serem selecionados,
tiverem a propriedade diferente de zero.
Permite que o componente possa ter o relevo suspenso ao ser clicado. S pode
ser utilizado junto ao conceito de agrupamento.
Define um efeito visual interessante.
Permite determinar qual componente foi pressionado. S pode ser utilizado
junto ao conceito de agrupamento.


7.15 OBJETO MASKEDIT (CAIXA DE EDIO COM MSCARA)
Permite estabelecer uma mscara para a
entrada de dados no componente. Pode ser
considerado
com





Figura 25 - MaskEdit


Propriedades
CharCase Define o tipo dos caracteres.
EditMask Permite definir uma mscara para entrada de dados.
PasswordChar Define um caracter para ocultar a entrada de dados.

7.16 OBJETO IMAGE (IMAGEM)
Permite inserir uma figura para uso geral na
aplicao.








Figura 26 - Image


Propriedades
AutoSize Permite alterar o tamanho do componente baseado no tamanho da figura.
Picture Define a figura a ser exibida.
Stretch Permite alterar o tamanho da figura baseado no tamanho do componente.


Mtodos
LoadFromFile Permite

7.17 OBJETO PAGECONTROL
Permite definir guias para agrupar os demais
componentes.
Cada guia representa um componente TabSheet
do -objeto
PageControl.





Figura 27 - PageControl

24



Propriedades
ActivePage




Permite determinar qual a guia foi selecionada pelo usurio.

25


7.18 OBJETO OPENDIALOG (CAIXA DE DILOGO PARA ABERTURA DE
ARQUIVOS)
Permite utilizar uma caixa de dilogo pronta com
recursos padronizados pelo sistema operacional.








Figura 28 - OpenDialog


Propriedades
DefaultExt

FileName
Filter
FilterIndex

InitialDir
Options
Title
Especifica a extenso a ser adicionada ao nome de um arquivo quando o
usurio digita o nome de um arquivo sem a sua extenso.
Define o arquivo selecionado no componente.
Permite definir as mscaras de filtro de arquivo a serem exibidas.
Define o filtro default a ser exibido na lista drop-down que define os tipos de
arquivos selecionveis.
Define o diretrio default quando a caixa de dilogo aberta.
Neste componente, options define uma srie de valores booleanos.
Define o ttulo da caixa de dilogo.

Os componentes da paleta dialogs so executados atravs do mtodo execute.
Este mtodo uma funo que retorna um valor booleano, assim para exibir uma
caixa de dilogo, podemos escrever:
if OpenDialog1.Execute then
Se o usurio escolher algum arquivo e confirmar a caixa, execute retorna verdadeiro,
caso contrrio, falso.


7.19 OBJETO IMAGELIST (LISTA DE IMAGENS)
Permite definir um conjunto de cones para serem
re-utilizados por diversos componentes de
recebem este objeto como provedor de uma lista
de imagens.





Figura 29 - ImageList


Para incluir imagens no componente ImageList, clique 2 vezes rapidamente no
componente e clique no boto Add.


7.20 OBJETO PROGRESSBAR (BARRA DE PROGRESSO)
Permitir ao usurio ter um acompanhamento de
uma rotina demorada.







Figura 30 - ProgressBar


Propriedades
Max Permite definir o valor mximo para a faixa de valores no componente.
Min Permite definir o valor mnimo para a faixa de valores no componente.
Orientation Define se o componente dever ser vertical ou horizontal.
Position Define a posio corrente do controle no componente.
Step Define o incremento usado na variao do valor da propriedade position.


7.21 OBJETO GAUGE (BARRA DE PROGRESSO)
Permitir ao usurio ter um acompanhamento de
uma rotina demorada.







Figura 31 - Gauge





Propriedades
Kind Permite definir aparncias diferenciadas no componente.
Progress Define a posio corrente do controle no componente.

26


7.22 OBJETO DATETIMEPICKER (DATA E HORA ATRAVS DE UMA
COMBOBOX)
Permite ao usurio escolher uma data atravs de
um componente que possui um importante impacto
visual e facilidade operacional.







Figura 32 - DateTimePicker


Propriedades
CalColors Define as cores do calendrio.
Date Define a data selecionada no componente.
DateFormat Define o formato da apresentao da data.
DateMode Define o estilo da caixa de listagem.
Kind Define se o componente deve trabalhar com data ou hora.
MaxDate Define uma data mxima para uma faixa de valores.
MinDate Define uma data mnima para uma faixa de valores.

7.23 OBJETO MONTHCALENDAR (CALENDRIO MENSAL)
Permite ao usurio escolher uma data atravs de
um componente que possui um importante impacto
visual e facilidade operacional.








Figura 33 - MonthCalendar


Propriedades
Date Define a data selecionada no componente.
FirstDayOfWeek Define qual o primeiro dia da semana.
WeekNumbers Permite numerar as semanas.

27


7.24 OBJETO STATUSBAR (BARRA DE STATUS)
Um dos principais componentes de informaes
sobre operaes gerais no sistema.










Propriedades














Figura 34 StatusBar

28
AutoHint

SimplePanel
SimpleText
Panels
Permite exibir o hint do componente automaticamente na barra de status. Se
no houver painis, a barra deve ter a propriedade SimplePanel ligada.
Define que a barra de status ser sem divises.
Define o texto a ser exibido pela barra de status.
Permite a criao e edio de painis na barra de status.
A propriedade SimplePanel deve estar desligada.
Pode-se tambm dar um duplo clique na barra de status.

7.25 OBJETO TOOLBAR (BARRA DE CONES)
Permite criar barras de cones de maneira rpida e
simples.










Propriedades












Figura 35 ToolBar
Flat
Images
HotImages
Define um efeito visual com relevo atravs do mouse nos botes.
Permite definir um objeto do tipo ImageList.
Permite definir um objeto do tipo ImageList a ser usado no momento em que o
mouse passa (ou clica) sobre o componente.
ShowCaptions Permite exibir a propriedade caption dos botes.














8.1 O MDULO .DPROJ

29


Todo programa em Object Pascal possui um arquivo .DPR, considerado como
arquivo de projeto, o seu formato composto inicialmente da seguinte definio:


program Project1;

uses
Forms,
Unit1 in Unit1.pas {Form1};

{$R *.RES}

begin
Application.Initialize;
Application.CreateForm(Tform1, Form1);
Application.Run;
end.

A palavra program define o nome do programa, este nome ser alterado quando for
gravado o arquivo .DPROJ do projeto.
Na clusula uses, so listadas as units usadas pelo mdulo principal. As units so
responsveis pela capacidade de dividir o programa em uma viso modularizada.
Em cada um, declaramos uma srie de objetos (funes, variveis, procedimento,
etc...) que podem ser usados por outras units e pelo mdulo principal.
Em seguida vem um conjunto de comandos (denominado comando composto)
atravs de dois delimitadores begin e end.


8.2 AS UNITS


Um programa em Object Pascal constitudo de um mdulo principal (.DPROJ) e de
uma ou mais unidades de compilao (.PAS). O compilador gera um arquivo com o
cdigo objeto correspondente, e considera o mesmo nome do arquivo .PAS com a
extenso .DCU.
As units so entidades independentes, ou seja, no momento da criao no h
vnculo lgico (nem fsico) entre uma unit e um programa principal que a utiliza. Com
esta caracterstica, podemos utilizar as units em qualquer projeto.
A principal caracterstica do conceito de unit que possibilita estruturar o programa
em mdulos funcionais, com cada unit provendo um conjunto de funes e
procedimentos. Cada formulrio corresponde a uma unit. Mas, podemos criar units
independentes, no associadas a um form.

30
Se considerarmos o cdigo uma unit com um componente Button e um manipulador
de evento, teremos o seguinte cdigo:


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls;
type
Tform1 = class(Tform)
Button1: Tbutton;
procedure Button1Click(Sender: Tobject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: Tform1;

implementation

{$R *.DFM}

procedure Tform1.Button1Click(Sender: Tobject);
begin
Form1.Caption := Curso de Delphi 2007;
Showmessage(Exemplo de caixa de dilogo);
end;

end.

Uma unit possui cinco partes:
Cabealho
Contm a palavra reservada unit seguida de um identificador que o nome da
unit. Este nome o mesmo nome do arquivo com extenso .PAS
unit Unit1;
Interface
Contm tudo o que a unit exporta: constantes, tipos, variveis, procedimentos,
funes, etc... Na declarao dos procedimentos e funes que a unit
exporta, deve constar apenas o cabealho (nome e parmetros). A
declarao completa fica na parte da implementao.

Interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls;
type
Tform1 = class(Tform)


Button1: Tbutton;
procedure Button1Click(Sender: Tobject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: Tform1;


Implementao

31
Contm a definio completa das funes e procedimentos que constam na
interface. Se na implementao so usados identificadores definidos em outra
unit, o nome desta outra unit deve ser includo na lista de units da clusula
uses da implementao.


Implementation
{$R *.DFM}
procedure Tform1.Button1Click(Sender: Tobject);
begin
Form1.Caption := Curso de Delphi 2007;
Showmessage(Exemplo de caixa de dilogo);
end;


I nicializao
uma parte opcional. Quando usada, no pode conter nenhuma declarao.
Apenas comandos so permitidos nesta parte. Ela comea com a palavra
initialization, e os comandos
programa comear.


Initialization
<comandos>


Finalizao
tambm uma parte opcional, com uma observao: ela s pode existir se na
unit houver tambm uma parte de inicializao e s pode conter comandos,
que sero executados dentro do processo de finalizao do programa, aps a
execuo do programas principal.


Finalization
<comandos>


Toda unit termina com a palavra end seguida .).




8.3 ATRIBUIO

32


Ao declarar uma varivel, o compilador cuida de alocar na memria uma rea que
seja suficiente para armazenar qualquer dos valores definidos atravs do seu tipo.
Os valores que podem ser atribudos varivel so definidos atravs de um
comando de atribuio que pode ser considerado da seguinte forma:


Varivel := expresso;


8.4 DECLARAO DE VARIVEIS


As variveis podem ser classificadas em:
Globais: Quando so feitas diretamente na seo interface de uma unit (ou seja, fora
dos procedimentos e funes). Pode-se ter variveis pblicas e privadas.
Locais: Quando feita a declarao dentro de um procedimento ou funo.
Var
N: Single;
S: String;
I: Integer;

8.5 TIPOS PARA MANIPULAO DE VARIVEIS


Tipos de variveis Inteiras



Integer


Tipo


Faixa de Valores
-2147483648.. 2147483647



32 bits


Formato
Cardinal
Shortint
Smallint
Longint
Int64
Byte
Word
Longword
0..4294967295
-128..127
-32768..32767
-2147483648.. 2147483647
-2^63..2^63-1
0..255
0..65535
0..4294967295
32 bits, sem sinal
8 bits
16
32
64
8 bits, sem sinal
16 bits, sem sinal
32 bits, sem sinal






Real
Single


Tipos de nmeros Reais


Tipo
2.9*10E-39..1.7*10E38
1.5*10E-45..3.4*10E38





Faixa de Valores
Doubl
Extended
5.0*10E-324..1.7*10E308
3.4*10E-4932..1.1*10E4932


Comp
Currency


-2*10E63+1..2*10E63-1
-9.22*10E14..9.22*10E14

33


Tipos de variveis booleanas


Tipo
Boolean
ByteBool
WordBool
LongBool






False ou True
*
*
*





Faixa de Valores


Tipos de variveis de caracteres


Tipo





Valores
Char
ShortString
String
Permite armazenar um caractere ASCII.
Permite armazenar uma cadeia de at 255 caracteres.
Permite


Tipo genrico (Variant)


Objetos variant so essencialmente variveis sem tipo podendo assumir diferentes
tipos, automaticamente. Esta vantagem aparente tem a caracterstica de ser
ineficiente se utilizada indiscriminadamente.


8.6 FUNES DE CONVERSO E MANIPULAO


Os objetos do Delphi para entrada e/ou exibio de dados utilizam propriedades do
tipo String, as propriedades Text e Caption so bons exemplos. O problema ocorre
quando tentamos realizar clculos matemticos com os dados que devem ser
manipulados por estas propriedades.
Desta maneira precisamos de funes para converter dados String em tipos Inteiros
ou Reais ou Datas, por exemplo:
Funo
StrToInt(const S: String)
IntToStr(value: Integer)
StrToFloat(const S: String)
FloatToStr(Value: Extended)
DateToStr(Date: TdateTime)
DateTimeToStr(DateTime:
TdateTime)
StrToDate (const S: String)
StrToDateTime(const S: String)
FormatFloat(const Format: string;
Value: Extended): string
Objetivo
Converte um dado String em tipo Inteiro.
Converte um dado Inteiro em tipo String.
Converte um dado String em tipo Ponto Flutuante.
Converte um dado Ponto Flutuante em tipo String.
Converte um dado TdateTime em String.
Converte um dado TdateTime em String.

Converte um dado String em tipo TdateTime.
Converte um dado String em tipo TdateTime
Permite formatar um tipo ponto flutuante retornando uma string.
Edit2.Text := FormatFloat(###,###.00,soma);
Sendo soma uma varivel real.


8.7 EXPRESSES LGICAS


So expresses que retornam valor booleano (falso ou verdadeiro).
Operador Operao
Not Negao
And E lgico
Or OU lgico
xor OU EXCLUSIVO lgico

O operador not unrio, por exemplo: if not (X > Z) then
Devemos usar parnteses ao compararmos expresses lgicas, por exemplo:
if (X > Z) or (W > Y) then
EXERCCIO PROPOSTO 2

34


Objetivo: Trabalhar com objetos e elementos bsicos utilizando as tcnicas de
manipulao de propriedades e eventos.
Componentes utilizados: Label, Memo, Radio Group, CheckBox, ComboBox;
Enfoque: Deselvolver um pequeno editor de texto, onde o usurio possa alterar a
fonte, cor e estilo da fonte.


9 CAIXAS DE DIALOGO


No Delphi existem caixas de dilogos pr-definidas, nas quais podem ser utilizadas
visando facilitar o desenvolvimento de aplicativos pela ferramenta.
ShowMessage Exibe uma mensagem na tela ao usurio.
Exemplo:
ShowMessage(Esta










Figura 36 Tela de Mensagem

MessageDlg Exibe uma mensagem na tela ao usurio, porm permite tratar a
resposta que o usurio informa na caixa de dilogo. Sua sintaxe a seguinte:
function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons:
MsgDlgButtons; HelpCtx: Longint): Word;




onde:
const Msg: string




DlgType: TmsgDlgType





Buttons: TMsgDlgButtons
HelpCtx: Longint


Exemplo:






uma constante string ou propriedade deste tipo.
mtWarning
Contm um cone exclamao amarelo.
mtError
Contm
mtInformation
Contm
mtConfirmation
Contm uma interrogao verde.
mtCustom
No contm BitMap.
mbYes mbNo mbOK mbCancel mbAbort mbRetry
mbIgnore mbAl mbNoToAll mbYesToAl mbHelp
Define

35


if MessageDlg(Deseja irmation, [mbYes, mbNo], 0)=mrYes then











Figura 37 Tela de Confirmao


APPLICATION.MESSAGEBOX


Uma outra caixa de dilogo o mtodo MessageBox do objeto Application. Esta
funo est definida da seguinte maneira:


function MessageBox(const Text, Caption: PChar; Flags: Longint): Integer;
Onde:


const Text
Caption: PChar




Flags


uma constante string ou propriedade deste tipo.
Define uma string para o ttulo da janela.
Define os botes, cones e a possibilidade de focar um determinado
boto.
Os valores para botes so:
MB_ABORTRETRYIGNORE,
MB_OK,
MB_OKCANCEL,
MB_RETRYCANCEL,
MB_YESNO,
MB_YESNOCANCEL


Os valores para os cones so:
MB_ICONEXCLAMATION,
MB_ICONWARNING,
MB_ICONINFORMATION,
MB_ICONASTERISK,
MB_ICONQUESTION,
MB_ICONSTOP,
MB_ICONERROR,
MB_ICONHAND
Os valores para a definio do boto default pode ser:
MB_DEFBUTTON1,
MB_DEFBUTTON2,
MB_DEFBUTTON3,
MB_DEFBUTTON4

O retorno da funo o tipo do boto como id
(IDABORT IDCANCEL IDIGNORE IDNO IDOK IDRETRY IDYES)
Desta maneira pode-se fazer testes lgicos como no exemplo:

36


If


Application.MessageBox('Texto','Ttulo',MB_YESNOCANCEL


+
MB_ICONINFORMATION + MB_DEFBUTTON2) = IdYes then











Figura 38 Application.MessageBox


10 CAIXAS DE ENTRADA


Podemos obter dados do usurio atravs de caixas de dilogo pr-defindas.


I nputBox


A funo InputBox retorna um tipo String, que dado digitado pelo usurio na sua
utilizao. Sua definio interna a seguinte:


function InputBox(const ACaption, APrompt, ADefault: string): string;


Onde:
const ACaption
APrompt
Define o ttulo da janela
Define um rtulo para orientao dentro da caixa.


ADefault

Exemplo:


Define um valor default para a caixa.

37
InputBox('Ttulo da janela','Descrio','Valor Padro')











Figura 39 Tela de Input


11 ESTRUTURAS CONDICIONAIS


11.1 IF THEN - ELSE


A estrutura condicional if pode ser composto de uma ou mais condies de
processamento, por exemplo:


if (A > B) then
B := B + 1;

if (A > B) then
B := B + 1
else
A := A - 1;

Caso haja a mais de uma linha de comando dentro da estrutura then necessrio
delimitar o bloco de comando utilizando as clusulas BEGIN e END


if (A > B) then
begin
B := B + 1;
X := B + A;
end
else
begin
A := A - 1;
Y := Y + B;
end;

O comando if-then-else considerado como nico, portanto, no h ponto e vrgula
(;)anteselse.
possvel ainda que se tenha um conjunto de IF-then-else aninhados, por exemplo:


if (A > B) then
begin
A := A + 1;
ShowMessage(A
end
else Begin
if (A < B ) then
begin
A := A - 1;
ShowMessage(B
End
else
ShowMessage(A
End;

11.2 ESTRUTURA CASE - OF

38


O comando case..of oferece uma alternativa para comandos if-then-else com um
grandetes. Por exemplo:


case Key of
A..z:
0..9:
+,-,
else
Label1.Caption
end; //fim do case



12 ESTRUTURAS DE REPETIO


12.1 Repeat ... Until


A estrutura de repetio Repeat ... until, garante que pelo menos uma vez a
estrutura ser executada. Para que as instrues de comando que estiverem dentro
da estrutura de repetio sejam executadas vrias vezes necessrio que a
condies existente na clusula until seja de valor FALSO. Exemplo:
....
Repeat
X := x+ 1;
Inc(Y,3); // equivale a y := y + 3;
Dec(Aux,2); // equivale a aux := aux 2;
Until x >= 2000;
...


12.2 WHILE - DO

39


A estrutura de repetio WHILE se difere da estrutura Repeat, pelo fato de realizar
uma validao dos dados antes de executar qualquer instruo dentro da sua
estrutura. Para que as instrues sejam executadas diversas vezes, necessrio
que a condio estabelecida seja VERDADEIRA. Exemplo:

while X <= 200 do
begin
X := X + 1;
INC(Z,3);
DEC(AUX,2);
end;
...

12.3 FOR TO - DO


A estrutura FOR permite ao desenvolvedor delimitar o numero de vezes que uma
estrutura de comando ser executada, pois conhecido o inicio e o fim do numero
de interaes que sero realizados. Exemplo:


for i:=0 to 500 do
Label1.Caption := IntToStr(i);

for i:=500 downto 100 do
begin
Label1.Caption := IntToStr(i);
Edit1.Caption := IntToStr(i);
end;

12.4 BREAK


O comando BREAK utilizado para interromper a execuo de um estrutura de
repetio ou seqncia de comandos alinhados. Exemplo:


frase := Edit1.Text;
for i:=1 to length(frase) do
begin
if frase[I] = 'A' then
break;
aux := aux + frase[I];
end;
Label1.caption := aux; //Label1


12.5 ADICIONADO FORMULARIOS AO PROJETO

40


As aplicaes desenvolvidas por ferramentas visuais dificilmente utilizam somente
um formulrio. Nos exerccios anteriores vimos que como se tratavam de aplicaes
simples, no houve a necessidade de se adicionar novos formulrios aplicao.
Vamos criar uma pequena aplicao que seja capaz de manipular mais de um
formulrio.
Primeiramente abra um novo projeto do Delphi 2007, clicando no menu File | New |
VCL Forms Applications Delphi for Win32. Salve a aplicao em uma pasta
Exercicio3, salvando a unit1 com o nome de ufrmExercicio3 e o projeto com o nome
exercicio3.





















Figura 40 Salvando o Formulrio 3

Incluia no form1 o compoente MainMenu e altere as propriedades dos objetos da
seguinte forma:


Object Form : TForm
Caption : Exerccio Proposto 3
Name : frmExercicio3;
Position : poDesktopCenter;

Object : MainMenu: TMainMenu
Name: mmFormularios;














Figura 41 Elaborando Menu de Opes

41

Agora que os objetos j esto configurados, vamos incluir as linhas de cdigos
necessrias para que o nosso formulrio frmexercicio3 possa chamar os outros
formulrios da aplicao.
Primeiramente antes de realizarmos qualquer codificao necessrio que
adicionemos mais dois novos formulrios na nossa aplicao, para isso clique no
menu File | New | Form Delphi for Win32, salve-os com os respectivos nomes
ufrmFormulario2 e ufrmFormulario3, agora podemos codificar nosso mmFormularios.


Para chamar um outro formurio apartir do formulrio atual temos duas formas:
Show e ShowModal
Show Chama o formulrio solicitado e permite que se alterne entre os formulrios
durante a execuo da aplicao.
Showmodal Tem a mesma finalidade do Show, porm no permite a alternncia
entre os formulrios em tempo de execuo.


Clique duas vezes sobre o componente MainMenu e clique duas vezes sobre o item
Formulario 1 e digite o seguinte cdigo:


procedure TForm1.Formulario11Click(Sender: TObject);
begin
frmFormulario2.Show;
end;

Em seguida, faa o mesmo procedimento para o item Formulrio 2, mas com o
seguinte cdigo:
procedure TForm1.Formulario21Click(Sender: TObject);
begin
frmFormulario3.ShowModal;
end;
Aps isto, salve sua aplicao e execute-a clicando no boto RUN ou pressionando
a tecla F9.




Aparecer a seguinte tela:








Figura 42 Confirmao de Referncia entre formulrios

42

OForm1
formulrio frmFormulario2.i adiciona uma referncia no Code
Editor da unidade UFrmExercicio3 na seguinte estrutura:


implementation
uses ufrmFormulario2;


Perceba
formulrio principal, porm isto no permitido




EXERCCIOS PROPOSTOS 4


Calcule o Volume de uma Espera; rea de um triangulo; Permetro do Triangulo;




EXERCCIOS PROPOSTOS 5


Objetivo: Trabalhar com objetos e elementos bsicos utilizando as tcnicas de
manipulao de propriedades, eventos e formulrios.
Enfoque: Deselvolver uma aplicao que contenha todos os projetos abaixo, sendo
cada um solicitado atravs de um Menu de opes.


1. PROJETO TRIANGULO: Dado 3 valores numricos pelo usurio verificar se os
mesmo formam um tringulo e em caso positivo emitir uma mensagem informando
qual o tipo correspondente. Em caso negativo informar ao usurio atravs de uma
mensagem.

43
2. PROJETO FIBONACCI: Sendo informado o n de termos desejados para gerar a
seqncia de Fibonacci, faa um programa que exiba toda a seqncia em um
componente Memo.
3. PROJETO FATORIAL: Faa um programa que calcule o fatorial de um numero informado pelo
usurio. O resultado do clculo dever ser exibido em um componente Edit.
4. PROJETO POTENCIA: Sendo informado a Base e o Expoente pelo usurio, calcule a potncia para
esta operao. A base, o expoente e o resultado devem ser informados atravs de um componente Edit.


Cada item acima desenvolvido em formulrios separados.


13 PROCEDIMENTOS E FUNES


Toda parte programvel no Delphi 2007 realizada dentro de procedures ou
functions, toda vez em que um evento de um componente programado, o Delphi
2007 cria automaticamente a sua declarao no Code Editor, por exemplo:


type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
Formulario11: TMenuItem;
procedure Formulario11Click(Sender: TObject);

possvel tambm criar procedimentos e funes prprias no definidas pelo Delphi,
para isso deve-se declarar o procedimento ou funo na seo INTERFACE do code
editor e implement-la na seo IMPLEMENTATION.
Vale a pena lembrar que a deciso por utilizar procedimento ou funo deciso do
desenvolvedor, visto que todo procedimento no tem como obrigao retornar
valores ao programa, j a funo deve por obrigao retornar um valor ao programa,
sendo que no Object Pascal este retorno de valor se d pela varivel result, varivel
esta que no deve ser declarada pelo desenvolvedor, pois ela declarada
automaticamente sempre que a funo solicitada pelo programa.
Uma forma automtica de se implementar a declarao uma procedure ou function
na seo implementation e posicionar o curso de digitao sobre a declarao da
procedure ou function na seo Interface e pressionar as teclas CTRL + Shift + C.


Exemplo de procedure:



...
Type
procedure TForm1.Soma(X, Y: String);
...
Implementation

procedure TForm1.Soma(X, Y: String);
begin
Label1.Caption := FloatToStr(StrToFloat(X)+StrToFloat(Y));
end;
....

Exemplo de Function
...
Type
function TForm1.Subtrai(X, Y: String): String;
...
Implementation

function TForm1.Subtrai(X, Y: String): String;
begin
result := FloatToStr(StrToFloat(X)-StrToFloat(Y));
end;



14 TRATAMENTO DE EXCEES

44


Quando desenvolvemos nossos programas s os disponibilizamos aos usurios
aps uma srie de testes realizados, porm impossvel prever todo e qualquer tipo
de problema que possa ocorrer em tempo de execuo, a esses erros damos o
nome de excees.
As excees devem ser tratadas para que o aplicativo no trave com o usurio;
no deixe o SO instvel; etc.
Quando uma exceo ocorre, o fluxo de controle automaticamente transferido para
blocos de cdigos de exceo, denominados handlers, definidos atravs de
comandos do object Pascal.


14.1 TRY EXCEPT


Uma das formas de tratarmos excees no Delphi utilizando o comando TRY-
EXCEPT.
Sua sintaxe a sguinte:
Try
<Comando a serem executado>
Except
<Bloco de execuo>
End;

45
Toda vez que o aplicativo for executado sem ocorrer nenhuma exceo o bloco de
cdigos de exceo ignorado e o aplicativo prossegue normalmente, porm caso
ocorra a exceo o aplicativo direcionado ao bloco de excees e executa as
instrues l contidas.
O bloco de exceo pode ser definido atravs de uma construo genrica,
exemplo:


try
Abre(Arq);
while not Fim(Arq) do
processa(Arq);
except
Showmessage
end; //bloco try

No exemplo acima tratamos os erros com uma mensagem genrica dentro de um
bloco try-except.


14.2 A CONSTRUO ON-DO


try
Abre(Arq);
while not Fim(Arq) do
processa(Arq);
except
on EInOutError do //erro de entrada e sada
begin
Showmessage(Problemas...);7
Fecha(Arq);
end;
on EdivByZero do //erro de diviso de n inteiro por zero
Showmessage(Erro
on EconvertError do //erro de converso de tipos
Showmessage(Erro
end; //bloco try

Podemos ainda definir utilizando a clusula on-do com um handler genrico usando
else, da seguinte forma:
try
Processa;
except
on Exceo1 do Trata1;
on Exceo2 do Trata2;
elseTrataOutras;
end;

Os principais tipos de exceo da RTL (RunTime Library) do DELPHI, a serem
tratadas nos blocos on ... do so:





Nome





Descrio

46
EaccessViolation Ocorre quando se tenta acessar uma regio de memria invlida
(ex: tentar atribuir valor a um ponteiro cujo contedo nil).
EconvertError

EdivByZero
EinOutError

EintOverFlow

EinvalidCast


EinvalidOp

EinvalidPointer

EoutOfMemory

EoverFlow


ErangeError


EstackOverflow

Eunderflow

EzeroDivide
ocorre quando se tenta converter um string em um valor
numrico (ex: utilizar a funo StrToInt em uma letra).
ocorre na diviso de um nmero inteiro por zero.
ocorre numa operao incorreta de I/O (ex: abrir um arquivo que
no existe).
ocorre quando o resultado de um clculo excedeu a capacidade
do registrador alocado para ele (para variveis inteiras).
ocorre quando se tenta realizar uma operao invlida com o
operador as (ex: tentar usar um Sender com uma classe que no
corresponde a seu tipo).
ocorre quando se detecta uma operao incorreta de ponto
flutuante.
ocorre quando se executa uma operao invalida com um
ponteiro (ex: tentar liberar um ponteiro duas vezes).
ocorre quando se tenta alocar memria mas j no existe mais
espao suficiente.
ocorre quando o resultado de um clculo excedeu a capacidade
do registrador alocado para ele (para variveis de ponto
flutuante).
ocorre quando uma expresso excede os limites para a qual foi
definida (ex: tentar atribuir 11 ao ndice de um vetor que pode ir
no mximo at 10).
ocorre quando o sistema no tem mais como alocar espao de
memria na Stack.
ocorre quando o resultado de um clculo pequeno demais para
ser representado como ponto flutuante.
ocorre quando se tenta dividir um valor de ponto flutuante por
zero.


14.3 O COMANDO TRY-FINALLY


H outro comando cuja sintaxe comea com try. Este controle de finalizao nos
permite lidar de forma estruturada com as situaes em que alocamos algum tipo de
recurso e, haja o que houver, precisamos depois liber-lo.


<aloca o recurso>
try
<usa o recurso>
finally
<libera o recurso com ou sem exceo>
end;

O comando funciona da seguinte forma: os comandos especificados aps o Try so
executados seqencialmente. Se no ocorrer nenhuma exceo, os comandos
especificados aps finally so executados, e o programa prossegue com a execuo

47
normal, com o comando seguinte ao try-finally. Porm, se houver alguma exceo
qualquer uma durante a execuo da lista de comandos do try, o trecho aps o
finally executado e, no final, a exceo reativada.
Em resumo: Os comandos do bloco finally sempre so executados, haja ou no
alguma exceo durante a execuo dos comandos especificados aps o try.
14.4 CLASSES BSICAS



Exceo






EMathError



EInvalidOp


EZeroDivide


EOverFlow


EUnderFlow

Excees de
Ponto Flutuante


EVariantError


Excees de
Variantes






EIntError



EDivByZero


ERangeError


EIntOv erFlow

Excees de
Matemtica de
Inteiros


EOutOfMemory



EInvalidPointer

Excees de
Pilha







EInOutError


Excees de
Entrada/Sada



EInvalidCast


Excees
Typecast




EConvertError

Excees de
Conv erso







EAccessViolation



EPrivilege



EStackOverflow



EControlC

Excees de
Processador



EAssertionFailed

Excees de
Assero

Figura 43 Classes Bsicas de Excees


14.5 BLOCOS TRY ANINHADOS


Blocos try aninhados permitem maior versatilidade na construo de blocos
protegidos, lembrando que se a exceo ocorrer, os comandos inseridos em except
sero executados. J os comandos inseridos em finally sero executados havendo
ou no a ocorrncia de erros.

48
Embora no prximo exemplo, no exista margem para excees dentro do lao
for..do (a menos que seja digitado errado) podemos ter uma idia de como criar
blocos aninhados para garantir a execuo de rotinas sujeitas a erros mais graves.
procedure TForm1.Button1Click(Sender: Tobject);
var i, aux:integer;
begin
aux := 500;
try {inicio do bloco try-finally.
Screen controla uma serie de recursos do sistema operacional
neste exemplo, muda-se a aparencia do cursor para ampulheta}
Screen.Cursor := crHourGlass;
try//inicio do bloco try-except
for i:=0 to aux do
begin
Edit1.Text := IntToStr(i);
Application.ProcessMessages;
{O mtodo ProcessMessages necessrio para forar que as
mensagens do windows sejam processadas, desenhando o numero
no Edit. Sem ele, apenas o valor final seria visto.}
end;
except
Showmessage('Ocorreu um erro.');
end;//fim do bloco try-except
finally
Screen.Cursor := crDefault;
end;//fim do bloco try-finally
end; //fim da procedure































































15 BANCO DE DADOS


Grande parte dos sistemas desenvolvidos em Delphi, ou ferramentas visuais, tem a
necessidade de comunicao com banco de dados. Um banco de dados pode ser
interpretado de vrias formas. Pode ser um arquivo nico, pode ser um diretrio com
vrios arquivos, etc.


15.1 MODELAGEM DE DADOS


Existem 3 modelos bsico para a modelagem de dados que devemos abordar
rapidamente antes de iniciarmos esta seo, so eles: Modelo Conceitual; Modelo
Lgico; Modelo Fsico;


Modelo Conceitual : Procura abstrair a realidade independente da plataforma de
hardware e software.
Modelo Lgico : Define as regras bsicas na forma de como os dados devem ser
armazenados no banco de dados.


Modelo Fsico : Implementa a definio do modelo lgico.
15.2 MODELO CONCEITUAL E LGICO

49


A princpio vamos entender como podemos definir os dados que sero armazenados
em um computador, atravs do conceito de entidade.
Ao pensarmos em cadastrar dados de clientes, alunos, fornecedores, etc... temos
exemplos de entidades. A entidade possui propriedades que sero identificados
como os dados propriamente ditos, estas propriedades so chamadas de atributos.


15.3 MODELO FISICO


No modelo fsico de dados, as entidades sero chamadas de tabelas e os atributos
sero chamados de campos. A linha de dados que deriva do conjunto de campos
chama-se registro.
Nas entidades necessrio que haja um campo que seja capaz de identificar um
nico registro dentre todos existente, a este campo chamamos de chave primria.


15.4 RELACIONAMENTOS


Para os bancos de dados relacionais, definimos relacionamentos como sendo uma
associao entre um ou mais entidades. O relacionamento pode ser representado
atravs de cardinalidades, que so as regras de relacionamento entre as entidades.
Existem 3 tipo de cardinalidades: 1:1 ; 1:N ; N : N
O relacionamento 1:N ou N:1 tipo mais comum de relacionamento utilizado, ele
define que a chave primria da entidade 1, deve ser adicionada na entidade N como
chave estrangeira.
J o relacionamento N:N tem como regra a criao de uma 3 tabela, onde as
chaves primrias das entidades envolvidas no relacionamento, sero inseridas na 3
tabela como chave estrangeira.


16 CONEXAO DE BANCO DE DADOS


O Delphi utiliza uma estrutura de camadas para fazer com que o front-end
(formulrio) manipulado pelo usurio venha interagir com a base de dados. O
caminho deve ser percorrido por uma srie de componentes configurados entre si,

50
porm, h uma camada intermediria que no fica dentro do ambiente Delphi, nem
diretamente preso ao banco, o BDE.


16.1 BDE


O BDE, Borland DataBase Engine, um conjunto de DLLs que deve acompanhar as
aplicaes que fazem uso de seus recursos de acesso ao banco. nesta camada
que so definidas caractersticas especficas de cada banco de dados, bem como
sua localizao, ou seja, o front-end no acessa diretamente a base de dados, o
BDE responsvel para estabelecer este funcionamento.





Aplicao Delphi
(Front-End)


Borland DataBase Engine (BDE)


Bancos de Dados Locais


SQL Links


Drivers ODBC

Figura 44 Esquema de Aplicao BDE

16.2 COMPONENTES DE CONTROLE E ACESSO


O sistema para conexo com o banco de dados utiliza alm do BDE um conjunto de
componentes denominados: Session, DataBase, DataSet, DataSource e Data-
Aware. O componente Session no ser o foco de nosso estudo.


Uma



Session



DataBase



DataSet



DataSource



Data-Aware

Figura 45 Viso Geral dos Componente



Session: Aplicaes simples trabalham com apenas um banco de dados.
Porm o Delphi permite mais de uma conexo simultnea bancos de dados

51
distintos, e tambm mais de uma conexo com o mesmo banco de dados. O
controle global das conexes feito atravs do componente da classe
TSession, criado automaticamente pelo Delphi na execuo do programa.
Esse componente representa a sesso default da aplicao.


DataBase: O componente DataBase responsvel pela conexo da
aplicao a um banco de dados com a finalidade maior de implementar
segurana (transaes) e definir caractersticas de comunicao entre uma
aplicao Delphi-Client/Server. Embora em aplicaes locais, sua utilizao
explicita recomendada.


DataSet: Existem trs componentes que descendem de uma classe
chamada TDataSet e implementam importantes mtodos de manipulao de
banco de dados alm de suas caractersticas especficas. De fato, no
utilizamos a classe TDataSet diretamente, mas atravs dos componentes
TTable, TQuery(SQL) e TStoreProc. Estes componentes esto na paleta
BDE


DataSource: O componente DataSource responsvel por conectar os
componentes Data-Aware uma determinada tabela representada pelo
DataSet. Este componente est na paleta DataAccess.


Data-Aware: Os componentes Data-Aware so responsveis pela
visualizao e manipulao direta dos dados. Todo componente Data-Aware
tem uma propriedade para conectar-se ao DataSource correspondente
tabela destino. Estes componentes esto na paleta DataControls.


Exemplo


Vamos exemplificar a utilizao de componentes bsicos de acesso e controle
atravs de um exemplo baseado em uma tabela (arquivo de dados) j pronta, criada
na instalao do Delphi. O objetivo entendermos o funcionamento destes
componentes.
Crie uma nova aplicao e salve-a na pasta especificada pelo instrutor.
A unit : UFrmPeixes


Projeto: Peixes

52
Insira dois componentes: Um DataSource e um Table. Configure suas
propriedades de acordo com a orientao abaixo:


Object : Table : TTable
Name: TbPeixes;
DatabaseName = 'DBDEMOS'
TableName = 'biolife.db'
Active = True

Object: DataSouce : TDataSource
Name = DsPeixes;
AutoEdit = False
DataSet = TbPeixes

Insira um componente DBGrid e configure-o:


object DBGrid1: TDBGrid
Align = alBottom
DataSource = DsPeixes

Insira um componente DBImage e configure-o:


object DBImage1: TDBImage
DataField = 'Graphic'
DataSource = DsPeixes
Stretch = True

Insira um componente DBMemo e configure-o:


object DBMemo1: TDBMemo
DataSource = DsPeixes
DataField = 'Notes'

Insira um componente
DBNavigator e configure-o:


object DBNavigator1: TDBNavigator
DataSource = DsPeixes



Uma sugesto do visual pode ser a
seguinte:


Podemos perceber que a aplicao
funciona manipulando a tabela


biolife.DB sem a necessidade de nenhuma linha de cdigo explcita.

53
claro que este apenas um exemplo para entendermos o mecanismo de
componentes de acesso e controle. Desse modo, veremos a seguir que linhas de
cdigo sero necessrias para implementar funcionalidades especficas (pesquisas),
ou mesmo bsicas como incluso, edio e remoo.
Por ltimo, vamos personalizar o componente DBGrid para no exibir os campos
Grafic e Notes (campos BLOB). Pode-se usar a propriedade Columns ou um duplo
clique no componente DBGrid, O Editor de colunas exibido, clique no cone Add
All Fields; os campos disponveis sero exibidos, selecione o campo desejado
Figura 46 Dados de Biolife
(Grafic) e clique em Delete Selected



















Figura 47 Editando Colunas



















Figura 48 Eliminando um Campo

Salve novamente e execute a aplicao.


16.3 OBJETOS TFIELD


Vamos criar uma outra aplicao e exemplificar um recurso muito importante na
construo de aplicaes baseadas em banco de dados, os campos persistentes.


Crie uma nova aplicao e salve-a na pasta especificada pelo instrutor. Os
nomes podem ser: O Formulrio: UFrmPaises Projeto: Paises


Insira dois componentes: Um DataSource e um Table. Configure suas
propriedades de acordo com a orientao abaixo:


Agora, ao invs de colocarmos componentes data-aware (paleta
DataControls) diretamente no form, vamos definir os campos persistentes
atravs de um duplo clique componente Table surgir o editor de campos









(Fields Editor).
Clique com boto
direito no editor e escolha
Add all fields.


A partir de agora, cada
campo na tabela
considerado um objeto
TField com suas
propriedades individualizadas na Object Inspector.

54


Mas, o melhor de tudo o fato de podermos arrastar os campos TField diretamente
para o formulrio, e perceber que o Delphi se encarrega de construir o componente
data-aware necessrio a cada campo.


Isso realmente poupa muito tempo no desenvolvimento de aplicaes em banco de
dados. Porm h a possibilidade de criar aplicativos que utilizem acesso banco
sem data-aware.


Insira um componente DBNavigator e configure-o:


object DBNavigator1: TDBNavigator
DataSource = DsPaises
end

Uma sugesto para a disposio dos componentes pode ser:

















Figura 49 Cadastro de Paises

Salve novamente e execute a aplicao.


16.4 BDE CRIAO DO ALIAS

55


Vamos explorar com mais detalhes o conceito e funcionamento da camada BDE. O
BDE instalado junto com o Delphi. Execute o programa e examine a tela inicial.
A tela dividida em duas partes bsicas: A listagem de Aliases do lado esquerdo e
as configuraes de cada Alias no lado direito.
Um conceito importantssimo a definio de Alias. Cada nome do lado esquerdo
do BDE representa uma configurao para acesso a um determinado banco.
Exemplo: O Alias BDDEMOS representa o diretrio C:\Arquivos de
programas\Arquivos comuns\Borland Shared\Data, o driver para acesso ao de banco
(Paradox) entre outras configuraes.
Dessa maneira o desenvolvedor utiliza o nome DBDEMOS dentro do Delphi, porm
o diretrio pode ser alterado no BDE sem maiores problemas. O Alias uma string
que define o path e configuraes para acesso ao banco de dados.




























Para criar um alias:


























Figura 50 Borland DataBase Engine

56
Clique no menu Object e escolha New. (CTRL+N).
Confirme o tipo de driver;
Defina um nome para o Alias (lado esquerdo).
Defina o path atravs do boto reticncias.
Clique no menu Object e escolha Apply, para confirmar as alteraes.
Confirme a gravao.


Note que j janela de ferramentas ( tool palette), h uma rea especfica para
componentes que acessam o banco de dados atravs do BDE.


16.5 COMPONENTE ADO - ACTIVEX DATA OBJECTS


Uma outra forma de fazer com que sua aplicao possa acessar um banco de dados
atravs de componentes ADO, que permite o acesso direto ao banco de dados
sem a utilizao do BDE.
Abaixo temos um pequeno aplicativo que acessa um banco de dados SQL utilizando
o componente ADO que no Delphi 2007 encontra-se na paleta dbGO.






















Figura 51 Paleta dbGo

57
Como o objetivo do exemplo mostrar a funcionalidade dos componentes ADO,
ser utilizado apenas um formulrio, um dbgrid e um DataSet, componentes estes j
conhecidos de captulos anteriores. Utilizaremos os seguintes componentes da
paleta dbGo: TAdoConnection; TAdoTable.
TAdoConnection: Permite a conexo da aplicao diretamente com o banco de
dados.
TAdoTable : utilizado para acessar as tabelas do banco de dados.


















Figura 52 Componentes Ado
Selecione o componente AdoConnection1 e clique no boto ... da propriedade
connectionstring na Object Inspector e aparecer aseguinte tela:













Figura 53 Criando Conexo Ado

58
A propriedade connectionstring utilizada para informar ao Delphi todas as diretivas
que sero utilizadas pelo banco de dados. Para definirmos a string de conexo,
clique no boto Build... e aparecer a seguinte tela:


























Figura 54 Escolhendo tipo de Base de Dados
A janela acima se refere ao link de dados que ser utilizado pela aplicao. Existem
diversos Links de Dados conforme mostrado na figura acima.
O link de dados que utilizaremos para este exemplo o Microsoft OLE DB Provider
for SQL Server, que permite a conexo da aplicao com dados do banco SQL
Server. Em seguida clique no boto next >>



























Figura 55 Selecionando Servidor

59

Na guia Connection, ser especificado no item 1 o nome do servidor de dados onde
est instalado o SQL. No item 2, ser especificado as informaes sobre o tipo de
logon que ser realizado no BD, caso o BD tenha uma senha de acesso definida
necessrio informar o nome do usurio e o senha de acesso, caso contrrio
possvel realizar o acesso ao banco apenas utilizando a integridade de segurana do
Servidor.























Figura 56 Selecionando Usurio
O item 3, ser selecionado especificamente qual o bando de dados que voc ir
acessar.

60
possvel ainda verificar se as configuraes realizadas foram bem sucedidas
atravs do boto Test Connection e em seguida clique OK.




















Figura 57 Exibio dos Dados da Tabela

Note que em nenhum momento foi feito a utilizao do BDE.
possvel ainda utilizar os componentes ADO juntamente com drivers ODBC, que
permite voc acessar outros tipos de bancos de dados.


17 APLICAO DE BANCO DE DADOS


Para aplicarmos tudo o que vimos at agora vamos desenvolver um pequeno projeto
de banco de dados aplicando todos os passos bsicos de desenvolvimento desde a
construo das tabelas at a gerao de relatrios.
Primeiramente vamos criar a estrutura de banco de dados abaixo utilizando o
InterBase e em seguida criar um Alias apontando para o banco.


Setor
Setor_ID: INTEGER
Descricao: VARCHAR(100)
Local: VARCHAR(25)


Funcionario
Matricula: CHAR(18)
Nome: VARCHAR(100)
Sexo: CHAR(1)
Endereco: VARCHAR(150)
Email: VARCHAR(150)
Cidade: VARCHAR(50)
Estado: VARCHAR(25)
Salario: FLOAT
Setor_ID: INTEGER (FK)


Dependente
Dependente_ID: INTEGER
Matricula: CHAR(18) (FK)
Nome: VARCHAR(100)
Sexo: CHAR(1)
GrauParentesco: VARCHAR(20)

Figura 58 Esquema de Banco de Dados 1

61
Aps a estrutura de bando de dados criada, o passo seguinte abrir o Delphi 2007 e
solicitar uma Nova aplicao clicando no menu File|New|VCL Forms Applications
Delphi for Win32 e salve-a dentro de uma pasta empresa, sendo a unit com o nome
ufrmPrincipal e o projeto com o nome de Empresa.
No formulrio principal, adicione o componente MainMenu com os seguintes itens:










Figura 59 Menu de Opes


17.1 DATA MODULE


A definio dos componentes de acesso aos dados ser centralizada em um
formulrio especial chamado Data Module. Este formulrio tem uma caracterstica
bem especfica: um form invisvel e s recebe componentes invisveis, ou seja, o
usurio nem vai imaginar que o DataModule e os componentes que ele recebe esto
na aplicao. A sua finalidade centralizar os componentes para que qualquer
formulrio possa ter acesso aos dados, sem a necessidade de repetir os
componentes de acesso em cada formulrio. Para criar formulrio DataModule,
clique em File|New|Other|Delphi Files.






















Figura 60 Adicionando Novo Item

62
Salve o novo formulrio com o nome de UFrmDmEmpresa e insira trs
componentes: um DataBase, Table ( Paleta BDE ) e DataSource (Paleta
DataAccess).













Figura 61 DataModule
Configure as propriedades como abaixo:


Object DataBase : TDataBase;
Connected : False;
Name : Conexao
AliasName: Empresa
DataBaseName: dbEmpresa;

Object Table : TTable;
DataBaseName: tbEmpresa;
TableName: Setor;
Name: tbSetor;

Object DataSource: TDataSource;
Name: dsSetor;
DataSet: tbSetor;

17.2 FORMULRIO DE CADASTRO DE SETOR


Adicione um novo formulrio a aplicao e insira 2 componentes Panel, onde um
ter alinhamento na parte inferior (alBottom) e outro na rea cliente (alClient).
Salve o formulrio com o nome FrmCadSetor e a propriedade name do form ser
FrmCadSetor.


Uma caracterstica importante na construo de aplicaes utilizando banco de
dados a possibilidade de trabalharmos com campos TFIELD exemplificados
anteriormente, ou seja, campos que so considerados como objetos dentro da
aplicao, sendo assim estes campos possuem propriedades e eventos individuais
atravs da object inspector ou por atribuies manipulando cdigo.
Vamos explorar um pouco mais da funcionalidade deste recurso. Campos TFIELD
so chamados de campos persistentes e sua criao extremamente simples.


No DataModule, localize o objeto Table referente tabela desejada.

63
Um duplo clique no objeto Table, exibir a janela de manipulao dos
campos
Um clique dentro da janela com o boto direito exibir o speed menu.
Escolha a opo Add All Fields.




















Figura 62 Field Editor
Aps a criao dos campos persistentes, pode-se selecion-lo e verificar
propriedades especficas na Object Inspector. As propriedades sero diferentes
dependendo do tipo de dados do campo, neste exemplo um tipo TStringField.

























Figura 63 Exibindo Propriedades do campo TField

64
Mas o melhor est para vir. Posicione a janela dos campos persistentes em um lado
da tela e com o formulrio FrmCadSetor (criado anteriormente) visvel, selecione os
campos e arraste-os para dentro do Form. Uma pergunta do tipo:











Figura 64 Confirmao de Referncia entre Formulrios


Ser exibida. Confirme com Yes, ou seja, o Delphi est questionando se no
formulrio FrmCadSetorDmEmpresa
(DataModule). Ao confirmar o Delphi adiciona uma referncia no Code Editor da
unidade UFrmCadSetor na seguinte estrutura:


implementation
uses UDMEmpresa;


Pode-se fechar o editor de campos persistentes. Uma diferena visual que tem
destaque agora so os controles de manipulao de dados que foram inseridos
automaticamente pelo Delphi.















Figura 65 Tela de cadastro Verso 1


Embora se paream com um componente j visto anteriormente (Edit) estes
componentes so provenientes da paleta Data Controls e tem o nome de DBEdit, ou
seja, um controle especfico para manipulao de dados provenientes de um banco

65
de dados. J nos referimos a estes controles nos primeiros exemplos do captulo
anterior.


DBEdit
DataSource
DataField
Permite
Permite especificar um campo da tabela referenciada em DataSource.

Insira um componente DBNavigator e modifique suas propriedades:


object DBNavigator1: TDBNavigator
DataSource = DmEmpresa.DsSetor
VisibleButtons = [nbFirst, nbPrior, nbNext, nbLast]
end

Insira seis componentes BitBtn, e configure apenas as propriedades Name, Caption
e Glyph. Uma sugesto visual pode ser vista a seguir:















Figura 66 Tela de Cadastro Finalizada


17.3 MTODOS E PROPRIEDADES PARA MANIPULAO DE DADOS


Para percorrer os registros de uma tabela podemos utilizar os seguintes mtodos:


First
Prior
Next
Last
MoveBy(N)


Move o cursor para o primeiro registro do dataset.
Move o cursor para o registro anterior (se houver).
Move o cursor para o prximo registro (se houver).
Move o cursor para o ltimo registro do dataset.
Move o cursor para frente ou para trs, conforme o valor do parmetro N, que
um valor inteiro, positivo ou negativo.

Para controlar o incio e fim da tabela podemos utilizar as propriedades:


BOF : Boolean Begin Of File. Indica True se o cursor estiver no primeiro registro da tabela.
EOF : Boolean End Of File. Indica True se o cursor estiver no ltimo registro da tabela.




Por exemplo:

Table1.First;
While not Table1.EOF do
begin
comando1;
comando2;
...
Table1.Next;
end;

66

Um inconveniente com relao ao cdigo acima que os controles data-aware (data
controls) sero atualizados no monitor medida que o mtodo Next percorre a
tabela, gerando uma visualizao indesejada e perda de tempo com a sua
atualizao.


Neste caso, pode-se utilizar os mtodos DisableControls e EnableControls.


Table1.DisableControls;
try
Table1.First;
while not Table1.EOF do
begin
comando1;
comando2;
...
Table1.Next;
end;
finally
Table1.EnableControls;
end;

Em nosso exemplo atual, no formulrio de Cadastro de Setores, os cdigos para
percorrer o dataset foram implementados de maneira automtica atravs do
componente DBNavigator. Porm nada impede a criao de botes independentes
e a definio de handlers de controle para navegao retirando o DBNavigator.


Para alterar (editar) os valores de um dataset podemos utilizar o seguinte mtodo:


Edit

Exemplo:
Table1.Edit;


Permite editar o data set para alterao dos valores atuais para novos valores.


Para inserir um novo registro em um dataset podemos utilizar dois mtodos:




Append
Insert

Exemplo:
Table1.Append;
Ou
Table1.Insert;




Cria um novo registro aps o ltimo registro do dataset.
Cria um novo registro aps o registro corrente.

67


Para remover um registro em um dataset podemos utilizar o mtodo:


Delete

Exemplo:


Remove o registro corrente.


if MessageDLG(Est
then Table1.Delete;


Para confirmar (gravar) as alteraes no dataset podemos utilizar o mtodo:


Post


Exemplo:


Confirma as alteraes em um dataset.



Table1.Append;
...
Table1.Post;







Table1.Edit;
...
Table1.Post;



Para acessar o valor em um campo atravs de TField podemos utilizar a
propriedade Fields ou o mtodo FieldByName.


Fields
FieldByName


Faz referncia a um campo especfico atravs de um array.
Faz referncia a um campo atravs de seu nome.

Para cancelar algum comando enviado ao banco de dados, utiliza-se o mtodo
cancel.
Cancel

Exemplo:
Confirma as alteraes em um dataset.



Table1.Append;
...





Table1.Edit;
...



Table1.Cancel;

17.4 OS ESTADOS DE UM DATASET



Table1.Cancel;

68


Os datasets trabalham
pode ser vlida, outras no. A manipulao do dataset atravs de mtodos e
funes agem nestes estados em todo o tempo provocando mudanas.


Uma viso geral sobre os estados de um dataset pode ser vista a seguir:



Inativo



Insert

Insert
Append

Post
Cancel

Close

Browse

Edit

Edit

Open



Cancel
Post

Figura 67 Estado de um DataSet


Vamos utilizar no formulrio FrmCadSetor a prtica deste conceito. Antes,
troque o DBEdit1 referente ao cdigo para um componente DBText configure
as propriedades DataSource para a tabela Setor e DataField para o campo
Setor_ID.
O BitBtn referente sada do form pode ter sua propriedade Cancel
verdadeira.
O BitBtn referente confirmao das operaes pode ter sua propriedade
Default verdadeira e a propriedade Enabled como falso.
O BitBtn referente ao cancelamento das operaes pode ter sua propriedade
Enabled como falso.




















unit uFrmCadSetor;
interface
uses

















Figura 68 Cadastrando Setor

69
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, DBCtrls, Mask, ExtCtrls,DB;
type
TFrmCadSetor = class(TForm)
{Para criar o procedimento TrataBotoes, digite sua declarao
(sem TFrmCadSetor) na clusula Type e utilize CTRL+SHIFT+C
Para todos os demais, selecione o objeto e utilize a object inspector}
procedure TrataBotao;

private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmCadSetor: TFrmCadSetor;

implementation
uses uFrmDmEmpresa;
{$R *.dfm}

procedure TFrmCadSetor.bbtCancelarClick(Sender: TObject);
begin
DMEmpresa.tbSetor.Cancel;
TrataBotao;
end;

procedure TFrmCadSetor.bbtConfirmarClick(Sender: TObject);
begin
DMEmpresa.tbSetor.Post;
TrataBotao
end;

procedure TFrmCadSetor.bbtEditarClick(Sender: TObject);
begin
DMEmpresa.tbSetor.Edit;
TrataBotao
end;

procedure TFrmCadSetor.bbtIncluirClick(Sender: TObject);
Var ProxNum : Integer;
begin
TrataBotao;


DMEmpresa.tbSetor.Last;
ProxNum := DMEmpresa.tbSetor.FieldByName('Setor_ID').AsInteger + 1;
DMEmpresa.tbSetor.Append;
DMEmpresa.tbSetor.FieldByName('Setor_ID').AsInteger := ProxNum;
DBEdit2.SetFocus;
end;

procedure TFrmCadSetor.bbtRemoverClick(Sender: TObject);
begin
if DMEmpresa.tbSetor.RecordCount <> 0 Then Begin
if MessageDlg('Deseja excluir este registro?',mtConfirmation,[mbYes,mbNo],0) = mryes then
DMEmpresa.tbSetor.Delete
End
Else
MessageDlg('No h registro a ser excludo.',mtInformation,[mbok],0);
end;

procedure TFrmCadSetor.bbtSairClick(Sender: TObject);
begin
FrmCadSetor.Close;
end;

procedure TFrmCadSetor.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if DMEmpresa.tbSetor.State IN [DSEDIT,DSINSERT] then
if MessageDlg('Existem Dados Pendentes.'+ #13 + 'Deseja salv-lo?',mtConfirmation,
[mbYes,mbNo],0) = mryes then
CanClose := False
else begin
DMEmpresa.tbSetor.Cancel;
TrataBotao;
CanClose := True;
end;
end;

procedure TFrmCadSetor.TrataBotao;
begin
bbtIncluir.Enabled := not bbtIncluir.Enabled;
BbtEditar.Enabled := not BbtEditar.Enabled;
BbtRemover.Enabled := not BbtRemover.Enabled;
BbtCancelar.Enabled := not BbtCancelar.Enabled;
BbtConfirmar.Enabled := not BbtConfirmar.Enabled;
BbtSair.Enabled := not BbtSair.Enabled;
end;
end.

17.5 FORMULRIO DE CADASTRO DE FUNCIONRIO


FrmCadFuncionario


Vamos iniciar a construo do formulrio de Cadastro de Funcionrio.
No menu File escolha o comando New | Form Delphi for Win32.


Grave este novo formulrio com o nome de: UFrmCadFuncionario
A propriedade Name do form dever ser FrmCadFuncionario

70

71


Chame o DataModule. Crie os campos persistentes (TFields) para a tabela
Funcionrio. Arraste-os para dentro do formulrio. Confirme o dilogo (YES) sobre
usar o DataModule e posicione os objetos em uma seqncia sua escolha. Uma
sugesto pode ser vista a seguir:





















Figura 69 Tela de Cadastro de Funcionario


Associe o componente o componente DBText1 tabela atravs da propriedade
DataSource apontando para a tabela Funcionario e DataField apontando para o
campo Matricula.
Associe o componente DBNavigator tabela Funcionrio atravs da propriedade
DataSource.
Implemente os handlers de cada boto conforme o raciocnio do formulrio anterior.
Vamos definir outros componentes e caractersticas que no formulrio anterior no
existiam.
Por exemplo, o campo Sexo foi definido na tabela como uma String de um caracter.
Podemos evitar que o usurio entre com uma string diferente de M ou F por
exemplo, este raciocnio pode ser feito via cdigo ou via componente.
Vamos optar pela segunda opo por uma srie de vantagens.
Insira um componente DBRadioGroup no formulrio e no se preocupe com o
alinhamento (por enquanto).
Modifique as propriedades do componente:
object DBRadioGroup1: TDBRadioGroup
Caption = 'Sexo'
Columns = 2
DataSource = DmEmpresa.DsFuncionario



DataField = 'Sexo'
Items.Strings =
Masc
Fem
Values.Strings =
F
M
end
Columns Define em quantas colunas os dados da propriedade items sero ordenados.
Items Define os itens a serem exibidos no componente.
Values Define os valores a serem armazenados na tabela.

72


Pode-se excluir o DBEdit responsvel pelo campo Sexo e alinhar o DBRadioGroup
em seu lugar.


Um outro componente que pode exibir um conjunto de dados pr-definidos o
DBComboBox.
Insira o componente no formulrio e modifique suas propriedades:


object DBComboBox1: TDBComboBox
DataSource = DmEmpresa.DsFuncionario
DataField = 'Estado'
Items.Strings =
AC
AL
AP
AM
BA
CE
DF
ES
GO
MA
MT
MS
end

Exclua o DBEdit responsvel pelo Estado e alinhe o DBComboBox em seu lugar.


17.6 INTEGRAO DE DADOS ENTRE AS TABELAS


Vamos acrescentar alguma funcionalidade para que o usurio no precise saber o
cdigo do setor, ele poder selecionar uma caixa de listagem atravs do nome do
setor, por exemplo:


Acrescente um DBLookupComboBox ao Form e faa as modificaes necessrias,
a sugesto visual a seguinte:




















Figura 70 Cadastrando Funcionario


Configure o DBLookupComboBox com as propriedades a seguir:


object DBLookupComboBox1: TDBLookupComboBox
ListSource = DmEmpresa.DsSetor
ListField = Nome
KeyField = Setor_id
DataSource = DmEmpresa.DsFuncionario
DataField = Setor_id
end

Onde:
ListSource Permiteorigem dos dados.
ListField Permite especificar um campo da tabela referenciada em ListSource.
KeyField Permite especificar o campo chave da tabela origem dos dados.
DataSource Permitedestino dos dados.
DataField Permite especificar o campo chave estrangeira da tabela destino.

73

Uma sugesto de implementao para o cdigo fonte do formulrio para Cadastro
de Funcionrio o seguinte:


unit ufrmCadFuncionario;
{A interface no foi impressa}
implementation
USES ufrmDmEmpresa;
{$R *.dfm}

procedure TfrmCadFuncionario.TrataBotao;
Begin
bbtIncluir.Enabled := not bbtIncluir.Enabled;
BbtEditar.Enabled := not BbtEditar.Enabled;
BbtRemover.Enabled := not BbtRemover.Enabled;
BbtCancelar.Enabled := not BbtCancelar.Enabled;
BbtConfirmar.Enabled := not BbtConfirmar.Enabled;
BbtSair.Enabled := not BbtSair.Enabled;
End;


procedure TfrmCadFuncionario.bbtCancelarClick(Sender: TObject);
begin
TrataBotao;
DMEmpresa.tbFuncionario.Cancel;
end;

procedure TfrmCadFuncionario.bbtConfirmarClick(Sender: TObject);
begin
TrataBotao;
DMEmpresa.tbFuncionario.Post;
end;

procedure TfrmCadFuncionario.bbtEditarClick(Sender: TObject);
begin
TrataBotao;
DMEmpresa.tbFuncionario.Edit;
end;

procedure TfrmCadFuncionario.bbtIncluirClick(Sender: TObject);
Var Prox : Integer;
begin
TrataBotao;
DMEmpresa.tbFuncionario.Last;
Prox := DMEmpresa.tbFuncionario.RecordCount + 1;
DMEmpresa.tbFuncionario.Append;
DMEmpresa.tbFuncionario.FieldByName('Matricula').AsString := IntToStr(Prox);
DBLookupComboBox1.SetFocus;
end;

procedure TfrmCadFuncionario.bbtRemoverClick(Sender: TObject);
begin
if MessageDlg('Deseja excluir este Registro?',mtConfirmation,[mbYes,MbNO],0) = mrYes then
DMEmpresa.tbFuncionario.Delete;
end;

procedure TfrmCadFuncionario.bbtSairClick(Sender: TObject);
begin
frmCadFuncionario.Close;
end;

end.

17.7 FORMULRIO DE CADASTRO DE DEPENDENTES

74


Vamos criar outro formulrio com a finalidade de cadastrar os dependentes do
funcionrio. Utilizaremos o mesmo raciocnio visto at aqui embora este processo
possa ser bem diferente do que vamos fazer. O objetivo maior fixarmos os
conceitos vistos anteriormente.



FrmCadDependente


Clique no menu File | New | Form Delphi for Win32


Grave a unit com o nome: UFrmCadDependente
A propriedade Name do form ser: FrmCadDependente
















Figura 71 Tela de Cadastro de Dependente


Configure o componente DBNavigator:


object DBNavigator1: TDBNavigator
DataSource = DmEmpresa.DsDependente
VisibleButtons = [nbFirst, nbPrior, nbNext, nbLast]
end

75

Insira dois componentes DBRadioGroup, um para o Sexo e outro para o
Parentesco.


A configurao do DBRadioGroup para o campo Sexo pode ser a seguinte:


object DBRadioGroup1: TDBRadioGroup
Caption = 'Se&xo'
Columns = 2
DataSource = DmEmpresa.DsDependente
DataField = Sexo
Items.Strings =
Masc
Fem
Values.Strings =
M
F
end

A configurao do DBRadioGroup para o campo Parentesco pode ser a seguinte:




object DBRadioGroup2: TDBRadioGroup
Caption = '&Parestesco'
Columns = 4
DataSource = DmEmpresa.DsDependente
DataField = 'GrauParentesco'
Items.Strings =
Esposa(o)
Filho(a)
Enteado(a)
Pai/Me
Values.Strings =
E
F
N
P
End

Insira um DBText e altere suas propriedades DataSource e DataField.


Uma sugesto visual pode ser vista a seguir:

















Figura 72 Cadastrando Dependente


O cdigo para implementar as funes dos BitBtns pode ser visto a seguir:


unit ufrmCadDependente;
implementation
uses ufrmDmEmpresa;
{$R *.dfm}

procedure TfrmCadDependente.TratarBotao;
Begin
bbtIncluir.Enabled := not bbtIncluir.Enabled;
BbtEditar.Enabled := not BbtEditar.Enabled;
BbtRemover.Enabled := not BbtRemover.Enabled;
BbtCancelar.Enabled := not BbtCancelar.Enabled;
BbtConfirmar.Enabled := not BbtConfirmar.Enabled;
BbtSair.Enabled := not BbtSair.Enabled;
End;

76


procedure TfrmCadDependente.bbtCancelarClick(Sender: TObject);
begin
TratarBotao;
DMEmpresa.tbDependente.Cancel;
end;

procedure TfrmCadDependente.bbtConfirmarClick(Sender: TObject);
begin
TratarBotao;
DMEmpresa.tbDependente.Post;
end;

procedure TfrmCadDependente.bbtEditarClick(Sender: TObject);
begin
TratarBotao;
DMEmpresa.tbDependente.Edit;
end;

procedure TfrmCadDependente.bbtIncluirClick(Sender: TObject);
var Prox : Integer;
begin
TratarBotao;
DMEmpresa.tbDependente.last;
Prox := DMEmpresa.tbDependente.RecordCount + 1;
DMEmpresa.tbDependente.Append;
DMEmpresa.tbDependente.FieldByName('Dependente_ID').AsInteger := Prox;
DBLookupComboBox1.SetFocus;
end;

procedure TfrmCadDependente.bbtRemoverClick(Sender: TObject);
begin
if MessageDlg('Deseja excluir este registro?',mtConfirmation,[mbYes,mbNo],0) = mrYes then
DMEmpresa.tbDependente.Delete;
end;

procedure TfrmCadDependente.bbtSairClick(Sender: TObject);
begin
frmCadDependente.Close;
end;

end.



18 MTODOS DE PESQUISA

77


A funo locate vai localizar na tabela funcionrio no campo Setor_ID o valor do
campo Setor_ID da tabela setor passado como parmetro. Caso encontre, a funo
retorna um valor booleano verdadeiro.
A alterao no cdigo do boto remover do form Cadastro de Setor pode ser visto a
seguir:


procedure TFrmCadSetor.BbtRemoverClick(Sender: TObject);
begin
if DmEmpresa.TbSetor.RecordCount = 0 then
ShowMessage('Tabela vazia!')
else if DmEmpresa.TbFuncionario.Locate('Setor_ID',


DmEmpresa.TbSetor.FieldByName('Setor_ID').AsInteger,[]) then
ShowMessage('Este setor possui funcionrios,'+#13+
'favor realoc-los antes de deletar.')
else if MessageDLG('Tem certeza que deseja remover o setor: '+#13+
DmEmpresa.TbSetor.FieldByName('Descricao').AsString +' ?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
DmEmpresa.TbSetor.Delete;
end;

A funo locate declarada internamente da seguinte forma:


function Locate(const KeyFields: string; const KeyValues: Variant;
Options: TLocateOptions): Boolean; virtual;
Onde:
KeyFields Permite definir o(s) campo(s) a serem pesquisados.
KeyValues Permite definir o(s) valore(s) a serem pesquisados.
Options Permite definir se os valores a serem pesquisados sero parciais e/ou
diferenciados de maiscula e minscula. [loCaseInsensitive, loPartialKey]

if DmEmpresa.TbFuncionario.Locate('Setor_ID',
DmEmpresa.TbSetor.FieldByName('Setor_ID').AsInteger,[]) then

78


Neste exemplo acima, estamos pesquisando na tabela TbFuncionario o campo
Setor_ID o valor que est na tabela TbSetor no campo Setor_ID. A pesquisa
exata.


18.1 FORMULRIO DE CONSULTA DE FUNCIONRIOS


FrmConFuncionario


Clique em File | New | Form Delphi for Win32


Grave o nova unit como UFrmConFuncionario
A propriedade Name do form ser: FrmConFuncionario
Insira os componentes necessrios, altere suas propriedades.
Configure o DBGrid para acessar a tabela Funcionario e exibir apenas a matricula e
o nome do funcionrio, mudanas visuais podem ser feita na propriedade Title.

















Figura 73 Consulta de Funcionrios


Um exemplo de algumas propriedades que podem ser alteradas:


object DBGrid1: TDBGrid
Cursor = crHandPoint
TabStop = False
Align = alBottom
BorderStyle = bsNone
DataSource = DmEmpresa.DsFuncionario
ReadOnly = True
Title|Font|Style = [fsBold]
End

79

A
e sem acento).
Vimos no item anterior que podemos realizar pesquisas nas Tabelas (Table)
utilizando o mtodo locate, porm este mtodo pode levar muito tempo para realizar
a pesquisa caso o banco de dados seja muito grande.
Sabemos que pesquisas em bancos de dados so melhores executadas quando
realizadas com SQL (Structure Query Language) que uma linguagem prpria para
este tipo de pesquisa. Para utilizarmos este recurso no Delphi, adicione no
formulrio uFrmDmEmpresa (DataModule) um novo componentes: Query (Paleta
BDE) e um DataSet ( Paleta DataAccess ).
O Componente Query tem como finalidade realizar pesquisa no banco de dados
atravs de instrues DML (Data Manipulation Language).

Configure os componentes da seguinte forma:
Object Query : TQuery
Name: QryConsFuncionario;
DataBaseName: dbEmpresa;
SQL: SELECT * FROM FUNCIONARIO;
Active: False;

Object DataSet: TDataSet
Name: dsqryConsFunc;



DataSet : QryConsFuncionario

80

A implementao do cdigo do formulrio FrmConFuncionario pode ser vista logo a
seguir:
unit ufrmConsFuncionario;

interface
implementation
uses ufrmdmEmpresa;
{$R *.dfm}

procedure TfrmConsFuncionario.bbtLocalizarClick(Sender: TObject);
Var StrQry : String;
begin
StrQry := 'Select * from Funcionario';
if edtNome.Text = '' then
StrQry := StrQry + ' WHERE Matricula = ''' + edtCodigo.Text + ''';'
else
StrQry := StrQry + ' WHERE Nome Like ''' + edtCodigo.Text + '%'';';
DMEmpresa.qryConsFuncionario.Close;
DMEmpresa.qryConsFuncionario.SQL.Clear;
DMEmpresa.qryConsFuncionario.SQL.Add(StrQry);
DMEmpresa.qryConsFuncionario.Open;
end;

procedure TfrmConsFuncionario.bbtSairClick(Sender: TObject);
begin
frmConsFuncionario.Close;
end;

end.

18.2 DEFININDO CAMPOS REQUERIDOS E EXCEO LOCAL


Podemos definir alguns campos que devem, obrigatoriamente, serem preenchidos
pelo usurio, por exemplo: No formulrio de Cadastro de Dependentes os campos
Matricula e Nome so muito importantes e poderiam na sua ausncia tornar o banco
inconsistente. Vamos utilizar um exemplo com a tabela Dependente.


Para definir campos requeridos e evitar inconsistncia de campos em branco:


Chame o Data Module.
Escolha a tabela desejada (TbDependente) e clique duas vezes para chamar
os TFields.
Escolha o campo TField desejado (Matricula, neste exemplo) e na Object
Inspector defina Required como True.


Defina o mesmo recurso para o nome do dependente.

81
Neste momento, se o usurio tentar gravar o registro sem digitar a matrcula do
funcionrio ou o nome do dependente ser levantada uma exceo da classe
EDatabaseError que dever ser tratada pelos conceitos vistos no curso.
O evento OnClick do boto confirmar no cadastro de dependentes pode ser
(atualizado) implementado como o exemplo abaixo:


procedure TFrmCadDependente.BbtConfirmarClick(Sender: TObject);
begin
try
DmEmpresa.TbDependente.Post;
TrataBotoes;
except
on E: EDataBaseError do
Showmessage('Campo obrigatrio sem preencher! ' + #13+#13 + E.Message);
end;
end;

O objeto E da classe Exception recebe o valor do objeto de exceo. Este objeto
no precisa ser declarado e permite comparar qual o erro atual, para tomada de
decises.


18.3 EXCLUSO COM CONSISTNCIA


Antes de excluir em cascata, vamos exemplificar uma situao em que: havendo a
chave primria como chave estrangeira na outra tabela, no se pode excluir o
registro.
Neste projeto, o exemplo o seguinte: Se houver uma ocorrncia do cdigo do setor
(chave primria) da tabela setor na tabela funcionrio (chave estrangeira) no
vamos deletar o setor.


18.4 EXCLUSO EM CASCATA


Pense nesta situao: Ao excluir um funcionrio, o cdigo correspondente na tabela
dependente no ser mais vlido, ou seja, o dependente ter um cdigo (Matricula)
que no existe mais.
Nosso objetivo ento ser deletar o(s) dependente(s) do funcionrio deletado.


procedureTDmEmpresa.TbFuncionarioBeforeDelete(DataSet: TDataSet);
begin
if TbDependente.Locate('Matricula',
TbFuncionario.FieldByName('Matricula').AsInteger,[]) then
begin



//desabilitar os controles data aware
TbDependente.DisableControls;

82

{Aplicar e ligar o filtro para que a tabela considere apenas os registros que tem a chave estrangeira com
o cdigo do funcionario a ser deletado}

TbDependente.Filter :=
'Matricula='+TbFuncionario.FieldByName('Matricula').AsString;
TbDependente.Filtered := True;

//Enquanto nao e o fim da tabela, delete os registros filtrados
whilenot TbDependente.Eof do
TbDependente.Delete;

//Retirar o filtro para que a tabela possa considerar os outros registros
TbDependente.Filter := '';
TbDependente.Filtered := False;
end;
end;

procedureTDmEmpresa.TbFuncionarioAfterDelete(DataSet: TDataSet);
begin
//Habilitar os controles data aware aps a deleao do funcionario
TbDependente.EnableControls;
end;

As propriedades Filter e Filtered funcionam da seguinte forma:
Deve-se atribuir um valor (critrio) propriedade filter.
TbDependente.Filter;7
Depois ligar o filtro para que o critrio tenha efeito.
TbDependente.Filtered := True;


A partir deste momento a tabela (TbDependente) s vai manipular os registros que
atentem ao critrio, ou seja, todas as pessoas do sexo feminino. Caso o filtro no
seja desligado, a tabela no vai considerar os demais registros.
Os mtodos EnableControls e DisableControls servem para habilitar e desabilitar
os controles data aware.
Para evitar isso, desabilitamos os controles no momento da deleo dos
dependentes e habilitamos no momento aps a deleo do funcionrio.


18.5 UM POUCO MAIS SOBRE CONSULTAS


Vamos criar uma consulta para saber quais funcionrios trabalham em determinado
setor.
FrmConSetFun
Crie um novo formulrio e grave-o com o nome de UFrmConSetFun
Insira os componentes necessrios:


























Figura 74 Consulta de Funcionrio por Setor
Adicione no frmDmEmpresa um componente Query e um DataAccess e configure os
componentes conforme abaixo:


Object Query : TQuery
Name: QryConsSetor;
DataBaseName: dbEmpresa;
SQL: SELECT * FROM SETOR;
Active: False;

Object DataSet: TDataSet
Name: dsqryConsFunc;
DataSet : QryConsFuncionario
DataBaseName : dbEmpresa;

No formulrio FrmConSetFun adicione 1 DbLookupComboBox e 1 DbGrid e faa a
seguinte configurao:


Object : DbLookUpComboBox : TDbLookUpComboBox
ListSource: DMEmpresa->dsSetor;
ListField: Descrio;
KeyField: Setor_ID
Neste caso o componente DBLookUpComboBox ser utilizado apenas para mostrar
quais os setores existentes na tabela Setor sem nenhuma relao com a tabela
Funcionrio, por isso as propriedades DataField e DataSource no foram alteradas.
StrQry := 'SELECT * FROM FUNCIONARIO WHERE SETOR_ID = ''' +
DMEmpresa.tbSetor.FieldByName('Setor_ID').AsString + ''';';
With DMEmpresa, qryConsSetorFun , SQL Do Begin
Close;
Clear;
Add(StrQry);
Open;
End;
end;
end.

Вам также может понравиться