Você está na página 1de 146

Sumrio

PRIMEIROS PASSOS ___________________________ 3


ANATOMIA DE UMA JANELA _________________________________ 5
MENU, BARRA DE FERRAMENTAS E PALETA DE COMPONENTES _____________6
Barra de Ferramentas __________________________________ 6
PALETA DE COMPONENTES __________________________________ 7
JANELAS DO DELPHI ______________________________________ 8
PRIMEIRO PROGRAMA _______________________ 10
ADAPTAR AS PROPRIEDADES DOS OBJETOS ____________________ 12
SALVAR ______________________________________________ 22
EXEMPLO I- CALCULADORA __________________ 26
PROPRIEDADES ____________________________________ 34
BorderStyle __________________________________________ 34
Default ______________________________________________ 35
Tabstop _____________________________________________ 36
Name _______________________________________________ 37
Caption _____________________________________________ 37
Text ________________________________________________ 37
MTODO _____________________________________________ 38
Setfocus _____________________________________________ 38
VARIVEIS NO DELPHI ___________________________________ 38
Formas de Declarar uma Varivel ________________________ 39
FORMATAO DE NMEROS _______________________________ 39
Formatando Data e Hora: ______________________________ 40
MODIFICANDO A CALCULADORA ___________________________ 41
DEPURAO _________________________________ 46
EXEMPLO II - JOGO DA VELHA _______________ 51
EXEMPLO III - BLOCO DE NOTAS _____________ 65
EXEMPLO IV - RELGIO DESPERTADOR ______ 79
MTODO GRFICO ___________________________ 83
DESENHO DE PONTO_____________________________________ 83
CORES _______________________________________________ 84
DESENHO DE LINHAS ____________________________________ 85
DESENHO DE RETNGULOS ________________________________ 90
DESENHO DE ELIPSES ____________________________________ 92
FIGURAS _____________________________________________ 93
EXEMPLO V - CATLOGO _____________________ 99
INSERINDO UMA NOVA UNIDADE ___________________________ 101
TIPOS DE DADOS ______________________________________ 102
REGISTROS __________________________________________ 103
PONTEIRO DE REGISTROS ________________________________ 106
BANCO DE DADOS SIMPLES _________________ 113
DATABASE DESKTOP _____________________________________114
INTEGRANDO MS-WORD COM DELPHI ______ 137
LISTA DE EXERCCIOS_______________________ 144
Pgina: 3
Delphi 5

Celta Informtica - F: (11) 4331-1586
,AFDE #
PRIMEIROS PASSOS
Vantagens : - Facilidade em alteraes e implementaes
- Melhor Estruturao do cdigo
- Velocidade
- Verdadeira orientao a objetos
Delphi possui um ambiente de desenvolvimento fcil de usar, com uma
grande Biblioteca de Componentes Visuais (VCL - Visual Component
Library). A VCL contm cdigo de botes campos, rtulos, grficos, cai-
xas de dilogo e acesso e tabelas de bancos de dados, e foi desenvolvi-
da levando em conta as velocidades no desenvolvimento de aplicativos e
na execuo destes aplicativos.
O rpido desenvolvimento de aplicativos possvel graas aos vrios
controles disponveis na paleta de componentes, onde o programador
escolhe um destes componentes, e coloca-o diretamente no local dese-
jado, dentro de um formulrio. O formulrio ser a janela do aplicativo
apresentada ao usurio.
Pgina: 4
Delphi 5

Celta Informtica - F: (11) 4331-1586
O Delphi trabalha com eventos que do incio alguma rotina de traba-
lho, ou seja, o programa fica parado at que um evento ocorra. Ele utiliza
o modelo orientado objetos, permitindo alm do uso de objetos existen-
tes, tambm a criao de outros tantos.
Um programa tradicional, feito para ser executado em DOS, organiza-
do em torno de estruturas de dados com um loop principal e uma srie
de sub-rotinas constituindo o aplicativo, com procedimentos e funes
separados para manipular os dados.
Um programa orientado a objetos e eventos organizado em torno de
um conjunto de objetos. Onde objeto uma varivel com propriedades
que o definem, e vrios cdigos dando funcionalidade a este objeto. Ou
seja, objetos so estruturas que combinam dados e rotinas em uma
mesma entidade.
Um Objeto possui dados internos, que no podem ser acessados por ou-
tros objetos e dados externos, tambm chamados de propriedades, estas
podendo ser acessadas de fora deste objeto. De maneira semelhante, um
objeto possui rotinas internas que so usadas apenas internamente e roti-
nas externas, tambm chamadas de mtodos, que podem ser acessadas
externamente.
Um carro um objeto que possui propriedades e mtodos. A tabela abaixo
lista algumas propriedades e comportamentos do objeto real carro.
frear tipo de pintura
acelerar potncia do motor
mudar marcha comprimento
dar partida cor
Mtodos Propriedades
Um mtodo uma rotina prpria do objeto que o d funcionalidade, ou
seja, torna-o vivo, e as propriedades fazem o intercmbio entre o objeto e
o programa.
Pgina: 5
Delphi 5

Celta Informtica - F: (11) 4331-1586
ANATOMIA DE UMA JANELA
A figura abaixo mostra uma janela tpica do Windows com seus compo-
nentes bsicos, que no Delphi chamamos de formulrio.
Moldura - Os quatro lados do formulrio que definem seu tamanho.
Barra de Ttulo - Na parte superior da moldura com nome do formulrio
e documento corrente.
Menu de Controle - esquerda da Barra de Ttulo. Um boto com o
cone que representa o programa.
Botes de Tamanho - direita da Barra de Ttulo. O boto da esquer-
da possui um trao, o outro com uma janela ou duas janelinhas dese-
nhadas. Se forem duas janelinhas, mostra que o formulrio est
maximizado, e se for uma janela um pouco maior indica que o formulrio
est em seu tamanho normal, podendo ser maximizado. O boto com
trao minimiza a janela.
Barra de Menu - Est abaixo da barra de ttulo e contm as opes de
controle do aplicativo.
rea do Cliente - a parte interna do formulrio, tambm chamada de
rea do documento, utilizada para inserir os controles da aplicao.
rea Externa Janela - sua Mesa de Trabalho onde voc pode ter
tantos aplicativos abertos quantos necessitar e a memria do seu com-
putador permitir.
Janela - Uma Janela plena quando podemos dimension-la (mini,
maxi e restaur-la) e mov-la.
Pgina: 6
Delphi 5

Celta Informtica - F: (11) 4331-1586
MENU, BARRA DE FERRAMENTAS E PALETA DE COMPONENTES
Barra de Ferramentas
Pgina: 7
Delphi 5

Celta Informtica - F: (11) 4331-1586
PALETA DE COMPONENTES
A Paleta de Componentes, possui todos os controles necessrios para a
construo da janela - formulrio - como um programa de desenho livre.
Para incluir um controle no formulrio, existem dois mtodos:
1 - Duplo-clique no cone da paleta de componentes insere o controle no
centro do formulrio com um tamanho padro.
2 - Selecionar o cone na paleta de componentes e depois dar um clique
no formulrio, na posio desejada para o objeto (canto superior es-
querdo deste).
Estes controles podem ser dimensionados, depois de inseridos, a qual-
quer momento durante o desenvolvimento. Primeiro, selecione o contro-
le dando um clique nele e depois arraste um dos oito botes
dimensionadores que circundam este objeto.
Pgina: 8
Delphi 5

Celta Informtica - F: (11) 4331-1586
JANELAS DO DELPHI
Formulrio
a janela que aparece no centro da tela do Delphi. Essa a janela que
ser mostrada durante a execuo do programa com todos os objetos
incorporados.
Controles
Existem vrios tipos de objetos no Delphi, entre eles, formulrios e con-
troles. Controles so todos os objetos que compem um formulrio.
Um controle qualquer objeto que o usurio possa manipular desde que
no seja uma janela (formulrio).
Object Inspector
Nesta janela escolhemos como sero as caractersticas de cada objeto
do formulrio (botes de comando, quadros de texto, formulrios, e ou-
tros), e a que eventos eles respondero, definindo como eles sero apre-
sentados e operados pelo cdigo. Cada objeto possui um conjunto es-
pecfico de propriedades, com seus valores, associadas a eles. Ao tra-
balharmos nos diferentes objetos, a janela Object Inspector nos permi-
tir mudar as propriedades do objeto com o qual estamos trabalhando.
Esta janela possui alm da divisria Properties a divisria Events onde
esto listados todos os eventos possveis de ocorrerem com o objeto
selecionado.
Pgina: 9
Delphi 5

Celta Informtica - F: (11) 4331-1586
Existem propriedades que podemos mudar enquanto construmos nos-
so projeto, ou seja, em tempo de projeto, e outras propriedades que s
podemos mudar durante a execuo do programa, neste caso em tem-
po de execuo.
Na janela Object Inspector mostrada anteriormente, temos algumas das
propriedades do formulrio assim que iniciamos o Delphi.
Caixa de Objeto - Esta caixa mostra o objeto atualmente selecionado,
atravs dela tambm poderemos selecionar todos os objetos do formu-
lrio ativo, alterando as suas propriedades, basta dar um clique na seta,
que um menu de cortina se abre, onde poderemos selecionar um objeto.
Nome - Contm o nome do objeto atualmente selecionado, que ser
utilizado pelo cdigo. Este nome est na propriedade Name.
Tipo - Nesta posio encontraremos qual o tipo (classe) do objeto
selecionado, se ele um TForm (formulrio), TButton (boto de coman-
do), TLabel (legenda), ou ento um TEdit (quadro de texto).
Coluna de Propriedades - Exibe todas as propriedades que podemos
modificar em tempo de projeto.
Coluna de Valores - Exibe o valor da propriedade correspondente.
Barra de status Mostra a quantidade de propriedades que ocultas.
Pgina: 10
Delphi 5

Celta Informtica - F: (11) 4331-1586
PRIMEIRO PROGRAMA
Para iniciar, vamos construir um programa que quando for dado um clique
no boto de comando, ser mostrada uma mensagem. E posteriormen-
te poderemos alterar a apresentao desta mensagem atravs de ou-
tros botes.
Existem trs passos principais para a escrita de uma aplicao no Delphi
que iremos seguir:
Desenhar as janelas que se deseja usar.
Inserir no formulrio os controles que sero necessrios
Adaptar as propriedades dos objetos.
Alterar as propriedades dos controles s necessidades da
aplicao
Escrever o cdigo para os eventos associados.
Esta a parte mais complexa do desenvolvimento, ela
que d a funcionalidade ao programa, so as rotinas que
comeam a ser executadas a partir de um evento.
Desenhar as janelas que se deseja usar.
Pgina: 11
Delphi 5

Celta Informtica - F: (11) 4331-1586
1. Comece inserindo uma Label (legenda) e um Button (boto de co-
mando) no formulrio, de uma das duas maneiras:
a - Dando um duplo clique na barra de ferramentas sobre
controle desejado;
b - Selecionar o controle e dar um clique no formulrio.
2. Ao passar o ponteiro do mouse sobre o controle, nos ser mostrado o
seu nome e tipo.
3. Observe que ao selecionar um objeto, possvel arrast-lo e
redimension-lo dentro do formulrio utilizando uma das alas
dimensionadoras. Enquanto o controle movido, o Delphi mostra sua
posio, e quando redimensionado aparecem as dimenses.
Sendo: Top = distncia entre o topo do formulrio e o objeto.
Left = distncia entre o lado esquerdo do formulrio e o obje-
to.
Width = largura do objeto.
Height = altura do objeto.
4. Arraste o Boto para as coordenadas (40,80) e o Label para (8,16).
Pgina: 12
Delphi 5

Celta Informtica - F: (11) 4331-1586
ADAPTAR AS PROPRIEDADES DOS OBJETOS
Para alterar as propriedades de um objeto, ele tem que estar seleciona-
do (com as oito alas dimensionadoras visveis), depois procurar a pro-
priedade a ser alterada na janela Object Inspector, e escolher (no caso
de valores padro) o seu valor, ou ento digitar um novo valor.
Dimensione o formulrio da seguinte maneira:
Selecione a propriedade Height, e atribuir a ela o valor de 150.
Selecione a propriedade Width dando o valor de 180.
Pgina: 13
Delphi 5

Celta Informtica - F: (11) 4331-1586
Os valores dados para estas propriedades correspondem a Pixels, que
so os pontos do monitor. Sendo o tamanho do objeto no monitor depen-
dente da resoluo de vdeo utilizada pelo computador.
Altere tambm as propriedades Name e Caption. A propriedade Name
a identificao do objeto no cdigo da aplicao, pode ser de qualquer
tamanho mas s so considerados os primeiros 255 caracteres, deve
comear com uma letra ou uma sublinha (_) no pode conter espao, e
aps o primeiro caractere so permitidos nmeros, letras (no portugue-
sas) ou sublinha.
A propriedade Caption a palavra que aparecer como ttulo da janela,
com at 255 caracteres.
Aps voc alterar estas quatro propriedades (Caption, Height, Name e
Width) do formulrio, ele estar conforme a figura a seguir:
Pgina: 14
Delphi 5

Celta Informtica - F: (11) 4331-1586
Agora, altere as propriedades do Label e do Button conforme a figura a
seguir. O caractere & quando utilizado na propriedade Caption sublinha
o caracter seguinte a ele, identificando-o como atalho para o Windows.
Aps alterar a propriedade Caption do controle Label este ficar peque-
no, pois a propriedade AutoSize est com o valor True, ou seja, o tama-
nho do Label estar sempre de acordo com o contedo de Caption.
Pgina: 15
Delphi 5

Celta Informtica - F: (11) 4331-1586
Escrever o cdigo para os eventos associados.
O cdigo escrito na janela Code editor, para acess-la, selecione o
boto Iniciar do formulrio e na Object Inspector, clique na pgina Events
dando um duplo clique na parte direita da linha que contm o evento
OnClick - a rotina escrita para este evento ser executada quando o
usurio der um clique no boto Iniciar.
Janela Code Editor
O Code Editor possu duas sees, o editor de cdigo propriamente dito
e o explorador de cdigo (Code Explorer). O editor de cdigo utilizado
para acessar o cdigo da aplicao que voc est desenvolvendo.
Pgina: 16
Delphi 5

Celta Informtica - F: (11) 4331-1586
J o explorador de cdigo permite navegar entre os diversos procedi-
mentos e objetos presentes na aplicao utilizando um diagrama em
rvore, com os objetos representados pelos seguintes cones:
Caso voc queira, possvel fechar o explorador de cdigo com um clique
no seu canto superior direito e abri-lo novamente escolhendo no menu
View >> Code Explorer ou Shift+Ctrl+E quando o Code Editor estiver
ativo.
No Code Editor observamos o nome da procedure, identificando qual o
objeto e o evento que dar incio execuo do cdigo, e onde est loca-
lizado este objeto. O parmetro Sender informa ao Delphi qual compo-
nente recebeu o evento que chamou a execuo deste procedimento.
Todas as instrues a serem executadas por um procedimento devem
estar entre as palavras reservadas Begin e End.
Pgina: 17
Delphi 5

Celta Informtica - F: (11) 4331-1586
O Code Editor tambm pode ser acessado dando-se um duplo clique
no objeto que se queira criar um cdigo exibindo o evento utilizado com
maior freqncia, o que no impede a criao de outros cdigos utilizan-
do mais de um evento para o mesmo componente.
Este primeiro projeto (Incio), mostrar uma mensagem no label
lblMensagem (objeto) com um clique (evento) no boto btnIniciar (ob-
jeto). Ou seja, o programa alterar a propriedade caption de lblMensagem,
que contm o texto a ser exibido ao usurio.
Atribumos valores a uma propriedade de objeto seguindo o padro:
objeto + . + propriedade + := + valor da propriedade ;
Abra o Code Editor no procedimento do evento OnClick para o boto
btnIniciar e digite o cdigo conforme a seguinte figura. Repare que ao
digitar o ponto aps lblMensagem, e aguardar alguns instantes, o Delphi
exibir uma lista de propriedades e mtodos do objeto Label, que recebe
o nome de Code completion.
Para escolher uma propriedade do lblMensagem utilize as setas de dire-
o do teclado e ento pressione a tecla Enter quando a propriedade
desejada estiver seleciona, inserindo-a na linha de comando. Ou ento,
digite a primeira letra da propriedade desejada, e se ela for a seleciona-
da, tecla Enter.
Pgina: 18
Delphi 5

Celta Informtica - F: (11) 4331-1586
Continue com o cdigo, seguindo a figura mostrada abaixo. Quando for
dado um clique em Iniciar, ser mostrada a mensagem Voc deu um
clique em Iniciar.
Clique no boto Run da barra de ferramentas ( ), ou pressione a
tecla F9, para o Delphi compilar e executar o projeto. Quando o progra-
ma estiver em execuo, clique no boto Iniciar para ver o resultado.
Pgina: 19
Delphi 5

