Vous êtes sur la page 1sur 44

Delphi 3

Sumrio
1 Introduo...................................................................................................................................................................................4
1.1 Viso Geral do Delphi...........................................................................................................................................................4
1.2 Principais Caractersticas.....................................................................................................................................................4
1.3 Verses..................................................................................................................................................................................4
1.4 Sites........................................................................................................................................................................................4
Ambiente de Programao...........................................................................................................................................................5
1.5 Janela Principal....................................................................................................................................................................5
1.6 !"ect #nspector....................................................................................................................................................................5
1.$ %or& Desi'ner.......................................................................................................................................................................5
1.( )anip*lando Co&ponentes...................................................................................................................................................5
1.+ ,ditor de C-di'o...................................................................................................................................................................5
1.1. Con/i'*ra0o do 1&!iente..................................................................................................................................................5
1.11 ,str*t*ra de Pro"etos..........................................................................................................................................................5
1.12 Pro"ect )ana'er..................................................................................................................................................................6
1.13 Pro"ect ptions....................................................................................................................................................................6
1.14 Gerencia&ento de Pro"etos.................................................................................................................................................6
1.15 1"*da....................................................................................................................................................................................6
2 Biblioteca de Classes...................................................................................................................................................................7
2.1 2o&enclat*ra........................................................................................................................................................................$
2.2 Propriedades.........................................................................................................................................................................$
2.3 ,3entos..................................................................................................................................................................................$
2.4 )4todos.................................................................................................................................................................................(
2.5 Janelas...................................................................................................................................................................................(
2.6 Co&ponentes Padro............................................................................................................................................................+
2.$ Cai5as de Di6lo'o...............................................................................................................................................................13
2.( )en*s..................................................................................................................................................................................13
2.+ Classes 2o Vis*ais............................................................................................................................................................13
2.1. ,5erccios..........................................................................................................................................................................15
3 Fundamentos de b!ect Pascal................................................................................................................................................17
3.1 Conceitos de Pro'ra&a0o rientada a !"etos...............................................................................................................1$
3.2 ,str*t*ra de 7nits...............................................................................................................................................................1$
3.3 Vari63eis..............................................................................................................................................................................1$
3.4 1tri!*tos..............................................................................................................................................................................1$
3.5 ,ncaps*la&ento..................................................................................................................................................................1(
3.6 Classes.................................................................................................................................................................................1(
3.$ !"etos.................................................................................................................................................................................1(
3.( 8iterais.................................................................................................................................................................................1(
3.+ Constantes...........................................................................................................................................................................1(
3.1. #nstr*0es..........................................................................................................................................................................1+
3.11 Co&ent6rios......................................................................................................................................................................1+
3.12 9ipos de Dados Padro.....................................................................................................................................................1+
3.13 Con3erses de 9ipo...........................................................................................................................................................21
3.14 ,5presses.........................................................................................................................................................................22
3.15 peradores........................................................................................................................................................................22
3.16 ,str*t*ras de Deciso.......................................................................................................................................................23
3.1$ ,str*t*ras de :epeti0o....................................................................................................................................................24
3.1( 9ipos De/inidos Pelo 7s*6rio...........................................................................................................................................24
3.1+ Procedi&entos; %*n0es e )4todos..................................................................................................................................25
3.2. <ith....................................................................................................................................................................................26
3.21 Sel/.....................................................................................................................................................................................26
3.22 Criando e Destr*indo !"etos..........................................................................................................................................26
3.23 :99#...................................................................................................................................................................................2$
3.24 ,5erccios..........................................................................................................................................................................2$
4 A"lica#es $obustas..................................................................................................................................................................2%
2
4.1 ,5ce0es..............................................................................................................................................................................2+
4.2 =locos Prote'idos................................................................................................................................................................2+
4.3 Principais ,5ce0es.............................................................................................................................................................2+
4.4 =locos de %inali>a0o.........................................................................................................................................................2+
4.5 Gera0o de ,5ce0es..........................................................................................................................................................3.
4.6 ,rros de =ancos de Dados..................................................................................................................................................3.
5 Bancos de &ados........................................................................................................................................................................33
5.1 Conceitos #&portantes.........................................................................................................................................................33
5.2 )odelo de Dados.................................................................................................................................................................33
5.3 =orland Data!ase ,n'ine...................................................................................................................................................33
5.4 1r?*itet*ra de 1cesso..........................................................................................................................................................33
5.5 Cria0o do =anco de Dados................................................................................................................................................34
5.6 Data!ase Des@top................................................................................................................................................................34
5.$ Con/i'*ra0o.......................................................................................................................................................................34
5.( 9Data!ase............................................................................................................................................................................35
5.+ Data!ase %or& <i>ard.......................................................................................................................................................36
5.1. 9Data)od*le.....................................................................................................................................................................36
5.11 99a!le................................................................................................................................................................................36
5.12 )estreADetalhe..................................................................................................................................................................3+
5.13 %ields ,ditor......................................................................................................................................................................4.
5.14 9%ield................................................................................................................................................................................4.
5.15 9DataSo*rce......................................................................................................................................................................42
5.16 Data Controls....................................................................................................................................................................43
5.1$ 9D=2a3i'ator...................................................................................................................................................................43
5.1( 9D=Grid............................................................................................................................................................................43
5.1+ 9D=9e5t; 9D=,dit; 9D=)e&o; 9D=8ist=o5; 9D=Co&!o=o5; 9D=#&a'e; 9D=:ich,dit.............................................43
5.2. 9D=Chec@=o5...................................................................................................................................................................44
5.21 9D=:adioGro*p................................................................................................................................................................44
5.22 9D=8oo@*p8ist=o5; 9D=8oo@*pCo&!o=o5....................................................................................................................44
5.23 ,5erccios..........................................................................................................................................................................44
3
1 Introduo
1.1 Viso Geral do Delphi
Desde que a primeira verso do Delphi foi lanada, em 1995, esta ferramenta tem se mostrado como a melhor
escolha no desenvolvimento para Windows. Numa relao com outros ambientes de programao, podemos dizer
que o Delphi tem o poder do C++, e a facilidade do Visual Basic.
A principal vantagem do Delphi est na linguagem usada, Object Pascal, que uma evoluo do Pascal padro. O
Pascal surgiu no final dos anos 60 e, at hoje, usada como uma das primeiras linguagens de programao para
estudantes de computao. Em 1984, a Borland lanou o Turbo Pascal, que se firmou como o melhor compilador
de Pascal do mercado e, a partir de ento, passou a incluir novos recursos nesta linguagem, como Units e
Objetos, at a ascenso do Windows, quando foi lanado o Turbo Pascal for Windows e, depois, o Borland Pascal,
cuja linguagem considerada a primeira verso da Object Pascal. Na sua atual verso, usada pelo Delphi, a
Object Pascal uma linguagem poderosa, slida e respeitada, sem perder sua peculiar facilidade.
No Delphi, a criao de aplicativos comea com a montagem de componentes em janelas, como se fosse um
programa grfico, o usurio tambm pode utilizar componentes desenvolvidos por terceiros ou criar seus prprios
componentes.
O Delphi vem com todas as ferramentas necessrias para a criao de bancos de dados dBase e Paradox, alm
de uma verso do nterbase, permitindo a criao de aplicativos com banco de dados sem a necessidade de
aquisio de outro programa. O Delphi tambm tem acesso a bases de dados como Foxpro, Access, nFormix,
SYBASE, Oracle, SQL Server e DB2, alm de qualquer outro banco de dados para Windows compatvel com
ODBC.
1.2 Principais Caractersticas
Compilador/otimizador de cdigo mais rpido do mercado, gerando executveis rpidos e puros, sem run-time
Totalmente orientado a objetos e com suporte a threads e OLE Automation
Baseado em componentes, com facilidade de criao de componentes nativos, alm de controles ActiveX,
inclusive com disponibilidade do cdigo fonte dos componentes padro
Programao two-way, utilizao de mtodos visuais ou diretamente sobre o cdigo
Suporte a manipulao de excees, que permite criar aplicaes mais robustas e com maior segurana
Acesso rpido e seguro a bancos de dados atravs do Borland Database Engine, com facilidades de
manipulao
Criao de relatrios no prprio executvel, com utilizao de componentes nativos
Facilidade de upsizing para bancos de dados cliente/servidor
Capacidade de criao de aplicaes multi-tier, com objetos distribudos
Suporte a cdigo in-line, em assembly
Capacidade de criao de outros tipos de utilitrios, como DLL's, Screen Saver's e aplicaes CG..
Literatura diversificada
Fluxo de programao baseado em eventos
1.3 Verses
Delphi Standard, para estudantes, com poucas ferramentas de apoio
Delphi Professional, com a maioria das ferramentas, mas sem suporte a arquitetura cliente/servidor
Delphi Client/Server Suite, verso completa, com todas as ferramentas de apoio
1.4 Sites
http://www.rn.senac.br/desenvolvimento
http://carbohyd.siobc.ras.ru/torry/
http://delphi32.com
http://rx.demo.ru/links.htm
http://super.sonic.net/ann/delphi
http://www.borland.com
http://www.chami.com/tips/
http://www.hyperact.com
http://www.intermid.com/delphi/
http://www.sunsite.icm.edu.pl/delphi/
http://www.teleport.com/~ol/dfiles.shtml
4
Ambiente de Programao
1.5 Janela Principal
A janela principal do Delphi composta pela barra de menus, barra de ferramentas e paleta de componentes.
Para personalizar a barra de ferramentas, basta clicar em Properties no menu de contexto. Na paleta de
componentes esto os controles usados nas aplicaes, agrupados em guias por categorias.
1.6 !"ect #nspector
No Object nspector podemos manipular, em tempo de projeto, as propriedades e eventos dos componentes. Voc
tambm pode selecionar um componente usando o Seletor de Objetos, no topo do Object nspector.
1.6.1 Propriedades
So as caractersticas de um componente. Para mudar uma propriedade, selecione o componente no Form
Designer ou no Object Selector, localize a propriedade, na guia Properties e mude o valor na coluna direita.
A edio de propriedades pode ser simples, por lista suspensa, caixa de dialogo ou com propriedades aninhadas.
1.6.2 Eventos
Numa definio inicial, eventos podem ser vistos como chamadas a mtodos em resposta a determinadas
mensagens do Windows. Para criar um mtodo para um evento, selecione o componente e clique duas vezes na
coluna direita do evento na guia Events do Object nspector, o Delphi faz todas as declaraes necessrias e
mostra o mtodo pronto para ser programado no Editor de Cdigo. Para que um evento chame um mtodo j
definido, em vez de clicar duas vezes na coluna direita do evento, voc deve usar a lista suspensa.
1.$ %or& Desi'ner
O Form Designer onde so desenhados os Forms das aplicaes, com a insero de componentes. No menu de
contexto do Form, voc pode clicar em View as Text para editar a descrio textual do Form e de seus
componentes no Editor de Cdigo, essas inFormaes so gravadas em um arquivo binrio com a extenso DFM,
para voltar ao modo de exibio normal, escolha View as Form no menu de contexto do Editor de Cdigo.
1.( )anip*lando Co&ponentes
Incluir: Selecionar o componente na paleta e clicar no Form Designer.
Redimensionar: Clicar no componente e arrastar as alas de borda. Podemos usar SHFT+SETAS para
redimensionar o componente fora da grade de alinhamento do Form.
Mover: Arrastar o componente. Podem ser usadas tambm operaes de recortar, copiar e colar, alm de
CTRL+SETAS para mover o componente para fora da grade de alinhamento do Form.
Selecionar: Segurar SHFT para selecionar vrios componentes individuais e CTRL para escolher uma rea
retangular do Form e selecionar todos os componentes nesta rea.
Alinhamento: Para alinhar componentes selecione-os e escolha View / Alignment Palette.
Menu de Contexto: Bring To Front / Send To Back, para trazer o componente para frente ou enviar para trs, Tab
Order para mudar a ordem de tabulao, alm de Align To Grid, para alinhar os componentes selecionados
Grade do Form Designer.
1.+ ,ditor de C-di'o
Para escrever o cdigo, usamos o Editor de Cdigo do Delphi. Para cada Form criado um cdigo, que gravado
em arquivos chamados Units, nesses arquivos definida a classe do Form e seus mtodos de eventos. Para
alternar entre o Form e sua Unit podemos clicar em Toggle Form/Unit no menu View, ou no boto corresponde da
Barra de Ferrramentas. Para cada Form aberto criado um Form Designer e uma nova guia no Editor de Cdigo.
1.1. Con/i'*ra0o do 1&!iente
Grande parte das opes de configurao do ambiente podem ser acessadas atravs do item Environment
Options do menu Tools. A maioria das opes desse dilogo so bastante claras e atravs delas podemos definir,
desde as opes do Form Designer, at o Editor de Cdigo e o caminho das Livrarias. No menu Tools, podemos
escolher tambm Configure Tools, para permitir abrir aplicaes externas a partir do ambiente do Delphi, como o
mage Editor e o Database Desktop.
1.11 ,str*t*ra de Pro"etos
Um projeto em Delphi dividido em mdulos, chamados Units, seguindo a estrutura de arquivos descrita na tabela
abaixo.
Extenso !escri"o
DPR Arquivo de projeto, onde so indicados as Units e o cdigo de inicializao do programa
PAS Cdigo fonte de uma Unit do projeto
DCU Unit compilada
DFM Definio visual de um Form. O cdigo fonte est em uma Unit com o mesmo nome
DOF Opes de configurao para o projeto
RES Recursos do projeto, com o cone do programa
5
~PA, ~DF, ~DP Arquivos temporrios
DSK Configuraes de Desktop
1.12 Pro"ect )ana'er
Para ajudar no gerenciamento de projetos, podemos usar o Project Manager pelo menu View. O Project Manager
lista as Units, os Forms existentes nessas Units e o path, se a Unit no estiver na pasta do projeto. Atravs dos
botes do Project Manager voc pode adicionar, excluir e visualizar Units e Forms que compem o projeto.
1.13 Pro"ect ptions
Atravs do item Options, do menu Project, podemos escolher diversos aspectos de um projeto.
1.1#.1 $orms
Nessa pgina, podemos definir o Form principal da aplicao e a os Forms que sero criados automaticamente.
Se um Form no for criado automaticamente, voc ter que instanciar esse Form explicitamente.
1.1#.2 Application
Nessa pgina podemos definir o ttulo, o arquivo help e o cone da aplicao.
1.1#.# Compiler
Usamos essa pgina para definir as opes de compilao, para o projeto atual. Essas opes iro interferir
diretamente no executvel gerado.
1.1#.% &in'er
Essa pgina muito pouco usada, mas somente atravs dela podem modificar a memria exigida por uma
aplicao.
1.1#.( !irectories)Conditionals
Aqui voc pode especificar pastas de sada para os arquivos gerados na compilao do projeto e opes de
compilao condicional.
1.1#.6 *ersion In$ormation
nFormaes da verso do executvel.
1.1#.+ Pac'a,es
Nesta pgina voc pode especificar parte do cdigo para ser includo em Packages, fora do executvel, permitindo
compartilhamento de componentes entre vrias aplicaes Delphi.
1.14 Gerencia&ento de Pro"etos
Segue uma descrio das mais importantes opes de menu para o gerenciamento de projetos, algumas dessas
opes tem um boto correspondente na barra de ferramentas.
$ile
New Abre um dilogo com novos itens que podem ser adicionados ao projeto
Open Abrir projetos, pode abrir tambm Units, Forms e texto no editor de cdigo
Save Salva o arquivo aberto no editor de cdigo
Save Project As Salva o projeto com outro nome ou local
Use Unit Faz com que a Unit atual possa usar outra Unit do projeto
Add to Project Adiciona uma Unit em disco ao projeto
Remove from Project Remove uma Unit do projeto
*ie-
Project Manager Mostra o gerenciador de projeto
Project Source Mostra o cdigo do projeto
Object nspector Mostra o Object nspector
Toggle Form/Unit Alterna entre o Form e a Unit
Units Mostra o cdigo fonte de uma Unit ou do Projeto a partir de uma lista
Forms Seleciona um Form a partir de uma lista
Pro.ect
Compile Compila o projeto
Options Opes do projeto, como cone do executvel, nome da aplicao e opes de compilao
Run
Run Compila e executa o projeto
1.15 1"*da
O sistema de ajuda do Delphi a referncia mais completa, seguida pelos manuais do usurio cedidos com o
sistema. Se quiser ajuda sobre um componente, selecione-o e aperte F1, o mesmo pode ser feito com
propriedades e eventos, no Object npector e comandos, no editor de cdigo.
6
2 Biblioteca de Classes
2.1 2o&enclat*ra
Para nomear os componentes podemos usar uma conveno muito usada, onde as primeiras letras, minsculas,
identificam o tipo do componente e o restante identifica a funo deste, assim, btnSair, seria o boto de sair.
Se a funo do componente for um nome composto esse nome deve ser escrito com os primeiros nomes
abreviados e com letras de caso varivel, como em btnRelVendas, que seria o boto do relatrio de vendas ou
btnRelVenProduto, que seria o boto do relatrio de vendas por produto.
2.2 Propriedades
As propriedades so caractersticas dos componentes, como foi mostrado anteriormente. Para alterar
propriedades em cdigo use a sintaxe de ponto, como mostrado abaixo.
2.2.1 /ipos de Propriedade
Tipo String
Button1.Caption := 'Fechar';
Label1.Caption := Edit1.Text + '/' + Edit2.Text;
Tipo Numrico
Button2.Height := Button2.Height * 2;
Width := Button1.Width + Button2.Width + 12;
Tipo Enumerado
BorderStyle := bsDialog;
Panel1.Color := clWindow;
Propriedades Aninhadas de Classe
Memo1.Lines.Text := 'E agora, Jos?';
Label1.Font.Color := clBlue;
Propriedades Aninhadas de Conjunto
BorderIcons := [biSystemMenu, biMaximize];
Label1.Font.Style := [fsBold, fsItalic];
2.2.2 Propriedades Comuns
Propriedade !escri"o
Align Determina o alinhamento do componente
Canvas Superfcie de desenho, do tipo TCanvas, onde pode se desenhar a imagem do componente
Caption Legenda do componente (& indica tecla de atalho para alguns componentes)
Color Cor do componente
ComponentCount O nmero de componentes possudos
Components Matriz de componentes possudos
Ctl3D Define a aparncia 3D do componente
Enabled Define se o componente est ativo, se pode ser usado
Font Fonte utilizada no componente
Height Altura
HelpContext Nmero utilizado para chamar o Help on-line
Hint String utilizada em dicas instantneas
Left Posio esquerda
Name Nome do componente
PopupMenu Menu de contexto do componente
ShowHint Define se o Hint ser mostrado
TabOrder A ordem de tabulao do componente, usada quando o usurio tecla TAB
TabStop ndica se o componente ser selecionado quando o usurio teclar TAB
Tag Propriedade no utilizada pelo Delphi, que pode ser usada como propriedade personalizada
Top Posio superior
Visible Define se o componente est visvel
Width Largura
2.3 ,3entos
Os Eventos acontecem em resposta a uma ao do usurio ou do prprio sistema, ao programar um mtodo de
evento, devemos levar em considerao que este s ser executados quando o evento acontecer. Uma das
tarefas mais importantes na programao baseada em eventos determinar quais eventos sero usados e qual a
ordem desses eventos, por exemplo, quando o usurio clicar em um boto, qual evento acontecer primeiro,
OnEnter, OnMouseDown ou OnClick?
7
Os eventos podem ser compartilhados entre componentes, dessa Forma, voc pode ter um boto na barra de
ferramentas que faz a mesma coisa que uma opo de menu. Para isso, basta escolher o evento na lista em vez
de clicar duas vezes no Object nspector.
Podemos tambm mudar os mtodos de evento em cdigo, pois os eventos tambm so propriedades e podem
ser usados como tal. Voc pode atribuir um evento de outro componente ou diretamente o nome do mtodo, como
mostrado abaixo.
Button1.OnClick := Edit1.OnExit;
Button2.OnClick := Edit2Click;
2.#.1 Eventos Comuns
Evento !escri"o
OnChange O contedo do componente alterado
OnClick O componente acionado
OnDblClick Duplo-clique no componente
OnEnter O componente recebe o foco
OnExit O componente perde o foco
OnKeyDown Tecla pressionada
OnKeyPress Uma tecla pressionada e solta
OnKeyUp Tecla solta
2.4 )4todos
Os mtodos realizam aes definidas pelo componente, veja os exemplos abaixo e atente para os parmetros
passados. Note que podemos chamar os mtodos de evento como qualquer outro mtodo e que os mtodos de
evento pertencem ao Form, no aos componentes.
Edit1.Clear;
Form2.Show;
Close;
ScaleBy(110, 100);
Button1.ScrollBy(10, 10);
Button1.OnClick(Sender);
Button1Click(Self);
Form2.Button1Click(Sender);
2.%.1 M0todos Comuns
M0todo !escri"o
Create Cria um novo Objeto de uma Classe
Free Destri um Objeto e libera a memria ocupada por ele
Show Torna o componente visvel
Hide Torna o componente invisvel
SetFocus Coloca o foco no componente
Focused Determina se o componente tem o foco
BringToFront Coloca o componente na frente dos outros
SendToBack Coloca o componente atrs dos outros
ScrollBy Move o componente
ScaleBy Gradua o componente em determina escala
SetBounds Muda a posio e o tamanho do componente
2.5 Janelas
Todo aplicativo Windows composto por janelas, que so o elemento bsico no desenvolvimento Delphi, sobre o
qual um aplicativo construdo. O tipo TForm usado no Delphi como classe base para todas as janelas, veja
abaixo algumas propriedades, eventos e mtodos dessa classe.
Propriedade !escri"o
Active ndica se o Form est ativo
ActiveControl Determina o controle que receber o foco por default
AutoScroll Adiciona barras de rolagem automaticamente, quando necessrio
Bordercons Define quais cones de controle sero visveis, quais botes vo aparecer na barra de ttulo
BorderStyle Estilo da borda do Form
FormStyle Tipo de Form, normal, MD pai, MD filho ou sempre visvel
con cone do Form
Menu ndica qual o menu do Form
Position Permite controlar a posio e tamanho do Form na exibio
WindowMenu Automatiza o item de menu Window (MD)
8
WindowState Estado do Form, maximizada, minimizada ou normal
Evento !escri"o
OnCreate Quando o Form instanciado
OnDestroy Quando o Form liberado da memria
OnShow Exatamente antes de mostrar o Form
OnCloseQuery chamada para validar se o Form pode ser fechado
OnClose Quando o Form fechado
OnActivate Quando o Form recebe o foco
OnDeactivate Quando o Form perde o foco
OnResize Quando o Form muda de tamanho
M0todo !escri"o
Cascade Organiza as Forms filhos em cascata (MD)
Tile Organiza as Forms filhos lado a lado (MD)
Arrangecons Organiza os cones dos Forms Filhos minimizados (MD)
ShowModal Ativa o Form modal, que o usurio tem que fechar para poder continuar a usar a aplicao
Show Mostra o Form
Close Fecha o Form
Previous Ativa o Form anterior (MD)
Next Ativa a prximo Form (MD)
2.6 Co&ponentes Padro
/1utton
Componente boto padro do Windows, utilizado para executar aes.
Propriedade !escri"o
Cancel Dispara o evento OnClick do boto quando a tecla ESC pressionada em qualquer controle
Default Dispara o evento OnClick do boto quando a tecla ENTER pressionada em qualquer controle
ModalResult Associa o boto a opo de fechamento de um Form modal
M0todo !escri"o
Click Ativa o evento OnClick do boto
/1it1tn
Boto especializado, com Bitmap.
Propriedade !escri"o
Glyph Bitmap exibido pelo boto
LayOut Posio do Bitmap no Boto
Margin ndica o espao entre a borda do boto e o Bitmap
Spacing ndica o espao entre o Bitmap e o texto do boto
Kind Seleciona um tipo padro para o boto, mudando vrias propriedades, como Glyph e ModalResult
/Speed1utton
Boto com Bitmap, normalmente utilizado em barras de ferramentas.
Propriedade !escri"o
Down Estado do boto (Pressionado ou no)
Groupndex ndica quais botes pertencero ao mesmo grupo
AllowAllUp Permite que todos os botes de um grupo possam ficar no pressionados
Flat Define se a borda do boto deve aparecer apenas quando ele for apontado
/&a2el
Utilizado para exibir rtulos
Propriedade !escri"o
Alignment Alinhamento do texto no componente
AutoSize Define se o tamanho do componente ser automaticamente ajustado ao tamanho do Caption
WordWrap Retorno automtico de linha
Transparent Define se o componente ser transparente
FocusControl Componente que receber o foco quando a tecla de atalho do Caption (&) for pressionada
ShowAccelChar ndica se o caractere & ser usado para definir tecla de atalho
/Edit
Utilizado para entrada de texto em uma nica linha.
Propriedade !escri"o
9
Text Texto do componente
AutoSelect ndica se o texto ser ou no selecionado quando o componente receber o foco
MaxLength Nmero mximo de caracteres permitidos
CharCase Define se as letras aparecero em maisculo, minsculo ou normal
PasswordChar Caractere utilizado para esconder o texto digitado (Senhas)
ReadOnly Define se ser permitido alterar o texto
M0todo !escri"o
Clear Limpa o contedo do componente
ClearSelection Limpa o texto selecionado no componente
/Mas'Edit
Permite entrada de dados texto em uma linha, utilizando uma mscara de edio. Possui todas as propriedades
do componente TEdit.
Propriedade !escri"o
EditMask Mscara de edio
M3scaras
Uma mscara composta por trs partes, a primeira parte a mscara propriamente dita, a segunda parte indica
se os caracteres literais sero salvos e a terceira parte indica qual o caractere utilizado para representar os
espaos a serem digitados no texto.
Estes so os caracteres especiais que podem compor a mscara de edio:
Caractere !escri"o
! Espaos em branco no sero considerados no texto
> Todos os caracteres seguintes sero maisculos at que aparea o caractere <
< Todos os caracteres seguintes sero minsculos at que aparea o caractere >
\ ndica um caractere literal
l Somente caractere alfabtico
L Obrigatoriamente um caractere alfabtico
a Somente caractere alfanumrico
A Obrigatoriamente caractere alfanumrico
9 Somente caractere numrico
0 Obrigatoriamente caractere numrico
c Permite um caractere
C Obrigatoriamente um caractere
# Permite um caractere numrico ou sinal de mais ou de menos, mas no os requer.
: Separador de horas, minutos e segundos
/ Separador de dias, meses e anos
/Memo
Permite entrada de dados texto em mltiplas linhas. Contm propriedades e mtodos do TEdit.
Propriedade !escri"o
Lines Propriedade do tipo TStrings que armazena as linhas de texto do componente
WantReturns Define se a tecla ENTER ser tratada como quebra de linha
WantTabs Define se a tecla TAB ser tratada como espao de tabulao
ScrollBar Define as barras de rolagem
/Strin,s
Muitos componentes, como o TMemo, possuem propriedades do Tipo TStrings, essa classe permite armazenar e
manipular uma lista de Strings. Toda propriedade do tipo TStrings permite acesso indexado aos itens da lista.
Propriedade !escri"o
Count Nmero de strings
Text Contedo do memo na Forma de uma nica string
M0todo !escri"o
Add Adiciona uma nova string no final da lista
nsert nsere uma nova string numa posio especificada
Move Move uma string de um lugar para outro
Delete Apaga uma string
Clear Apaga toda a lista
10
ndexOf Retorna o ndice do item e - 1 caso no encontre
LoadFromFile Carrega texto de um arquivo
SaveToFile Salva texto para um arquivo
/Chec'1ox
Utilizado para obter inFormaes de checagem.
Propriedade !escri"o
AllowGrayed Determina se o checkbox ter trs possibilidades de estado
Checked Determina se o checkbox est marcado
State Estado atual do checkbox
/Radio1utton
Usado em grupo, pode ser utilizado para obter inFormaes lgicas mutuamente exclusivas, mas recomendado
usar o RadioGroup em vez de RadioButtons.
/Radio4roup
Componente que agrupa e controla RadioButtons automaticamente.
Propriedade !escri"o
Columns Nmero de colunas de RadioButtons
tems Lista de strings com os itens do RadioGroup, cada item da lista representa um RadioButton
temndex tem selecionado, iniciando em 0
/Panel
Componente Container utilizado para agrupar componentes em um painel.
Propriedade !escri"o
Bevelnner Estilo da moldura interna do painel
BevelOuter Estilo da moldura externa do painel
BevelWidth Largura das molduras
BorderStyle Estilo da Borda
BorderWidth Largura da borda, distncia entre as molduras interna e externa
/Scroll1ox
Container com barras de rolagem automticas.
/4roup1ox
Componente container com um ttulo e borda 3D.
/1evel
Moldura ou linha com aparncia 3D.
Propriedade !escri"o
Shape Tipo de moldura a ser desenhada
Style Define alto ou baixo relevo para a linha
/&ist1ox
Utilizado para exibir opes em uma lista.
Propriedade !escri"o
Columns Nmero de colunas de texto da lista
MultiSelect Define se ser permitida a seleo de mltiplos itens
ExtendedSelect Define se a seleo poder ser estendida pelo uso das teclas Shift e Ctrl
ntegralHeight Define se os itens podero aparecer parcialmente ou somente por completo
tems Lista de strings com os itens da lista
temndex ndice do item selecionado, comeando em 0
Selected De acordo com o ndice indica se um item em particular esta selecionado
SelCount ndica quantos itens esto selecionado
Sorted Define se os itens aparecero ordenados
/Com2o1ox
Caixa combinada com lista suspensa.
Propriedade !escri"o
tems Lista de strings com os itens da lista
DropDownCount Nmero de itens visveis da lista suspensa
Style Estilo do ComboBox, os principais estilos so csDropDown, csDropDownList, csSimple
11
/Ima,e
Componente usado para exibir figuras.
Propriedade !escri"o
Center Determina de a figura ser centralizada no componente
Picture Figura a exibida, pode ser BMP, CO, WMF ou EMF
Stretch Define se o tamanho da figura deve ser ajustada ao do componente
/Picture
Classe usada para guardar cones, Bitmaps, meta arquivos do Windows ou grficos definidos pelo usurio.
M0todo !escri"o
LoadFromFile Carrega figura de um arquivo
SaveToFile Salva figura para um arquivo
/Pa,eControl
Usado para criar controles com mltiplas pginas, que podem ser manipuladas, em tempo de projeto, atravs do
menu de contexto. Cada pgina criada um objeto do tipo TTabSheet.
Propriedade !escri"o
ActivePage Pgina ativa
MultiLine Define mltiplas linhas de guias de pginas
TabHeigth Altura das guias
TabWidth Largura das guias
Evento !escri"o
OnChange Aps uma mudana de pgina
OnChanging Permite a validao de uma mudana de pgina
M0todo !escri"o
FindNextPage Retorna a prxima pgina
SelectNextPage Seleciona a prxima pgina
//a2Sheet
Pgina de um PageControl.
Propriedade !escri"o
Pagendex Ordem da pgina
TabVisible Define se a aba da pgina visvel
/Shape
Grfico de uma Forma geomtrica.
Propriedade !escri"o
Brush Preenchimento da figura, objeto do tipo TBrush
Pen Tipo da linha, objeto do tipo TPen
Shape Forma geomtrica
//imer
Permite a execuo de um evento a cada intervalo de tempo.
Propriedade !escri"o
nterval Tempo em milissegundos quando o componente ir disparar o evento OnTimer
Evento !escri"o
OnTimer Chamado a cada ciclo de tempo determinado em nterval
/Status1ar
Utilizado para criar barras de status para exibir inFormaes.
Propriedade !escri"o
SimplePanel ndica se haver apenas um panel
SimpleText Texto exibido caso SimplePanel seja True
SizeGrip Define se a ala de redimensionamento padro deve ser mostrada
Panels Propriedade do tipo TStatusPanels, com os painis do StatusBar
/StatusPanels
Lista de panels de um StatusBar.
Propriedade !escri"o
Count Nmero de panels
tems Lista de panels, cada panel um objeto do tipo TStatusPanel
12
M0todo !escri"o
Add Adiciona um novo panel lista
/StatusPanel
Panel de um StatusBar.
Propriedade !escri"o
Text Texto do panel
Width Largura em pixels
Bevel Moldura do panel
Alignment Alinhamento do texto de um panel
2.$ Cai5as de Di6lo'o
Grupo de caixas de dilogo comuns do Windows.
M0todo !escri"o
Execute Mostra a caixa de dilogo e retorna True caso o usurio clique em Ok
2.+.1 /5pen!ialo, ) /Save!ialo,
Caixas de dilogo para abrir e salvar arquivos.
Propriedade !escri"o
FileName Nome do arquivo
DefaultExt Extenso padro para os arquivos
Filter Filtro, com os tipos de arquivos que sero abertos ou salvos
Filterndex ndice do filtro default
nitialDir Pasta inicial
Title Ttulo da janela
Options Define caractersticas gerais do dilogo
2.+.2 /$ont!ialo,
Caixa de dilogo de escolha de fonte.
Propriedade !escri"o
Device Define se deve utilizar fontes para tela, impressora ou ambos
MinFontSize Tamanho mnimo da fonte
MaxFontSize Tamanho mximo da fonte
Options Define caractersticas das fontes
Evento !escri"o
OnApply Ocorre aps o usurio pressionar o boto Aplicar, antes da janela fechar
2.( )en*s
No Delphi os menus sero desenhados no Menu Designer, que pode ser acessado no menu de contexto de
qualquer componente de menu.
2.6.1 /MainMenu
Menu principal de um Form.
Propriedade !escri"o
tems tens de menu, essa propriedade guarda todas as alteraes feitas no Menu Designer
2.6.2 /Pop7pMenu
Menu de contexto de um componente. Cada componente tem uma propriedade PopUpMenu, que indica seu menu
de contexto.
2.6.# /MenuItem
tem de menu.
Propriedade !escri"o
Checked ndica se o item est marcado ou no
Groupndex ndice do grupo do item, semelhante ao SpeedButton
RadioGroup ndica se o item pode ser mutuamente exclusivo com outros itens do mesmo grupo
ShortCut Tecla de atalho do item
2.+ Classes 2o Vis*ais
2.8.1 /Application
Todo programa tem um objeto global nomeado Application, do tipo TApplication, esse objeto representa a
aplicao para o Windows.
Propriedade !escri"o
13
ExeName Caminho e nome do arquivo executvel
MainForm Form principal da aplicao
Hint Hint recebido pela aplicao
Title Ttulo da aplicao
HelpFile Caminho e nome do arquivo help
Evento !escri"o
OnHint Quando um hint recebido pela aplicao
OnException Quando ocorre uma exceo
OnHelp Quando acontece uma solicitao de help
M0todo !escri"o
MessageBox Apresenta um quadro de mensagem
Run Executa a aplicao
Terminate Finaliza a aplicao normalmente
2.8.2 9uadros de Mensa,em
O mtodo Application.MessageBox mostra quadros de mensagem com chamadas a funes da AP do Windows.
Os flags de mensagem mais usados e os valores de retorno desse mtodo so mostrados abaixo.
$la, Item Mostrado
MB_ABORTRETRYGNORE Botes de Abortar, Repetir e gnorar
MB_CONERROR cone de erro
MB_CONEXCLAMATON cone com ponto de exclamao
MB_CONNFORMATON cone com letra i, usada para mostrar inFormaes
MB_CONQUESTON cone de pergunta
MB_OK Boto de Ok
MB_OKCANCEL Botes de Ok e Cancelar
MB_RETRYCANCEL Botes de Repetir e Cancelar
MB_SYSTEMMODAL O Windows s poder ser usado quando o quadro for fechado
MB_YESNO Botes de Sim e No
MB_YESNOCANCEL Botes de Sim, No e Cancelar
*alor de Retorno 1oto Escolhido
DABORT Abortar
DCANCEL Cancelar
DGNORE gnorar
DNO No
DOK Ok
DRETRY Repetir
DYES Sim
Esses quadros so usados quando se deseja uma resposta simples do usurio, principalmente numa confirmao
ou pergunta para o usurio, como o cdigo abaixo, usado no evento OnCloseQuery do Form principal.
if Application.MessageBox('Deseja fechar a aplicao?', 'Sair do sistema', MB_ICONQUESTION +
MB_YESNO) = IDNO then
CanClose := False;
2.8.# /Screen
O Delphi automaticamente cria a varivel Screen do tipo Tscreen, essa varivel guarda caractersticas do vdeo,
como mostrado abaixo.
Propriedade !escri"o
ActiveForm Form com o foco
FormCount Nmero de Forms no vdeo
Cursor Cursor do mouse
Forms Lista dos Forms disponveis
Fonts Lista de Fontes de tela disponveis
PixelsPernch Nmero de pixels por polegada da Fonte usada pelo sistema
Height Altura da tela em pixels
Width Largura da tela em pixels
2.8.% /Printer
Na Unit Printers declarado um objeto do tipo TPrinter nomeado Printer que encapsula toda a interface de
impresso do Windows e pode ser usado para imprimir diretamente, sem usar componentes de relatrio, como o
QuickReport.
14
Propriedade !escri"o
Canvas Superfcie de desenho, do tipo TCanvas, onde ser desenhada a imagem a ser impressa
Printers Lista de impressoras instaladas
Orientation Retrato ou Paisagem
PageHeight Altura da pgina
PageWidth Largura da pgina
PageNumber Pgina atual
M0todo !escri"o
BeginDoc nicia o processo de desenho
EndDoc Finaliza o processo de desenho e envia a imagem do Canvas para a impressora
Abort Aborta a impresso
2.8.( /Canvas
Um objeto da classe TCanvas uma superfcie de desenho, onde podem ser usados vrios mtodos de plotagem
grfica. Todos os controles visveis possuem uma propriedade Canvas, do tipo TCanvas, que geralmente usada
nos Forms e no objeto Printer.
Propriedade !escri"o
Brush Padro de preenchimento, propriedade do tipo TBrush
Pen Estilo de linha, propriedade do tipo TPen
Font Fonte usada nas plotagens de texto
M0todo !escri"o
TextOut Desenha texto na superfcie
Ellipse Desenha uma elipse
Polygon Desenha um polgono
Rectangle Desenha um retngulo
2.8.6 /&ist
Estrutura de dados polimrfica que pode gerenciar uma lista de objetos de qualquer classe e possui mtodos
semelhantes aos de TStrings.
2.8.+ /Strin,&ist
Lista de strings descendente de TStrings usada para manter listas de strings independentes de qualquer
componente.
2.8.6 /Re,istr:
nterface com a AP de manipulao do Registry do Windows, banco de dados de configurao do sistema.
2.1. ,5erccios
1. Quais os tipos de arquivo que essenciais para um projeto Delphi.
2. Como mudar o cone de uma aplicao em tempo de projeto?
3. Quais propriedades pode se usar para:
Deixar o Form sempre acima das outras janelas do sistema.
Mostrar as barras de rolagem quando o Form sobrepor um componente.
No mostrar os botes de maximizar e minimizar.
Fazer com que o Form no possa ser redimensionado, mas tenha todos os cones de borda.
Deixar o Form maximizado.
4. Que comandos podem ser usados para:
Duplicar a altura do Form.
Alterar o Form para 120% de seu tamanho.
Fazer com que um Form fique desabilitado.
Centralizar o Form na tela quando ele for mostrado.
Minimizar um Form.
5. Como mudar o ttulo de um Form para Delphi quando o usurio clicar nesse Form?
6. Crie um Form cujas propriedades possam ser mudadas em tempo de execuo, como sugesto, tente inserir
nesse Form controles que definam as seguintes propriedades:
Estilo de borda
Ttulo da janela
cones visveis na barra de ttulo
Se o Form sempre visvel
15
Se surgiro barras de rolagem automaticamente quando algum controle for sobreposto
Fonte do Form, que ser usada como aparncia base de todos os controles
7. Crie um Form que mostre a hora, atualizada a cada segundo.
8. Crie um projeto de um editor de notas, semelhante ao Bloco de Notas do Windows.
9. Crie um projeto que funcione como um visualizador de imagens e permita abrir imagens dos tipos padro.
Este projeto deve suprir as seguintes exigncias:
Barra de menus padro, com teclas de atalho
Barra de ferramentas como atalhos para todos os itens de menu, que possa ser ocultada
Barra de status, que tambm possa ser ocultada, com o nome do arquivo atual e a data do sistema
O usurio deve escolher se a imagem vai se ajustar automaticamente rea livre da janela principal
10. Como fazer para que seja mostrado um quadro de status durante a compilao de um programa?
16
3 undamentos de !b"ect Pascal
3.1 Conceitos de Pro'ra&a0o rientada a !"etos
Antes de partir para a linguagem propriamente dita, vamos revisar alguns conceitos bsicos de Programao
Orientada a Objetos.
Classe: Definio de tipo dos objetos, modelo de objeto.
52.eto: nstncia de classe, varivel cujo tipo uma classe.
Atri2utos: Variveis de instncia, so os dados de um objeto.
M0todos: Funes e procedimentos de um objeto.
Propriedades: Apelido usado para evitar o acesso direto aos atributos de um objeto, onde podemos especificar
mtodos que sero usados para ler e atribuir seus valores a esses atributos.
Mensa,ens: Chamada de mtodos, leitura e atribuio de propriedades.
Encapsulamento: Conjunto de tcnicas usadas para limitar o acesso aos atributos e mtodos internos de um
objeto.
;eran"a: Possibilidade de criar uma classe descendente de outra, aproveitando seus mtodos, atributos e
propriedades.
Ancestral: Super classe ou classe de base, a partir da qual outras classes podem ser criadas.
!escendente: Subclasse.
;ierar<uia de Classes: Conjunto de classes ancestrais e descendentes, geralmente representadas em uma
rvore hierrquica.
Polimor=ismo: Capacidade de redefinir mtodos e propriedades de uma classe em seus descendentes.
3.2 ,str*t*ra de 7nits
Vamos examinar o cdigo gerado para um novo Form, identificando as principais sees de uma Unit tpica. Crie
uma nova aplicao e observe na Unit principal as seguintes clusulas.
7nit: A primeira declarao de uma unit seu identificador, que igual ao nome do arquivo.
Inter=ace: Seo interface, onde ficam declaraes que podem ser usadas por outras Units.
7ses: Na clusula uses fica a Lista de Units usadas.
/:pe: Na clusula type fica a definio de tipos, aqui temos a declarao da classe do Form.
*ar: Na clusula var so declaradas as variveis, aqui temos a declarao da instncia do Form.
Implementation: Na seo implementation ficam as definies dos mtodos.
End: Toda Unit termina com um end a partir de onde qualquer texto ignorado.
3.3 Vari63eis
No Delphi, toda varivel tem que ser declarada antes de ser utilizada. As declaraes podem ser feitas aps a
palavra reservada var, onde so indicados o nome e o tipo da varivel. Os nomes de variveis no podem ter
acentos, espaos ou caracteres especiais como &, $ ou % e o primeiro caractere de um nome de varivel tem que
ser uma letra ou um sublinhado. O Delphi ignora o caso das letras.
#.#.1 *ari3veis 4lo2ais
As variveis abaixo so globais, declaradas da Interface da Unit. Podem ser acessadas por qualquer Unit usuria.
var
I: Integer;
Usuario: string;
A, B, Soma: Double;
Ok: Boolean;
#.#.2 *ari3veis &ocais
As variveis abaixo so locais ao mtodo, ou seja elas s existem dentro do mtodo, no podem ser acessadas
de fora, mesmo que seja na mesma Unit. Na verdade essas variveis so criadas quando o mtodo chamado e
destrudas quando ele encerrado, seu valor no persistente.
procedure TFrmExemplo.BtnTrocarClick(Sender: TObject);
var
Aux: string;
begin
Aux := EdtA.Text;
EdtA.Text := EdtB.Text;
EdtB.Text := Aux;
end;
3.4 1tri!*tos
Os atributos so variveis de instncia. Para declarar um atributo em uma classe basta definir o identificador e o
tipo do atributo na declarao da classe, feita na seo type da Interface da Unit, como abaixo.
type
17
TFrmSomar = class(TForm)
private
{ Private declarations }
A, B: Double;
public
{ Public declarations }
Soma: Double;
end;
3.5 ,ncaps*la&ento
Os principais nveis de visibilidade dos atributos e mtodos de uma classe so mostrados abaixo.
> ?@vel > *isi2ilidade
Private Os itens declarados nesse nvel s podem ser acessados na mesma unit.
Public Nesse nvel, qualquer unit usuria poder acessar o item.
Protected Os itens s podero ser acessados em outra unit se for em uma classe descendente
Published o nvel default, igual ao Public, mas define propriedades e eventos usados em tempo de projeto
3.6 Classes
Classes so tipos de objetos, uma classe declarada na clusula type da seo interface e os mtodos so
definidos na seo implementation. Examine o cdigo de um Form para identificar os elementos de sua classe.
interface
type
TFrmSomar = class(TForm)
EdtA: TEdit;
EdtB: TEdit;
BtnSoma: TButton;
procedure BtnSomaClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
implementation
procedure TFrmSoma.BtnSomaClick(Sender: TObject);
begin
ShowMessage(EdtA.Text + EditB.Text);
end;
3.$ !"etos
Um Objeto tratado como uma varivel cujo tipo uma classe. A declarao de objetos igual declarao de
uma varivel simples, tendo no lugar do tipo a classe do objeto.
var
FrmSomar: TFrmSomar;
3.( 8iterais
Valores literais so valores usados em atribuies e expresses. Cada tipo tem uma sintaxe diferente.
> /ipo > !e=ini"o
nteiro Seqncia de dgitos decimais (0 a 9), sinalizados ou no
nteiro Hexadecimal Seqncia de dgitos hexadecimais (0 a F), precedidos por um sifro ($)
Real gual ao tipo nteiro, mas pode usar separador decimal e notao cientfica
Caractere Letra entre apstrofos ou o caracter # seguido de um nmero inteiro entre 0 e 255 (ASC)
String Seqncia de caracteres delimitado por apstrofos
3.+ Constantes
So declaradas na seo const, podem ser usadas como variveis, mas no podem ser alteradas. Geralmente o
nome das constantes escrito em letras maisculas e na declarao dessas constantes no indicado o tipo.
const
G = 3.94851265E-19;
NUM_CHARS = '0123456789';
CR = #13;
SPACE = ' ';
MAX_VALUE = $FFFFFFFF;
#.8.1 Constantes /ipadas
Na verdade, constantes tipadas so variveis inicializadas com valor persistente, que podem ser alteradas
normalmente, como qualquer varivel. A nica diferena de sintaxe entre constantes tipadas e simples que o tipo
da constante indicado explicitamente na declarao. Se uma constante tipada for declarada localmente, ela no
18
ser destruda quando o mtodo for encerrado. Para diferenciar das constantes normais, costuma-se declarar
estas com letras de caso varivel, como abaixo.
const
Cont: Integer = 1;
Peso: Double = 50.5;
Empresa: string = 'SENAC';
3.1. #nstr*0es
Os programas so compostos por instrues, que so linhas de cdigo executvel. Exemplos de instrues
simples so atribuies, mensagens entre objetos, chamadas de procedimentos, funes e mtodos, como
mostradas abaixo. As instrues podem ser divididas em vrias linhas, o que indica o fim de uma instruo o
ponto e vrgula no final. Quando uma instruo quebrada, costuma-se dar dois espaos antes das prximas
linhas, para melhorar a leitura do cdigo.
Caption := 'Gabba Gabba Hey!';
Form2.ShowModal;
Application.MessageBox('Voc executou uma operao ilegal, o programa ser finalizado.',
'Falha geral', MB_ICONERROR);
Voc pode usar vrias instrues agrupadas em uma instruo composta, como se fosse uma s instruo. Uma
instruo composta delimitada pelas palavras reservadas begin e end. Toda instruo, simples ou composta,
terminada com um ponto-e-vrgula.
if CheckBox1.Checked then
begin
ShowMessage('O CheckBox ser desmarcado.');
CheckBox1.Checked := False;
end;
#.1>.1 Estilo de Codi=ica"o
As instrues e todo o cdigo de uma Unit devem ser distribudos para facilitar o mximo a leitura. Para isso,
podemos usar a indentao, geralmente de dois espaos para indicar os nveis de cdigo. Procure criar um estilo
prprio, que melhor se molde sua realidade. Se for desenvolver em grupo, melhor que todos usem o mesmo
estilo para evitar confuses.
3.11 Co&ent6rios
Existem 3 estilos de comentrio no Delphi, como mostrado abaixo.
(* Comentrio do Pascal Padro *)
{ Comentrio do Turbo Pascal }
// Comentrio de linha do C++
Cuidado com as diretivas de compilao, pois elas so delimitadas por chaves e podem ser confundidas com
comentrios. A diretiva de compilao mostrada abaixo includa em todas as Units de Forms.
{$R*.DFM}
3.12 9ipos de Dados Padro
O Delphi trata vrios tipos de dados padro, segue uma descrio sucinta desses tipos.
#.12.1 /ipos Inteiros
So tipos numricos exatos, sem casas decimais. O tipo Integer o tipo inteiro padro.
> /ipo > /amanho em
1:tes
> *alor M@nimo > *alor M3ximo
Shortnt 1 -128 127
Smallnt 2 -32768 32767
Longint 4 -2147483648 2147483647
Byte 1 0 255
Word 2 0 65535
nteger 4 -2147483648 2147483647
Cardinal 4 0 2147483647
#.12.2 /ipos Reais
So tipos numricos com casas decimais. O tipo Double o tipo real padro.
> /ipo > /amanho em
1:tes
> *alor
M@nimo
> *alor
M3ximo
> !@,itos
Si,ni=icativos
Real 6 10
-39
10
38
11-12
Single 4 10
-45
10
38
7-8
Double 8 10
-324
10
308
15-16
Extended 10 10
-4932
10
4932
19-20
Comp 8 -10
18
10
18
19-20
Currency 8 -10
12
10
12
19-20
19
#.12.# /ipos /exto
Os tipos texto podem operar com caracteres simples ou grupos de caracteres. O tipo texto padro o tipo string.
> /ipo > !escri"o
Char Um nico caractere ASC
String Texto alocado dinamicamente, pode ser limitado a 255 caracteres conforme configurao
PChar String terminada em nulo (#0), usada geralmente nas funes da AP do Windows
O operador + pode ser usado para concatenar strings e voc pode usar uma varivel do tipo string como uma lista
de caracteres.
ShowMessage('5 letra do ttulo da janela: ' + Caption[5]);
Label1.Text := '2 letra do Edit: ' + Edit1.Text[2];
Existem vrias funes de manipulao de strings, veja algumas das mais importantes mostradas abaixo.
> $un"o > !escri"o
AnsiCompareText Compara 2 strings sem sensitividade de maisculas/minsculas
AnsiLowerCase Converte todas as letras de uma string para minsculas
AnsiUpperCase Converte todas as letras de uma string para maisculas
Copy Retorna parte de uma string
Delete Apaga parte de uma string
nsert nsere uma string em outra
Length Nmero de caracteres de uma string
Pos Posio de uma string em outra
Trim Remove todos os espaos de uma string
TrimLeft Remove os espaos esquerda de uma string
TrimRight Remove os espaos direita de uma string
Format Formata uma string com uma srie de argumentos de vrios tipos
Por exemplo, para comparar o texto de dois Edits, poderamos usar a funo AnsiCompareText.
if AnsiCompareText(EdtA.Text, EdtB.Text) = 0 then
ShowMessage('O texto dos dois Edits so iguais.');
A funo Format especialmente til na formatao de strings, veja alguns exemplos.
ShowMessage(Format('O nmero %d a parte inteira do nmero %f.', [10, 10.5]));
ShowMessage(Format('Este texto%sfoi formatado%susando o caractere #%d.', [#13, #13, 13]));
ShowMessage(Format('O preo do livro %s %m.', ['Como Programar em Delphi', 50.7]));
Um detalhe que deve ser observado que as propriedades dos objetos no podem ser usadas como variveis em
funes. Veja a declarao do procedimento Delete no help.
procedure Delete(var S: string; Index, Count:Integer);
Digamos que voc deseje apagar as 5 primeiras letras de um Edit, como a string do Delete varivel, no poderia
usar o cdigo abaixo.
Delete(Edit1.Text, 1, 5);
Para voc poder fazer a operao desejada, teria que usar uma varivel como varivel auxiliar.
var
S: string;
begin
S := Edit1.Text;
Delete(S, 1, 5);
Edit1.Text := S;
end;
#.12.% /ipos 5rdinais
Tipos ordinais so tipos que tem uma seqncia incremental, ou seja, voc sempre pode dizer qual o prximo
valor ou qual o valor anterior a um determinado valor desses tipos. So tipos ordinais o Char, os tipos inteiros, o
Boolean e os tipos enumerados. Algumas rotinas para ordinais so mostradas abaixo.
> $un"o > !escri"o
Dec Decrementa varivel ordinal
nc ncrementa varivel ordinal
Odd Testa se um ordinal mpar
Pred Predecessor do ordinal
Succ Sucessor do ordinal
Ord Ordem de um valor na faixa de valores de um tipo ordinal
Low Valor mais baixo na faixa de valores
High Valor mais alto na faixa de valores
Por exemplo, use o cdigo abaixo no evento OnKeyPress de um Edit e veja o resultado.
Inc(Key);
20
#.12.( 1oolean
Variveis do tipo Boolean podem receber os valores lgicos True ou False, verdadeiro ou falso. Uma varivel
Boolean ocupa 1 byte de memria.
#.12.6 /!ate/ime
O tipo TDateTime guarda data e hora em uma estrutura interna igual ao tipo Double, onde a parte inteira o
nmero de dias desde 31/12/1899 e a parte decimal guarda a hora, minuto, segundo e milissegundo. As datas
podem ser somadas ou subtradas normalmente.
Existem vrias rotinas de manipulao de datas e horas, usadas com o tipo TDateTime, veja algumas abaixo.
> Rotina > !escri"o
Date Retorna a data do sistema
Now Retorna a data e hora do sistema
Time Retorna a hora do sistema
DayOfWeek Retorna o dia da semana de uma data especificada
DecodeDate Decodifica um valor TDateTime em Words de dia, ms e ano
DecodeTime Decodifica um valor TDateTime em Words de hora, minuto, segundo e milissegundos
EncodeDate Retorna um TDateTime a partir de Words de dia, ms e ano
EncodeTime Retorna um TDateTime a partir de Words de hora, minuto, segundo e milissegundos
No help de cada uma das funes acima voc vai encontrar alguns exemplos, veja os colocados abaixo.
if DayOfWeek(Date) = 1 then
ShowMessage('Hoje Domingo, p de cachimbo!')
else
ShowMessage('Hoje no Domingo, p de cachimbo!');
var
A, M, D: Word;
begin
DecodeDate(Date, A, M, D);
ShowMessage(Format('Dia %.2d do ms %.2d de %d.', [D, M, A]));
end;
#.12.+ *ariant
Tipo genrico, que pode atribuir e receber valores de qualquer outro tipo. Evite usar variveis do tipo Variant, pois
o uso dessas variveis podem prejudicar a performance do programa, alm de diminuir a legibilidade do cdigo
fonte e a integridade do executvel, veja o trecho de cdigo abaixo e note como esse tipo de varivel tem um
comportamento estranho.
var
V1, V2, V3: Variant;
begin
V1 := True;
V2 := 1234.5678;
V3 := Date;
ShowMessage(V1 + V2 + V3);
end;
3.13 Con3erses de 9ipo
Freqentemente voc vai precisar converter um tipo de dado em outro, como um nmero em uma string. Para
essas converses voc pode usar duas tcnicas, o TypeCasting e as rotinas de converso de tipos.
#.1#.1 /:peCastin,
TypeCast uma converso direta de tipo, usando o identificador do tipo destino como se fosse uma funo. Como
o Delphi no faz nenhuma verificao se a converso vlida, voc deve tomar um certo cuidado ao usar um
TypeCast para no criar programas instveis.
var
I: Integer;
C: Char;
B: Boolean;
begin
I := Integer('A');
C := Char(48);
B := Boolean(0);
Application.MessageBox(PChar('Linguagem de Programao' + #13 + 'Delphi 3'), 'SENAC',
MB_ICONEXCLAMATION);
end;
21
#.1#.2 Rotinas de Converso
As principais rotinas de converso esto listadas na tabela abaixo. Caso voc tente usar uma dessas rotinas em
uma converso invlida, pode ser gerada uma exceo.
Rotina !escri"o
Chr Byte em Char
StrTont String em nteger
ntToStr nteger em String
StrTontDef String em nteger, com um valor default caso haja erro
ntToHex Nmero em String Hexadecimal
Round Arredonda um nmero real em um nteger
Trunc Trunca um nmero real em um nteger
StrToFloat String em Real
FloatToStr Real em string
FormatFloat Nmero real em string usando uma string de formato
DateToStr TDateTime em string de data, de acordo com as opes do Painel de Controle
StrToDate String de data em TDateTime
TimeToStr TDateTime em Strind de Hora
StrToTime String de hora em TDateTime
DateTimeToStr TDateTime em string de data e hora
StrToDateTime String de data e hora em TDateTime
FormatDateTime TDateTime em string usando uma string de formato
VarCast Qualquer tipo em outro usando argumentos do tipo Variant
VarAsType Variante em qualquer tipo
Val String em nmero, real ou inteiro
Str Nmero, real ou inteiro, em String
Veja alguns exemplos de como usar essas rotinas. Converso de dados uma operao muito comum na
programao em Object Pascal, seeria interessante dar uma olhada no help de cada uma das funes acima.
var
I: Integer;
D: Double;
S1, S2: string;
begin
D := 10.5;
I := Trunc(D);
S1 := FloatToStr(D);
S2 := IntToStr(I);
ShowMessage(S1 + #13 + S2);
end;
var
A, B, Soma: Bouble;
begin
A := StrToFloat(EdtA.Text);
B := StrToFloat(EdtB.Text);
Soma := A + B;
ShowMessage(Format('%f + %f = %f', [A, B, Soma]);
end;
3.14 ,5presses
Uma expresso qualquer combinao de operadores, variveis, constantes, valores literais e chamadas de
funes que resultem em um valor de determinado tipo. Uma expresso usada sempre que precisamos de uma
valor que possa ser obtido por uma expresso.
A + 12 * C
Date - 4
StrToInt(Edit1.Text + Edit2.Text)
StrToDate(Edit2.Text) - StrToDate(Edit1.Text)
12 * A / 100
A < B
3.15 peradores
Os operadores so usados em expresses e a ordem em que as expresses so executadas depende da
precedncia desses operadores. Veja abaixo a lista de operadores em ordem descendente de precedncia.
5perador !escri"o
5peradores 7n3rios
22
@ Endereo
not No booleano ou bit voltado para no
5peradores Multiplicativos e de dire"o de 1it
* Multiplicao ou interseo de conjuntos
/ Diviso de Real
div Diviso de nteiro
mod Resto de diviso de nteiros
as TypeCast seguro quanto ao tipo (RTT)
and E booleano ou bit voltado para e
shl Deslocamento de bits esquerda
shr Deslocamento de bits direita
5peradores Aditivos
+ Adio ou unio de conjuntos
- Subtrao ou diferena de conjuntos
or Ou booleano ou bit voltado para ou
xor Ou exclusivo booleano ou bit voltado para ou exclusivo
5peradores Relacionais
= gual
<> Diferente
< Menor
> Maoir
<= Menor ou igual
>= Maior ou igual
in Pertinncia a conjuntos
is Compatibilidade de tipos (RTT)
Para forar uma expresso de menor precedncia a ser executada antes, voc pode usar os parnteses, como
mostrado abaixo.
(5 - 2) * 3;
(A > B) and (A < C)
Para fazer potenciao, use a funo Power, abaixo temos que A igual a A elevado a 4.
A := Power(A, 4);
3.16 ,str*t*ras de Deciso
#.16.1 I=
O if uma estrutura de deciso usada para realizar instrues em determinadas condies. O if considerado
uma s instruo, por isso, s encontramos o ponto-e-vrgula no final. O else opcional.
if Opn.Execute then
Img.Picture.LoadFromFile(Opn.FileName);
if Nota < 5 then
ShowMessage('Reprovado')
else
ShowMessage('Aprovado');
#.16.2 Case
Permite que o fluxo da execuo seja desviado em funo de vrias condies de acordo com o valor do
argumento, que tem que ser ordinal, caso o valor do argumento no corresponda a nenhum dos valores listados,
podemos incluir um else.
case Ch of
' ': ShowMessage('Espao');
'0'..'9': ShowMessage('Dgito');
'+', '-', '*', '/': ShowMessage('Operador');
else
ShowMessage('Caractere especial');
end;
case CbbBorda.ItemIndex of
0: BorderStyle := bsDialog;
1: BorderStyle := bsSingle;
2: BorderStyle := bsSizeable;
end;
23
3.1$ ,str*t*ras de :epeti0o
#.1+.1 Ahile
O lao while executa uma instruo at que uma condio seja falsa.
I := 10;
while I >= 0 do
begin
ShowMessage(IntToStr(I));
Dec(I);
end;
#.1+.2 $or
O lao for executa uma instruo um nmero determinado de vezes, incrementando uma varivel de controle
automaticamente a cada iterao. Caso seja preciso que a contagem seja decremental, pode-se usar downto em
vez de to.
for I := 1 to ComponentCount do
ShowMessage('O ' + IntToStr(I) + ' Componente ' + Components[I - 1].Name);
for I := Length(Edit1.Text) downto 1 do
ShowMessage(Edit1.Text[I]);
#.1+.# Repeat
O lao repeat executa instrues at que uma condio seja verdadeira.
I := 1;
repeat
S := InputBox('Acesso', 'Digite a senha', '');
Inc(I);
if I > 3 then
Halt;
until S = 'fluminense';
#.1+.% 9ue2ras de &a"o
Em qualquer um dos laos mostrados podemos usar o procedimento Break para cancelar a repetio e sair do
lao, podemos tambm forar a prxima iterao com o procedimento Continue.
I := 1;
while true do
begin
Inc(I);
if I < 10000000 then
Continue;
ShowMessage('Chegamos a dez milhes');
Break;
end;
3.1( 9ipos De/inidos Pelo 7s*6rio
O usurio tambm pode declarar tipos no definidos pelo Delphi. Essas declaraes so feitas na seo type, da
interface ou implementation, sendo que na implementation esses tipos no podero ser usados em outras Units.
Dificilmente voc ter que definir tipos, a no ser classes, pois os tipos padro do Delphi so o bastante para a
maioria das aplicaes.
#.16.1 Strin,s &imitadas
Caso se deseje limitar o nmero de caracteres que uma string pode receber, podemos criar um tipo de string
limitada.
TNome = string[40];
TEstado = string[2];
#.16.2 /ipo Su2B$aixa
um subconjunto de um tipo ordinal e possui as mesmas propriedades do tipo original.
TMaiusculas = 'A'..'Z';
TMes = 1..12;
#.16.# Enumera"Ces
Define uma seqncia de identificadores como valores vlidos para o tipo. A cada elemento da lista de
identificadores associado internamente um nmero inteiro, iniciando pelo nmero 0, por isso so chamados de
tipos enumerados.
TBorderIcon = (biSystemMenu, biMinimize, biMaximize, biHelp);
TDiaSemana = (Seg, Ter, Qua, Qui, Sex, Sab, Dom);
#.16.% Ponteiros
Ponteiros armazenam endereos de memria, todas as classes em Object Pascal so implementadas como
ponteiros, mas raramente o programador vai precisar us-los como tal.
TIntPtr: ^Integer;
24
#.16.( Records
O tipo record uma forma de criar uma nica estrutura com valores de diferentes tipos de dados. Cada um dos
dados de um record chamado de campo.
TData = record
Ano: Integer;
Mes: TMes;
Dia: Byte;
end;
var
Festa: TData;
begin
Festa.Ano := 1997;
Festa.Mes := Mai;
Festa.Dia := 8;
end;
#.16.6 Arra:s
Arrays fornecem uma forma de criar variveis que contenham mltiplos valores, como em uma lista ou tabela,
cujos elementos so do mesmo tipo. Veja abaixo alguns exemplos de arrays de dimenses variadas.
TTempDia = array [1..24] of Integer;
TTempMes = array [1..31, 1..24] of Integer;
TTempAno = array [1..12, 1..31, 1..24] of Integer;
var
TD: TTempDia;
I: Integer;
begin
for I := 1 to 24 do
TD[I] := StrToIntDef(InputBox('Temperaturas', 'Digite a temperatura na hora '
+ IntToStr(I), ''), 30);
end;
Um array pode ser definido como constante tipada, onde todos os seus elementos devem ser inicializados.
FAT: array[1..7] of Integer = (1, 2, 6, 24, 120, 720, 5040);
O tipo dos elementos de um array pode ser qualquer um, voc pode ter uma array de objetos, de conjuntos, de
qualquer tipo que quiser, at mesmo um array de arrays.
TTempMes = array [1..31] of TTempDia;
TBtnList = array [1..10] of TButton;
#.16.+ Sets
So conjuntos de dados de um mesmo tipo, sem ordem, como os conjuntos matemticos. Conjuntos podem
conter apenas valores ordinais, o menor que um elemento pode assumir zero e o maior, 255.
TBorderIcons = set of TBorderIcon;
BorderIcons := [biSystemMenu, biMinimize];
if MesAtual in [Jul, Jan, Fev] then
ShowMessage('Frias');
Os conjuntos podem ser definidos como constantes ou constantes tipadas, como abaixo.
DIG_HEXA = ['0'..'9', 'A'..'Z', 'a'..'z'];
DIG_HEXA: set of Char = ['0'..'9', 'A'..'Z', 'a'..'z'];
3.1+ Procedi&entos; %*n0es e )4todos
As aes de um objeto devem ser definidas como mtodos. Quando a ao no pertence a um objeto, como uma
transformao de tipo, essa ao deve ser implementada em forma de procedimentos e/ou funes.
#.18.1 Procedimentos
Procedimentos so sub-rotinas, que realizam uma tarefa e no retornam um valor. A declarao de um
procedimento feita na seo interface e a definio, na seo implementation. Ao chamar o identificador do
procedimento, com os parmetros necessrios, esse procedimento ser executado. Veja abaixo o exemplo de
uma unit com a implementao um procedimento.
unit Tools;
interface
procedure ErrorMsg(const Msg: string);
implementation
uses Forms, Windows;
25
procedure ErrorMsg(const Msg: string);
begin
Application.MessageBox(PChar(Msg), 'Operao invlida', MB_ICONERROR);
end;
end.
#.18.2 $un"Ces
Funes so muito semelhantes a procedimentos a nica diferena que as funes retornam um valor. O tipo do
valor de retorno deve ser informado no cabealho da funo. Na implementao da funo deve-se atribuir o valor
de retorno palavra reservada Result ou ao identificador da funo. Pode-se ento usar a funo em expresses,
atribuies, como parmetros para outras funes, em qualquer lugar onde o seu valor possa ser usado.
function Average(A, B: Double): Double;
begin
Result := (A + B) / 2;
end;
#.18.# M0todos
Mtodos so funes ou procedimentos que pertencem a alguma classe, passando a fazer parte de qualquer
objeto dessa classe. Na implementao de um mtodo precisamos indicar qual a classe qual ele pertence. Para
chamar um mtodo em algum lugar no pertencente sua classe, como procedimentos, funes ou mtodos de
outras classes, deve ser indicado o objeto que deve executar o mtodo. Os mtodos usam os mesmos nveis de
encapsulamento dos atributos.
type
TFrmMsg = class(TForm)
LblMsg: TLabel;
BtnOk: TButton;
BtnCancelar: TButton;
ImgMsg: TImage;
public
procedure ShowMsg(const Msg: string);
end;
procedure TFormMsg.ShowMsg(const Msg: string);
begin
LblMsg.Caption := Msg;
ShowModal;
end;
#.18.% ParDmetros
Existem trs tipos de passagem de parmetros, que devem ser indicados na declarao da funo ou
procedimento. Parmetros de tipos diferentes de vem ser separados por ponto e vrgula.
function MultiStr(const S: string; N: Double; var Erro: Integer): string;
Quando no indicado o tipo de passagem, passado o valor do parmetro, como constante.
Ao usar a palavra-chave var, no ser enviado o valor do parmetro e sim uma referncia a ele, tornando
possvel mudar o valor do parmetro no cdigo do procedimento.
Como alternativa voc pode passar um parmetro por referncia constante, para isso use a palavra const
antes da declarao do parmetro.
3.2. <ith
Usado para facilitar o acesso s propriedades e mtodos de um objeto.
with Edt do
begin
CharCase := ecUpperCase;
MaxLenght := 10;
PasswordChar := '*';
Text := 'Brasil';
end;
3.21 Sel/
Self usado quando se quer referenciar a instncia atual da classe. Se voc precisar referenciar a instncia atual
de uma classe, prefervel usar Self em vez de usar o identificador de um Objeto, isso faz com que o cdigo
continue funcionando para as demais instncias da classe e em seus descendentes.
3.22 Criando e Destr*indo !"etos
Antes de tudo, voc deve declarar o objeto, se quiser referenci-lo. Para cri-lo, use o mtodo Create, que um
mtodo de classe. Para voc usar um mtodo de classe, referencie a classe, no o Objeto, como mostrado
abaixo.
var
26
Btn: TBitBtn;
begin
Btn := TBitBtn.Create(Self);
With Btn do
begin
Parent := Self;
Kind := bkClose;
Caption := '&Sair';
Left := Self.ClientWidth - Width - 8;
Top := Self.ClientHeight - Height - 8;
end;
end;
Porm, se voc no precisar referenciar o Objeto, poderia criar uma instncia sem referncia.
with TBitBtn.Create(Self) do
begin
Parent := Self;
Kind := bkClose;
Caption := '&Sair';
Left := Self.ClientWidth - Width - 8;
Top := Self.ClientHeight - Height - 8;
end;
Para destruir um objeto, use o mtodo Free. Para Forms, recomendado usar o Release, para que todos os
eventos sejam chamados.
O parmetro do mtodo Create usado apenas em Componentes, para identificar o componente dono. Ao criar
Forms, poderamos usar o Objeto Application.
FrmSobre := TFrmSobre.Create(Application);
FrmSobre.ShowModal;
FrmSobre.Release;
Para criar objetos no componentes, voc no precisa de nenhum parmetro no mtodo Create.
var
Lst: TStringList;
begin
Lst := TStringList.Create;
Lst.Add('Al, Teresinha!');
Lst.Add('Uhh uhh...');
Lst.SaveToFile('Teresinha.txt');
Lst.Free;
end;
3.23 :99#
Run Time Type nformation a informao de tipo dos objetos em tempo de execuo. O operador is usado
para fazer comparaes e o operador as usado para fazer um TypeCast seguro com objetos.
for I := 0 to ComponentCount - 1 do
if Components[I] is TEdit then
TEdit(Components[I]).Clear;
(Sender as TEdit).Color := clYellow;
3.24 ,5erccios
1. Faa um Form, com um Edit e botes para passar o texto do Edit para maisculas, minsculas e apagar
todos os espaos.
2. Crie um Form com dois Edits, um boto para verificar se os dois textos so iguais sem levar em considerao
o caso, um boto para inserir o texto do primeiro Edit no meio do segundo e outro boto para verificar se o
texto do primeiro Edit est dentro do texto do segundo.
3. Crie um projeto com um Form de mltiplas pginas, onde possa ser feita uma analise de balano. Na primeira
guia, devem ser informados o patrimnio lquido da empresa, os valores circulante, realizvel a longo prazo e
permanente. Na Segunda guia mostre uma anlise vertical, tome o patrimnio lquido como 100% e mostre o
percentual de cada um dos outros valores informados. Na terceira guia, mostre um grfico com panels
representando cada um dos percentuais mostrados na segunda guia.
4. Faa um programa que sugira que o usurio pare de trabalhar quando o relgio do sistema no estiver em
horrio comercial.
5. Sabendo que M e N so inteiros, o que podemos concluir desses nmeros se a expresso M div N N ! M
retornar true e qual outra expresso poderia ser usada para testar a mesma condio?
6. Sendo um nmero inteiro, R um real e S uma string com um texto numrico como encontrar o resultado da
soma dos 3 valores, e de que tipo ser esse resultado?
7. Como poderamos mandar o texto de um Edit chamado Edit1 para uma caixa de mensagem do tipo
MessageBox, que recebe parmetros do tipo PChar?
27
8. Faa um programa para encontrar as razes de uma equao de 2 grau cujos coeficientes sejam informados
pelo usurio. Para relembrar, a frmula ax
2
+ bx + c = 0, o delta = b
2
- 4ac e as razes so
dadas como x
1
= (- b + RAIZ())/2a e x
2
= (- b - RAIZ())/2a.
9. Qual expresso podemos usar para encontrar a mdia aritmtica entre M e N, sabendo que M uma string
numrica e N um caractere numrico?
10. Sabendo que no SENAC a mdia mnima 7,0 e a tolerncia de faltas 15 % da carga horria do curso, faa
um programa que pea as informaes necessrias e informe a situao do usurio.
11. Faa uma funo que retorne o nmero de caracteres numricos que existem em uma string.
12. Faa uma funo que defina se o ano bissexto ou no. Sabendo que para ser bissexto, o ano precisa ser
divisvel por 4 e, alm disso, no ser divisvel por 100. Se for divisvel por 100 o ano tem que ser divi'sivel por
400 para ser bissexto.
13. Sabendo que a chamada de funo Pos(Str1, Str2) retorna a posio da string Str1 dentro de Str2, que
Delete(S, 4, 6) remove 6 caracteres da string S a partir do caractere 4, e que Lenght(S) retorna o nmero de
caracteres da string S, crie um procedimento chamado Remover que remova as ocorrncias de uma string
dentro de outra.
14. Crie uma funo que retorne a string enviada como parmetro de trs para frente.
15. Usando a funo anterior crie um Form com dois Edits, onde ao digitar um texto no primeiro Edit, esse texto
aparea invertido no segundo.
16. Usando a funo anterior faa uma funo que receba como parmetro uma data e retorne quantos dias h
no ms e ano dessa data. Como fazer com que um Edit s aceite que sejam digitados caracteres numricos
em seu interior?
17. Faa um programa onde o usurio informe 2 datas e seja mostrado o nmero de anos, meses e dias entre
elas.
18. Faa um programa que pea a data de nascimento do usurio, converta o texto dessa data para uma forma
de ano com 4 dgitos e mostre a idade do usurio.
19. Digamos que peso ideal de uma pessoa em quilos seja sua altura menos 1,15 m. Faa um programa que
pea a altura e o peso do usurio e informe quanto ele precisa engordar ou emagrecer.
20. Faa um programa que mostre quantos caracteres numricos e quantos alfabticos existem em um Memo
28
# Aplica$es %obustas
O tratamento de exceo um mecanismo capaz de dar robustez a uma aplicao, permitindo que os erros sejam
manipulados de uma maneira consistente e fazendo com que a aplicao possa se recuperar de erros, se
possvel, ou finalizar a execuo quando necessrio, sem perda de dados ou recursos.
Para que uma aplicao seja segura, seu cdigo necessita reconhecer uma exceo quando esta ocorrer e
responder adequadamente a essa exceo. Se no houver tratamento para uma exceo, ser exibida uma
mensagem padro descrevendo o erro e todos os processamentos pendentes no sero executados. Uma
exceo deve ser respondida sempre que houver perigo de perda de dados ou de recursos do sistema.
4.1 ,5ce0es
Excees so classes definidas pelo Delphi para o tratamento de erros. Quando uma exceo criada, todos os
procedimentos pendentes so cancelados e, geralmente mostrada uma mensagem de erro para o usurio. As
mensagens padro nem sempre so claras, por isso indicado criar seus prprios blocos protegidos.
4.2 =locos Prote'idos
Um bloco protegido um grupo de comandos com uma seo de tratamento de excees.
try
A := StrToFloat(EdtA.Text);
B := StrToFloat(EdtB.Text);
ShowMessage(Format('%f / %f = %f', [A, B, A + B]));
except
ShowMessage('Nmeros invlidos.');
end;
Algumas vezes voc pode precisar especificar quais excees quer tratar, como mostrado abaixo.
try
Soma := StrToFloat(EdtSoma.Text);
NumAlunos := StrToInt(EdtNum.Text);
ShowMessage(Format('Mdia igual a %f.', [Soma / NumAlunos]));
except
on EConvertError do
ShowMessage('Valor invlido para soma ou nmero de alunos.');
on EZeroDivide do
ShowMessage('O nmero de alunos tem que ser maior que zero.');
else
ShowMessage('Erro na operao, verifique os valores digitados.');
end;
4.3 Principais ,5ce0es
O Delphi define muitas excees, para cada erro existe uma exceo correspondente.
Classe !escri"o
Exception Exceo genrica, usada apenas como ancestral de todas as outras excees
EAbort Exceo silenciosa, pode ser gerada pelo procedimento Abort e no mostra nenhuma mensagem
EAccessViolation Acesso invlido memria, geralmente ocorre com objetos no inicializados
EConvertError Erro de converso de tipos
EDivByZero Diviso de inteiro por zero
EnOutError Erro de Entrada ou Sada reportado pelo sistema operacional
EntOverFlow Resultado de um clculo inteiro excedeu o limite
EnvalidCast TypeCast invlido com o operador as
EnvalidOp Operao invlida com nmero de ponto flutuante
EOutOfMemory Memria insuficiente
EOverflow Resultado de um clculo com nmero real excedeu o limite
ERangeError Valor excede o limite do tipo inteiro ao qual foi atribuda
EUnderflow Resultado de um clculo com nmero real menor que a faixa vlida
EVariantError Erro em operao com variant
EZeroDivide Diviso de real por zero
EDatabaseError Erro genrico de banco de dados, geralmente no usado diretamente
EDBEngineError Erro da BDE, descende de EDatabaseError e traz dados que podem identificar o erro
4.4 =locos de %inali>a0o
Blocos de finalizao so executados sempre, haja ou no uma exceo. Geralmente os blocos de finalizao so
usados para liberar recursos.
FrmSobre := TFrmSobre.Create(Application);
try
FrmSobre.Img.LoadFromFile('Delphi.bmp');
29
FrmSobre.ShowModal;
finally
FrmSobre.Release;
end;
Voc pode usar blocos de proteo e finalizao aninhados
FrmOptions := TFrmOptions.Create(Application);
try
FrmOptions.ShowModal;
try
Tbl.Edit;
TblValor.AsString := EdtValor.Text;
except
on EDBEngineError do
ShowMessage('Alterao no permitida.');
on EConvertError do
ShowMessage('Valor invlido.');
end;
finally
FrmOptions.Release;
end;
4.5 Gera0o de ,5ce0es
Voc pode provocar uma exceo usando a clusula raise.
raise EDatabaseError.Create('Erro ao alterar registro.');
Tambm possvel criar seus prprios tipos de excees.
type
EInvalidUser = class (Exception);
raise EInvalidUser.Create('Voc no tem acesso a essa operao.');
Se voc quiser que uma exceo continue ativa, mesmo depois de tratada, use a clusula raise dentro do bloco de
tratamento da exceo. Geralmente isso feito com excees aninhadas.
try
Tbl.Edit;
TblContador.Value := TblContador.Value + 1;
Tbl.Post;
except
ShowMessage('Erro ao alterar contador.');
raise;
end;
4.6 ,rros de =ancos de Dados
A exceo EDBEngineError permite a identificao de erros de bancos de dados gerados pela BDE.
try
TblCli.Post;
except
on E: EDBEngineError do
if E.Errors[0].ErrorCode = DBIERR_KEYVIOL then
ShowMessage('Cliente j cadastrado.');
end;
Note que a varivel E, que vai identificar o erro, s precisa ser declarada no bloco de tratamento da exceo. No
help voc pode consultar outras propriedades de EDBEngineError que podem ser importantes.
Voc tambm pode usar os eventos de erro do componente Table, sem precisar de blocos de tratamento.
procedure TFrmCadCli.TblCliPostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
if(E is EDBEngineError) then
with EDBEngineError(E) do
case Errors[0].ErrorCode of
DBIERR_KEYVIOL: ShowMessage('Cliente j cadastrado.');
DBIERR_REQDERR: ShowMessage('Campo obrigatrio no preenchido.');
end
else
ShowMessage('Erro no banco de dados:' + #13#13 + E.Message);
Action := daAbort;
end;
Alguns cdigos de erro da BDE esto listados abaixo. Todas as constantes e funes relacionadas AP da BDE
no Delphi 3 esto na Unit BDE, que deve ser adicionada clusula uses. No BDE AP Help voc pode encontrar
referncia sobre as funes nativas da BDE, como tambm alguns exemplos em Delphi.
Constante !escri"o
30
DBERR_KEYVOL Violao de chave primria
DBERR_MAXVALERR Valor mximo excedido
DBERR_FOREGNKEYERR Erro de chave externa, como em integridade referencial
DBERR_LOCKED Registro travado
DBERR_FLELOCKED Arquivo travado
DBERR_NETMULTPLE Mais de um diretrio usado como NetFileDir
DBERR_MNVALERR Campo com valor mais baixo que valor mnimo
DBERR_REQDERR Campo obrigatrio faltando
DBERR_LOOKUPTABLEERR Erro em tabela Lookup
Se voc quiser mais informaes a respeito do erro pode usar o procedimento DBGetErrorContext, como na
funo mostrada abaixo que retorna determinadas informaes sobre o erro.
function GetErrorInfo(Context: SmallInt): string;
begin
SetLength(Result, DBIMAXMSGLEN + 1);
try
DbiGetErrorContext(Context, PChar(Result));
SetLength(Result, StrLen(PChar(Result)));
except
Result := '';
end;
end;
No evento OnEditError, usado no exemplo abaixo, se ocorrer um erro ao tentar alterar um registro, podemos
identificar o usurio da rede que est alterando esse registro usando a funo criada anteriormente.
if Pos('locked', E.Message) > 0 then
ShowMessage('Usurio ''' + GetErrorInfo(ecUSERNAME) + ''' est alterando o registro.');
Note que foi usada uma outra tcnica de identificao do erro, usando a prpria mensagem de erro e no o
cdigo, como mostrado anteriormente. Voc pode usar a funo criada acima mandando como parmetro os
valores mostrados abaixo, que podem ser encontrados no help da BDE.
Constante !escri"o
ecTABLENAME Nome da Tabela
ecFELDNAME Nome do campo
ecUSERNAME Nome do usurio, muito usado para identificar qual usurio travou o registro
ecFLENAME Nome do arquivo
ecNDEXNAME Nome do ndice
ecDRNAME Pasta
ecKEYNAME Chave primria
ecALAS Alias
ecDRVENAME Drive
ecNATVECODE Cdigo de erro nativo
ecNATVEMSG Mensagem de erro nativa
ecLNENUMBER Nmero da linha, usado em instrues SQL
Para desenvolver um sistema genrico de tratamento de erros, considere a opo de criar esse tratamento em um
DataModule genrico para ser usado como ancestral por todos os DataModules do sistema, utilizando a herana
visual.
Se o nico problema for traduzir as mensagens, localize os arquivos CONSTS.NT e DBCONSTS.NT e crie uma
nova Unit de definio de strings com uma estrutura semelhante a mostrada abaixo e juntando todas as definies
das constantes das duas Units devidamente traduzidas. Depois, basta usar essa Unit em seus projetos que as
novas mensagens iro sobrepor as anteriores.
unit NewConsts;
interface
resourcestring
SAssignError = 'No possvel atribuir %s a %s';
SFCreateError = 'No possvel criar arquivo %s';
SFOpenError = 'No possvel abrir arquivo %s';
SInvalidFieldSize = 'Tamanho de campo invlido';
SInvalidFieldRegistration = 'Registro de campo invlido';
SUnknownFieldType = 'Campo ''%s'' tem um tipo desconhecido';
implementation
end.
31
Uma outra opo seria criar um mtodo para o evento OnException do objeto Application, esse mtodo seria
chamado sempre que houvesse uma exceo em qualquer parte do sistema.
32
& Bancos de Dados
5.1 Conceitos #&portantes
O gerenciamento de bancos de dados essencial para o desenvolvimento comercial, e para criar um banco de
dados eficiente necessrio o conhecimento prvio de modelagem de bancos de dados relacionais. Conceitos
como banco de dados, tabelas, campos, registros, ndices, chaves, relacionamentos, normalizao, dentre outros
so pr-requisitos bsicos para o desenvolvimento desse contedo.
5.2 )odelo de Dados
essencial planejar o banco de dados antes de implementar. Um dos mtodos que voc pode utilizar o DER,
como no exemplo no normalizado mostrado logo abaixo.
Clientes Pedidos
Produtos Item
CodCli
Cidade Tel Comer
Tel Resid
Nome
Endereco
airro Estado C!C"CP#
CodCli
CodPed $ata
%endedor
CodPed
CodProd
&uantidade
CodProd
$escri'(o
Pre'o )nit*rio
1 N
N
1 N
1
5.3 =orland Data!ase ,n'ine
A BDE fornece a capacidade de acesso padronizado a banco de dados para Delphi, C++ Builder e outros
ambientes de programao da Borland, oferecendo um grande conjunto de funes para auxiliar no
desenvolvimento de aplicaes Desktop e Cliente/Servidor.
Os controladores da BDE podem ser usados para acessar bases de dados dBase, Paradox, Access, FoxPro,
nterbase, Oracle, Sybase e MS-SQL Server, DB2, nformix, alm de um controlador de acesso a arquivos texto.
Voc tambm pode utilizar fontes de dados ODBC, podendo acessar qualquer base de dados compatvel.
As funes que compe uma AP da BDE so usadas internamente pelos componentes de acesso a dados do
Delphi e muito raramente voc teria que us-las diretamente, mas isso totalmente possvel. A referncia
completa das funes da BDE, com exemplos em Delphi, est no BDE AP Help na pasta do Delphi no Menu
niciar.
5.4 1r?*itet*ra de 1cesso
O acesso e manipulao de um banco de dados por um programa Delphi realizado como mostrado abaixo, note
que a aplicao no acessa os dados diretamente, mas usa sempre a BDE.
Assim, para uma aplicao de bancos de dados funcionar, preciso que a BDE esteja instalada na mquina, no
bastando apenas o arquivo executvel.
33
5.5 Cria0o do =anco de Dados
Para criar um banco de dados novo, normalmente, necessrio dispor de alguma ferramenta do prprio banco de
dados, como o Access, mas se a base de dados for Paradox, ou dBase, voc pode usar o Database Desktop, um
utilitrio que vem com o Delphi e permite a criao desses tipos de bancos de dados.
5.6 Data!ase Des@top
Fornece uma interface simples e completa para configurao, definio e manipulao de tabelas de bancos de
dados Paradox e dBase. Alm disso na Opo "ools#Alias Manager voc pode configurar seu banco de dados,
como ser lembrado logo adiante.
(.6.1 /a2elas Paradox
Para criar tabelas Paradox, siga os passos abaixo. Voc deve salvar as tabelas de um mesmo banco de dados na
mesma pasta, pois o Paradox trata a pasta onde esto as tabelas como sendo o banco de dados.
Clique em $ile#New#"able
Escolha o tipo da nova tabela, Parado% &
Aparece uma janela para que voc defina a estrutura de campos, ndices e demais opes necessrias na
criao da tabela
Em $ield Na'e, voc escolhe o nome do campo, com at 25 caracteres
Em "ype, o Tipo do campo, com a barra de espao ou o boto direito do mouse voc pode escolher o tipo a
partir de uma lista
(i)e o tamanho do campo, usado somente em alguns tipos de campos
*ey especifica os campos que faro parte da chave primria, que no pode se repetir e deve ser composta
pelos primeiros campos da tabela
(.6.2 /a2le Properties
Em Table Properties voc define os vrios aspectos de configurao da tabela. Muitas dessas opes podem ser
implementadas no Delphi e vrios programadores preferem no us-las no Database Desktop.
5p"o !escri"o
Validity Checks Validaes para os campos, como obrigatoriedade, valor mnimo e mximo
Table Lookup ndica que o valor atribudo a um determinado campo tem que estar gravado em outra tabela
Secondary ndexes Cria ndices secundrios
Referential ntegrity Cria integridade referencial, geralmente utilizada em relacionamentos de 1 para N.
Password Security Permite a criao de senhas, protegendo a tabela de acesso no autorizado
Table Language Especificar o driver de lngua utilizado pela tabela, geralmente o Pdo% AN(I Intl+,-
Dependent Tables Mostra todas as tabela dependentes atravs da integridade referencial
(.6.# /ipos de Campos
Os principais tipos de campos so mostrados abaixo, mas existem outros alm desses. Os tamanhos marcados
com asterisco indicam que o campo pode guardar tamanhos maiores que os informados, o que ultrapassar o
tamanho ser guardado em um arquivo externo com a extenso MB.
/ipo !escri"o $aixa /amanho
A Alfanumrico 1-255
N Numrico 10
308
$ Monetrio
S Short nteger 32767
Long nteger 2147483648
D Data
T Hora
@ Data e Hora de modificao
M Memo 1-240*
G Grfico 1-240*
L Lgico True/False
+ Autoincremental 1-2147483648
5.$ Con/i'*ra0o
Para configurar o acesso a um banco de dados, voc tem vrias opes, criar um Alias, usar o componente
TDatabase ou os dois juntos.
34
(.+.1 Aliases
Um Alias um nome lgico, um atalho para um banco de dados. Todo o trabalho do Delphi com um banco de
dados pode ser feito baseado no Alias, de forma que para mudar de banco de dados, s necessrio mudar o
Alias. Para criar um Alias voc pode usar Database E%plorer, o .DE Ad'inistrator ou o prprio Database Desktop.
(.+.2 !ata2ase Explorer
Pode aparecer com os nomes Database E%plorer ou (/0 E%plorer. Nele voc pode manipular os Aliases, navegar
pelas estruturas dos bancos de dados, alterar os dados das tabelas e executar comandos SQL.
Para criar um Alias selecione o item Databases, clique em Ob1ect#New, escolha o tipo do banco de dados, ou
(tandard para dBase, Paradox e arquivos texto, depois digite um nome do Alias, esse nome ser usado pelo
Delphi quando voc quiser acessar o banco de dados, finalmente defina as propriedades do banco de dados na
seo Definition, cada banco de dados ter suas prprias definies.
(.+.# 1!E Administrator
Com o BDE Administrator voc pode alterar a configurao da BDE, por exemplo em 2onfiguration#(yste'#Init
voc tem a propriedade 0ocal (3are que deve ser setada para True, quando voc quiser que a base de dados
seja compartilhada em uma rede. Alm disso, voc pode criar Aliases, como no Database E%plorer.
5.( 9Data!ase
Esse componente permite a manipulao de um banco de dados, atravs de um Alias da BDE ou a criao de um
Alias local, somente visvel dentro da aplicao, esse componente tambm permite o gerenciamento de
transaes, garantindo uma integridade maior no projeto. Por essas e outras razes o uso do componente
Database altamente recomendado como opo para criao de Aliases.
Propriedades !escri"o
AliasName Nome do Alias do banco de dados, usado quando voc criar um Alias da BDE
Connected Define se a conexo com o banco de dados est ativa
DatabaseName Nome do Alias local a ser usado pelos outros componentes do Delphi
DataSetCount Nmero de DataSets (Tabelas) abertos no banco de dados
DataSets Lista com os DataSets abertos
DriverName Driver usado para criar um Alias local, automaticamente cancela a propriedade AliasName
nTransaction Define se o Database est em transao
KeepConnection Define se a conexo com o banco de dados ser mantida, mesmo sem DataSets abertos
LoginPrompt Define se ser mostrado o quadro de login padro da BDE
Params Parmetros do banco de dados, com itens semelhantes seo Definition do Database Explorer
Transsolation Nvel de isolamento da transao, define como uma transao ir enxergar outra
M0todos !escri"o
Close Encerra a conexo com o banco de dados, todos os DataSets sero fechados
CloseDataSets Fecha todos os DataSets abertos, mas a conexo no encerrada
Commit Grava alteraes feitas durante a transao
Open Abre a conexo com o banco de dados
Rollback Anula todas as alteraes feitas durante a transao
StartTransaction nicia uma transao
Eventos !escri"o
OnLogin Evento usado quando voc quiser escrever seu prprio mtodo de conexo com o banco de dados
Para acessar uma base de dados Access, voc poderia usar os valores mostrados na descrio textual a seguir.
AliasName = 'Northwind'
DatabaseName = 'Dados'
LoginPrompt = False
KeepConnection = True
Params.Strings = (
'DATABASE NAME=C:\Meus Documentos\NorthWind.mdb'
'USER NAME=paulo'
'OPEN MODE=READ/WRITE'
'LANGDRIVER=intl850'
'PASSWORD=elvis')
Para ajudar a preencher os parmetros de um Database, clique duas vezes sobre o componente e clique em
Defaults, todos os parmetros defaults sero apresentados.
Para acessar uma base Paradox, use as propriedades abaixo, note que para o Paradox, a nica informao
realmente significante o Path, a pasta onde esto as tabelas.
AliasName = 'DBDEMOS'
DatabaseName = 'Dados'
LoginPrompt = False
KeepConnection = True
35
Params.Strings = (
'PATH=d:\Borland\Delphi 3\Demos\Data'
'ENABLE BCD=FALSE'
'DEFAULT DRIVER=PARADOX')
Aps a criao do Alias da BDE ou do Alias local, usando o componente TDatabase, o banco de dados est
configurado e pronto para ser usado.
5.+ Data!ase %or& <i>ard
Aps a configurao do banco de dados, a maneira mais rpida, de se fazer uma janela de manuteno de dados
atravs do $or' 4i)ard no menu Database. Ao chegar no Wizard so feitas uma srie de perguntas que podem
resultar em uma janela simples ou Mestre/Detalhe. O acesso ao banco de dados pode ser feito atravs de
componentes TTable ou atravs de SQL, com o componente TQuery, usaremos o componente TTable. Todos os
campos selecionados aparecem na janela permitindo entrada de dados atravs de componentes do tipo TDBEdit.
Cada DBEdit recebe um Label baseado no nome do campo na tabela selecionada. Na Janela includo tambm
um componente para permitir a navegao e a manuteno dos dados, um DBNavigator. O componente utilizado
para fazer a ligao entre os componentes visuais e o TTable um TDataSource. Geralmente os componentes
TTable e TDataSource so inseridos em DataModules, que so a base para a criao de classes de dados.
Sempre Aps usar o Wizard, lembre-se de mudar os nomes dos componentes, para que fiquem mais claros.
(.8.1 $orm Passo a Passo
O diagrama abaixo mostra como o Wizard fez a ligao entre os componentes, onde os quadrados so
componentes e as elipses, propriedades.
DataSet
DatabaseName
TDatabase
TDataSource
TTable
DatabaseName
TDBEdit
DataSource
DB
Para concluir, acompanhe abaixo os passos realizados pelo Wizard e tente voc mesmo criar seu prprio Form.
nclua um novo DataModule
Adicione ao DataModule um Table e um DataSource
No Table Coloque em DatabaseName o nome do Alias criado pela propriedade DatabaseName do Database e
em TableName, o nome da tabela
No evento OnCreate do DataModule, chame o mtodo Open do componente Table
No DataSource coloque em DataSet o nome do componente TTable
No Form, para definir a interface com o usurio, use os componentes de controle de dados que esto na
pgina DataControls, basicamente DBEdit e DBNavigator
Para poder acessar os dados, coloque a Unit onde est o DataModule no uses da Unit do Form
Em todos os componentes DataControls, escolha na propriedade DataSource, o componente DataSource
criado no DataModule
Em alguns controles, como no DBEdit, deve ser especificado tambm o campo da tabela, na propriedade
DataField
Seguindo esses passos, o Form estar pronto para usar. Mais adiante, veremos uma forma mais rpida de se criar
um Form de manuteno, mas o mais importante compreender os passos mostrados acima, com todos os
componentes e propriedades envolvidas. Vamos detalhar agora cada um dos componentes envolvidos nesse
processo, para compreendermos melhor o que est acontecendo.
5.1. 9Data)od*le
Um DataModule como se fosse um Form invisvel, onde iremos inserir os componentes de acesso a dados,
como o Table e o Datasource. Por serem tambm classes, os DataModules permitem a fcil implementao de
modelos de objetos, permitindo herana, criao de mtodos, dentre outros aspectos. Para inserir um DataModule
em um projeto, escolha New DataModule do menu File. Os DataModules no gastam recursos do sistema, servem
apenas para conter os componentes de acesso a dados e criar, assim, uma classe persistente.
5.11 99a!le
Componente usado para acessar uma tabela em um banco de dados. Esse componente o mais importante
quando acessamos bases de dados Desktop. Muitas dos itens mostrados abaixo esto definidos na classe
TDataSet, ancestral do TTable.
Propriedades !escri"o
Active Define se a tabela esta aberta ou fechada
BOF nforma se est no incio da tabela
36
CanModify Define se a aplicao pode inserir, deletar ou alterar registros
DatabaseName Nome do banco de dados onde est a tabela, deve ser escolhido um Alias, que pode ser local
EOF nforma se est no fim da tabela
Exclusive Define se a tabela pode ser compartilhada por outro usurio
FieldCount Nmero de campos da tabela
FieldDefs Lista com a Definio dos campos da tabela
Fields Lista de objetos do tipo TField, que representam os campos da tabela
Filter String com uma condio de filtragem
Filtered Define se a tabela filtrada
ndexFieldNames Nome dos campo de ndice, usados para ordenar os registros da tabela
ndexName Nome do ndice atual, vazia quando o ndice for a chave primria
ndexDefs Lista com a definio dos ndices
MasterFields Campos usados no relacionamento com a tabela mestre
MasterSource DataSource da tabela mestre em uma relao Mestre/Detalhe
Modified Define se o registro atual foi modificado
ReadOnly Define se a tabela somente para leitura
RecNo Nmero do registro atual
RecordCount Nmero de registros
State Estado da tabela
TableName Nome da tabela
TableType Tipo da tabela
M0todo !escri"o
Addndex Cria um novo ndice, a tabela deve ser exclusiva
Append Entra em modo de insero e, ao gravar, o registro ser colocado no fim do arquivo
AppendRecord nsere um registro no final do arquivo atravs de cdigo
Cancel Cancela as alteraes feitas no registro atual
Close Fecha a tabela
CreateTable Cria uma tabela, depende de FieldDefs e ndexDefs
Delete Exclui o registro corrente
Deletendex Exclui um ndice
DeleteTable Exclui a tabela
DisableControls Desabilita a atualizao dos controles visuais
Edit Permite a alterao dos campos do registro atual
EmptyTable Apaga todos os registro da tabela, para isso a tabela no pode esta sendo compartilhada
EnableControls Habilita os controles visuais
FieldByName Acessa um campo, do tipo TField, pelo nome
FindKey Procura o registro com os valores exatos aos dos parmetros nos campos do ndice atual
FindNearest Procura o registro com os valores mais aproximados aos dos parmetros nos ndices
First Move para o primeiro registro
nsert Entra em modo de insero de um novo registro na posio atual
nsertRecord Adiciona um novo registro, j com os dados, na posio atual
sEmpty Define se a tabela est vazia
Last Move para o ltimo registro
Locate Procura um registro, usando ou no ndices, de acordo com a disponibilidade
LockTable Trava a tabela
Lookup Procura um registro e retorna valores dos campos deste
MoveBy Move um nmero especfico de registros
Next Move para o prximo registro
Open Abre a tabela
Post Grava as alteraes no registro atual
Prior Move para o primeiro registro
Refresh Atualiza a tabela com os dados j gravados
RenameTable Renomeia a tabela
UnlockTable Destrava a tabela
Evento !escri"o
AfterCancel Aps do mtodo Cancel
37
AfterClose Aps o fechamento da tabela
AfterDelete Aps do mtodo Delete
AfterEdit Aps do mtodo Edit
Afternsert Aps do mtodo nsert
AfterOpen Aps do mtodo Open
AfterPost Aps do mtodo Post
AfterScroll Aps mudar de registro
BeforeCancel Antes do mtodo Cancel
BeforeClose Antes do fechamento da tabela
BeforeDelete Antes do mtodo Delete
BeforeEdit Antes do mtodo Edit
Beforensert Antes do mtodo nsert
BeforeOpen Antes do mtodo Open
BeforePost Antes do mtodo Post
BeforeScroll Antes de mudar o registro
OnCalcFields Evento usado para calcular os valores dos campos calculados
OnDeleteError Quando ocorre um erro ao chamar o mtodo Delete
OnEditError Quando ocorre um erro ao chamar o mtodo Edit
OnFilterRecord Evento usado com filtragem varivel
OnNewRecord Quando a tabela entra em modo de insero, no deixa Modified igual a True
OnPostError Quando ocorre um erro ao chamar o mtodo Post
(.11.1 $iltros
Usando o $ilter, voc pode filtrar os registro de uma tabela usando uma expresso lgica, como nos exemplos
abaixo. Para tornar um filtro ativo, basta colocar $iltered igual a True.
Data = '20/04/1998'
(Data = '20/04/1998') AND (Vendedor = 'Gilherme Augusto da Fonseca')
(Nome > 'A') AND (Nome < 'B')
Contudo, se a condio de filtragem for muito varivel, prefervel usar um cdigo como o mostrado abaixo no
evento OnFilterRecord da Table, para fazer uma filtragem dinmica, com a propriedade Filter vazia e Filtered igual
a True.
Accept := TblData.Value = Date;
Ao filtrar uma tabela, a propriedade RecordCount da Table, s mostra o nmero de registros que satisfazem ao
filtro, como se os outros registros nao existissem.
Alterando Re,istros
Para alterar registros em cdigo, colocamos a tabela em modo de edio, alteramos o valor dos campos e
gravamos as alteraes, se for necessrio.
with DtmPedidos do;
begin
Tbl.Edit;
TblData.Value := Date;
TblHora.Value := Time;
Tbl.Post;
end;
(.11.2 Inserindo Re,istros
Para inserir registros em cdigo voc pode usar os mtodos AppendRecord e nsertRecord, caso voc no precise
de algum campo, mesmo assim ele deve ser informado com o valor Null.
DtmProd.Tbl.AppendRecord([Null, EdtDescricao.Text, EdtPreco.Text]);
(.11.# &ocaliEando Re,istros
Para localizar registros voc pode usar vrios mtodos, mas o melhor deles o Locate, no exemplo abaixo feita
uma pesquisa exata.
if not DtmCli.Tbl.Locate('CodCli', Edt.Text, []) then
ShowMessage('Cliente no encontrado.');
Voc tambm pode fazer uma pesquisa parcial e/ou sem sensitividade de caso usando o terceiro parmetro, que
um conjunto de opes.
DtmCli.Tbl.Locate('Nome', Edt.Text, [loPartialKey, loCaseInsensitive]);
Se voc precisar fazer uma pesquisa por mais de um campo, separe os nomes dos campos por ponto e vrgula e
use a funo VarArrayOf para criar um array com os valores que voc quer procurar.
if not DtmPed.Tbl.Locate('Vendedor;Data', VarArrayOf([EdtVendedor.Text, EdtData.Text]),
[loCaseInsensitive]) then
ShowMessage('O vendedor no realizou nenhuma venda nessa data');
38
Caso os campos pesquisados sejam indexados, a pesquisa ser muito mais eficiente, seno ser criado um filtro
temporrio da BDE para localizar os registros
(.11.% Indexa"o
A indexao usada para ordenar os registros da tabela, para isso voc deve escolher os campos pelos quais
voc quer ordenar na propriedade ndexFieldNames, inclusive em cdigo, como mostrado abaixo, todos campos
devem ser indexados e separados por ponto e vrgula.
DtmCli.Tbl.IndexFieldNames := 'Nomcli';
DtmPed.Tbl.IndexFieldNames := 'Data, Vendedor';
(.11.( Estados da /a2ela
A propriedade State determina o estado das tabelas, os principais estados so demonstrados abaixo, veja como
os mtodos mudam o estado.
Post
Cancel
Delete
Post
Cancel
Delete
dsnsert dsBrowse dsEdit
nsert
Append
Edit
(.11.6 *eri=icando Altera"Ces
Onde for necessrio a verificao de alteraes feitas em uma Tabela, por exemplo no evento OnClose de um
Form de manuteno, voc pode usar a propriedade Modified, como mostrado no exemplo abaixo.
if DtmCli.Tbl.Modified then
if Application.MessageBox('Gravar alteraes?', 'Dados Alterados', MB_ICONQUESTION
+ MB_YESNO) = IDYES then
DtmCli.Tbl.Post
else
DtmCli.Tbl.Cancel;
(.11.+ *alores !e=ault
Caso voc queira especificar valores Default para os campos de uma tabela, use o evento OnNewRecord, pois
nesse evento o registro no marcado como modificado.
TblData.Value := Date;
(.11.6 Percorrendo uma /a2ela
Utilize um cdigo semelhante ao mostrado abaixo para percorrer uma tabela do incio ao fim.
Tbl.DisableControls;
Total := 0;
Tbl.First;
while not Tbl.EOF do
begin
Total := Total + TblValor.Value;
Tbl.Next;
end;
Tbl.EnableControls;
(.11.8 $orms Modais de Incluso)Altera"o
Para mostrar Forms Modais de incluso ou alterao de registros utilize comandos como os mostrados abaixo.
TblCli.Insert;
if FormInsCli.ShowModal = mrOk then
TblCli.Post
else
TblCli.Cancel;
5.12 )estreADetalhe
Nos relacionamentos de 1 para N, uma tabela pode estar ligada a outra em uma relao Mestre/Detalhe, nesse
tipo de relao os registros da tabela de ordem N so filtrados pelo campo de relacionamento com a tabela de
ordem 1. Por exemplo, se o relacionamento de Clientes com Pedidos for mestre/detalhe, s sero acessados em
pedidos, os registros cujo campo CodCli seja igual ao CodCli da tabela de Clientes.
Para fazer esse tipo de relacionamento, siga os passos abaixo.
No uses da Unit detalhe, Pedidos, inclua a Unit da tabela mestre, Clientes
Na Table detalhe, Pedidos, Coloque em MasterSource o DataSource da tabela mestre, Clientes
Em MasterFields, chame o Fields Links Designer e escolha os campos de ligao das tabelas, no caso,
CodCli para as duas tabelas
39
5.13 %ields ,ditor
Para criar objetos para os campos de uma tabela clique duas vezes no componente TTable ou escolha $ields
Editor no seu menu de contexto, na janela do Fields Editor, clique com o boto direito do mouse e escolha Add, na
janela Add Fields, escolha os campos que voc vai querer usar e clique em Ok.
No Fields Editor podemos tambm remover os campos criados, alterar sua ordem de apresentao e usar suas
propriedades e eventos no Object nspector. Para cada campo criado um objeto de um tipo descendente de
TField, como TStringField, TntegerField, TFloatField. As principais propriedades dos objetos TField esto listadas
na tabela abaixo.
Se voc no criar nenhum objeto TField, todos os campos da tabela estaro disponveis, mas caso voc crie
algum, somente os campos que voc criar estaro disponveis.
Se voc selecionar os campos no Fields Editor e arrastar para o Form, sero criados os controles visuais para
esses campos, Label, DBEdit e outros, mas antes coloque a descrio dos campos na propriedade DisplayLabel.
5.14 9%ield
A classe TField usada como ancestral para todos as classes dos campos. Geralmente iremos usar objetos de
classes descendentes de TField, mas em todos eles podemos encontrar os itens mostrados abaixo.
Propriedades !escri"o
Alignment Alinhamento do texto do campo nos controles visuais
AsBoolean Valor do campo convertido para Boolean
AsCurrency Valor do campo convertido para Currency
AsDateTime Valor do campo convertido para DataTime
AsFloat Valor do campo convertido para Double
Asnteger Valor do campo convertido para nteger
AsString Valor do campo convertido para string
AsVariant Valor do campo convertido para Variant
Calculated ndica se o campo calculado em tempo de execuo
CanModify ndica se um campo pode ser modificado
ConstraintErrorMessage Mensagem de erro se a condio de CustomConstraint no for satisfeita
CustomConstraint Condio de validao do campo
DataSet DataSet onde est o campo
DataSize Tamanho do campo, em Bytes
DataType Propriedade do tipo TFieldType, que indica o tipo do campo
DefaultExpression Expresso com valor Default do campo para novos registros
DisplayLabel Ttulo a ser exibido para o campo
DisplayText Texto exibido nos controles visuais associados ao campo
DisplayWidth Nmero de caracteres que deve ser usado para mostrar o campo no controles visuais
EditMask Mscara de edio do campo
FieldKind Propriedade do tipo TFieldKind que indica o tipo do campo, como Calculado ou Lookup
FieldName Nome do campo na tabela
FieldNo Posio fsica do campo na tabela
ndex Posio do campo nos controles visuais
sndexField ndica se um campo vlido para ser usado como ndice
sNull ndica se o campo est vazio
KeyFields Campo chave da tabela no relacionamento com LookupDataSet, usado em campos Lookup
Lookup ndica se um campo Lookup
LookupCache Define se ser usado cache para campos Lookup
LookupDataSet DataSet onde est definido o valor do campo Lookup
LookupKeyFields Campo chave do relacionamento em LookupDataSet
LookupResultField Valor do campo, que ser mostrado nos controles visuais
ReadOnly Define se um campo somente para leitura
Required Define se o campo obrigatrio
Size Tamanho fsico do campo
Text Texto de edio do campo
Value Acesso direto ao valor do campo
Visible Define se um campo visvel
Eventos !escri"o
OnChange Chamado quando o valor do campo mudado
OnSetText Chamado pelos controles visuais para atribuir o texto digitado pelo usurio ao campo
40
OnGetText Chamado para formatar o texto de exibio do campo
OnValidate Validao do valor atribudo ao campo, caso o valor no seja vlido, gere uma exceo
M0todo !escri"o
Assign Atribui um valor de um campo a outro, inclusive nulo
FocusControl Seta o foco para o controle visual ligado ao campo nos Forms
Clear Limpa o contedo do campo
Esto listadas abaixo algumas classes que realmente iremos manipular no tratamento dos campos de uma tabela,
so classes descendentes de TField.
TStringField TBlobField TTimeField
TSmallintField TntegerField TBytesField
TFloatField TWordField TVarBytesField
TCurrencyField TAutoncField TGraphicField
TBooleanField TBCDField TMemoField
TDateField TDateTimeField
Em alguns desses campos voc pode encontrar as propriedades mostradas abaixo, que no esto presentes em
TField.
Propriedades !escri"o
MaxValue Valor mximo para o campo
MinValue Valor mnimo para campo
DisplayFormat Formato de apresentao do campo, como 5-6--7 87 ou 5-6997 *'7
EditFormat Formato de edio do campo
Currency Define se um campo monetrio
DisplayValues Usado com campos Boolean, define o texto para True e False, como (i':No
M0todos !escri"o
LoadFromFile Carrega o contedo do campo de um arquivo
SaveToFile Salva o contedo do campo para um arquivo
Para acessar os campo de uma tabela, existem vrias abordagens, como mostrado abaixo..
Usando o objeto TField ligado ao campo.
TblDescricao.Value := TblVendedor.Value + ' em ' + TblData.AsString;
Usando a notao de colchetes. Se voc no especificar nenhuma propriedade, assumida a propriedade
Value por padro.
Tbl['Descricao'] := Tbl['Vendedor'] + ' em ' + Tbl['Data'].AsString;
Atravs do mtodo FieldByName
Tbl.FieldByName('Descricao').Value := Tbl.FieldByName('Vendedor').Value + ' em '
+ Tbl.FieldByName('Data').AsString;
Usando a lista Fields do TTable
Tbl.Fields[5].Value := Tbl.Fields[3].Value + ' em ' + Tbl.Fields[4].AsString;
(.1%.1 Converso de /ipos
A converso de tipo de um campo pode ser feita atravs as propriedades tipo As666, como AsString.
DtmPed.TblData.AsString := EdtData.Text;
(.1%.2 *alida"o
Para validar os valores de um campo, voc pode usar a propriedade CustomConstraint, por exemplo para garantir
que a quantidade de um item seja maior que zero, use em CustomConstraint /uantidade ; -, e em
CustomConstraint coloque a mensagem para o usurio caso a condio seja falsa. Outra forma, mais flexvel,
usando o evento OnValidate, com um cdigo como abaixo, onde gerada uma exceo para cancelar a atribuio
do valor ao campo.
if TblQuantidade.Value <= 0 then
raise Exception.Create('Quantidade deve ser maior que zero.');
(.1%.# $ormata"o PersonaliEada
Caso queira fazer uma formatao personalizada do campo, pode usar os eventos OnGetText e OnSetText. Por
exemplo, se tiver um campo Estado, e quiser que quando o valor do campo for 2 fosse mostrado 2asado e (,
(olteiro, no evento OnGetText use um cdigo como o abaixo.
if TblEstado.Value = 'C' then
Text := 'Casado'
else if TblEstado.Value = 'S' then
Text := 'Solteiro';
Como controle visual para o usurio escolher o valor do campo, voc poderia usar o DBComboBox, com (olteiro e
2asado na propriedade Ite's, e no evento OnGetText do campo o cdigo mostrado abaixo.
if Text = 'Casado' then
41
TblEstado.Value := 'C'
else if Text := 'Solteiro' then
TblEstado.Value = 'S';
(.1%.% Campos Calculados
Para criar campos calculados, clique com o direito no Fields Editor e escolha New $ield, no quadro NewField,
digite o nome do campo, o nome do objeto ser automaticamente informado, o tipo do campo, seu tamanho e
escolha Calculated em Field type.
Para colocar um valor nesse campo usaremos o evento OnCalcFields do componente TTable, em nenhuma outra
parte os valores desses campos podem ser alterados.
O cdigo do evento OnCalcFields deve ser enxuto, pois este chamado vrias vezes durante a edio de um
registro e um procedimento pesado pode comprometer a performance do sistema.
procedure TDtmAluno.TblCalcFields(DataSet: TDataSet);
begin
if TblFaltas.Value > DtmTurma.TblMaxFaltas.Value then
TblSituacao.Value := 'Evadido'
else if TblNota.Value >= 7 then
TblSituacao.Value := 'Aprovado'
else
TblSituacao.Value := 'Retido'
end;
(.1%.( Campos &oo'up
Para fazer um relacionamento, s vezes precisamos criar um campo de descrio, por exemplo em uma
biblioteca, na tabela de emprstimos, temos o cdigo do Livro, mas gostaramos de mostrar o Ttulo, esses
campos so chamados de campos Lookup.
Para criar um campo Lookup, siga os passos abaixo, tomando como exemplo o caso do livro no emprstimo.
Abra o Fields Editor do Table desejado, Emprstimos
Clique com o direito e escolha New Field
No quadro New Field, escolha as propriedades do campo como descrito em campos calculados, mas em Field
type, escolha Lookup
Em Key Fields escolha o campo da tabela que faz parte do relacionamento, CodLivro
DataSet a tabela onde est a descrio, Livros
Em Lookup Keys, escolha o campo de DataSet que faz parte do relacionamento, CodLivro
Finalmente, escolha em Result field o campo de DataSet que vai ser mostrado para o usurio, Ttulo
Essas opes correspondem a algumas propriedades do objeto TField gerado, que podem ser alteradas no Object
nspector, KeyFields, LookupDataSet, LookupKeyFields, LookupDataSet e LookupResultField.
Quando esses campo so exibidos em um DBGrid, por padro criado um boto de lookup que mostrar os
valores da outra tabela uma lista. Para colocar esses campos em um Form, devemos usar o
DBLookupComboBox, apenas com as propriedades padro, DataSource e DataField, onde deve ser escolhido o
campo Lookup, quando voc arrastar o campo para o Form isso ser feito automaticamente.
5.15 9DataSo*rce
Componente usado para fazer a ligao entre um DataSet e os componentes visuais.
> Proprieda
de
> !escri"o
AutoEdit Define se a tabela entrar em modo de edio assim que o usurio digitar novos valores nos controles
DataSet DataSet ao qual o TDataSource faz referncia
> Evento > !escri"o
OnDataChange Ocorre quando o DataSet alterado, ao mudar de registro ou mudar os valores dos campos
OnStateChange Ocorre quando o estado do DataSet alterado
OnUpdateData Ocorre antes de uma atualizao
1otCes de ?ave,a"o PersonaliEados
O DBNavigator tem os principais botes necessrios para a navegao por uma tabela, contudo se voc quiser
criar seus prprios botes de navegao, o que no recomendado, no evento OnClick desses botes deve ser
chamados os mtodos de navegao, como indicado abaixo.
DtmCli.Tbl.Next;
Para controlar a habilitao dos botes de navegao use o evento OnDataChange do DataSource
correspondente como indicado abaixo.
BtnProx.Enabled := not DtmCli.Tbl.EOF;
Para criar botes de controle, como incluso e excluso, use o evento OnStateChange do DataSource como
indicado abaixo para controlar a habilitao.
BtnAlterar.Enabled := DtmCli.Tbl.State = dsBrowse;
42
5.16 Data Controls
Controles usados na interface com o usurio. Todos esses componentes tem uma propriedade DataSource, que
deve ter o DataSource do Table ao qual esto ligados.
5.1$ 9D=2a3i'ator
O DBNavigator permite que o usurio realize operaes padro de controle de dados. Cada um dos botes do
DBNavigator chama um mtodo do Componente Table ao qual est ligado.
Podemos personalizar o DBNavigator usando as suas propriedades e eventos, mas se quisermos mudar a figura
dos botes teremos que editar diretamente o arquivo LB\DBCTRLS.RES, na pasta do Delphi.
> Propriedade
s
> !escri"o
VisibleButtons Define os botes que sero visveis
Hints Hints exibidos pelos botes
ConfirmDelete Define se ser solicitado uma confirmao antes da excluso
> Eventos > !escri"o
BeforeAction Quando um boto do Navigator pressionado, antes da ao ser executada
OnClick Quando um boto do Navigator pressionado, depois da ao ser executada
5.1( 9D=Grid
Mostra os registros de uma tabela em forma de grade, cada coluna um campo e cada registro, uma linha.
> Propriedade
s
> !escri"o
Columns Lista do tipo TDBGridColumns, com as colunas da Grid, cada item da lista do tipo TColumn
Fields Lista de objetos TField mostrados nas colunas
Options Set com as opes da Grid, como ConfirmDelete, MultiSelect, ColumnResize
SelectedField Campo da coluna selecionada
Selectedndex ndice da coluna selecionada
SelectedRows Lista do tipo TBookmarkList, com os registros selecionados em uma Grid com MultiSelect
TitleFont Fonte do ttulo das colunas
FixedColor Cor Fixa, usada nas colunas e indicadores
> Eventos > !escri"o
OnCellClick Ao clicar em uma clula da Grid
OnColEnter Quando uma clula de alguma coluna da Grid recebe o foco
OnColExit Quando uma clula de alguma coluna da Grid perde o foco
OnColumnMoved Quando o usurio mover uma coluna
OnDrawDataCell Evento usado para personalizar a forma de desenhar os dados que so apresentados na Grid
OnEditButtonClick Ao clicar no boto de edio de uma clula, mostrado pela propriedade ButtonStyle da coluna
OnTitleClick Ao clicar no ttulo das colunas
(.16.1 /Column
tem de uma lista "D.<rid2olu'ns, usada na propriedade 2olu'ns da Grid, objetos desse tipo representam uma
coluna da Grid. s vezes as propriedades definidas para o campo sobrepem as propriedades
> Propriedade
s
> !escri"o
ButtonStyle Boto mostrado ao editar as clulas da coluna
Field Objeto TField ligado coluna
FieldName Nome do campo ligado coluna
PickList TStrings com os itens da lista DropDown usada nas clulas da coluna
Title Propriedade do tipo TColumnTitle com as opes do ttulo da coluna
5.1+ 9D=9e5t; 9D=,dit; 9D=)e&o; 9D=8ist=o5; 9D=Co&!o=o5; 9D=#&a'e; 9D=:ich,dit
Controles genricos ligados a um campo de uma tabela.
> Propriedade
s
> !escri"o
DataField Campo ao qual o controle est ligado
43
5.2. 9D=Chec@=o5
Usado em campos que podem receber apenas dois valores, como campos lgicos.
> Propriedade
s
> !escri"o
ValueChecked Valor a ser armazenado quando est selecionado
ValueUnchecked Valor a ser armazenado quando no est selecionado
5.21 9D=:adioGro*p
Mostra algumas opes para o preenchimento de um campo.
> Propriedade
s
> !escri"o
Values Valor a ser armazenado para cada boto de rdio
5.22 9D=8oo@*p8ist=o5; 9D=8oo@*pCo&!o=o5
Preenche um campo com dados contidos em outra tabela. Se o campo mostrado nesses componentes for um
campo Lookup, voc no precisa especificar nenhuma das propriedades abaixo, apenas DataSource e DataField.
> Propriedade
s
> !escri"o
ListSource DataSource que contm os valores a serem exibidos na lista
ListField Campo de ListSource que ser exibido
KeyField Campo de ListSource usado no relacionamento
5.23 ,5erccios
1. Crie uma aplicao que cadastre os Clientes de uma empresa e as Compras feitas por estes Clientes,
permita incluso, alterao, excluso e consulta aos dados cadastrados. Na janela principal fica o cadastro de
Clientes, com a grade de visualizao de suas Compras, crie tambm uma Janela para localizar Clientes por
Nome.
A tabela de clientes deve ter Nome, Endereo, Bairro, Cidade, Estado, CEP e Telefone, defina tambm
ndices para melhorar a localizao de clientes por Nome. Na tabela de Compras, deseja-se saber a Data,
Produtos e Valor, assuma que cada compra tem um Produto apenas. Como foi mencionado, as compras
sero cadastradas pelo cliente atual, crie a relao Mestre/Detalhe entre Clientes e Compras.
O Form de localizao de Clientes deve permitir pesquisa Nome, da mesma forma da questo anterior.
2. Uma academia de ginstica deseja manter um controle maior sobre seus Alunos, para isso ela organizou os
clientes em turmas. Os dados de uma Turma so Nmero de alunos, Horrio da aula, Durao da aula, Data
inicial, Data final e nstrutor. Deve ser feita tambm uma tabela de instrutores para evitar a digitao repetitiva
do Nome. Os dados dos Alunos so Matrcula, Data de Matrcula, Nome, Endereo, Bairro, Cidade, Estado,
Telefone, Data de nascimento, Altura e Peso. Crie um banco de dados, normalizado, para guardar essas
informaes.
No cadastro de Turmas, o Horrio de aulas deve ser entre 7:00 e 18:00, a Durao no pode ser maior que 2
horas e a Data Final tem que ser, no mnimo 5 dias aps a nicial. Esse cadastro deve ser ordenado primeiro
pela Data Final, em ordem decrescente e depois pelo Horrio, em ordem crescente. As turmas j encerradas
no devem ser mostradas no cadastro, mas crie um arquivo morto com as turmas j encerradas, onde os
dados no possam ser alterados. Deve ser possvel tambm procurar o nstrutor pelo Nome, usando um
ComboBox, com os registros da tabela de nstrutores.
No cadastro de Alunos, a matrcula Auto-incremental, a Data de Matrcula deve ser, obrigatoriamente, a
Data do sistema e deve ser criado um campo calculado com o peso ideal do cliente, altura menos 1,15.
44