Celta Informtica - F: (11) 4331-1586
Finalize a execuo do projeto com Alt+F4 ou no boto Finalizar ( ) da
barra de ttulo da janela.
Para alternar a visualizao entre o Formulrio e o Code Editor, utilize o
boto Toggle Form/Unit ( ) da barra de ferramentas ou a tecla F12.
No Delphi existem propriedades que possuem valores predefinidos para
seus valores, como por exemplo a propriedade Alignment. Quando
dado um clique na seta da caixa de valor dessa propriedade, aparecem
os tipos de alinhamento para o texto dentro do componente. Essas pro-
priedades com valores predefinidos tambm podem ser alteradas com
um duplo-clique sobre seu valor, alternado entre todos os valores dispo-
nveis.
Selecione o objeto Label atravs da Caixa de Objeto da janela Object
Inspector, e altere a propriedade Alignment para taCenter, centralizan-
do o texto que aparecer no label.
Altere tambm a propriedade AutoSize para False, e no formulrio au-
mente o tamanho do label.
Pgina: 20
Delphi 5

Celta Informtica - F: (11) 4331-1586
Alm das propriedades descritas acima, com padres predefinidos, exis-
tem outras que possuem inmeras escolhas, que ao invs de uma seta,
possuem trs pontos na sua caixa de valor, sendo o caso da propriedade
Font.
Quando damos um clique nos trs pontos, aparece um Quadro de Dilo-
go onde escolheremos o formato da fonte da mensagem apresentada.
Se for dado um clique no sinal de soma ao lado da propriedade, ser
aberta uma lista com seus parmetros, que podem ser alterados de modo
semelhante caixa de dilogo.
Pgina: 21
Delphi 5

Celta Informtica - F: (11) 4331-1586
No projeto Iniciar, teste as alteraes de
fonte e observe as mudanas. Na figura a
seguir, foi utilizada a fonte Arial com tama-
nho de 14 pontos.
Observe na figura acima que o texto no coube na rea de exibio do
label e nem no formulrio, este problema corrigido utilizando-se uma
das duas opes disponveis. A primeira alterar para True a proprieda-
de WordWrap do label, esta propriedade insere uma mudana de linha
quando o texto atinge a margem direita do objeto. A segunda alterar os
tamanhos do label e do formulrio da mesma forma que no Windows
redimensionamos as janelas. Como mostram as figuras a seguir.
Pgina: 22
Delphi 5

Celta Informtica - F: (11) 4331-1586
SALVAR
Um projeto em Delphi trabalha com vrios arquivos. Um arquivo para
cada formulrio, outro para unidade e um arquivo para o projeto. Os
arquivos de unidades possuem a extenso .PAS, o arquivo do projeto
.DPR e o do formulrio, .DFM. E outros arquivos que so:
.CFG - armazena as definies de configurao do projeto.
.DOF - contm o compilador e as definies de linker, diretrios
de procura, informao de verso, e assim sucessiva-
mente.
.RES - contm os resources do projeto como o como o cone
de aplicao, bitmaps e cursores.
.DCU - contm informaes sobre a ltima compilao reali-
zada, para que o Delphi compile somente o que foi
mudado no cdigo numa prxima vez.
.EXE - arquivo criado pelo compilador para ser executado pelo
usurio.
Quando o projeto salva, o Delphi solicita apenas os nomes dos arqui-
vos de unidade e projeto, os outros ele cria automaticamente.
Salvando o primeiro programa
No menu, selecione File >> Saveall ou clique no boto Save All ( ) da
barra de ferramentas, o que abre a caixa de dilogo para salvar do
Windows, pedindo para dar um nome ao arquivo do formulrio, extenso
.pas, d o nome de PrimeiroUnt.pas e clique em Salvar. A seguir, apare-
cer o mesmo quadro pedindo para dar um nome ao arquivo de projeto,
extenso .dpr, d o nome de Primeiro.dpr e clique em Salvar. Os no-
mes dos arquivos da unidade e do projeto devero ser diferentes, apesar
da extenso j o ser, pois o Delphi no aceita nomes iguais para arquivos
de projeto e unidades.
Pgina: 23
Delphi 5

Celta Informtica - F: (11) 4331-1586
Pgina: 24
Delphi 5

Celta Informtica - F: (11) 4331-1586
O projeto agora est salvo. preciso escolher um cone que o represen-
tar na tela do Windows. No menu principal do Delphi, selecione Project
>> Options..., e escolha a pgina Application.
Clique no boto Load Icon... , e procure o cone About.ico, no diretrio
\Borland \Delphi5\Objrepos, escolha Abrir para voltar janela Project
Options. D um ttulo ao programa e pronto, o programa j possui um
cone e um ttulo associados.
Pgina: 25
Delphi 5

Celta Informtica - F: (11) 4331-1586
Compile o projeto utilizando o menu Project >> Compile Primeiro, ge-
rando um arquivo executvel contendo as ltimas alteraes realizadas
sem executar o projeto. Agora, voc tem um programa que pode ser
executado em qualquer microcomputador que possua o sistema
Windows, sem necessariamente ter o DELPHI ou de suas bibliotecas
instalados.
Verifique no Windows Explorer todos os arquivos que compem este
projeto.
Exerccio:
Adicione mais um boto ao formulrio que altera a cor e o estilo da fonte
do lblMensagem. Digitando o seguinte cdigo:
procedure TfrmInicio.btnAlterarClick(Sender: TObject);
begin
lblMensagem.Font.Color:=clRed;
lblMensagem.Font.Style:=[fsBold];
end;
O valor das contantes de cor e estilo so facilmente encontradas na Object
Inspector, basta selecionar a propriedade e verificar sua caixa de valo-
res. A constante para estilo aparece entre colchetes pois ela faz parte de
uma lista com seus prprios valores, True e False para cada estilo, de-
vendo estar entre colchetes os estilos assumidos como True. Como por
exemplo: lblMensagem.Font.Style:=[fsBold, fsItalic], para fonte em negrito e
itlico.
Pgina: 26
Delphi 5

Celta Informtica - F: (11) 4331-1586
EXEMPLO I- CALCULADORA
Para iniciar um novo projeto, escolha a opo New Application do menu
File.
Para inserir vrias vezes o mesmo objeto no formulrio, d um clique no
cone do objeto escolhido enquanto pressiona a tecla Shift, ele ficar
com a aparncia mostrada na figura abaixo.
Aps selecionar o controle Edit, como descrito anteriormente, insira trs
deles no formulrio dando cliques na rea de cliente, no se preocupan-
do com a esttica. Aps inserir todos os componentes, clique no cursor
bitmap em forma de seta na Paleta de Componentes para desativar o
cone selecionado.
O Delphi oferece um recurso para realizar rapidamente alinhamento en-
tre objetos, que ser utilizado para alinhar os Edit no formulrio.
Primeiro selecione os objetos a serem alinhados. Pressione a tecla
Shift enquanto dado um clique em cada um deles, ou arraste o pontei-
ro do mouse formando um retngulo de seleo, selecionando todos ao
mesmo tempo como mostra a figura a seguir.
Pgina: 27
Delphi 5

Celta Informtica - F: (11) 4331-1586
Depois disso, pressione o boto direito do mouse sobre um Edit, para
aparecer o pop-menu. Escolha Align..., aparecendo ento o dilogo
Alignment.
Escolha Space equally (igualmente espaado) para alinhamento hori-
zontal, e Tops (topo) para o alinhamento vertical.
Pgina: 28
Delphi 5

Celta Informtica - F: (11) 4331-1586
Aps o alinhamento o formulrio estar de acordo com a figura:
Insira os objetos restantes da maneira que preferir, posicionando-os de
acordo com a figura a seguir:
Pgina: 29
Delphi 5

Celta Informtica - F: (11) 4331-1586
Utilize o alinhamento Horizontal - Center in window para o Button2.
Altere as propriedades assinaladas dos Objetos conforme a figura a seguir:
Neste projeto, o usurio digitar um nmero em edtNum1, outro em
edtNum2, e quando ele der um clique no boto btnIgual, o resultado da
multiplicao aparecer em edtResult. O boto btnLimpar utilizado
para limpar as caixas de texto (edit).
O programa trabalha basicamente com dois eventos :
- Clique em btnIgual (=)
- Clique em btnLimpar (Limpar)
Para escrever o cdigo, inicie dando um duplo clique no btnIgual o que
faz o Code Editor aparecer com o cursor no procedimento btnIgualClick.
O editor de cdigo possui vrias ferramentas que auxiliam o programa-
dor durante a digitao do programa. Uma delas a Code Completion
(concluso de cdigo), que lista as propriedades, mtodos e eventos
apropriados classe em uso.
Enquanto estiver digitando o cdigo e aps digitar Valor1:=, pressione
Ctrl+Espao para exibir a Code Completion, procure a funo
StrToFloat (transforma uma string em nmero com ponto flutuante) em
seguida pressione Enter.
Pgina: 30
Delphi 5

Celta Informtica - F: (11) 4331-1586
Com um clique-direito na lista do Code Completion, ela pode ser orde-
nada por rea ou por ordem alfabtica.
Outra ferramenta o Code Parameters (parmetros de cdigo), que
mostra uma lista dos parmetros exigidos pela rotina ou funo. Esta
lista aparece logo aps a abertura de parntese.
Na figura anterior, a funo StrToFloat necessita de um parmetro do
tipo String (cadeia de caracteres), que no exemplo est na propriedade
Text do edtNum1.
Pgina: 31
Delphi 5

Celta Informtica - F: (11) 4331-1586
Digite o restante do cdigo como mostrado a seguir.
Abra o procedimento do evento OnClick do btnLimpar, digitando os co-
mandos a seguir:
Execute o projeto e para utiliz-lo, entre com um nmero em edtNum1,
outro em edtNum2 e d um clique em =, e o resultado da multiplicao
aparecer em edtResult.
Para mudar o campo ativo, utilizada a tecla Tab. A ordem de tabulao
corresponder ordem em que os controles foram colocados no formu-
lrio. Esta ordem determinada pela propriedade TabOrder dos contro-
les, caso o seu projeto no esteja, coloque-o na seguinte ordem:
Pgina: 32
Delphi 5

Celta Informtica - F: (11) 4331-1586
4 btnLimpar
3 btnIgual
2 edtResult
1 edtNum2
0 edtNum1
TabOrder Objeto
Para alterar esta propriedade, selecione o controle, e no Object Inspector
mude seu valor. Como o Delphi no aceita controles com TabOrder iguais,
talvez seja necessrio utilizar algum valor temporrio diferente da tabela.
possvel alterar a ordem de tabulao acessando o popup-menu. D
um clique-direito sobre qualquer componente escolhendo a opo
TabOrder ( ), abrindo o quadro de dilogo Edit Tab Order,
onde altera-se a ordem de todos os controles inseridos no formulrio.
Modifique a ordem selecionando o controle na lista e clique nas setas
para cima ou para baixo, de acordo com a figura a seguir:
Execute o projeto e observe as alteraes feitas na ordem de tabulao.
Pgina: 33
Delphi 5

Celta Informtica - F: (11) 4331-1586
Como o usurio pode alterar o valor de edtResult mesmo aps a multipli-
cao ter sido efetuada, necessrio definir as propriedades
TabStop:=False e ReadOnly:=True deste controle, para evitar este in-
conveniente.
Nas aplicaes para Windows, os botes de comando geralmente so
acionados com um clique, mas h aqueles que acionam com a tecla
Enter. No projeto da calculadora, o boto que acionar com Enter ser o
btnIgual, faa com que propriedade Default desse boto fique com o
valor True. Fazendo aparecer um contorno mais espesso no boto, dan-
do a indicao que se a tecla Enter for acionada, o evento OnClick ocor-
rer.
Pgina: 34
Delphi 5

Celta Informtica - F: (11) 4331-1586
PROPRIEDADES
BorderStyle
Retorna ou d um valor para o estilo de borda do objeto;
objeto.BorderStyle := [valor]
Existem 6 tipos de bordas:
1 - bsDialog O formulrio no possui os botes de
maximizar e nem de minimizar. No
redimensionvel.
2 - bsNone Nenhuma borda
Pgina: 35
Delphi 5

Celta Informtica - F: (11) 4331-1586
3 - bsSingle Fixa Simples, o formulrio s dimensionvel
atravs dos botes de minimizar e maximizar.
4 - bsSizeable Borda Redimensionvel
5 - bsSizeToolWin Semelhante bsToolWindow,
mas dimensionvel.
6 - bsToolWindow No mostra os botes de maximizar e
de minimizar. No redimensionvel,
mostrando somente o boto de fechar e
a barra de ttulo com a fonte reduzida.
E o formulrio no aparece na barra de
tarefa do Windows 95.
As Bordas Fixas no podem ser dimensionadas em tempo de execuo.
Ou seja, o usurio no poder mudar o tamanho do formulrio.
Default
Retorna ou d o valor de um boto de comando em um formulrio;
object.Default :[= booleano]
Default= False
True
Pgina: 36
Delphi 5

Celta Informtica - F: (11) 4331-1586
Quando esta propriedade de um TButton estiver como True o Delphi cha-
mar o evento OnClick sempre que a tecla Enter for pressionada.
Ex: Desejo que o boto btnMultiplicar seja o default:
btnMultiplicar.Default := True;
Desejo saber se o boto cmdMultiplicar default ou no, e o resultado
ser armazenado na varivel booleana Estado:
Estado := btnMultiplicar.Default;
Tabstop
Retorna ou d o valor ao objeto indicado;
objeto.TabStop: [= booleano]
TabStop = False
True
Ex: Para alterar a ordem de tabulao dos botes em tempo de execu-
o basta incluir estas linhas em algum procedimento:
btnMultiplicar.TabStop := 0;
btnDividir.TabStop := 1;
btnSomar.TabStop := 2;
btnSubtrair.TabStop := 3;
Para saber qual a ordem de tabulao do objeto edtNum1 e
armazen-la em uma varivel que conter a ordem de tabulao do
objeto:
Ordem_Tab:= edtNum1.TabStop;
No ambiente Windows comum mudarmos o foco entre os controles
com a tecla Tab. Quando no quisermos que o usurio acesse determi-
nado controle usando Tab, definimos a propriedade TabStop desse con-
trole como False.
Pgina: 37
Delphi 5

Celta Informtica - F: (11) 4331-1586
Name
Esta propriedade contm o nome que dado ao objeto como referncia
para o cdigo e definio de propriedades. Em tempo de execuo, retorna
o nome usado por um controle;
objeto.Name
Ex: Desejo exibir o Name do formulrio em um edit:
editNome_Form.Text := frmCalculadora.Name;
Caption
objeto.Caption := [string]
Determina o texto mostrado na barra de ttulo do formulrio, o texto den-
tro de um controle ou um ttulo na barra de menu.
Ex: Para alterar a Caption do boto Limpar aps seu uso, basta inserir
esta linha no procedimento cmdLimpar_Click:
btnLimpar.Caption := Iniciar
Text
Retorna o texto que est escrito na rea de edio de um quadro de texto
(TextBox), ou escreve um string nesta rea;
objeto.Text := [string];
Pgina: 38
Delphi 5

Celta Informtica - F: (11) 4331-1586
MTODO
Setfocus
D o foco ao objeto indicado;
objeto.SetFocus
Fixa o foco a um formulrio ou controle. Somente pode ser usado para
um formulrio ou controle visvel.
VARIVEIS NO DELPHI
Varivel um local nomeado da memria, onde so guardados dados
que podem ser mudados em tempo de execuo. O nome de uma vari-
vel pode ter at 255 caracteres, tem que comear com uma letra, no
pode conter caracteres brasileiros e ser nica. O nome pode conter
nmeros e sublinhados e no pode ser uma palavra reservada.
Existem vrios tipos de variveis, sendo cada tipo especfico para o tipo
de dado a ser armazenado.
-2
63+1
a 2
63-1
8 Comp
3,4.10
-4932
a 1,1.10
4932
10 Extended
5.10
-324
a 1,7.10
308
8 Double
1,5.10
-45
a 3,4.10
38
4 Single
2,9.10
-39
a 1,7.10
38
6 Real
Tipos
Reais
Double - word - sized Booleano 4 LongBoll
Word - sized Booleano 2 WordBoll
Byte - sized Booleano 1 ByteBool
1 byte booleano 1 Boolean
Tipos
Booleanos
0 a 65535 2 Word
0 a 255 1 Byte
-2147483648 a 2147483647 4 LongInt
-32768 a 32767 2 Integer
-128 a 127 1 ShortInt
Faixa Nmero de Bytes Tipos
Inteiros
Pgina: 39
Delphi 5

Celta Informtica - F: (11) 4331-1586
Formas de Declarar uma Varivel
As variveis so declaradas usando-se a palavra reservada var, o nome
da varivel, dois pontos e o tipo de dado a ser armazenado nesta varivel.
var
Valor1: Real;
Elas podem ser declaradas em trs locais diferentes, conforme a sua
abrangncia:
1. Varivel Local: ela ser utilizada somente pelo procedimento onde
est declarada, terminado o procedimento ela desaparecer da me-
mria. declarada logo aps o cabealho do procedimento.
2. Varivel a nvel de unidade: a varivel ser utilizada por todos os
procedimentos e funes da unidade. declarada logo aps a pala-
vra reservada implementation.
3. Varivel a nvel de projeto: a varivel que poder ser utilizada por
toda a aplicao, ou seja, poder ser utilizada por outras unidades.
declarada na seo interface da unidade.
FORMATAO DE NMEROS
A funo FloatToStr, transforma um nmero em texto, mas no padroni-
za sua apresentao. Caso necessite formatar a exibio de um nme-
ro, use a seguinte funo:
FormatFloat(formato , expresso), onde:
- formato = a maneira como dever ser mostrada a expresso.
- expresso = expresso numrica a ser formatada.
Pgina: 40
Delphi 5

Celta Informtica - F: (11) 4331-1586
Formatando nmeros:
5,00E-1 -5,00E+00 5,00E+00 0,00E+00
50% -500% 500% 0%
$0,50 ($5,00) $5,00 $#.##0,00;($#.##0,00)
$1 ($5) $5 $#.##0;($#.##0)
0,5 -5,0 5,0 #.##0,0
1 -5 5 #.##0
0,50 -5,00 5,00 0,00
1 -5 5 0
5 decimal 5 negativo 5 positivo Formato
Em formato o nmero 0 ser mostrado ou trocado pelo caractere em
sua posio, j o caracter nrus (#) no ser mostrado. Pode-se inserir
smbolos na funo Format, como no exemplo: $ , % ou E.
Formatando Data e Hora:
Para formatar data e hora use a funo FormatDateTime:
FormatDateTime (formato , data);
03/07/98 9:30 d/m/yy h:mm
8:50:20 a h:mm:ss a/p
08:50 AM hh:mm AM/PM
02-dom dd-ddd
18-Ago-1998 dd-mm-yyyy
10/5/98 d/m/yy
Exibido Formato
Pgina: 41
Delphi 5

Celta Informtica - F: (11) 4331-1586
MODIFICANDO A CALCULADORA
No formulrio da calculadora, selecione o boto btnIgual e pressione a
tecla Delete. O boto de igual desaparecer do formulrio, mas o seu
cdigo continuar no editor de cdigos. Abra o editor de cdigos, e ob-
serve que a procedure TfrmCalculadora.btnIgualClick continua no mes-
mo lugar. Exclua tambm o label com X.
Modifique o formulrio frmCalculadora como o exemplo a seguir, inserin-
do e dimensionando um novo boto:
Selecione o novo boto, copie ( ) e cole ( ) mais
trs botes semelhantes. Depois posicione-os de acordo com a figura:
Pgina: 42
Delphi 5

Celta Informtica - F: (11) 4331-1586
Algumas propriedades podem ser alteradas ao mesmo tempo para um
grupo de objetos selecionados. Como exemplo, selecione todos os bo-
tes criados anteriormente e altere as propriedades Font.Size e Font.Style
de todos ao mesmo tempo.
Como o smbolo de diviso encontrado na fonte Symbol, necessrio
alterar o propriedade Font.Name do boto e depois, abrir o Mapa de
caracteres do Windows e procurar pelo smbolo da diviso na fonte
Symbol, copiando e colando para a propriedade Caption deste boto.
Provavelmente o caractere que aparecer na caixa de propriedade no
ser o mesmo do boto, pois a fonte da Object Inspector no Symbol,
portanto no se preocupe com este problema. Faa o mesmo processo
para o boto de raiz.
O procedimento para o antigo boto btnIgual ser agora aproveitado no
boto btnMultiplicacao. Selecione o boto btnMultiplicacao e na Object
Inspector abra a pgina Events escolhendo a opo btnIgualClick para o
evento OnClick. Fazendo com que este procedimento que antes era de
um boto agora possa ser disparado por outro.
Pgina: 43
Delphi 5

Celta Informtica - F: (11) 4331-1586
As duas variveis Valor1 e Valor2 que antes pertenciam a apenas um
procedimento, agora devero ser utilizadas pelos procedimentos das
outras operaes. Para que isso ocorra, retire-as do procedimento
TfrmCalculadora.btnIgualClick e declare-as na seo Implementation
da unidade. Ser usada tambm a funo FormatFloat para formatar a
apresentao do resultado.
Pgina: 44
Delphi 5

Celta Informtica - F: (11) 4331-1586
Substitua o tipo de operao em btnIgualClick, e nos demais botes,
utilizando as ferramentas Copiar e Colar.
Os operandos das quatro operaes so:
/
Diviso
*
Multiplicao
-
Subtrao
+
Soma
A funo exponenciao est programada em uma unidade do Delphi,
que possui diversas funes matemticas complexas, chamada Math.
Uma delas a funo Power(base, expoente) que ser utilizada para
efetuar a operao de raiz disparada pelo boto btnRaiz.
Primeiro necessrio incluir esta unidade na seo Uses da Unit.
Pgina: 45
Delphi 5

Celta Informtica - F: (11) 4331-1586
Depois digite o cdigo associado ao evento OnCLick do boto btnRaiz.
Todo bom programador coloca em seu cdigo linhas de comentrio para
que ele ou outra pessoa possam guiar-se no cdigo durante uma manu-
teno, pois com o tempo, o caminho para determinado resultado pode
ser esquecido. No Delphi as linhas de comentrio so precedidas por
duas barras ( // ), ou o texto do comentrio estar entre chaves ( { ... } ).
Salve e execute o programa, testando os vrios formatos de apresenta-
o dos nmeros, com alteraes nos parmetros de apresentao da
funo FormatFloat.
Pgina: 46
Delphi 5

Celta Informtica - F: (11) 4331-1586
DEPURAO
Quando construmos uma aplicao, possvel errarmos na sintaxe du-
rante a digitao, fornecendo parmetros errados ou trocando nomes de
variveis, ou ento, criarmos erros lgicos que so detectados como
sadas incorretas do programa. Para resolver estes problemas o Delphi
possui vrias ferramentas que controlam a execuo do programa for-
necendo uma execuo passo-a-passo e exibindo valores de parmetros.
Quando o Delphi compila o programa
(Ctrl+F9) e encontra algum erro de sin-
taxe ele mostra a linha onde est o erro,
dando uma dica do problema, na parte
inferior da janela do Code Editor.
Praticaremos a depurao de programas construindo um aplicativo que
nos d como sada uma lista com os seguintes nmeros: 18, 21, 24, 27
e 30. Construa um formulrio com um boto e um quadro de lista -
ListBox ( ), sem alterar nenhuma propriedade dos componentes:
Entre com o seguinte cdigo, exatamente como est, para o boto:
Pgina: 47
Delphi 5

Celta Informtica - F: (11) 4331-1586
Compile o programa pressionando Ctrl+F9, e observe os erros de sinta-
xe encontrados pelo Delphi. So erros que indicam a no declarao ou
existncia da varivel T e do objeto Lista. A linha destacada em verme-
lho indica aonde o compilador parou.
Declare a varivel T como do tipo inteiro semelhante i e altere a propri-
edade Name da ListBox para Lista, e compile novamente.
Pgina: 48
Delphi 5

Celta Informtica - F: (11) 4331-1586
Desta vez foi apresentado um erro onde o tipo de dado requerido um
String mas o fornecido pela varivel T Integer. Para corrigir, transfor-
me o contedo da varivel T em String utilizando a funo IntToStr() na
linha onde ocorreu o erro.
Lista.Items.Add (IntToStr(T));
Aps esta correo, o compilador no detectar mais nenhum erro de
sintaxe. Portanto, execute este exemplo pressionando F9.
Observe que a sada do programa no corresponde desejada, consta-
tando a existncia de erros lgicos neste projeto.
A funo digitada est incorreta pois ela no varia em funo do valor de
i, altere ento a seguinte linha:
T:= 3*5+I;
Mesmo aps a incluso da varivel I, a sada do programa ainda no
est como desejada.
Pgina: 49
Delphi 5

Celta Informtica - F: (11) 4331-1586
Para continuar a resoluo deste problema, acompanhe o programa pas-
so-a-passo verificando o valor das variveis em cada momento. Primei-
ro insira um ponto de parada (Breakpoint), onde o programa ser exe-
cutado at este ponto e depois pra.
Para inserir um Breakpoint, d um clique na barra do lado esquerdo da
linha que deseja ser a parada. Quando desejar remover o Breakpoint
basta dar um novo clique na mesma posio.
Quando for dado um clique no boto, o programa comear a executar e
ir parar na linha do Breakpoint exibindo o Code Explorer. Para continuar
a executar o programa passo-a-passo pressione F7, at a linha que est
indicada na figura abaixo como linha corrente.
Pgina: 50
Delphi 5

Celta Informtica - F: (11) 4331-1586
Verifique o valor atual de uma varivel posicionando o ponteiro sobre ela,
e aguardando uns instantes para o Delphi mostrar seu valor.
Avance o programa aos passos at a finalizao, acompanhando a vari-
ao dos valores.
A sada somente estar correta quando 5+I estiver entre parnteses -
(5+I), executando primeiro a soma e depois a multiplicao.
Digite os parnteses e execute o programa, que agora apresentar a
sada correta.
Pgina: 51
Delphi 5

Celta Informtica - F: (11) 4331-1586
EXEMPLO II - JOGO DA VELHA
Este prximo exemplo de projeto o conhecido Jogo da Velha, onde o
usurio ir jogar contra o computador que no pensa suas jogadas,
pois ele trabalha com jogadas aleatrias, e ao final da partida ser mos-
trado um quadro de mensagem informando quem ganhou a partida.
Insira um boto de comando no formulrio dimensionando-o como um
quadrado, e depois, copie (Ctrl+C) e cole (Ctrl+V) mais oito botes iguais.
Formando um total de nove botes.
Estes botes de comando so nomeados automaticamente de Button1
a Button9, de cima para baixo. Arraste-os de forma que fiquem como a
figura a seguir.
Como programa do jogo ir modificar a propriedade Caption desses
botes, necessrio iniciar o jogo com todos botes em branco. Primei-
ro selecione todos os botes ao mesmo tempo, para isso, posicione o
ponteiro do mouse em um canto do formulrio e depois arraste-o at que
o retngulo pontilhado envolva todos os botes.
Pgina: 52
Delphi 5

Celta Informtica - F: (11) 4331-1586
V at a janela Object Inspector e deixe a propriedade Caption em
branco. Qualquer propriedade que for alterada enquanto a seleo esti-
ver ativa, servir para todos os botes. Altere tambm as propriedades
Name, Caption e BorderStyle do formulrio.
UNIDADE (UNIT)
Uma Unit possui as seguintes sees: Cabealho
Interface
Implementao
O cabealho identifica o nome da Unit. Ele bem compacto, contendo a
palavra reservada Unit e o nome da unidade, que no precisa ser o mes-
mo nome do arquivo .PAS, que a contm.
Na seo Interface declaramos as variveis e cdigos que podem ser
usados por cdigos de outras unidades e lista todas as outras Units que
ela precisa ver. Se esta Unit precisar utilizar algum recurso de outra
Unit, deveremos referenciar esta outra Unit na clusula uses da seo
de interface.
Na seo Implementation so declarados os cdigos e variveis perten-
centes exclusivamente unidade.
UNIDADE <nome da unidade>;
INTERFACE
Seo de interface
IMPLEMENTATION
Seo de implementao
FIM.
Pgina: 53
Delphi 5

Celta Informtica - F: (11) 4331-1586
Na seo de Interface da unidade que est sendo construda, est sen-
do definido o tipo TfrmJogo (o formulrio) pertencente classe TForm, a
seguir, so listados todos os controles, seus tipos, e procedimentos per-
tencentes ao formulrio.
A figura abaixo mostra a listagem da Unit do projeto:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs;
type
TfrmJogo = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
Button9: TButton;
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmJogo: TfrmJogo;
implementation
{$R *.DFM}
end.
Pgina: 54
Delphi 5

Celta Informtica - F: (11) 4331-1586
O projeto Jogo da Velha, utiliza dois procedimentos que no esto asso-
ciados a nenhum controle, so eles JogoNovo e Verificar. Estes proce-
dimentos devem primeiro ser primeiro declarados para depois serem
implementados, declare os procedimentos JogoNovo e Verificar na defi-
nio de tipo do formulrio como mostra a listagem abaixo. Logo mais,
faremos a implementao destes procedimentos que nada mais do
que a construo do seu cdigo.
Declare tambm a varivel Botao na seo Implementation. Esta vari-
vel uma matriz unidimensional com nove elementos do tipo TButton,
ou seja, cada varivel dessas possui as mesmas propriedades de um
boto de comando. Esta matriz poderia ser bidimensional contendo n-
meros inteiros (array [1..3, 1..3] of Integer) ou strings.
Pgina: 55
Delphi 5

Celta Informtica - F: (11) 4331-1586
Quando o projeto iniciar, o formulrio ser carregado na memria e neste
momento ocorre o OnCreate, onde ser escrito um procedimento de
incio do jogo. D um duplo clique no formulrio para ter acesso ao editor
de cdigo, ou selecione o formulrio, v at o Object Inspector esco-
lhendo a pginas Events, dando um duplo clique em OnCreate.
Entre com o seguinte cdigo:
Pgina: 56
Delphi 5

Celta Informtica - F: (11) 4331-1586
No procedimento acima, a procedure Randomize inicializa o gerador de
nmeros aleatrios utilizando como base o relgio do sistema. Nas pr-
ximas linhas so atribudos valores varivel Botao[n], associando-a aos
botes do formulrio. E logo a seguir chamada a procedure JogoNovo.
Salve a Unit como JogoVelhaUnt.pas e o projeto como JogoVelha.dpr.
Agora implemente o procedimento JogoNovo na seo Implementation,
como segue. Declare tambm a varivel NumeroVezes que poder ser
utilizada por todos os procedimentos desta Unidade.
Uma declarao de procedure tem a seguinte forma:
procedure Nome (Lista de parmetros); Diretivas;
Declaraes locais
begin
Instrues
end;
Pgina: 57
Delphi 5

Celta Informtica - F: (11) 4331-1586
A Lista de parmetros, Diretivas e Declaraes locais so opcionais.
Uma Lista de parmetros uma seqncia de parmetros que devero
ser enviados pela linha de instruo que chamou a procedure. Cada
parmetro possui um nome seguido pela identificao de tipo, eles po-
dem ser precedidos pelas palavras reservadas var ou const indicando
varivel ou constante respectivamente.
Exemplos:
(X, Y: Real)
(var S: string; X: Integer)
(HWnd: Integer; Text, Caption: PChar; Flags: Integer)
(const P; I: Integer)
As Diretivas informam procedure como ela tratar os parmetros e
como ser a construo deste procedimento em relao a outros anteri-
ores.
No cabealho, observamos que o nome completo da procedure com-
posto do nome do objeto que contm a procedure (Form) e o nome de
chamada da mesma procedure.
O procedimento JogoNovo, inicia um novo jogo apagando todas as le-
gendas dos botes e fazendo uma nova jogada aleatoriamente.
A varivel I do tipo inteiro (Integer) de uso exclusivo deste procedimen-
to. Findo o procedimento, ela deixar de existir.
Para apagar as legendas usada a instruo for...to...do, que ir em
loop apagando as legendas. Aqui a varivel Botao[ I ] identifica os botes
do formulrio usando como ndice a varivel I do loop for...to...do. A
instruo for...to...do, pode ser tambm for...downto, para decrementar
o valor da varivel de controle (I).
No exemplo, existe somente uma linha de comando aps o do, se fos-
sem necessrias mais declaraes, seria necessrio usar begin...end;
Pgina: 58
Delphi 5

Celta Informtica - F: (11) 4331-1586
como uma maneira de agrupar estas declaraes, indicando que todas
fazem parte do loop for...to...do, como mostra o exemplo abaixo :
for
i:=1
to
3
do
begin
Botao[i].Caption:='';
Botao[i+1].Caption:='';
Botao[i+2].Caption:='';
end
;
Na linha M:= Trunc (Random *10), atribudo um valor inteiro varivel
M entre 1 e 9.
A procedure Random gera um nmero do tipo Real X entre 0 e 1 (0<=X<1),
que multiplicado por 10 e aproveitada sua parte inteira, que apesar de
ser um nmero inteiro do tipo Real, no podendo ser utilizado para
indicar um boto.
Para converter um nmero real em inteiro, utiliza-se as funes Trunc
ou Round. Trunc, retorna a parte inteira de um nmero, enquanto Round
arredonda um nmero real.
-3 -2 -2,7
2 2 2,5
-1 -1 -1,4
2 1 1,5
1 1 1,4
Round Trunc Real
No cdigo utilizada a funo Trunc para retornar o ndice do boto que
ter sua legenda alterada.
O prximo passo fazer o cdigo dos botes, d um duplo clique no
Button1 para a janela de cdigo aparecer, e copie o exemplo. Faa o
mesmo para os demais botes modificando apenas o nome daquele que
ter sua legenda alterada.
Pgina: 59
Delphi 5

Celta Informtica - F: (11) 4331-1586
O evento OnClick nos botes que dar partida ao programa. O proce-
dimento associado a este evento, incrementar o nmero de jogadas
(NumeroVezes), mudar a legenda do boto e chamar o procedimento
para verificar quem ganhou e se o jogo terminou.
Construa o procedimento Verificar na seo de implementao da uni-
dade, como segue:
procedure TfrmJogo.Verificar ();
label 1,2;
var
I: Integer;
begin
if (Button1.Caption=X) and (Button2.Caption=X)
and (Button3.Caption=X) then goto 1;
if (Button4.Caption=X) and (Button5.Caption=X)
and (Button6.Caption=X) then goto 1;
if (Button7.Caption=X) and (Button8.Caption=X)
and (Button9.Caption=X) then goto 1;
if (Button1.Caption=X) and (Button4.Caption=X)
and (Button7.Caption=X) then goto 1;
if (Button2.Caption=X) and (Button5.Caption=X)
and (Button8.Caption=X) then goto 1;
if (Button3.Caption=X) and (Button6.Caption=X)
and (Button9.Caption=X) then goto 1;
if (Button1.Caption=X) and (Button5.Caption=X)
and (Button9.Caption=X) then goto 1;
Pgina: 60
Delphi 5

Celta Informtica - F: (11) 4331-1586
if (Button3.Caption=X) and (Button5.Caption=X)
and (Button7.Caption=X) then goto 1;
repeat I:=Trunc (Random * 10) until
Botao[I].Caption= ;
Botao[I].Caption:=O;
if (Button1.Caption=O) and (Button2.Caption=O)
and (Button3.Caption=O) then goto 2;
if (Button4.Caption=O) and (Button5.Caption=O)
and (Button6.Caption=O) then goto 2;
if (Button7.Caption=O) and (Button8.Caption=O)
and (Button9.Caption=O) then goto 2;
if (Button1.Caption=O) and (Button4.Caption=O)
and (Button7.Caption=O) then goto 2;
if (Button2.Caption=O) and (Button5.Caption=O)
and (Button8.Caption=O) then goto 2;
if (Button3.Caption=O) and (Button6.Caption=O)
and (Button9.Caption=O) then goto 2;
if (Button1.Caption=O) and (Button5.Caption=O)
and (Button9.Caption=O) then goto 2;
if (Button3.Caption=O) and (Button5.Caption=O)
and (Button7.Caption=O) then goto 2;
if NumeroVezes= 4 then
begin
ShowMessage (Partida Empatada);
JogoNovo;
exit;
end;
exit;
1:
begin
ShowMessage (Voc Ganhou);
JogoNovo;
exit;
end;
2:
begin
ShowMessage (Eu Ganhei);
JogoNovo;
exit;
end;
end;
Pgina: 61
Delphi 5

Celta Informtica - F: (11) 4331-1586
Logo aps o cabealho, temos as declaraes locais. Usamos a decla-
rao label para definir os locais de desvio da instruo goto. E tambm
declaramos a varivel I como do tipo integer.
A instruo repeat declarao until expresso; repete a declarao en-
quanto a expresso for verdadeira. No exemplo, o programa selecionar
um boto aleatoriamente, at que seja encontrado um boto vazio -
Caption:= , preenchendo-o com O, indicando a jogada do computa-
dor.
A procedure ShowMessage, mostra um quadro de mensagem com o
boto de Ok. O programa fica parado at que o usurio d um clique em
Ok, retornando linha seguinte no procedimento.
O Windows possui quadros padronizados de mensagem que servem
para emitir avisos e recolher opes de tratamento dessas mensagens.
Podemos incrementar o programa do Jogo da Velha criando um quadro
de mensagem com vrios botes e que retorne uma resposta do usu-
rio, indicando qual boto foi escolhido. Para isso utilizamos a funo
MessageBox.
Esta funo pertence biblioteca do Windows (API). O Delphi a relacio-
na ao objeto do tipo TApplication.
MessageBox (Mensagem ,Ttulo, Tipo);
Onde:
mensagem - expresso mostrada dentro do quadro de dilogo.
tipo - somatria de nmeros, conforme o que queremos
que seja exibido no Quadro de Mensagem, seguin-
do a tabela Tipo.
ttulo - ttulo do Quadro de Mensagem (barra de t-
tulo).
Mude o cdigo do procedimento Verificar como mostrado abaixo, decla-
rando a varivel Resposta como Inteiro - Resposta: Integer.
Pgina: 62
Delphi 5

Celta Informtica - F: (11) 4331-1586
1:
begin
Resposta:=Application.MessageBox
(Voc ganhou, quer Jogar
Novamente?,Vencedor,36);
if Resposta = 7 then Close;
JogoNovo;
exit;
end;
2:
begin
Resposta:=Application.MessageBox
(Eu ganhei, quer Jogar
Novamente?,Vencedor,36);
if Resposta = 7 then Close;
JogoNovo;
exit;
end;
O argumento Tipo possui os seguintes valores para a funo
MessageBox:
Terceiro boto com foco 512
Segundo boto com foco 256
Primeiro boto com foco 0
cone de Informao 64
Sinal de Aviso 48
Sinal de Pesquisa 32
Sinal de Stop 16
Botes Repetir e Cancelar 5
Botes Sim, No 4
Botes Sim, No, Cancelar 3
Botes Anular, Repetir e Ignorar 2
Botes de OK e Cancelar 1
Somente o boto de OK 0
Significado Valor
Teste o projeto alterando o valor de tipo para Messagebox, faa a sua
soma escolhendo um item de cada seo.
Pgina: 63
Delphi 5

Celta Informtica - F: (11) 4331-1586
A varivel Resposta, conter a resposta do usurio que segue o padro
da tabela abaixo.
Boto No foi pressionado 7
Boto Sim foi pressionado 6
Boto Ignorar foi pressionado 5
Boto Repetir foi pressionado 4
Boto Anular foi pressionado 3
Boto Cancelar foi pressionado 2
Boto OK foi pressionado 1
Significado Valor
O programa verificar se o boto No foi pressionado, e se foi, fechar o
formulrio principal, encerrando sua execuo.
No exerccio, todos os botes realizam basicamente a mesma operao
quando respondem ao evento OnClick. Vamos alterar o projeto para que
exista somente uma procedure que trate o evento OnClick para todos os
botes.
Primeiro apague as linhas entre begin...end dos procedimentos relati-
vos aos botes exceto o Button1Click. Compile o projeto (Ctrl+F9) para
que o Delphi exclua estes procedimentos do editor de cdigo - qualquer
procedimento vazio ser excludo.
D um clique-direito no Code Explorer e no menu escolha Rename,
alterando o nome do procedimento Button1Click para ButtonClick.
Pgina: 64
Delphi 5

Celta Informtica - F: (11) 4331-1586
Aps a compilao, os procedimentos associados aos demais botes
sero excludos do editor de cdigos e como conseqncia, estes bo-
tes no respondero mais ao evento OnClick. Acesse a pgina Events
do Object Inspector, associando a procedure ButtonClick como res-
posta ao evento Onclick para todos os botes. Desta forma todos eles
executaro o mesmo procedimento a partir do evento OnClick.
Por ltimo altere a procedure ButtonClick para que ela reconhea o boto
que recebeu o evento OnClick, alterando sua Caption.
procedure TfrmJogo.ButtonClick(Sender: TObject);
begin
NumeroVezes:=NumeroVezes + 1;
(Sender as TButton).Caption:= X;
Verificar;
end;
O parmetro Sender indica qual objeto recebeu o evento acionador da
procedure, podendo ser utilizado nos casos em que vrios objetos exe-
cutam a mesma funo.
Pgina: 65
Delphi 5

Celta Informtica - F: (11) 4331-1586
EXEMPLO III - BLOCO DE NOTAS
O prximo exemplo de projeto ser um editor de texto simples do tipo
caractere. Com ele ser possvel alterar o tipo e tamanho da fonte utili-
zada em todo o texto, recortar, colar e copiar partes selecionadas e tam-
bm salvar e abrir o texto utilizando as caixas de dilogo padro fornecidas
pelo Delphi.
Monte o formulrio conforme o exemplo:
Defina a propriedade Align do componente Memo como alCliente. Esta
propriedade faz com que o Memo ocupe toda a rea do cliente do formu-
lrio, mesmo que este seja redimensionado.
O Delphi possui componentes visveis e no visveis. Os componentes
visveis so aqueles que durante a execuo do programa so vistos
pelo usurio. At aqui todos os componentes utilizados nos exemplos
so visveis, como TEdit, TButton, TForm e outros.
Os componentes no visveis no aparecem na janela do usurio em
tempo de execuo, estando visveis apenas em tempo de projeto. So
eles, Timer, menus, caixas de dilogo comuns e controles de acesso a
dados.
Pgina: 66
Delphi 5

Celta Informtica - F: (11) 4331-1586
O exemplo de Bloco de Notas usar um componente MainMenu e qua-
tro componentes da paleta Dialogs - OpenDialog, SaveDialog,
FontDialog e ColorDialog.
Para comear a editar o menu, d um duplo-clique no controle MainMenu
que est no formulrio, abrindo o dilogo Menu Designer.
nesta janela que o menu do programa ser construdo. Observe que o
primeiro ttulo j est selecionado.
V at o Object Inspector e mude a propriedade Caption para &Arqui-
vo e pressione Enter - para acesso via teclado, a letra de atalho deve ser
precedida pelo & comercial. Este procedimento, cria o menu Arquivo e
move a barra de destaque para o lado direito, d um clique logo abaixo da
opo Arquivo para inserir um item neste menu. Repare que o Delphi
coloca um nome para cada menu e opo de menu baseado na proprie-
dade Caption, no caso do menu Arquivo, Name:=Arquivo.
Porm til seguir uma certa norma que identifica o objeto a partir de
seu nome. Esta norma consiste na utilizao de trs letras como prefixo
do nome de cada objeto. Como exemplos temos:
Boto btn
Edit edt
Item de menu itm
Menu mnu
Label
lbl
Form
frm
Pgina: 67
Delphi 5

Celta Informtica - F: (11) 4331-1586
Monte as demais opes do menu seguindo a figura do Menu Designer
mostrada abaixo. Para criar um separador no menu, digite apenas um
sinal de menos ( - ) na propriedade Caption do item abaixo de Salvar.
Terminado o menu Arquivo, inicie o menu Editar como segue abaixo.
Definindo as teclas de atalho na propriedade ShortCut para cada item
do menu.
Pgina: 68
Delphi 5

Celta Informtica - F: (11) 4331-1586
Quando chegar ao item Formatar Fonte, escolha a opo Create
Submenu do PopupMenu, para criar um submenu deste item.
O sub-menu do item Formatar Fonte, dever estar igual a figura mos-
trada abaixo. Como o Delphi no reconhece caracteres brasileiros, o
nome dado ao item Itlico ser Itlico, suprimindo do Name o caractere
( Name:= Itlico).
Pgina: 69
Delphi 5

Celta Informtica - F: (11) 4331-1586
Feche o Menu Designer, voltando ao formulrio principal. Adicione as
caixas de dilogo que iro formatar a fonte exibida no componente Memo,
e aquelas que iro abrir e salvar arquivos. Os componentes destas cai-
xas esto na paleta Dialogs do Delphi.
Acabamos de desenhar o nosso formulrio, colocando nele todos os seus
componentes, os visveis e os no visveis. Mesmo os componentes
no visveis estando sobre o componente Memo, no atrapalharo a apre-
sentao do texto.
Salve seu trabalho para dar incio construo do cdigo.
As caixas de dilogo so mostradas atravs do mtodo Execute. Este
mtodo responde True se o usurio selecionou Ok, indicando que o pro-
grama dever responder s alteraes da caixa de dilogo exibida. Se o
usurio no quiser efetuar as mudanas, ser retornado False.
D um clique no item Novo do menu, para chamar o procedimento as-
sociado. Este procedimento ter a funo de limpar a caixa Memo1 e
desabilitar as opes de edio do texto. Estas opes estaro
desabilitadas at que se tenha um texto para Recortar, Copiar ou Colar.
Siga o cdigo mostrado a seguir:
Pgina: 70
Delphi 5

Celta Informtica - F: (11) 4331-1586
procedure
TfrmBlocoNotas.itmNovoClick(Sender:
TObject);
begin
memTexto.Clear;
itmRecortar.Enabled:=False;
itmCopiar.Enabled:=False;
itmColar.Enabled:=False;
end;
A opo Abrir trabalhar com a caixa de dilogo OpenDialog, verificando
o valor retornado por Execute e carregando o contedo do arquivo sele-
cionado, na propriedade Lines do objeto memTexto.
procedure
TfrmBlocoNotas.itmAbrirClick(Sender:
TObject);
begin
if OpenDialog.Execute then
memTexto.Lines.LoadFromFile(OpenDialog.Filename);
end;
Digite o cdigo para as outras caixas de dilogo. Elas trabalham alterando
as propriedades do Memo aps as mudanas realizadas pelo usurio.
Pgina: 71
Delphi 5

Celta Informtica - F: (11) 4331-1586
procedure
TfrmBlocoNotas.itmSalvarClick(Sender:
TObject);
begin
if SaveDialog.Execute then
memTexto.Lines.SaveToFile(SaveDialog.Filename);
end;
procedure
TfrmBlocoNotas.itmFonteClick(Sender:
TObject);
begin
FontDialog.Font:=memTexto.Font;
{inicializa a FontDialog com a font de
Memo}
if FontDialog.Execute then
memTexto.Font:=FontDialog.Font;
end;
A linha entre chaves indica um comentrio, no sendo tra-
tada pelo compilador do Delphi.
procedure
TfrmBlocoNotas.itmCorClick(Sender:
TObject);
begin
ColorDialog.Color:=memTexto.Color;
if ColorDialog.Execute then
memTexto.Font.Color:=ColorDialog.Color;
end;
Como o memo est ocupando toda rea do
cliente no formulrio, fica praticamente impos-
svel selecionar o formulrio para alterar suas
propriedades. Para alterar alguma proprieda-
de ou abrir algum procedimento de evento
dele, selecione o formulrio na caixa de obje-
to do Object Inspector.
Pgina: 72
Delphi 5

Celta Informtica - F: (11) 4331-1586
Quando comear a execuo do programa, o evento OnCreat ocorre
para o formulrio, e o procedimento deste evento ir apagar o contedo
do Memo e desabilitar as opes do menu Editar.
procedure TfrmBlocoNotas.FormCreate(Sender:
TObject);
begin
memTexto.Clear;
itmRecortar.Enabled:=False;
itmCopiar.Enabled:=False;
itmColar.Enabled:=False;
end;
As opes Recortar e Copiar do menu Editar, estaro ativas assim que o
Memo contiver algum texto. Cada vez que ocorre uma mudana no Memo,
o evento OnChange gerado.
procedure
TfrmBlocoNotas.memTextoChange(Sender:
TObject);
begin
itmRecortar.Enabled:=True;
itmCopiar.Enabled:=True;
end;
Os recursos de Recortar, Colar e Copiar utilizam o objeto TClipBoard.
Com ele ns usamos a rea de transferncia do Windows e podemos
trocar informao entre programas. O objeto Memo possui mtodos pr-
prios para trabalhar com o Clipboard, eles esto nos procedimentos para
os itens do menu Editar mostrados abaixo.
procedure
TfrmBlocoNotas.itmRecortarClick(Sender:
TObject);
begin
memTexto.CutToClipboard;
itmColar.Enabled:=True; {habilita o
item Colar}
end;
Pgina: 73
Delphi 5

Celta Informtica - F: (11) 4331-1586
procedure
TfrmBlocoNotas.itmCopiarClick(Sender:
TObject);
begin
memTexto.CopyToClipboard;
itmColar.Enabled:=True;
end;
procedure
TfrmBlocoNotas.itmColarClick(Sender:
TObject);
begin
memTexto.PasteFromClipboard;
end;
As opes Negrito e Itlico, formataro o texto e mudaro tambm a
propriedade Checked do item no menu, indicando que elas esto ativas.
Os procedimentos associados negrito e itlico, trabalham junto com o
procedimento Fonte que verificar o estado das opes alterando as
propriedades da fonte do Memo.
Inicie declarando o procedimento Fonte na seo de definio do tipo
TfrmBlocoNotas - o formulrio. E com o cursor ainda na mesma linha,
clique-direito e no menu escolha a opo Complete Class at Cursor ou
pressione Ctrl+Shit+C, para o Delphi adicionar o esqueleto do procedi-
mento na seo Implementation.
procedure itmCopiarClick(Sender:
TObject);
procedure itmColarClick(Sender: TObject);
procedure Fonte;
private
{ Private declarations }
public
{ Public declarations }
end;
Pgina: 74
Delphi 5

Celta Informtica - F: (11) 4331-1586
Aps Ctrl+Shit+C, voc ter:
Digite:
procedure TfrmBlocoNotas.Fonte;
begin
if not itmNegrito.Checked and not itmItalico.Checked then
memTexto.Font.Style:= [];
if itmNegrito.Checked and not itmItalico.Checked then
memTexto.Font.Style:= [fsBold];
if not itmNegrito.Checked and itmItalico.Checked then
memTexto.Font.Style:= [fsItalic];
if itmNegrito.Checked and itmItalico.Checked then
memTexto.Font.Style:= [fsBold, fsItalic];
end;
procedure TfrmBlocoNotas.itmNegritoClick(Sender: TObject);
begin
itmNegrito.Checked:= not itmNegrito.Checked;
Fonte;
end;
procedure TfrmBlocoNotas.itmItalicoClick(Sender: TObject);
begin
itmItalico.Checked:= not itmItalico.Checked;
Fonte;
end;
Pgina: 75
Delphi 5

Celta Informtica - F: (11) 4331-1586
Quando o usurio clicar na opo Sair do menu Arquivo, fechar o for-
mulrio, e como este o nico formulrio do programa, a execuo dele
ser finalizada. O formulrio fechado com o mtodo Close.
procedure TfrmBlocoNotas.itmSairClick(Sender: TObject);
begin
Close;
end;
Salve seu trabalho, e teste o programa pressionando F9.
Ns j aprendemos a associar um cone ao projeto, agora iremos apren-
der a fazer um cone personalizado, utilizando o aplicativo Image Editor
do Delphi. Para inicializ-lo, v at a opo Tools do menu principal do
Delphi, e escolha Image Editor.
Escolha a opo New do menu File, e IconFile.
Pgina: 76
Delphi 5

Celta Informtica - F: (11) 4331-1586
Na janela de propriedades, escolha uma matriz de 32 x 32 pixels e 16 cores.
Desenhe um cone semelhante ao da figura abaixo, utilizando recursos
semelhantes ao programa Paint do Windows. A cor de fundo (verde)
funciona como uma cor Cromaqui - transparente ao fundo.
Salve seu cone memorizando o nome completo incluindo o caminho. E
feche o aplicativo Image Editor.
Pgina: 77
Delphi 5

Celta Informtica - F: (11) 4331-1586
O formulrio possui no canto superior esquerdo o cone padro do Delphi.
Para trocar este cone pelo criado anteriormente, deveremos alterar a
propriedade Icon do formulrio atribuindo a ela o cone que acabamos de
desenhar.
Use este cone para representar o Bloco de Notas no Windows, da mes-
ma forma descrita para a Calculadora.
Quando o usurio escolhe as opes Abrir e Salvar do menu, as caixas
de dilogo Abrir e Salvar como so abertas aguardando uma entrada de
dados. At agora neste exemplo estas caixas exibiam todo tipo de arqui-
vo sem nenhum tipo de filtro.
Porm ao observarmos os aplicativos desenvolvidos por outras pessoas
notamos que estes dilogos possuem uma lista com o nome de Arqui-
vos de tipo. Neste exemplo que estamos construindo, altere a proprie-
dade Filter do OpenDialog deixando-a conforme a figura.
Pgina: 78
Delphi 5

Celta Informtica - F: (11) 4331-1586
Altere tambm a propriedade Filter do SaveDialog deixando-a igual
primeira linha do OpenDialog. E a propriedade DefaultExt, que indica a
extenso padro para o nome do arquivo que ser salvo caso o usurio
no escolha nenhuma.
Pgina: 79
Delphi 5

Celta Informtica - F: (11) 4331-1586
EXEMPLO IV - RELGIO DESPERTADOR
Este projeto contm um outro componente no visvel - o TTimer. Este
componente gera o evento OnTimer a intervalos regulares determina-
dos em sua propriedade Interval. Esta propriedade esta expressa em
milisegundos, ou seja, para que o evento OnTimer ocorra a cada segun-
do: Interval:=1000. Se Interval:=0 o Timer estar desativado.
Devemos ter cuidado na programao do Timer, porque mesmo ele sen-
do capaz de gerar um evento a cada milisegundo, o procedimento que
trata o evento pode demorar mais do que o valor de Interval, ocorrendo
perda de algumas execues do procedimento ligado a ele, ou se Interval
for muito pequeno pode ocorrer travamento do programa.
Construa o formulrio como mostrado abaixo.
A propriedade Caption dos Label1 e Label2 dever estar em branco. No
Label1, ser apresentada a hora do sistema, e em Label2 a data atual.
O componente RadioGroup permite construir um grupo de botes de
opo, utilizamos estes botes quando precisarmos selecionar opes
mutuamente excludentes. S poder haver um boto de opo selecio-
nado por vez, em cada grupo de botes ou no formulrio caso o boto
esteja fora de algum grupo.
Pgina: 80
Delphi 5

Celta Informtica - F: (11) 4331-1586
As opes de escolha do RadioGroup esto na propriedade Items.
Quando selecionamos esta propriedade, a janela String list editor
mostrada, nela editamos os botes de opo do grupo. Entre com as
duas opes, como mostrado a seguir.
Feito o formulrio, vamos digitar o cdigo para os eventos associados.
Declare primeiro as variveis Ligado e Tecla. Ligado indicar qual boto
de opo est selecionado, e Tecla armazenar um caractere digitado
no teclado.
implementation
var
Ligado: Boolean;
Tecla: Char;
{$R *.DFM}
Pgina: 81
Delphi 5

Celta Informtica - F: (11) 4331-1586
Quando o formulrio for criado, o boto Desligado ser selecionado atra-
vs da linha rdgControle.ItemIndex:= 0. A propriedade ItemIndex, indi-
ca qual boto do grupo est selecionado.
Colocaremos a data do sistema em lblData (Label2) usando a funo
FormatDateTime, de acordo com a tabela mostrada no projeto da Calcu-
ladora.
procedure TfrmRelogio.FormCreate(Sender: TObject);
begin
rdgControle.ItemIndex := 0;
lblData.Caption:=FormatDateTime(dddd,dddemmmmdeyyy,
Date);
{a funo Date retorna a data do sistema}
end;
A propriedade ItemIndex do rdgControle ser igual a 1 se o boto Ligado
for selecionado, e igual a 0, caso Desligado esteja selecionado.
procedure TfrmRelogio.rdgControleClick(Sender:
TObject);
begin
if rdgControle.ItemIndex = 1 then
Ligado:=True
else
Ligado:=False;
end;
Quando o usurio digita algo em um quadro Edit, o ocorre evento
KeyPress. No procedimento a seguir, realizada uma validao dos
caracteres para definir a hora de acionamento do despertador. Caso no
seja um caractere vlido, soado um alarme e este caractere excludo
do Edit.
O evento KeyPress envia para a procedure, o parmetro Key do tipo
Char, sendo esta varivel verificada pelo programa.
procedure TfrmRelogio.edtHoraKeyPress(Sender:TObject;
var Key:Char);
begin
Tecla:=(Key);
Pgina: 82
Delphi 5

Celta Informtica - F: (11) 4331-1586
if ((Tecla<0)or(Tecla>9))and(Tecla <> :) then
begin
Beep;
Key:=chr(0);
{a funo chr(X:byte), retorna o caractere
correspondente ao nmero X na tabela ASCII}
end;
end;
Quando o evento Timer ocorrer (no caso a cada segundo - Interval:=1000),
ser feita uma verificao do contedo do edtHora e se o alarme est
Ligado ou no. O Timer tambm atualiza a hora mostrada no lblHora
(Label1). Se a hora que est no edtHora for menor ou igual a hora do
sistema e a varivel Ligado verdadeira, o Beep soar.
procedure TfrmRelogio.TimerTimer(Sender: TObject);
begin
if (edtHora.Text <= TimeToStr(Time))and (Ligado) then
begin
Beep;
Beep;
end;
lblHora.Caption:=TimeToStr(Time);
end;
Pgina: 83
Delphi 5

Celta Informtica - F: (11) 4331-1586
MTODO GRFICO
Embora o uso dos mtodos grficos - que permitem desenhos de linhas,
crculos e retngulos - sejam complexos, poder ser divertido e til para
quem deseja sofisticar seus programas. A seguir, conheceremos al-
guns destes recursos atravs de exemplos simples.
O Sistema de coordenadas do Delphi, possui o seu ponto de origem
(0,0) no canto superior esquerdo da tela, ao contrrio do que ns estamos
acostumados desde Descartes.
A escala utilizada no Delphi o Pixel, que representa um ponto visvel na
tela, de acordo com a resoluo do monitor.
As funes e procedimentos para desenho, esto agrupadas em um
objeto da classe TCanvas, o Delphi cria para ns um objeto deste tipo de
nome Canvas. com este objeto que desenhamos na tela pois, a tela
realmente um objeto da classe TCanvas.
DESENHO DE PONTO
Para desenhar um ponto usamos a propriedade Pixels, do objeto Canvas;
Canvas.Pixels [x,y]:= cor;
Onde:
Canvas - o objeto do tipo TCanvas, declarado desta forma, o
ponto ser desenhado na rea do cliente - Formulrio.
x,y - coordenadas horizontal e vertical, respectivamente. Elas so
absolutas, ou seja, a partir da origem.
cor - especifica uma cor para o ponto.
Pgina: 84
Delphi 5

Celta Informtica - F: (11) 4331-1586
O exemplo abaixo desenha um ponto vermelho nas coordenadas (50,50)
do formulrio com um clique no boto.
CORES
O Delphi possui trs formas diferentes de atribuir valores para o parmetro
cor de um objeto grfico, so elas:
a) RGB - (NRed, NGreen, NBlue), onde NRed, NGreen e NBlue podem
variar de 0 a 255.
Ponto vermelho: Canvas.Pixels[x,y,]:= RGB(255,0,0);
Pgina: 85
Delphi 5

Celta Informtica - F: (11) 4331-1586
b) $00bbggrr - onde bb, gg e rr variam em hexadecimal de 00 a FF.
Ponto Amarelo: Canvas.Pixels[x,y]:= $0000FFFF;
c) Usando uma das constantes vlidas para o objeto TColor.
Cores fixas :clAqua, clBlack, clBlue, clDkGray, clFuchsia, clGray,
clGreen, clLime, clLtGray, clMaroon, clNavy, clOlive, clPurple,
clRed, clSilver, clTeal, clWhite, e clYellow.
Cores definidas pelo sistema: clActiveBorder, clActiveCaption,
clAppWorkSpace, clBackground, clBtnFace, clBtnHighlight,
clBtnShadow, clBtnText, clCaptionText, clGrayText, clHighlight,
cl Hi ghl i ghtText, cl Inacti veBorder, cl Inacti veCapti on,
clInactiveCaptionText, clMenu, clMenuText, clScrollBar, clWindow,
clWindowFrame, e clWindowText.
Exemplo: Ponto Azul - Canvas.Pixels[x,y]:= clBlue:
DESENHO DE LINHAS
Para desenhar no Delphi, usamos a propriedade Pen do objeto TCanvas,
que nada mais que uma caneta invisvel. Podemos alterar o modo
como esta caneta desenha em nossa tela.
O Delphi indica a posio desta caneta atravs da propriedade PenPos.
Uma linha desenhada utilizando-se os mtodos MoveTo e LineTo para
mover a Pen (caneta). MoveTo posiciona a caneta em um determinado
lugar no formulrio. LineTo traa uma linha, que vai da posio corrente
(PenPos) at as coordenadas especificadas.
Copie o procedimento abaixo, inserindo-o no mesmo formulrio do exem-
plo do ponto.
Pgina: 86
Delphi 5

Celta Informtica - F: (11) 4331-1586
procedure TForm1.Button1Click(Sender: TObject);
begin
with Canvas do
begin
MoveTo(0,0);
LineTo(100,ClientHeight);
{ClienteHeight:=Altura da rea de cliente
no formulrio}
LineTo(200,50);
end;
end;
Quando queremos alterar vrias propriedades ou mtodos de um mes-
mo objeto, ns no precisamos indicar o seu nome em todos as linhas,
basta usarmos a instruo with ... do. Esta instruo significa que entre
as palavras reservadas begin ... end, o uso do objeto ficar implcito
para qualquer acesso a uma de suas propriedades ou mtodos.
Canvas.Pen.Style:= psDot;
Canvas.Pen.Color:=clBlue;
ou
with Canvas.Pen do
begin
Style:= psDot;
Color:=clBlue;
end;
No exemplo acima, utilizamos este recurso com o objeto Canvas e seus
mtodos MoveTo e LineTo.
Pgina: 87
Delphi 5

Celta Informtica - F: (11) 4331-1586
O tipo TCanvas usa como propriedades outros dois tipos de objetos: o
TPen e TBrush. O TPen a nossa caneta, este tipo possui propriedades
que modificam a forma das linhas a serem desenhadas, so elas:
Color - define a cor da linha
Width - define a espessura da linha - em pixels
Style - determina o tipo de linha.
Modifique o exemplo anterior, como mostrado a seguir:
procedure TForm1.Button1Click(Sender: TObject);
begin
with Canvas do
begin
MoveTo(0,0);
LineTo(100,ClientHeight);
Pen.Color:=clBLue;
LineTo (200,50);
end;
end;
Note que a segunda linha desenhada da cor azul.
Vamos montar exemplos que usem as outras duas propriedades - Width
e Style.
procedure TForm1.Button1Click(Sender: TObject);
var
Estilo: array [0..6] of TPenStyle;
i: Integer;
SX: Integer;
SY: Integer;
begin
Estilo[0]:= psSolid;
Estilo[1]:= psDash;
Estilo[2]:= psDot;
Estilo[3]:= psDashDot;
Estilo[4]:= psDashDotDot;
Estilo[5]:= psClear;
Estilo[6]:= psInsideFrame;
SX := ClientWidth;
SY := ClientHeight;
with Canvas do
Pgina: 88
Delphi 5

Celta Informtica - F: (11) 4331-1586
begin
SY:=Trunc(SY/8);{a procedure Trunc, transforma
um valor do tipo Real em tipo Inteiro}
for i:= 0 to 6 do
begin
Pen.Style:= Estilo[i];
MoveTo(0,(i*SY)+20);
LineTo(SX,(i*SY)+20);
end;
end;
end;
Comeamos declarando a matriz Estilo como do tipo TPenStyle. Nes-
ta matriz sero armazenados todos os estilos da caneta.
ClientWidth e ClientHeight, retornam um valor do tipo inteiro indicando
o tamanho da rea do cliente no formulrio, quando este nmero divi-
dido ele passa a ser um tipo Real, ento ns precisamos convert-los
novamente em Inteiro para que os mtodos MoveTo e LineTo possam
aproveit-los.
Antes de executar o exemplo acima, altere a propriedade Color de Form1
para clWhite (Color:=clWhite) para uma visualizao melhor das linhas,
teremos ento todos os estilos de linha desenhados no formulrio mos-
trado abaixo:
Altere o procedimento anterior, para serem mostradas as vrias espes-
suras de linha.
Pgina: 89
Delphi 5

Celta Informtica - F: (11) 4331-1586
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
SX: Integer;
SY: Integer;
begin
SX := ClientWidth;
SY := ClientHeight;
with Canvas do
begin
SY:=Trunc(SY/8); {a procedure Trunc, transforma um
valor do tipo Real em tipo Inteiro}
for i:= 0 to 6 do
begin
Pen.Width:= i+1;
MoveTo(0,(i*SY)+20);
LineTo(SX,(i*SY)+20);
end;
end;
end;
Pgina: 90
Delphi 5

Celta Informtica - F: (11) 4331-1586
DESENHO DE RETNGULOS
Para desenhar retngulos use o mtodo Rectangle do TCanvas. Como
parmetros so utilizadas as coordenadas dos cantos superior esquer-
do e inferior direito do retngulo.
Canvas.Retangle (X
1
, Y
1
, X
2
, Y
2
);
Digite o exemplo abaixo.
procedure TForm1.Button1Click(Sender: TObject);
begin
with Canvas do
begin
Rectangle (10,10,110,110);
Rectangle (130,10,260,110);
end;
end;
Pgina: 91
Delphi 5

Celta Informtica - F: (11) 4331-1586
Observe que o desenho ficou por trs do boto, isto ocorre por que o
boto est acima do formulrio e o desenho faz parte da tela do formul-
rio, o boto seria como uma borracha sobre um papel desenhado.
Para preenchermos estes retngulos, usamos o tipo TBrush que como
TPen, uma propriedade do TCanvas. As propriedades mais comuns
do TBrush so:
Color - define a cor do interior da figura
Style - indica o padro de preenchimento
As cores so as mesmas da Pen e os estilos so: bsSolid, bsClear,
bsBDiagonal, bsFDiagonal, bsCross, bsDiagCross, bsHorizontal e
bsVertical.
Faa o exemplo a seguir:
procedure TForm1.Button1Click(Sender:
TObject);
begin
with Canvas do
begin
Brush.Style:=bsFDiagonal;
Brush.Color:=clBlack;
Rectangle (10,10,110,110);
Brush.Color:=clRed;
Brush.Style:=bsHorizontal;
Rectangle (130,10,260,110);
end;
end;
Pgina: 92
Delphi 5

Celta Informtica - F: (11) 4331-1586
DESENHO DE ELIPSES
O desenho de elipses feito com o mtodo Ellipse. A elipse ou o crculo
so desenhados usando-se as duas coordenadas de um retngulo
delimitador - imaginrio - onde a figura estar inscrita. Faa o exemplo a
seguir.
procedure TForm1.Button1Click(Sender:
TObject);
begin
with Canvas do
begin
Rectangle(10,40,80,100);
Ellipse (10,40,80,100);
Ellipse (90,50,250,90);
Brush.Style:=bsSolid;
Brush.Color:=clGreen;
Ellipse (153,53,187,87);
Brush.Color:=clWhite;
Ellipse (168,55,173,85);
end;
end;
Pgina: 93
Delphi 5

Celta Informtica - F: (11) 4331-1586
FIGURAS
O Delphi permite a incluso de figuras no formulrio atravs do objeto
Image ( ), onde poderemos carregar arquivos dos tipos EMF, WMF,
BMP ou ICO.
As figuras so vistas como valores da propriedade Picture do controle
Image. Podemos atribuir um valor para esta propriedade em tempo de
projeto, ou utilizar a procedure LoadFromFile para carregar um arquivo
de imagem durante a execuo do programa.
Construiremos agora um projeto que ir carregar sucessivas figuras em
um controle Image a cada clique em um boto.
Abra o programa Paint do Windows e desenhe quatro figuras semelhan-
tes s mostradas abaixo, salvando-as com os nomes indicados.
Pgina: 94
Delphi 5

Celta Informtica - F: (11) 4331-1586
Estas figuras daro a impresso de movimento da luz.
Para o cdigo do boto utilizaremos a estrutura case...of. O Delphi pos-
sui modelos de cdigo (code templates) caso o programador no se
lembre da sintaxe exata de determinada estrutura, estes modelos po-
dem ser editados ou adicionados novos modelos. Para ativar o code
template, pressione Ctrl+J para exibir uma lista com os cdigos permiti-
dos.
Entre com o cdigo a seguir para o boto at o ponto indicado, pressione
Ctrl+J e escolha case statement na lista.
Pgina: 95
Delphi 5

Celta Informtica - F: (11) 4331-1586
Complete o cdigo seguindo a listagem a seguir.
implementation
var
sinal:Integer;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
with Image do
begin
case Sinal of
0:begin
picture.loadfromfile (c:\...\frame1.bmp);
sinal:=1;
end;
1:begin
picture.loadfromfile (c:\...\frame2.bmp);
sinal:=2;
end;
2:begin
picture.loadfromfile (c:\...\frame3.bmp);
sinal:=3;
end;
3:begin
picture.loadfromfile (c:\...\frame4.bmp);
sinal:=0;
end;
end; {case}
end; {with}
end; {procedure}
procedure TForm1.FormCreate(Sender: TObject);
begin
Sinal:=1;
Image.Picture.LoadFromFile (c:\...\frame1.bmp);
end;
Pgina: 96
Delphi 5

Celta Informtica - F: (11) 4331-1586
Executando o programa:
Ao invs de cada figura ser carregada do disco quando necessitarmos,
poderemos incluir todas de uma s vez no aplicativo.
Vamos ento alterar o programa anterior copiando o controle Image e
colando trs cpias dele no formulrio, todos na mesma posio. Inclu-
indo tambm um controle Timer para que a mudana entre as figuras
ocorra automaticamente.
Altere a propriedade Enabled:=False do Timer. E para os controle Image,
Visible:=False e na propriedade Picture carregue as figuras utilizadas
anteriormente - Frame1.bmp a Frame4.bmp.
Digite o cdigo a seguir:
procedure TForm1.ButtonClick(Sender: TObject);
begin
if Button.caption=&Parar then
begin
Button.caption:=&Automtico;
Timer.enabled:=False;
Pgina: 97
Delphi 5

Celta Informtica - F: (11) 4331-1586
exit; {sai da procedure, sem executar as linhas seguintes}
end;
Timer.enabled:=True;
Button.caption:=&Parar;
end;
procedure TForm1.TimerTimer(Sender: TObject);
begin
case Sinal of
0:begin
Image1.Visible:=True;
Image4.Visible:=False;
Sinal:=1;
end;
1:begin
Image2.Visible:=True;
Image1.Visible:=False;
Sinal:=2;
end;
2:begin
Image3.Visible:=True;
Image2.Visible:=False;
Sinal:=3;
end;
3:begin
Image4.Visible:=True;
Image3.Visible:=False;
Sinal:=0;
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Sinal:=1;
Image1.Visible:=True;
end;
Pgina: 98
Delphi 5

Celta Informtica - F: (11) 4331-1586
Como prximo passo vamos incluir um controle ScrollBar ( ) que ir
controlar a variao da propriedade Interval do Timer.
Altere as propriedades da ScrollBar de acordo com a figura a seguir:
Onde:
Kind - especifica se a scrollbar ser horizontal ou vertical.
LargeChange - determina o quanto muda a posio quando o
usurio clica a barra de rolagem em um de seus lados.
Max - especifica o valor mximo da posio.
Min - especifica o valor mnimo da posio.
SmallChange - determina o quanto muda a posio quando o
usurio clica nas setas da barra de rolagem.
Digite a procedure a seguir para o evento OnChange da ScrollBar, que
ocorre quando o usurio muda a posio da barra de rolagem.
procedure TForm1.ScrollBarChange(Sender: TObject);
begin
Timer.interval:=ScrollBar.position;
{A propriedade position contm o valor da posio
da barra de rolagem, e varia entre 100 e 1000 neste
exemplo.}
end;
Pgina: 99
Delphi 5

Celta Informtica - F: (11) 4331-1586
EXEMPLO V - CATLOGO
Neste projeto de catlogo telefnico, trabalharemos com acesso a arqui-
vos do tipo aleatrio. Ele ser constitudo por trs Units e dois Formulri-
os. Duas Units sero associadas aos formulrios e a outra Unit conter
apenas cdigos de acesso ao disco (HD) sem estar associada a ne-
nhum formulrio.
Inicie um novo projeto e crie o formulrio, inserindo e modificando as
propriedades dos objetos, como a figura abaixo.
Altere a propriedade Filter do controle SaveDialog, para salvar o catlo-
go no formato de arquivos binrios (.dat)
Pgina: 100
Delphi 5

Celta Informtica - F: (11) 4331-1586
D um clique-duplo no controle MainMenu para editar o menu, conforme
o exemplo.
Deveremos inserir um novo formulrio ao nosso projeto que ser utiliza-
do para selecionar um determinado registro do arquivo de dados. Para
inserir um novo formulrio ao projeto, escolha a opo New Form do
menu File ou clique no boto New Form ( ) na barra de ferramentas.
Monte este novo formulrio como mostrado abaixo.
Este novo formulrio ir apresentar ao usurio os nomes de pessoas -
registros no arquivo - contidos no catlogo atravs do componente
ComboBox (caixa combinada).
O ComboBox, um controle de edio associado uma lista contendo
itens disponveis para a escolha do usurio. O usurio poder tanto digitar
uma opo no quadro de edio, quanto escolher uma opo fornecida
pela lista associada.
Pgina: 101
Delphi 5

Celta Informtica - F: (11) 4331-1586
A propriedade Style, determina o tipo de ComboBox que iremos traba-
lhar, que pode ser:
csDropDown - Cria uma lista drop-down com uma caixa de texto, para
entrada de texto manualmente. Todos itens so strings de qualquer com-
primento.
CsSimple - Cria uma caixa de texto associada a uma caixa de lista
suspensa. Esta lista no aparecer em tempo de execuo a menos
que o ComboBox seja dimensionado para acomod-la.
CsDropDownList - Cria uma lista drop-down com uma caixa de texto,
mas o usurio no poder entrar com texto manualmente.
csOwnerDrawFixed - Cria uma lista drop-down com uma caixa de tex-
to, para entrada de texto manualmente. Mas cada item do ComboBox
ter seu comprimento em caracteres determinado pela propriedade
ItemHeight.
CsOwnerDrawVariable - Cria uma lista drop-down com uma caixa de
texto, para entrada de texto manualmente. Os itens neste ComboBox
podem ter comprimento varivel.
Vamos alterar a propriedade Style do combobox para csDropDownList,
pois no queremos que o usurio altere o contedo do combo. Evitando
que o usurio entre com um nome de pessoa inexistente.
INSERINDO UMA NOVA UNIDADE
Uma Unit pode estar
vinculada a um for-
mulrio ou no, ns
iremos criar uma Unit
no vinculada a ne-
nhum formulrio. Es-
colha a opo New...
do menu File ou o
boto New ( ) na
barra de ferramentas
e aparecer a janela
New Itens, escolha
Unit.
Pgina: 102
Delphi 5

Celta Informtica - F: (11) 4331-1586
O Delphi criar uma nova Unit no vinculada a nenhum formulrio, j
com o cabealho pronto. Onde iremos digitar as rotinas de acesso ao
disco.
TIPOS DE DADOS
No Delphi ns podemos criar nossos prprios tipos de dados, para fazer
isto, declare o seu tipo de dado dentro de um bloco Type, antes do bloco
de definio de variveis Var:
type
TMeusValores = ShortInt;
var
Venda, Custo : TMeusValores;
interessante definir um tipo de varivel, porque quando tivermos uma
famlia de variveis relacionadas e for necessrio mudar o tipo de todas
elas, basta alterar a declarao de definio de tipo destas variveis:
type
TMeusValores = LongInt;
Venda e Custo eram variveis ShortInt, aps a nova definio passam a
ser LongInt.
Pgina: 103
Delphi 5

Celta Informtica - F: (11) 4331-1586
REGISTROS
Para armazenar os dados de uma pessoa (Nome, Endereo e Telefone),
usamos um registro. Registro um tipo de dado que rene alguns itens
de tipos diferentes, nosso tipo registro ter o nome de TPessoasReg.
Em um projeto podem existir vrias variveis do tipo TPessoasReg.
Declare o novo tipo na seo Interface da nova Unit (DiscoUnt - nome
salvo em disco).
unit DiscoUnt;
interface
type
{registro com dados pessoais}
TPessoasReg=record
CNome: string[30];
CTelefone: string[15];
CEndereco: string[40];
end;
TPessoas = file of TPessoasReg;
var
PesArq: TPessoas;
O Delphi possui um tipo denominado arquivo, que permite escrever e
ler arquivos em disco. Para declarar um tipo arquivo, associamos o nome
da varivel a um tipo de dado previamente existente. No nosso caso:
TPessoasReg.
Na listagem acima definimos alm do tipo TPessoasReg, o tipo TPessoas,
definindo-o como um tipo de arquivo formado por registros do tipo
TPessoasReg.
Os campos so declarados como String de tamanhos fixos pois, caso
no fossem declarados os tamanhos, eles iriam ocupar o espao de 255
Bytes.
Pgina: 104
Delphi 5

Celta Informtica - F: (11) 4331-1586
Logo aps, informamos ao Delphi que existe um tipo de arquivo compos-
to por esse registro, e tambm declaramos uma varivel do tipo desse
arquivo de registros, essa varivel conter o nome do arquivo aberto em
disco.
Algumas procedures e functions, precisam de parmetros para trabalha-
rem, ns declaramos esses parmetros no cabealho da procedure, in-
dicando um nome de referncia, o seu tipo de dado e o prefixo var. Pri-
meiro declaramos as procedures na seo Interface e depois
implementamos na seo Implementation.
procedure AbrirArq(var A:TPessoas;var NomeArq:string;
var N:boolean);
procedure FecharArq(var A:TPessoas);
procedure GravarArq(var A:TPessoas;var RegN:integer;
var Reg:TPessoasReg);
procedure LerArq(var A:TPessoas;var RegN:integer;
var Reg:TPessoasReg);
implementation
procedure AbrirArq(var A:TPessoas;var NomeArq:string;
var N:boolean);
begin
Assign (A, NomeArq);
if N then
Rewrite (A)
else
Reset (A);
end;
procedure FecharArq (var A:TPessoas);
begin
Close (A);
end;
procedure GravarArq (var A:TPessoas;var RegN:integer;
var Reg:TPessoasReg);
begin
Seek (A,RegN);
Write (A,Reg);
end;
Pgina: 105
Delphi 5

Celta Informtica - F: (11) 4331-1586
procedure LerArq (var A:TPessoas; var RegN:integer;
var Reg:TPessoasReg);
begin
Seek (A,RegN);
Read (A,Reg);
end;
end.
Antes de abrir um arquivo para leitura e gravao, ns temos que associ-
lo a uma varivel do mesmo tipo dos registros contidos no arquivo em
disco. Para isso usamos a procedure Assign. Assign diz ao Delphi que
todas as operaes com a varivel tero ligao com um arquivo em
particular.
Assign(varivel, nome do arquivo);
Aps a associao, abrimos o arquivo com uma das seguintes formas:
1) Reset - abre um arquivo existente para leitura ou gravao.
2) Rewrite - abre um arquivo novo para leitura ou gravao. Caso j
exista o arquivo, todos os dados anteriores sero perdidos.
Reset(nome do arquivo)
Rewrite(nome do arquivo)
Para gravar ou ler um registro, usamos as funes Write e Read, infor-
mando a varivel do arquivo e em qual varivel estar ou conter o regis-
tro.
Write(varivel arquivo,varivel registro)
Read(varivel arquivo,varivel registro)
Pgina: 106
Delphi 5

Celta Informtica - F: (11) 4331-1586
PONTEIRO DE REGISTROS
O ponteiro do arquivo indica qual registro ser afetado com a prxima
operao de leitura ou gravao. Sempre que um arquivo aberto, o
ponteiro posicionado no incio do arquivo. Cada operao de leitura ou
gravao, move o ponteiro um registro frente. Ou seja, se o registro 3
for lido, o ponteiro estar apontando para o registro 4, e a prxima opera-
o ser realizada com o registro 4.
Para acessar um registro aleatoriamente, usamos a procedure Seek.
Esta procedure posiciona o ponteiro no registro que quisermos, antes de
uma leitura ou gravao.
Seek(varivel arquivo,nmero registro)
Os registros em um arquivo so numerados seqencialmente a partir do
registro 0. Existem mais duas funes teis para manipulao de arqui-
vos, FileSize e FilePos. A primeira indica quantos registros o arquivo
tem, e a segunda indica a posio do ponteiro.
Para ligarmos as Units, devemos colocar o nome das Units acessadas
na seo uses. Uma vez declarada uma unidade na seo uses de
outra unidade, voc poder referenciar qualquer coisa na seo de
interface da unidade nomeada. Feita esta ligao, poderemos acessar
as variveis e procedures da outra unidade.
O formulrio frmCatalogo (CatalogoUnt), ter acesso aos procedimen-
tos das unidades ProcurarUnt e DiscoUnt. Ento, declare estas duas
unidades logo aps as unidades j colocadas pelo Delphi.
unit CatalogoUnt;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls,Forms, Dialogs, Menus, StdCtrls,
ProcurarUnt,DiscoUnt;
Pgina: 107
Delphi 5

Celta Informtica - F: (11) 4331-1586
Declare as variveis utilizadas na unidade CatalogoUnt, como mostrado
abaixo.
private
{ Private declarations }
strArqNovo,strArqAtual: string;
bolNovo,bolArquivoAberto: boolean;
{Prefixos str= varivel string
bol=varivel boolena}
public
{ Public declarations }
end;
Comece a implementao dos procedimentos associados aos objetos e
seus eventos, seguindo as listagens abaixo.
procedure TfrmCatalogo.itmNovoClick(Sender: TObject);
begin
edtNome.Text:=;
edtTelefone.Text:=;
edtEndereco.Text:=;
bolNovo:=True;
strArqNovo:=Temp.dat;
strArqAtual:= strArqNovo;
DiscoUnt.AbrirArq (PesArq, strArqNovo, bolNovo);
{Executa procedimento na unidade DiscoUnt}
bolArquivoAberto:=True;
end;
procedure TfrmCatalogo.itmAbrirClick(Sender: TObject);
begin
edtNome.Text:=;
edtTelefone.Text:=;
edtEndereco.Text:=;
if OpenDialog.Execute then
begin
strArqAtual:=OpenDialog.Filename;
bolNovo:=False;
DiscoUnt.AbrirArq (PesArq, strArqAtual, bolNovo)
end
else
Exit;
bolArquivoAberto:=True;
end;
Pgina: 108
Delphi 5

Celta Informtica - F: (11) 4331-1586
Para se referir a um procedimento em outra unidade, ns informamos primeiro o
nome da unidade e depois o nome do procedimento: DiscoUnt.AbrirArq(...);.
procedure TfrmCatalogo.btnNovoClick(Sender: TObject);
var
Reg: DiscoUnt.TPessoasReg;
intRegN: Integer;
begin
edtNome.SetFocus;
if not bolArquivoAberto then
begin
ShowMessage (Abra primeiro um arquivo);
exit;
end;
if btnNovo.Caption=&Novo then
begin
edtNome.Text:=;
edtTelefone.Text:=;
edtEndereco.Text:=;
btnNovo.Caption:=A&dicionar;
end
else
begin
with Reg do
begin
CNome:=edtNome.Text;
CTelefone:=edtTelefone.Text;
CEndereco:=edtEndereco.Text;
end;
frmProcurar.cbxLista.Items.Add (edtNome.Text);
intRegN:= FileSize(PesArq);
DiscoUnt.GravarArq (PesArq, intRegN, Reg);
btnNovo.Caption:=&Novo;
end;
end;
procedure TfrmCatalogo.btnAtualizarClick(Sender: TObject);
var
Reg : TPessoasReg;
intRegN :integer;
begin
with Reg do
begin
CNome:=edtNome.Text;
Pgina: 109
Delphi 5

Celta Informtica - F: (11) 4331-1586
CTelefone:=edtTelefone.Text;
CEndereco:=edtEndereco.Text;
end;
frmProcurar.cbxLista.Items.Add (edtNome.Text);
intRegN:= FilePos(PesArq)-1;
DiscoUnt.GravarArq (PesArq, intRegN, Reg);
end;
procedure TfrmCatalogo.FormCreate(Sender: TObject);
begin
bolArquivoAberto:=False;
end;
procedure TfrmCatalogo.itmSalvarClick(Sender: TObject);
begin
if SaveDialog.Execute then
begin
strArqNovo:=SaveDialog.Filename;
DiscoUnt.FecharArq (PesArq);
RenameFile(strArqAtual,strArqNovo);
{a funo RenameFile,renomeia um arquivo}
bolNovo:=False;
DiscoUnt.AbrirArq (PesArq, strArqNovo, bolNovo);
end;
end;
procedure TfrmCatalogo.btnProcurarClick(Sender: TObject);
begin
frmProcurar.ShowModal;
end;
Pgina: 110
Delphi 5

Celta Informtica - F: (11) 4331-1586
Para mostrar outro formulrio, usamos o mtodo Show ou ShowModal.
Show abre uma janela que pode ser alternada entre outras janelas do
aplicativo, enquanto ShowModal no aceita uma troca da janela ativa.
Com ShowModal o usurio s poder ir para outra janela, aps ter fecha-
do a janela Modal.
Comece a construo do cdigo para o formulrio frmProcurar, infor-
mando ao Delphi que ela ir acessar a unidade DiscoUnt.
unit ProcurarUnt;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls,DiscoUnt;
Declare as variveis intReN e Reg.
private
{ Private declarations }
intRegN: Integer;
Reg: TPessoasReg;
Pgina: 111
Delphi 5

Celta Informtica - F: (11) 4331-1586
Siga a listagem abaixo para os eventos associados.
procedure TfrmProcurar.FormActivate(Sender:TObject);
begin
cbxLista.Clear; {limpa o contedo do ComboBox}
Seek (PesArq,0);
while Not Eof (PesArq) do
{enquanto no chegar ao final do arquivo, faa}
begin
Read(PesArq,Reg);
cbxLista.Items.Add (Reg.CNome);
end;
end;
procedure TfrmProcurar.btnCancelarClick(Sender:TObject);
begin
Close;
end;
procedure TfrmProcurar.btnOkClick(Sender: TObject);
begin
intRegN:=cbxLista.ItemIndex;
DiscoUnt.LerArq (PesArq,intRegN,Reg);
with frmCatalogo do
begin
edtNome.Text:=Reg.CNome;
edtEndereco.Text:=Reg.CEndereco;
edtTelefone.Text:=Reg.CTelefone;
end;
Close;
end;
Pgina: 112
Delphi 5

Celta Informtica - F: (11) 4331-1586
Para preencher um quadro combo com dados, temos duas possibilida-
des:
1) Usar o mtodo Add para a sua propriedade Items. Em
tempo de execuo.
2) Editar a propriedade Items em tempo de projeto.
Por fim, declare a unidade CatalagoUnt na seo Implementation. Por-
que a unidade ProcurarUnt tambm se referencia CatalogoUnt, mas se
CatalogoUnt for declarada na seo uses da interface, o Delphi gerar
um erro de referncia circular.
implementation
uses
CatalogoUnt;
{$R *.DFM}
Salve, execute e teste o programa.
Pgina: 113
Delphi 5

Celta Informtica - F: (11) 4331-1586
BANCO DE DADOS SIMPLES
Um banco de dados pode ser definido como um conjunto unificado de
informaes compartilhadas por pessoas autorizadas de uma organiza-
o. A funo de um Banco de Dados permitir o armazenamento e a
recuperao de informaes necessrias para as pessoas da organiza-
o tomarem decises.
Um Banco de Dados formado por um conjunto de arquivos de dados,
tambm chamados de tabelas. Em uma tabela temos, linhas e colunas.
Onde uma linha contm informaes a respeito de um item em particu-
lar, e a coluna possui uma parte das informaes de uma linha. A seguir
mostrada uma tabela de Clientes.
446-3987 Mrci o 150
7070-8580 Jos 012
572-2258 Aline 005
879-9687 Marina 002
554-8788 Aldai r 001
Telefone Nome Cdi go
A tabela mostrada acima possui os campos ou colunas: Cdigo, Nome e
Telefone. E em cada linha temos a identificao de um cliente em parti-
cular.
Cada tabela em um banco de dados possui um campo que identifica
unicamente cada registro. O conjunto de atributos ou campos utilizados
para gerar este ndice conhecido como chave primria. Ns pode-
mos escolher qualquer campo de uma tabela para ser uma chave prim-
ria, sempre levando em considerao que ela deva ser curta. Por exem-
plo, usar um campo numrico melhor do que um campo formado por
strings. Como a chave primria determina a singularidade de um regis-
tro, quando se usa um string no poderemos ter dois registros com o
mesmo nome de cliente.
Na tabela do exemplo acima, o mais sensato determinar o campo C-
digo como chave primria dela.
Alm de determinar os campos e a chave primria da tabela, tambm
teremos que definir o tipo de dado, comprimento, formato e o dom-
nio para cada campo desta tabela.
Pgina: 114
Delphi 5

Celta Informtica - F: (11) 4331-1586
Tipo de Dado: refere-se ao contedo do dado, podendo ser numrico,
alfabtico, data, hora ou cadeia de caracteres longa ou curta.
Comprimento: refere-se ao tamanho ou nmero mximo de posies
que poder assumir o valor ou contedo de cada dado.
Formato: refere-se forma com que os dados devero ser editados ou
apresentados, definindo-se as posies de smbolos.
Domnio: especifica se os valores dos dados pertencem a uma lista de
valores predefinidos, podendo estar em uma lista, ou satisfazer uma re-
gra.
DATABASE DESKTOP
No grupo de programas do Delphi, encontramos o utilitrio Database
Desktop, que permite a criao e manipulao de banco de dados de
diversos formatos.
O nosso prximo exemplo, trabalhar duas tabelas. Uma com o cadas-
tro dos clientes e outra com as vendas realizadas para estes clientes.
Execute o Database Desktop, selecionando a opo Database Desktop
no menu Tools.
Pgina: 115
Delphi 5

Celta Informtica - F: (11) 4331-1586
Abra uma nova tabela como mostra a figura:
Escolha o tipo Paradox 7. Aparecendo ento a caixa de dilogo Create
Paradox 7 Table.
Digite o nome para o primeiro campo (Codigo) e mude para tipo de cam-
po (Type) usando a tecla Tab. Com o campo Type selecionado, de um
clique-direito nele, para exibir o menu pop-up com todos os valores para
o tipo de campo. As letras sublinhadas correspondem letra de atalho
para cada tipo de dado. O campo CODIGO ser definido como tipo Alpha.
Apesar de ser um campo com nmeros ns no iremos realizar nenhum
clculo matemtico com ele, por isso o definimos como Alpha.
Pgina: 116
Delphi 5

Celta Informtica - F: (11) 4331-1586
O campo Codigo ser a chave primria para a identificao dos clientes
na tabela Clientes. Para definir um campo como chave primria, pressi-
one qualquer tecla quando o campo Key estiver selecionado, marcando
este campo com um * - asterisco.
Pgina: 117
Delphi 5

Celta Informtica - F: (11) 4331-1586
D continuidade entra dos outros campos, seguindo o modelo apre-
sentado abaixo.
Salve esta tabela como Clientes.db.
Pgina: 118
Delphi 5

Celta Informtica - F: (11) 4331-1586
Logo aps, monte uma nova tabela Paradox7 de acordo com a figura,
salvando-a como Vendas.db.
Para a tabela Vendas relacionar-se com a tabela Clientes, deveremos
definir o campo Codigo como ndice secundrio na tabela Vendas.
No ComboBox Table properties, selecione a opo Secondary Indexes
e clique no boto Define..., aparecendo a caixa de dilogo Define
Secondary Index.
No dilogo Define Secondary Index, selecione o campo Codigo e d
um clique na seta para introduzi-lo como campo ndice, e finalmente d
um clique no boto OK para aceitar a opo.
Ser ento solicitado um nome para este ndice, digite ICodigo.
Pgina: 119
Delphi 5

Celta Informtica - F: (11) 4331-1586
Salve novamente a tabela e saia do Database Desktop, atravs do menu
File >> Exit.
O Delphi possui um assistente para a construo de formulrios de aces-
so a Banco de Dados (Form Wizard), ns iremos utiliz-lo para construir
o projeto de banco de dados que utiliza as tabelas de Clientes e Vendas
montadas anteriormente.
Volte ao Delphi, e exclua o formulrio Form1 que o Delphi cria junto com
um novo projeto. No menu Project, escolha a opo Remove from
Project..., ou o boto ( ) na barra de ferramentas, e exclua Form1 no
salvando o arquivo. Pois o Form Wizard criar um novo formulrio auto-
maticamente.
Pgina: 120
Delphi 5

Celta Informtica - F: (11) 4331-1586
Excludo o formulrio, inicie o wizard a partir do menu Database >>
Form Wizard... do menu. O Database Form Wizard um assistente
para a criao de Formulrios envolvendo banco de dados. Este assis-
tente ajudar na definio dos campos a serem mostrados e o layout do
formulrio, alm de incluir um componente DBNavigator, que ser usado
para a navegao entre os registros das tabelas.
DBNavigator
O primeiro formulrio ter duas divises, uma para cada tabela. A primei-
ra conter os dados relativos a um cliente, e a segunda as compras
realizadas por este cliente. Inicie o Form Wizard, seguindo as opes
mostradas nas figuras a seguir; pressionando o boto Next para conti-
nuar com o assistente.
Pgina: 121
Delphi 5

Celta Informtica - F: (11) 4331-1586
Estas opes criam um formulrio com duas divises, usando compo-
nentes TTable. Um componente TTable realiza a conexo entre o for-
mulrio e uma tabela do banco de dados. Ele um componente visvel
somente em tempo de projeto - semelhante ao componente TTimer.
Inclua a tabela Clientes.db, como sendo a master query. Ou seja, a
tabela que ir comandar a apresentao dos dados.
Pgina: 122
Delphi 5

Celta Informtica - F: (11) 4331-1586
Clique no boto >> para incluir todos os campos da tabela Clientes.db
no formulrio.
A opo Vertical posiciona os campos dentro do formulrio, um acima
do outro.
Pgina: 123
Delphi 5

Celta Informtica - F: (11) 4331-1586
Alinhamento Left, posiciona as legendas ao lado esquerdo dos quadros
de Edit.
Defina a tabela Vendas.db como a tabela de detalhes.
Inclua todos os campos da tabela Vendas, e a seguir, escolha o formato
Grid para a apresentao da tabela Vendas.
Pgina: 124
Delphi 5

Celta Informtica - F: (11) 4331-1586
Selecione os campos que faro a ligao entre as duas tabelas, esco-
lhendo ICodigo como ndice. Em Detail Fields e Master Fields, seleci-
one o campo Codigo como campo de juno em ambas as tabelas e
pressione Add. Como mostrado a seguir.
Pgina: 125
Delphi 5

Celta Informtica - F: (11) 4331-1586
Aps o clique em Add, clique no boto Next. A seguir finalize a execuo
do Form Expert com a criao de apenas um formulrio.
Pgina: 126
Delphi 5

Celta Informtica - F: (11) 4331-1586
Vamos agora, alterar as propriedades de alguns componentes do formu-
lrio.
Comece alterando o tamanho do Panel3, alterando antes sua proprieda-
de Align para alBottom, a fim de visualizar todos os dados dos clientes. E
redesenhe o formulrio como a figura abaixo.
Para formatar a entrada de dados, ou seja, definir o formato do dado,
para a tabela Clientes.db, d um duplo-clique em Table1 para acessar o
editor de campos (fields edit). Selecione o campo CEP e no Object
Inspector, procure a propriedade Edit Mask. Esta propriedade abre o
quadro de dilogo Input Mask Editor onde poderemos escolher uma
mscara para o campo CEP, escolha Long Zip Code e na caixa Input
Mask elimine um dgito 9 da segunda parte da mscara, como mostram
as figuras a seguir.
Pgina: 127
Delphi 5

Celta Informtica - F: (11) 4331-1586
Altere tambm a propriedade EditMask do campo Telefone, escolhendo a
mscara Phone e adicionando um nmero 9 na primeira parte do nme-
ro telefnico. Feche a Input Mask Edit.
Selecione o campo Codigo em Table2, e mude a propriedade
Visible:=False, para no aparecer o cdigo do cliente no componente
DBGrid, pois ele j ser exibido por um componente Edit.
Sel eci one o EditEstado e al tere a propri edade
Charcase:=ecUpperCase, para que os caracteres neste TEdit sejam
apresentados em maiscula.
Insira um boto BitBtn no Formulrio com as seguintes definies de
propriedades:
Caption:=Sai&r
Kind:=bkCLose
A propriedade Kind do BitBtn determina qual desenho ser mostrado na
face do boto. Esta propriedade tambm implementa algumas funes
ao boto eliminando linhas de cdigo, neste caso no ser necessrio
nenhuma linha de cdigo para fechar o formulrio.
Finalmente, mude a propriedade Active dos dois componentes TTable
(Table1 Table2) de False para True. Isto tornar o Table ativo tanto em
tempo de projeto quanto em tempo de execuo. Ao ativarmos o Table,
os controles TEdit mudaro seu contedo, passando a exibir o primeiro
registro da tabela a eles ligada.
Pgina: 128
Delphi 5

Celta Informtica - F: (11) 4331-1586
D o nome de frmClientes ao Formulrio e salve como ClientesUnt.pas.
O prximo formulrio ser construdo manualmente, sem o uso do Form
Wizard. No utilizaremos o Form Wizard por questes didticas, mas
este novo formulrio tambm poderia ser construdo utilizando o assis-
tente.
Este segundo formulrio servir para cadastrar vendas. O usurio sele-
cionar um nome de cliente j cadastrado, a partir de um quadro combo,
digitar a data da venda e escolher um produto, atravs de botes de
opo, definindo tambm a quantidade de itens de um mesmo produto e
o valor total da venda.
Insira um novo formulrio ao projeto a partir do menu File >> New Form
ou clique no boto New Form ( ). Monte este novo formulrio utilizan-
do os componentes da paleta Data Controls mostrados na figura a se-
guir.
Pgina: 129
Delphi 5

Celta Informtica - F: (11) 4331-1586
Altere as propriedades indicadas na tabela a seguir para alguns compo-
nentes.
True ShowHi nt
navVendas Name
dsrVendas DataSource DbNavigator
dsrClientes Name
tblClientes DataSet DataSource2
True Active
tblClientes Name
Clientes.db TableName
C:\Banco dados DatabaseName Table2
dsrVendas Name
tblVendas DataSet DataSource1
True Active
tblVendas Name
Vendas.db TableName
C:\Banco dados DatabaseName Table1
Valor Propriedade Componente
Pgina: 130
Delphi 5

Celta Informtica - F: (11) 4331-1586
Selecione todos os DBEdit, dando um clique em cada um enquanto pres-
siona a tecla Shift, e altere a propriedade DataSource de todos ao mes-
mo tempo para dsrVendas. Depois selecione um por vez e altere a pro-
priedade DataField correspondente a cada DBEdit.
D um duplo-clique em tblVendas para editar o campo Data. Repare que
a janela Fields Editor aparece vazia sem nenhum campo listado. Clique-
direito no Fields Editor e escolha a opo Add Fields..., selecione todos
os campos e pressione Ok, para inserir todos os campos da tabela
Vendas.db no Fields Editor.
Voltando ao Fields Edit, selecione o campo DATA e altere o formato da
propriedade EditMask para Date. Aps a insero de todos os campos
da tabela Vendas no componente tblVendas, as propriedades destes cam-
pos podem ser acessadas diretamente atravs do Object Inspector.
Como ilustra a figura a seguir.
Pgina: 131
Delphi 5

Celta Informtica - F: (11) 4331-1586
O componente DbLookupComboBox, exibe os valores de um campo em
uma lista, onde o usurio poder escolher um valor para este campo.
Os valores exibidos pertencem a uma tabela e quando o usurio fizer
uma escolha, o valor escolhido ser vinculado a uma outra tabela.
No formulrio Vendas, o nome do cliente vir da tabela Clientes e quando
inserirmos a venda, o nome do cliente escolhido ser vinculado a esta
venda na tabela Vendas atravs da chave primria Codigo.
Portanto o DbLookupComboBox trabalha com duas tabela simultanea-
mente, uma que fornece os dados para a lista e outra que est associa-
da ao DbLookupComboBox. A tabela abaixo explica as propriedades
relativas a esta vinculao.
Indica qual campo ser mostrado na lista do
quadro combo.
ListField
Indica qual o campo da tabela acima ser
usado como vnculo.
KeyField
Determina a tabela que fornecer os dados
para a lista.
ListSource
Indica o campo associado. DataField
Indica qual tabela associada. DataSource
Uso Propriedade
Pgina: 132
Delphi 5

Celta Informtica - F: (11) 4331-1586
Si ga a tabel a abai xo para determi nar as propri edades do
DbLookupComboBox.
NOME ListField
Codigo KeyField
dsrClientes ListSource
Codigo Data Field
dsrVendas Data Source
Valor Propriedade
A lista de clientes ser vinculada atravs do campo Codigo mas estar
exibindo ao usurio, o campo Nome.
O componente DBRadioGroup apresenta uma srie de opes
predefinidas a serem selecionadas pelo usurio, contendo um boto para
cada opo. Estas opes so determinadas pela propriedade Items.
O valor do campo na tabela associada ao DBRadioGroup, ser o mes-
mo valor do boto selecionado.
Selecione o DBRadioGroup e edite a propriedade Items, configurando
trs opo para produtos vendidos, de acordo com o modelo a seguir.
Pgina: 133
Delphi 5

Celta Informtica - F: (11) 4331-1586
Altere outras propriedades DBRadioGroup conforme a tabela mostrada
abaixo:
NOME ListField
Codigo KeyField
dsrClientes ListSource
Codigo Data Field
dsrVendas Data Source
Valor Propriedade
Salve o formulrio com o nome de VendasUnt.Pas. A sua forma final
mostrado abaixo.
O prximo formulrio ser a abertura do programa. A partir dele sero
chamados os dois formulrios construdos anteriormente.
Acrescente um formulrio vazio ao projeto e construa-o da seguinte for-
ma:
Pgina: 134
Delphi 5

Celta Informtica - F: (11) 4331-1586
A propriedade Hint dos SpeedButtons, contm o texto que ser mos-
trado quando o mouse ficar parado por alguns instantes sobre o boto.
Define ShowHint:=True, para ativar esta funo.
Os dois controles DBNavigator tambm possuem a propriedade Hint,
defina para eles ShowHint:=True e altere o texto que ser mostrado ao
usurio modificando a propriedade Hints.
Pgina: 135
Delphi 5

Celta Informtica - F: (11) 4331-1586
Com isto conclumos a construo da interface grfica com o usurio.
Temos ento no projeto trs formulrios: frmControle, frmClientes e
frmVendas. Salvos em suas respectivas unidade: ControleUnt,
ClientesUnt e VendasUnt.
Comearemos o cdigo pelo frmControle.
implementation
uses
VendasUnt, ClientesUnt;
{$R *.DFM}
procedure TfrmControle.spbSairClick(Sender: TObject);
begin
Close;
end;
procedure TfrmControle.spbVendasClick(Sender: TObject);
begin
frmVendas.Show;
end;
procedure TfrmControle.spbClientesClick(Sender: TObject);
begin
frmClientes.Show;
end;
Cdigo para frmVendas.
procedure TfrmVenda.btnSairClick(Sender: TObject);
begin
frmVenda.Hide;
{o mtodo Hide esconde o Formulrio, mas no o
elimine da memria, enquanto que o mtodo Close
retira o formulrio da memria }
end;
Pgina: 136
Delphi 5

Celta Informtica - F: (11) 4331-1586
Antes de compilar o projeto, verifique se o formulrio inicial do programa
mesmo o frmControle. No menu Project >> Option..., defina o formu-
lrio frmControle como o Main Form
Execute o programa pressionando F9.
Pgina: 137
Delphi 5

Celta Informtica - F: (11) 4331-1586
INTEGRANDO MS-WORD COM DELPHI
Na paleta Server do Delphi encontramos diversos componentes que per-
mitem uma conexo COM (Components Object Model) com a famlia
Office. O padro COM, desenvolvido pela Microsoft, oferece mais recur-
sos ao programador que o uso da OLE Automation. Com estes compo-
nentes o programador pode automatizar tarefas utilizando recursos de
outros programas.
possvel criar um relatrio no Word e depois realizar alteraes atravs
de um programa feito em Delphi. Facilitando a vida de usurios que
necessitam editar estes relatrios, criando uma personalizao a partir
de um documento padro.
Como exerccio inicial, iremos criar um documento no Word com o texto
escrito no componente Memo do projeto Bloco de notas.
Abra o projeto Bloco de Notas construdo anteriormente. Adicione um
boto e os componentes WordApplication e WordDocument da paleta
Server.
Altere o nome dos componentes:
WD WordDocument
WA WordApplication
btnWord Button1
Pgina: 138
Delphi 5

Celta Informtica - F: (11) 4331-1586
Digite o seguinte cdigo para o boto de comando.
procedure TfrmBlocoNotas.btnWordClick(Sender:
TObject);
var
NomeArquivo: OLEVariant;
begin
WA.Connect; //Inicializa o Word
WD.Activate; //Exibe o aplicativo Word
WD.NewInstance; //Cria um novo documento
WD.Content.InsertAfter(memTexto.Lines.Text);
//Insere texto
NomeArquivo:=C:\Temp\Bloco.doc;
//String em OLEVariant
WA.ActiveDocument.SaveAs(NomeArquivo,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam);
WD.Close; //Fecha documento
end;
Inicialmente dada a abertura do Word e depois cria-se um novo docu-
mento. A procedure InsertAfter adiciona um texto o final do documento,
mas poderia ser InsertBefore para texto antes.
Na lista de code completion possvel observar todos os procedimentos
e funes associadas cada um desses objetos. Na ajuda do WordBasic
possvel encontrar detalhes sobre a operao de cada procdimento.
A partir do Word abra o Editor do Visual Basic (Ferramentas >> Macro) e
na sua ajuda procure por SaveAs, escolhendo a opo Mtodo SaveAs.
Note que este mtodo requer a definio de onze parmetros para salvar
o arquivo. Mas para salvar o texto digitado no programa, necessrio
apenas informar o nome do arquivo a ser salvo, mantendo os demais
parmetros vazios. Isto faz o Word manter os valores padro para cada
opo de salvamento.
Execute o programa. Digite algum texto no Memo e depois d um clique
no boto Word, notando que o texto ser escrito no documento, salvo e
depois fechado.
Pgina: 139
Delphi 5

Celta Informtica - F: (11) 4331-1586
Segundo exemplo com o uso dos componentes COM para Word ser
feito com o programa de Banco de dados. Este programa ter um boto
no formulrio Vendas que ao ser clicado, abrir um documento modelo,
alterar algumas palavras, baseadas no pedido corrente, salvando o do-
cumento com outro nome.
Abra o programa Banco de dados criado anteriormente, incluindo um
componente WordApplication e um boto no formulrio frmVendas.
No Word digite um documento semelhante ao mostrado na figura a se-
guir, mantendo as palavras chave que sero substitudas pelo programa:
DATAHOJE, NUMEROPEDIDO, NOMECLIENTE,PRODUTONOME,
QUANTIDADEPRODUTO e VALORTOTAL. Salve este documento com
o nome de Recibo.doc.
Pgina: 140
Delphi 5

Celta Informtica - F: (11) 4331-1586
A maneira mais fcil de saber quais mtodos implementar no programa
em Delphi para efetuar as mudanas necessrias no texto, criar uma
macro no Word e depois editar e copiar no Code explorer traduzindo-a
para a linguagem Object Pascal, pois ela estar em WordBasic.
Grave uma macro substituindo a palavra DATAHOJE por qualquer outra,
pois o que ns desejamos apenas a sintaxe utilizada pelo Word. A
listagem a seguir mostra uma macro que substitui o texto DATAHOJE
por 24 de Janeiro com a opo de substituir todas.
Sub Macro1()

Macro1 Macro
Macro gravada 24/07/00 por Jair

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = DATAHOJE
.Replacement.Text = 24 de Janeiro
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace=wdReplaceAll
End Sub
Pgina: 141
Delphi 5

Celta Informtica - F: (11) 4331-1586
Na unidade do formulrio frmVendas, acrescente um procedimento cha-
mado Substituir que ter por funo substituir cada palavra do documen-
to. Este procedimento receber dois parmetro que so o texto a ser
substitudo e o substituto.
Na implementao do procedimento Substituir, cole a macro gravada no
Word.
Associe os mtodos ao componente WordApplication (WA) e retire os
mtodos de limpeza da procura (ClearFormatting) que sero utilizados
somente uma vez. A seguir, traduza para Object Pascal.
procedure btnReciboClick(Sender: TObject);
procedure Substituir(Texto, TextoSub: String);
private
{ Private declarations }
implementation
procedure TfrmVendas.Substituir(Texto, TextoSub: String);
{Texto contm a palavra que ser substituda e
TextoSub a substituta}
var
Repor: OLEVariant;
//Tipo de varivel aceita nos mtodos Word
begin
Repor:= wdReplaceAll;
//Constante definida em Word97.pas
with WA.Selection.Find do
begin
Text := Texto;
Replacement.Text := TextoSub;
Forward := True;
Wrap := wdFindContinue;
//Constante definida em Word97.pas
Format := False;
MatchCase := True;
// = True para no ser tudo maisculo
MatchWholeWord := False;
MatchWildcards := False;
MatchSoundsLike := False;
MatchAllWordForms := False;
Pgina: 142
Delphi 5

Celta Informtica - F: (11) 4331-1586
end;
WA.Selection.Find.Execute(EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,
EmptyParam,Repor);
end;
O evento OnClick do boto, abre o arquivo Recibo.doc, limpa as
formataes de procura, chama o procedimento Substituir para cada
campo do documento, atribuindo a eles os valores do registro corrente
nas tabelas, e por ltimo salva com outro nome e fecha o documento.
procedure TfrmVendas.btnReciboClick(Sender: TObject);
var
NomeArquivo: OLEVariant;
begin
NomeArquivo:=C:\Temp\Recibo.doc;
WA.Documents.Open(NomeArquivo,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,
EmptyParam);
WA.Selection.Find.ClearFormatting;
WA.Selection.Find.Replacement.ClearFormatting;
Substituir (DATAHOJE,FormatDateTime
(dd de mmmm de yyyy,Date));
Substituir(NUMEROPEDIDO,tblVendasNumero.Value);
Substituir(NOMECLIENTE,tblClientesNome.Value);
Substituir(PRODUTONOME,tblVendasProduto.Value);
Substituir(QUANTIDADEPRODUTO,tblVendasQuantidade.AsString);
Substituir(VALORTOTAL,tblVendasValor.AsString);
NomeArquivo:=C:\Temp\Recibo +
tblVendasNumero.Value + .doc;
WA.ActiveDocument.SaveAs(NomeArquivo,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam);
WA.ActiveDocument.Close(EmptyParam,EmptyParam,EmptyParam);
end;
Pgina: 143
Delphi 5

Celta Informtica - F: (11) 4331-1586
Execute o programa e no formulrio frmVendas, clique no boto Recibo
para ver o Word abrir o documento, alterar o texto, salvar e fechar com
outro nome.
Pgina: 144
Delphi 5

Celta Informtica - F: (11) 4331-1586
LISTA DE EXERCCIOS
1. Qual a diferena entre um programa feito para trabalhar sob o DOS
e outro construdo atravs do Delphi?
2. O que encontramos na Paleta de Componentes?
3. Qual a funo da janela Object Inspector?
4. Quais os passos para desenvolver um programa em Delphi aps a
anlise do projeto?
5. No primeiro programa que desenvolvemos, coloque um boto de
comando que apague o contedo do label, e outro que finalize o pro-
grama.
6. Na calculadora, mesmo redefinindo a propriedade TabStop do Edit
de resultado, o usurio poder alterar o resultado da operao. Que
outro controle poderamos utilizar no lugar de um TEdit para exibir o
resultado sem que o usurio possa alterar seu valor? Altere o proje-
to.
7. O cone escolhido para representar o projeto, no estar presente
no formulrio. Qual propriedade deveremos alterar para que o cone
representante do projeto tambm esteja no formulrio? Responda e
execute.
8. Altere os botes do Jogo da Velha para o tipo BitBtn, e reconstrua o
projeto para alterar as propriedades Kind e Caption, exibindo nos
botes os cones - e .
9. No Jogo da Velha, sempre o computador inicia uma nova partida.
Altere o cdigo para que o programa pergunte ao usurio quem inici-
ar uma nova partida.
10. No projeto Bloco de Notas, quando escolhemos a opo Sair, o
programa no pergunta se queremos salvar as alteraes realiza-
das no texto. Inclua uma varivel booleana na seo Implementation,
alterando o seu valor no procedimento Memo1Change e verifican-
do-a no momento de encerrar o programa.
Pgina: 145
Delphi 5

Celta Informtica - F: (11) 4331-1586
11. Inclua mais um boto no Relgio Despertador com a opo de
Soneca, soando o Beep dez minutos aps o primeiro despertar.
12. Construa um projeto que mostre todos os tipos de preenchimentos
(hachuras) dentro de crculos em um nico formulrio.
13. Construa um exemplo semelhante ao da luz em movimento, mas
que a figura ao invs de ser desenhada em outro aplicativo, seja
desenha por instrues (ellipse e rectangle) contidas dentro do pro-
grama em Delphi.
14. Substitua o controle ComboBox por um ListBox no exemplo de
Catlogo, com pesquisa pelo nmero do telefone.
15. No ltimo exemplo, crie mais uma tabela de Estoque, e a cada
venda realizada os valores de estoque devero ser atualizados.
16. Crie mais duas tabelas, uma de Fornecedores e outra de Com-
pras, semelhantes a Clientes e Vendas, e acrescente os campos ao
seu critrio.
Celta Informtica
http://www.celtainformatica.com.br