You are on page 1of 111

DELPHI 4

SUMRIO
PRIMEIROS PASSOS________________________________________________________________________________
ANATOMIA DE UMA JANELA___________________________________________________________________________
BARRA DE MENU, BARRA DE FERRAMENTAS E PALETA DE COMPONENTES_______________________________________
Barra de Ferramentas_____________________________________________________________________________
PALETA DE COMPONENTES___________________________________________________________________________
JANELAS DO DELPHI________________________________________________________________________________
MEU PRIMEIRO PROGRAMA_______________________________________________________________________
ADAPTAR AS PROPRIEDADES DOS OBJETOS_______________________________________________________________
ESCREVER O CDIGO PARA OS EVENTOS ASSOCIADOS._______________________________________________________
EXEMPLO I - CALCULADORA_______________________________________________________________________
PROPRIEDADES__________________________________________________________________________________
BorderStyle_____________________________________________________________________________________
Default_________________________________________________________________________________________
Tabstop_________________________________________________________________________________________
Name__________________________________________________________________________________________
Caption________________________________________________________________________________________
Text____________________________________________________________________________________________
MTODO________________________________________________________________________________________
Setfocus________________________________________________________________________________________
VARIVEIS NO DELPHI_______________________________________________________________________________
Formas de Declarar uma Varivel___________________________________________________________________
FORMATAO DE NMEROS___________________________________________________________________________
Formatando Data e Hora_________________________________________________________________________
MODIFICANDO A CALCULADORA_______________________________________________________________________
DEPURAO_______________________________________________________________________________________
EXEMPLO II - JOGO DA VELHA_____________________________________________________________________
UNIDADE UNIT!___________________________________________________________________________________
EXEMPLO III - BLOCO DE NOTAS___________________________________________________________________
EXEMPLO IV - RELGIO DESPERTADOR____________________________________________________________
MTODOS GRFICOS______________________________________________________________________________
DESENHO DE PONTO________________________________________________________________________________
CORES___________________________________________________________________________________________
DESENHO DE LINHAS________________________________________________________________________________
DESENHO DE RET"NGULOS___________________________________________________________________________
DESENHO DE ELIPSES_______________________________________________________________________________
FIGURAS__________________________________________________________________________________________
EXEMPLO V - CATLOGO__________________________________________________________________________
INSERINDO UMA NOVA UNIDADE_______________________________________________________________________
TIPOS DE DADOS___________________________________________________________________________________
REGISTROS________________________________________________________________________________________
PONTEIRO DE REGISTROS____________________________________________________________________________
BANCO DE DADOS SIMPLES________________________________________________________________________
DATABASE DES#TOP________________________________________________________________________________
LISTA DE EXERCCIOS______________________________________________________________________________
P$%&'() 1
DELPHI 4
Delphi 4
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, caixas de dilogo e acesso e tabelas de bancos de dados, e foi
desenvolvida 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 desejado, dentro de um formulrio. O formulrio ser a janela do
aplicativo apresentada ao usurio.

O Delphi trabalha com eventos que do incio alguma rotina de trabalho, ou seja, o
programa fica parado at que um evento ocorra. Ele utiliza o modelo orientado objetos,
permitindo alm do uso de objetos existentes, tambm a criao de outros tantos.
Um programa tradicional, feito para ser executado em DOS, organizado 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 outros 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 rotinas externas, tambm chamadas de mtodos, que podem ser acessadas
externamente.
P$%&'() 2
DELPHI 4
Um carro um objeto que possui propriedades e mtodos. A tabela abaixo lista algumas
propriedades e comportamentos do objeto real carro.
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.
ANATOMIA DE UMA JANELA
A figura abaixo, mostra uma janela tpica do Windows e a denominao de seus
componentes bsicos.
Moldura - Os quatro lados da janela, que definem seu tamanho.
Barra de Ttulo - Acima da moldura superior como nome da janela e documento corrente.
Menu de Controle - esquerda da Barra de Ttulo. Um boto com um cone que
representa o programa.
Botes de Tamanho - direita da Barra de Ttulo. So dois botes, no primeiro temos um
trao, o outro com duas janelinhas ou uma janela desenhadas. Se forem duas
janelinhas, mostra que a janela est maximizada, e se for uma janela um pouco
maior, mostra que a janela est em seu tamanho normal e pode ser maximizada. O
boto com um trao serve para minimizar a janela.
Barra de Menu - Est abaixo da barra de ttulo e contm as opes de controle do
aplicativo.
P$%&'() 3
Propriedades Mtodos
cor dar partida
comprimento mudar marcha
potncia do motor acelerar
tipo de pintura frear
DELPHI 4
rea do Cliente - a parte interna da janela, tambm chamada de rea do documento,
utilizada para inserir os controles da nossa aplicao.
rea Externa Janela - sua Mesa de Trabalho onde voc pode ter tantos aplicativos
abertos quantos necessitar e a memria do seu computador permitir.
Janela - Uma Janela plena quando podemos dimension-la (mini, maxi e restaur-la) e
mov-la.
BARRA DE MENU, BARRA DE FERRAMENTAS E PALETA DE COMPONENTES
Baa !" F"a#"$%a&
PALETA DE COMPONENTES
A Paleta de Componentes, possui todos os controles que iremos precisar para desenharmos
nossa janela - formulrio - como um programa de desenho livre. Para incluir um controle no
formulrio, existem dois mtodos:
P$%&'() 4
DELPHI 4
1 - Click Duplo no cone da paleta de componentes. nsere o controle no centro do
formulrio com um tamanho padro.
2 - Selecionar o cone na caixa de ferramentas e depois dar um clique no formulrio,
na posio desejada para o objeto (canto superior esquerdo deste).
Podemos dimensionar estes controles, depois de inseridos, a qualquer momento durante o
desenvolvimento. Primeiro, selecionamos o controle dando um clique em cima dele e
depois o dimensionamos arrastando um dos oito botes dimensionadores que circundam
este objeto.
P$%&'() 5
DELPHI 4
JANELAS DO DELPHI
Formulrio
a janela que aparece no centro da tela do Delphi. Essa a janela que estamos
projetando. Quando rodarmos o aplicativo, ser ela que ir aparecer com os objetos que
ns incorporamos.
Controles
Existem vrios tipos de objetos no Delphi, entre eles, formulrios e controles. 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 nspector
Nesta janela escolhemos como sero as caractersticas de cada objeto do formulrio
(botes de comando, quadros de texto, formulrios, e outros), e a que eventos eles
respondero, definindo como eles sero apresentados e operados pelo cdigo. Cada
objeto possui um conjunto especfico de propriedades, com seus valores, associadas a eles.
Ao trabalharmos nos diferentes objetos, a janela Object Inspector nos permitir 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.
Existem propriedades que podemos mudar enquanto construmos nosso projeto, ou seja,
em tempo de projeto, e outras propriedades que s podemos mudar durante a execuo
do programa, neste caso em tempo de execu!o.
P$%&'() 6
DELPHI 4
Na janela Object nspector mostrada anteriormente, temos algumas das propriedades do
formulrio assim que iniciamos o Delphi.
Caixa de Objeto - Est caixa mostra o objeto atualmente selecionado, atravs dela tambm
poderemos selecionar todos os objetos do formulrio 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 comando), 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 alores - Exibe o valor da propriedade correspondente.
P$%&'() 7
DELPHI 4
MEU PRIMEIRO PRO"RAMA
Para iniciar, vamos construir um programa que quando for dado um clique no boto de
comando, ser mostrada uma mensagem. E posteriormente poderemos alterar a
apresentao desta mensagem atravs de outros botes.
Existem trs passos principais para a escrita de uma aplicao no Delphi que iremos seguir:
#esen$ar as janelas %ue se deseja usar&
nserir no formulrio os controles que sero necessrios
Adaptar as propriedades dos objetos&
Alterar as propriedades dos controles s necessidades da aplicao
Escre'er o c(di)o para os e'entos 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.
#esen$ar as janelas %ue se deseja usar&
1 - Comeamos inserindo um *abel (Legenda) e um +ot!o de ,omando no
formulrio, de uma das duas maneiras:
a) Dando um duplo clique na barra de ferramentas no 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 - Arraste o Boto para as coordenadas (40,80) e o Label para (8,16).
P$%&'() 8
DELPHI 4
4 - Observe que, quando o controle estiver selecionado, poderemos arrast-lo e
dimension-lo dentro do formulrio utilizando os botes dimensionadores. Enquanto
movemos o controle, nos mostrada a posio, e quando dimensionamos aparecem as
dimenses.
ADAPTAR AS PROPRIEDADES DOS OBJETOS
Para alterar as propriedades de um objeto, ele tem que estar selecionado (com os oito
pontos dimensionadores visveis), depois procurar o nome da propriedade a ser alterada, na
janela Object nspector, e selecionar (no caso de valores padro) o seu valor, ou ento
escrever um novo valor.
1 - Dimensione o formulrio da seguinte maneira:
Selecionar a propriedade -ei)$t, e atribuir a ela o valor de 150.
P$%&'() 9
DELPHI 4
Selecionar a propriedade .idt$ e dar o valor de 180.
Estes nmeros correspondem a Pixels, que so os pontos do monitor. Sendo o tamanho do
objeto no monitor dependente da resoluo de vdeo utilizada pelo computador.
Altere tambm as propriedades /ame e ,aption. 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 portuguesas) 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 assim:
P$%&'() 10
DELPHI 4
Agora, altere as propriedades do 0*abel e do 0+utton. O caractere 1 quando utilizado na
propriedade Caption de Botes ir sublinhar o caracter seguinte a ele, identificando-o como
atalho para o Windows
Aps alterarmos a propriedade Caption do controle Label este ficar pequeno, pois a
propriedade AutoSi2e True, ou seja, o tamanho do Label estar sempre de acordo com o
contedo de Caption.
P$%&'() 11
DELPHI 4
ESCREVER O CDIO PARA OS EVENTOS ASSOCIADOS!
O cdigo escrito na janela ,ode editor, para acess-la, selecione o boto Iniciar e na
janela Obje!t "nspe!tor, chame a divisria E#ents dando um duplo clique na parte direita da
linha que contm o evento On,lic3 - a rotina escrita para este evento, ser executada
quando o boto Iniciar for clicado.
Janela Code Editor
Nesta janela observamos o nome da procedure, identificando qual o objeto e o evento que
dar incio execuo do cdigo, e onde est localizado este objeto. O parmetro Sender
informa ao Delphi qual componente recebeu o evento que chamou a execuo deste
procedimento.
P$%&'() 12
DELPHI 4
Todas as instrues a serem executadas por um procedimento devem estar entre as
palavras reservadas +e)in e End.
O ,ode Editor tambm pode ser acessado dando-se um duplo clique no objeto que se quer
criar um cdigo. Cada objeto tem um evento que mais comumente utilizado, e com este
evento que o Delphi iniciar o Code Editor quando acessado desta forma, isto no impede
que criemos outros cdigos utilizando mais de um evento para o mesmo componente.
O nosso projeto de ncio, mostrar uma mensagem no Label (objeto) com um Click
(evento) no Boto "niciar (objeto). Ou seja, iremos alterar a propriedade Caption de
lblMensagem, esta propriedade contm o que ser mostrado ao usurio.
Atribumos valores a uma propriedade de objeto seguindo o padro:
objeto + . + propriedade + := + valor da propriedade ;
Abra o Code Editor para o boto de comando e digite o cdigo conforme a figura a seguir.
Repare que ao digitar o ponto aps LblMensagem, e aguardar alguns instantes, o Delphi
exibir uma lista de propriedades e mtodos do controle Label.
Para escolher uma propriedade do LblMensagem, selecione-a com as setas de direo e
ento pressione Enter, inserindo-a na linha de comando. Ou ento, digite a primeira letra
da propriedade, selecionando-a.
P$%&'() 13
DELPHI 4
Continue com o cdigo, seguindo a figura mostrada abaixo. Quando for dado um clique em
niciar, ser mostrada a mensagem "Voc deu um clique em niciar.
Clique sobre o boto Run da barra de ferramentas ( ) para que o Delphi compile e
execute o projeto. Em seguida, selecione o boto niciar para ver o resultado.
Finalize a execuo do projeto teclando Alt456 ou no boto Finalizar ( ) da barra de ttulo
da janela.
Para alternar a visualizao entre o Formulrio e o Code Editor, utilize o boto 0o))le
5orm7Unit ( ) na barra de ferramentas ou a tecla 589.
P$%&'() 14
DELPHI 4
Existem propriedades que possuem valores predefinidos, quando escolhemos a
propriedade Ali)nment e damos um clique na seta da caixa de valor, aparecem os tipos de
alinhamento para o texto dentro do componente.
Selecione o objeto 0*abel atravs da Caixa de Objeto da janela Object nspector, e altere a
propriedade Ali)nment para ta,enter, para que o texto no TLabel fique centralizado.
Altere tambm a propriedade AutoSi2e para 5alse, e no Formulrio aumente o tamanho do
TLabel.

Alm das propriedades descritas acima, com padres pr-definidos, existem outras que
possuem inmeras escolhas, neste caso, ao invs de uma seta, observaremos trs pontos,
este o caso da propriedade Font.
P$%&'() 15
DELPHI 4
Quando selecionamos os trs pontos, aparece um Quadro de Dilogo onde escolheremos o
formato da fonte da mensagem apresentada.
No seu projeto Iniciar, teste as alteraes de fonte e observe as mudanas. Na figura a
seguir, foi utilizada a fonte Arial com tamanho de 14 pontos.
Observe na figura acima que o texto no coube na rea de exibio do Label e nem no
Formulrio, ns temos duas opes para que este texto aparea integralmente. A primeira,
alterar para True, a propriedade .ord.rap do *abel, esta propriedade insere uma
mudana de linha quando o texto atinge a margem direita do objeto. A segunda,
redimensionar o Label e o Formulrio. Como mostram as figuras a seguir.
P$%&'() 16
DELPHI 4
E:EMP*O I ; ,A*,U*A#ORA
Para iniciar um novo projeto, escolha a opo /e< Application do menu 5ile. No
salvando o projeto niciar anterior.
Para inserir vrios objetos repetidos no Formulrio, damos um clique no cone do objeto
escolhido enquanto pressionamos a tecla S$ift, ele ficar conforme a figura abaixo.
Dimensione e insira os controles Edit, utilizando a Paleta de Componentes, no formulrio
como o exemplo abaixo. Dimensionamos o formulrio no Delphi da mesma forma que no
Windows dimensionamos as janelas.
Logo aps, basta ir inserindo os controles (Edit) dentro do Formulrio, sem se preocupar
com a esttica. Aps inserir todos os componentes repetidos, clique no cursor bitmap em
forma de seta, isto desativar o boto selecionado anteriormente na Paleta de
Componentes.
Observe que os objetos Edit esto desalinhados, o Dephi nos oferece um recurso para
realizar rapidamente um alinhamento entre objetos.
Primeiro deveremos selecionar os objetos que queremos alinhar. Pressione a tecla S$ift
enquanto voc d um clique em cada um dos Edit, selecionando todos ao mesmo tempo
como mostra a figura a seguir.
P$%&'() 17
DELPHI 4
Depois disto, pressione o boto direito do mouse em cima de um Edit, para aparecer o pop-
menu. Escolha Ali)n&&&, aparecendo ento a janela Ali)nment.
Escolha Space e%uall= (igualmente espaado) para alinhamento horizontal, e 0ops (topo)
para o alinhamento vertical.
Aps o alinhamento, nosso Formulrio estar conforme a figura abaixo:
nsira os objetos restantes da maneira que preferir, posicionando-os de acordo com a figura
a seguir:
P$%&'() 18
DELPHI 4
Utilize o alinhamento -ori2ontal - ,enter in .indo< para o Button2.
Agora, altere as propriedades assinaladas dos Objetos conforme a figura a seguir:
Neste exemplo de projeto, digitaremos um nmero em Edit1, outro em Edit2, e quando for
dado um Clique em Button1, o resultado da multiplicao aparecer em Edit3. Para limpar
os Quadros de texto (Edit), usaremos o Button2.
O projeto ir trabalhar basicamente com dois eventos :
- Clique em Button1 (=)
- Clique em Button2 (Limpar)
Ento, para escrevermos o cdigo, daremos dar um Duplo Clique no Button1 - o Code
Editor ser exibido.
O editor de cdigo possui vrias ferramentas que auxiliam o programador durante a
digitao do programa. Uma delas a ,ode ,ompletion (concluso de cdigo), ela lista
as propriedades, mtodos e eventos apropriados classe exibida.
Aps digitar alor$%&, pressione ,trl4Espao para exibir a lista, procure a funo
Str0o5loat (transforma uma string em nmero com ponto flutuante) em seguida pressione
Enter.
P$%&'() 19
DELPHI 4
Outra ferramenta o ,ode 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 Str0o5loat necessita de um parmetro do tipo String (cadeia de
caracteres), que no nosso exemplo est na propriedade Text do Edit1.
Digite o restante do cdigo de acordo com a figura a seguir.
P$%&'() 20
DELPHI 4
Alterne para o evento OnClick do Button2. E entre com os comandos a seguir:
Execute o projeto. Para utiliz-lo, entre com um nmero em Edit1, outro em Edit2 e d um
Clique em ">, e o resultado da multiplicao aparecer em Edit3.
Note que alternamos os campos ativos com a tecla 0ab. A ordem de tabulao
corresponder ordem em que os controles foram colocados no formulrio. Esta ordem
determinada pela propriedade 0abOrder dos controles, caso o seu projeto no esteja,
coloque-o na seguinte ordem:
Para alterar esta propriedade basta selecionar o controle, e na janela Object nspector,
procure TabOrder e altere o seu valor, o Delphi no aceita controles com TabOrder de
mesmo valor.
Poderemos tambm alterar a ordem de Tab acessando o popup-menu. D um clique com o
boto direito em cima de qualquer componente escolhendo a opo TabOrder ( ),
abrindo o quadro de dilogo Edit 0ab Order, onde poderemos alterar a ordem de todos os
controles inseridos no formulrio. Modifique a ordem de acordo com a figura a seguir:
P$%&'() 21
Objeto 0abOrder
Edit1 0
Edit2 1
Edit3 2
Button1 3
Button2 4
DELPHI 4
Execute o projeto e observe as alteraes.
O usurio pode alterar o valor de Edit3 mesmo aps a multiplicao ter sido efetuada. Para
evitarmos isso, defina as propriedades 0abStop?>5alse e ReadOnl=?>0rue para o Edit3 e
ver que o usurio no ter mais acesso ao texto em Edit3.
Existem, nas aplicaes para Windows, botes de comando que so acionados com a tecla
Enter ou com um Clique. No nosso projeto este boto ser o Button1, por isso, a
propriedade #efault foi selecionada para True. Fazendo aparecer um contorno mais
espesso no boto, dando a indicao que se a tecla Enter for acionada, ocorrer o evento
OnClick no boto.
P$%&'() 22
DELPHI 4
PROPRIEDADES
B'!"S%()"
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
3 - bsSingle Fixa Simples, o formulrio s dimensionvel
atravs dos botes de minimizar e maximizar.
4 - bsSizeable Borda Redimensionvel
P$%&'() 23
DELPHI 4
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.
D"*a+)%
Retorna ou d o valor de um boto de comando em um formulrio;
object.Default :[= booleano]
Default= False
True
Quando esta propriedade de um TButton estiver como True o Delphi chamar o evento Click
sempre que a tecla Enter for pressionada.
Ex: Desejo que o boto BtnMultiplicar seja o default:
btnMultiplicar.Default := True;
P$%&'() 24
DELPHI 4
Desejo saber se o boto cmdMultiplicar default ou no, e o resultado ser
armazenado na varivel booleana Estado:
Estado := btnMultiplicar.Default;
Ta,&%'-
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 execuo 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 txtNum1 e armazen-la em uma
varivel que conter a ordem de tabulao do objeto:
Ordem_Tab:= editNum1.TabStop;
No ambiente Windows comum mudarmos o foco entre os controles com a tecla Tab.
Quando no quisermos que o usurio acesse determinado controle usando Tab, definimos a
propriedade TabStop desse controle como False.
Na#"
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;
P$%&'() 25
DELPHI 4
Ca-%.'$
objeto.Caption :[= string]
Determina o texto mostrado na barra de ttulo do formulrio, o texto dentro de um controle
ou um ttulo na barra de menu.
Ex: Alterar o Caption do boto Limpar aps o seu uso, basta inserir esta linha no
procedimento cmdLimpar_Click:
btnLimpar.Caption := 'niciar'
T"/%
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];
M"TODO
S"%*'0+&
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.
VARI#VEIS NO DELPHI
Varivel um local nomeado da memria, onde so guardados dados que podem ser
mudados em tempo de execuo. O nome de uma varivel 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, dependendo do tipo de dados que queremos que ela
armazene.
P$%&'() 26
DELPHI 4
F'#a& !" D"0)aa +#a Va.12")
As variveis so declaradas usando-se a palavra reservada @ar, o nome da varivel, dois
pontos e o tipo de dado a ser armazenado nesta varivel.
'ar
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 memria. declarada logo aps o
cabealho do procedimento.
2 - Varivel a nvel de Unidade (Unit); a varivel ser utilizada por todos os
procedimentos e funes da unidade. declarada logo aps a palavra 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.
P$%&'() 27
0ipos
Inteiros
/Amero de
+=tes
5aixa
Shortnt 1 -128 a 127
nteger 2 -32768 a 32767
Longnt 4 -2147483648 a 2147483647
Byte 1 0 a 255
Word 2 0 a 65535
0ipos
+ooleanos
Boolean 1 1 byte booleano
ByteBool 1 Byte - sized Booleano
WordBoll 2 Word - sized Booleano
LongBoll 4 Double - word - sized Booleano
0ipos
Reais
Real 6 2,9.10
-39
a 1,7.10
38
Single 4 1,5.10
-45
a 3,4.10
38
Double 8 5.10
-324
a 1,7.10
308
Extended 10 3,4.10
-4932
a 1,1.10
4932
Comp 8 -2
63+1
a 2
63-1
DELPHI 4
FORMATA$%O DE N&MEROS
A funo 5loat0oStr, transforma um nmero em texto, mas no padroniza a sua
apresentao. Caso necessitemos formatar um nmero a ser exibido, usaremos a funo;
5ormat5loat(formato , expresso), onde:
- formato = a maneira como dever ser mostrada a expresso.
- expresso = expresso numrica a ser formatada.
Formatando nmeros:
5ormato B positi'o B ne)ati'o B decimal
0 5 -5 1
0,00 5,00 -5,00 0,50
#.##0 5 -5 1
#.##0,0 5,0 -5,0 0,5
$#.##0;($#.##0) $5 ($5) $1
$#.##0,00;($#.##0,00) $5,00 ($5,00) $0,50
0% 500% -500% 50%
0,00E+00 5,00E+00 -5,00E+00 5,00E-1
Em "formato o nmero 0 ser mostrado ou trocado pelo caractere em sua posio, j o
nirus (#) no ser mostrado. Podemos inserir smbolos na funo Format, como no
exemplo: $ , % ou E.
F'#a%a$!' Da%a " H'a3
Para formatar data e hora usamos a funo 5ormat#ate0ime:
5ormat#ate0ime (formato , data);
5ormato Exibido
d/m/yy 10/5/98
dd-mm-yyyy 18-Ago-1998
dd-ddd 02-dom
hh:mm AM/PM 08:50 AM
h:mm:ss a/p 8:50:20 a
d/m/yy h:mm 03/07/98 9:30
P$%&'() 28
DELPHI 4
MODIFICANDO A CALCULADORA
No Formulrio da calculadora, selecione o boto de comando +utton8 e pressione a tecla
#elete. O boto de igual desaparecer do formulrio, mas o seu cdigo continuar no
editor de cdigo. Selecione o editor de cdigo, e observe que a procedure
TfrmCalculadora.Button1Click continua no mesmo lugar.
Modifique o formulrio TfrmCalculadora como o exemplo a seguir, inserindo um novo boto:
Na figura aparecem as propriedades Name de cada objeto
Selecione o Button1, copie ( ) e cole mais trs botes ( ). Depois
posicione-os de acordo com a figura:
Para que o +uttonB exiba o smbolo correto da diviso, primeiro altere a sua fonte para
Symbol. Depois, abra o Mapa de caracteres do Windows e procure pelo smbolo da diviso
na fonte Symbol, e ento copie e cole 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 nspector no Symbol, mas no se preocupe com este
problema.
Chame o procedimento para o +utton8 dando um duplo clique no boto de comando. Note
que antes este procedimento executava uma multiplicao, agora dever executar uma
soma. Usaremos tambm a funo FormatFloat para formatar a apresentao do resultado.
As duas variveis @alor8 e @alor9 que antes pertenciam a apenas um procedimento, agora
devero ser utilizadas pelos procedimentos das outras operaes. Para que isso ocorra,
P$%&'() 29
DELPHI 4
retire-as do procedimento TfrmCalculadora.Button1Click e declare-as na seo
mplementation da Unidade.
Substitua o tipo de operao em +utton8,lic3, e nos demais botes, utilizando as
ferramentas de Copiar e Colar.
Teste os vrios formatos de apresentao dos nmeros, alterando os parmetros de
apresentao da funo 5ormat5loat.
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 &#PR e o do Formulrio, &#5M. E outros arquivos de apoio que
so:
&,5" - armazena as definies de configurao do projeto.
&#O5 - contm o compilador e as definies de linker, diretrios de procura,
informao de verso, e assim sucessivamente.
&RES - contm os resources do projeto como o como o cone de aplicao, bitmaps
e cursores.
P$%&'() 30
DELPHI 4
Quando salvamos nosso projeto, o Delphi solicita apenas os nomes dos arquivos de
Unidade e Projeto, os outros ele cria automaticamente.
amos sal#ar o nosso projeto Cal!uladora'
No menu, selecione 5ile 7 Sa'eall ou ( ) e aparecer o quadro de dilogo de salvar do
Windows, pedindo para dar um nome ao arquivo do Formulrio, extenso 'pas( d o nome
de Cal!uladora)nt'pas e clique em Sal'ar. A seguir, aparecer o mesmo quadro pedindo
para dar um nome ao arquivo de projeto, extenso 'dpr( d o nome de Cal!uladora'dpr e
clique em Sal'ar. Os nomes dos arquivos da Unidade e do Projeto devero ser diferentes,
apesar da extenso j o ser.
O nosso projeto est salvo. Agora, precisamos escolher um cone que o representar na
tela do Windows. No menu principal do Delphi, selecione Project 7 Options&&&, e escolha a
pgina Application:
P$%&'() 31
DELPHI 4
Clique no boto *oad Icon&&& , e procure o cone 5inance&ico, no diretrio C+orland
S$aredCIma)esCIcons, escolha *brir para voltar janela Proje!t Options. D um ttulo ao
programa e pronto, o programa j possui um cone e um ttulo associados.
P$%&'() 32
DELPHI 4
Compile o projeto utilizando a opo Compile Calculadora do menu Project (
), gerando um novo arquivo executvel contendo as ltimas alteraes
realizadas sem executar o projeto. Agora, voc tem um programa executvel em qualquer
microcomputador que possua o sistema Windows, sem necessariamente ter o DELPH ou
de suas bibliotecas instalados.
Verifique no Windows Explorer todos os arquivos que compem este projeto.
P$%&'() 33
DELPHI 4
#EPURADEO
Quando construmos uma aplicao, possvel errarmos na sintaxe durante 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
ajudando-nos a resolver tais erros.
Quando o Delphi compila o programa (Ctrl+F9) e encontra algum erro de sintaxe ele mostra
a linha onde est o erro, dando uma dica do problema, na parte inferior da janela do ,ode
Editor.
Para praticarmos a depurao de programas, vamos construir 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:
Compile o programa pressionando Ctrl+F9, e observe os erros de sintaxe encontrados pelo
Delphi. So erros que indicam a no declarao ou existncia da varivel T e do objeto
Lista. A linha destacada em vermelho indica aonde o compilador parou.
P$%&'() 34
DELPHI 4
Declare a varivel T como do tipo inteiro semelhante i e altere a propriedade /ame da
*ist+ox para *ista, e compile novamente.
Agora nos foi apresentado um erro onde o tipo de dado requerido um (Strin)) mas o
fornecido outro (Inte)er). Para corrigir isto devemos transformar do contedo da varivel
0 em Strin) utilizando a funo Int0oStrFG na seguinte linha.
- Lista.tems.Add (ntToStr(T));
Aps esta correo, o compilador no detectar mais nenhum erro de sintaxe. Portanto,
execute este exemplo pressionando 5H.
P$%&'() 35
DELPHI 4
Observamos que a sada do programa no corresponde desejada, temos ento 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;
Mas a sada do programa ainda no est de acordo.
Vamos agora acompanhar o programa passo-a-passo verificando o valor das variveis.
Primeiro inserimos um ponto de parada (+rea3point), o programa ser executado 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.
P$%&'() 36
DELPHI 4
Quando for dado um clique no boto o programa ir parar e ser mostrada a janela do Code
Explorer. Para executar o programa passo-a-passo pressione 5I, at a linha indicada na
figura abaixo como linha corrente.
Para verificarmos o valor atual de uma varivel basta posicionar o ponteiro em cima dela e
aguardar uns instantes para o Delphi nos mostrar o seu valor.
Avance o programa aos passos at a finalizao, acompanhando a variao de valores.
Para a sada estar correta esto faltando os parnteses entre 5+i, que deve ser (5+i), para
executar primeiro a soma e depois a multiplicao.
Digite os parnteses e execute o programa, agora sem nenhum erro.
P$%&'() 37
DELPHI 4
E:EMP*O II ; JO"O #A @E*-A
Para iniciar um novo projeto, selecione /e< Application do menu 5ile. Caso voc ainda
no tenha salvo o seu projeto corrente, o Delphi abrir as janelas necessrias para salvar o
projeto. E s ento iniciar o novo projeto.
Vamos iniciar um projeto de Jogo da Velha, onde o usurio ir jogar contra o computador
que no "pensa as suas jogadas, pois ele trabalha com jogadas aleatrias, e ao final da
partida ser mostrado um quadro de mensagem informando quem ganhou a partida.
nsira um boto de comando no Formulrio dimensionando-o como um quadrado, como
mostra a figura.
Selecione o Boto, Copie-o (Ctrl+C) e Cole (Ctrl+V) mais oito botes iguais. Formando um
total de nove botes.
Estes botes de comando esto nomeados de Button1 a Button9, de cima para baixo.
Arraste-os de forma que fiquem como a figura a seguir.
P$%&'() 38
DELPHI 4
Nosso jogo ir modificar a propriedade Caption desses botes, mas para iniciar o jogo,
todos devem estar em branco. Primeiro devemos selecionar todos 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.
V at a janela Object Inspector e deixe a propriedade ,aption em branco. Qualquer
propriedade que for alterada enquanto a seleo estiver 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
nterface
mplementao
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 mesmo nome do arquivo .PAS, que a
contm.
Na seo nterface 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 mplementation so declarados os cdigos e variveis que
pertenam exclusivamente unidade.
P$%&'() 39
DELPHI 4
Na seo de Interface da nossa unidade est sendo definido o tipo TFrmPainel (o nosso
Formulrio) pertencente classe TForm, a seguir, so listados todos os controles, seus
tipos, e procedimentos pertencentes a este formulrio.
A figura abaixo mostra a listagem da Unit do nosso projeto:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs;
type
TFrmPainel class!TForm"
#$tton1% T#$tton;
#$tton&% T#$tton;
#$tton'% T#$tton;
#$tton(% T#$tton;
#$tton)% T#$tton;
#$tton*% T#$tton;
#$tton+% T#$tton;
#$tton,% T#$tton;
#$tton-% T#$tton;
private
+ Pri#ate de!larations ,
public
+ Publi! de!larations ,
end;
var
FrmPainel% TFrmPainel;
implementation
+-. /'01M,
end.
O projeto Jogo da Velha, utiliza dois procedimentos que no esto associados a nenhum
controle, so eles Jo2oNo#o e eri3i!ar, Estes procedimentos devem primeiro ser primeiro
declarados para depois serem implementados, declare os procedimentos Jo2oNo#o e
eri3i!ar na definio de tipo do formulrio como mostra a listagem abaixo. Logo mais,
P$%&'() 40
UNDADE <nome da unidade>;
NTERFACE
Seo de interface
MPLEMENTATON
Seo de implementao
FM.
DELPHI 4
faremos a implementao destes procedimentos que nada mais do que a construo do
seu cdigo.
Devemos declarar tambm a varivel +otao na seo Implementation. Esta varivel 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 conter
nmeros inteiros (arra= [1..9] of nteger;) ou strings.
Quando o projeto iniciar, o formulrio ser carregado na memria, neste momento ocorre um
evento On,reate. Neste evento colocaremos 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 a janela Object Inspector escolhendo o indicador E'ents, e d um duplo clique em
On,reate. Aparecendo o editor de cdigo com o cabealho do procedimento.
P$%&'() 41
DELPHI 4
Entre com o cdigo mostrado na figura abaixo:
No procedimento acima, temos a procedure Randomi2e que inicializa o gerador de
nmeros aleatrios utilizando como base o relgio do sistema. Nas prximas linhas
atribumos valores varivel Botao[ ], 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 vamos implementar a procedure JogoNovo na seo Implementation, como segue.
Declare tambm a varivel NumeroVezes que poder ser utilizada por todos os
procedimentos desta Unidade.
P$%&'() 42
DELPHI 4
Uma declarao de procedure tem a seguinte forma:
procedure Nome (Lista de Parmetros); Diretivas;
Declaraes Locais
be)in
nstrues
end;
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 podem ser precedidos pelas palavras reservadas 'ar ou const
indicando varivel ou constante.
Exemplos:
(X, Y: Real)
(var S: string; X: nteger)
(HWnd: nteger; Text, Caption: PChar; Flags: nteger)
(const P; : nteger)
As Diretivas informam procedure como ela tratar os parmetros e como ser a
construo deste procedimento em relao a outros anteriores.
No cabealho, observamos que o nome da procedure composto do nome do objeto que
contm a procedure(Form) e o nome da procedure.
O procedimento JogoNovo, inicia um novo jogo apagando todas as legendas dos botes e
fazendo uma nova jogada aleatoriamente.
P$%&'() 43
DELPHI 4
A varivel I do tipo inteiro (nteger) de uso exclusivo deste procedimento. Findo o
procedimento, ela deixar de existir.
Para apagar as legendas usamos a instruo for&&&to, que ir em loop apagando as
legendas. Aqui usamos a varivel Botao[ ] para identificar os botes do formulrio, com o
index I do loop for&&to. A instruo for&&&to, pode ser tambm for&&&do<nto, para
decrementar o valor da varivel de controle (I).
No exemplo, usamos somente uma declarao aps o do, se fossem necessrias mais
declaraes, teramos que usar be)in&&end; como uma maneira de agrupar estas
declaraes, indicando que todas fazem parte do loop for&&&to, como mostra o exemplo
abaixo :
for i%1 to ' do
begin
#otao.i/0Caption%11;
#otao.i21/0Caption%11;
#otao.i2&/0Caption%11;
end;
Na linha M?> Int FRandom K8LGM, atribumos um valor inteiro varivel M entre 1 e 10.
A procedure Random gera um nmero do tipo Real X sendo, 0<=X<1, multiplicamos este
nmero por 10 e pegamos a sua parte inteira, que apesar de ser um nmero inteiro do tipo
Real, no podendo us-lo para indicar um boto.
Para converter um nmero real em inteiro, podemos utilizar as funes 0runc ou Round.
0runc, retorna a parte inteira de um nmero, enquanto Round arredonda um nmero real.
No nosso cdigo utilizamos 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.
P$%&'() 44
Real 0runc Round
1,4 1 1
1,5 1 2
-1,4 -1 -1
2,5 2 2
-2,7 -2 -3
DELPHI 4
O evento OnClick nos botes que dar partida ao programa. O procedimento associado a
este evento, incrementar o nmero de jogadas (NumeroVezes), mudar a legenda do
boto e chamar o procedimento para verificar se o jogo terminou.
Construa o procedimento @erificar na seo de implementao da unidade, como segue:
procedure TFrmPainel03eri4icar !";
label 1,&;
var 5% integer;
begin
if !#$tton10Caption161" and !#$tton&0Caption161"
and !#$tton'0Caption161" then goto 1;
if !#$tton(0Caption161" and !#$tton)0Caption161"
and !#$tton*0Caption161" then goto 1;
if !#$tton+0Caption161" and !#$tton,0Caption161"
and !#$tton-0Caption161" then goto 1;
if !#$tton10Caption161" and !#$tton(0Caption161"
and !#$tton+0Caption161" then goto 1;
if !#$tton&0Caption161" and !#$tton)0Caption161"
and !#$tton,0Caption161" then goto 1;
i4 !#$tton'0Caption161" and !#$tton*0Caption161"
and !#$tton-0Caption161" then goto 1;
i4 !#$tton10Caption161" and !#$tton)0Caption161"
and !#$tton-0Caption161" then goto 1;
i4 !#$tton'0Caption161" and !#$tton)0Caption161"
and !#$tton+0Caption161" then goto 1;
repeat 5%Tr$nc !7andom 8 19" until #otao.5/0Caption11 ;
#otao.5/0Caption%1:1;
P$%&'() 45
DELPHI 4
if !#$tton10Caption1:1" and !#$tton&0Caption1:1"
and !#$tton'0Caption1:1" then goto &;
if !#$tton(0Caption1:1" and !#$tton)0Caption1:1"
and !#$tton*0Caption1:1" then goto &;
if !#$tton+0Caption1:1" and !#$tton,0Caption1:1"
and !#$tton-0Caption1:1" then goto &;
if !#$tton10Caption1:1" and !#$tton(0Caption1:1"
and !#$tton+0Caption1:1" then goto &;
if !#$tton&0Caption1:1" and !#$tton)0Caption1:1"
and !#$tton,0Caption1:1" then goto &;
if !#$tton'0Caption1:1" and !#$tton*0Caption1:1"
and !#$tton-0Caption1:1" then goto &;
if !#$tton10Caption1:1" and !#$tton)0Caption1:1"
and !#$tton-0Caption1:1" then goto &;
if !#$tton'0Caption1:1" and !#$tton)0Caption1:1"
and !#$tton+0Caption1:1" then goto &;
if ;$mero3e<es ( then
begin
ShowMessage !1Partida =mpatada1";
>ogo;o?o;
e@it;
end;
e@it;
1%
begin
ShowMessage !13ocA Ganho$1";
>ogo;o?o;
e@it;
end;
&%
begin
ShowMessage !1=$ Ganhei1";
>ogo;o?o;
=@it;
end;
end;
Logo aps o cabealho, temos as declaraes locais. Usamos a declarao label para
definir os locais de desvio da instruo )oto. E tambm declaramos a varivel I como do
tipo integer.
A instruo repeat de!lara45o until express5o; repete a declarao enquanto a expresso
for verdadeira. No nosso exemplo, o programa selecionar um boto aleatoriamente, at
que seja encontrado um boto "vazio - Caption:= 11, preenchendo-o com "O, indicando a
jogada do computador.
A procedure S$o<Messa)e, mostra um quadro de mensagem com o boto de O3. O
programa fica parado at que o usurio d um clique em Ok, retornando linha seguinte no
procedimento.
P$%&'() 46
DELPHI 4
O Windows possui quadros padronizados de mensagem que servem para emitir avisos e
recolher opes de tratamento dessas mensagens. Podemos incrementar o nosso programa
do Jogo da Velha, criando um quadro de mensagem com vrios botes e que retorne uma
resposta do usurio, indicando qual boto foi escolhido. Para isso utilizamos a funo
Messa)e+ox.
Esta funo pertence biblioteca do Windows (AP). O Delphi a relaciona ao objeto do tipo
0Application.
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, seguindo a tabela Tipo.
ttulo - ttulo do Quadro de Mensagem (barra de ttulo).
Mude o cdigo do procedimento @erificar, como mostrado abaixo.
1%
begin
7esposta%Bpplication0Message#o@
!13ocA ganho$, C$er >ogar ;o?amenteD1,13encedor1,'*";
if 7esposta + then Close;
>ogo;o?o;
e@it;
end;
&%
begin
7esposta%Bpplication0Message#o@
!1=$ ganhei, C$er >ogar ;o?amenteD1,13encedor1,'*";
if 7esposta + then Close;
>ogo;o?o;
e@it;
end;
P$%&'() 47
DELPHI 4
Argumento 0ipo para a funo Messa)e+ox
Valor Significado
0 Somente o boto de OK
1 Botes de OK e Cancelar
2 Botes Anular, Repetir e gnorar
3 Botes Sim, No, Cancelar
4 Botes Sim, No
5 Botes Repetir e Cancelar
16 Sinal de Stop
32 Sinal de Pesquisa
48 Sinal de Aviso
64 cone de nformao
0 Primeiro boto com foco
256 Segundo boto com foco
512 Terceiro boto com foco
Teste o projeto alterando o valor de tipo para Messagebox, faa a sua soma escolhendo um
item de cada seo.
A varivel Resposta, conter a resposta do usurio que segue o padro da tabela abaixo.
Valor Significado
1 Boto OK foi pressionado
2 Boto Cancelar foi pressionado
3 Boto Anular foi pressionado
4 Boto Repetir foi pressionado
5 Boto gnorar foi pressionado
6 Boto Sim foi pressionado
7 Boto No foi pressionado
No nosso caso, o programa verificar se o boto /!o foi pressionado, e se foi, fechar o
formulrio principal, encerrando o programa.
Em nosso 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.
P$%&'() 48
DELPHI 4
Primeiro apague as linhas entre be)in&&&end dos procedimentos relativos aos botes exceto
o +utton8,lic3. Compile o projeto (Ctrl+F9) para que o Delphi exclua estes procedimentos
do editor de cdigo - qualquer procedimento "vazio" ser excludo.
No Code Explorer, de um clique com o boto direito e no menu, escolha Rename e altere o
nome do procedimento +utton8,lic3 para +utton,lic3.
Aps a compilao, os procedimentos associados aos demais botes foram excludos do
editor de cdigos e como conseqncia, estes botes no respondero mais ao evento
On,lic3. Acesse a pgina E'ents do Object Inspector, associando a procedure
+utton,lic3 como resposta ao evento Onclic3 para todos os botes. Desta forma todos os
botes executaro o mesmo procedimento apartir do evento On,lic3.
P$%&'() 49
DELPHI 4
Por ltimo vamos alterar a procedure ButtonClick para que ela reconhea o boto que
recebeu o evento OnClick, alterando sua Caption.
procedure TFrmPainel0#$ttonClicE!Sender% T:FGect";
begin
;$mero3e<es%;$mero3e<es 2 1;
!Sender as T#$tton"0Caption% 161;
3eri4icar;
end;
O parmetro Sender indica qual objeto recebeu o evento acionador da procedure.
P$%&'() 50
DELPHI 4
E:EMP*O III ; +*O,O #E /O0AS
O nosso prximo projeto ser um editor de texto simples do tipo caractere, com ele
poderemos alterar o tipo e tamanho da fonte utilizada em todo o texto, recortar, colar e
copiar partes selecionadas, salvar e abrir nosso texto utilizando as caixas de dilogo padro
fornecidas pelo Delphi.
Monte o formulrio conforme o exemplo:
Defina a propriedade Ali)n do componente Memo como al,liente. Esta propriedade faz
com que o Memo ocupe toda a rea do cliente do formulrio, mesmo que ele 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 que trabalhamos so visveis, como TEdit, TButton, TForm e outros.
Os componentes no visveis, no aparecem na janela do usurio em tempo de execuo.
So eles, Timer, Menus, Caixas de dilogo comuns e controle de acesso a dados.
O nosso exemplo de Bloco de Notas, usar um menu e quatro caixas de dilogo.
Para comear a editar o menu, d um duplo clique no controle MainMenu que est dentro
do formulrio, para que a janela Menu #esi)ner aparea.
nesta janela que iremos construir o menu do nosso exemplo. Observe que o primeiro ttulo
j est selecionado.
V at a janela Object Inspector e mude a propriedade ,aption para 1Ar%ui'o e
pressione Enter - para acesso via teclado, usamos o "& comercial antes da letra que
P$%&'() 51
DELPHI 4
queremos que seja o atalho. Este procedimento, cria o menu Arquivo e move a barra de
destaque para o lado, d um clique logo abaixo da opo Arquivo inserindo um item deste
menu. Repare que o Delphi coloca um nome para este menu baseado na propriedade
Caption, neste caso Name:=Arquivo.
Monte as demais opes do nosso menu seguindo a janela 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. Defina as teclas de
atalho na propriedade S$ort,ut dos itens de menu.
Quando chegarmos ao item 5ormatar 5onte&&&, escolha a opo ,reate Submenu do
PopupMenu, para criar um submenu deste item.
P$%&'() 52
DELPHI 4
O sub-menu de 5ormatar 5onte&&&, dever estar igual a figura mostrada abaixo. Como o
Delphi no reconhece caracteres brasileiros, o nome que ele dar para o item tlico ser
tlico, suprimindo do Name o caractere ( Name:= tlico).
Feche a Menu Designer, voltando ao formulrio principal. nsira nele as caixas de dilogo
que iro formatar a fonte exibida no componente Memo, e as caixas que iro operar com o
disco (HD). Os componentes destas caixas esto na paleta #ialo)s do Delphi.
P$%&'() 53
DELPHI 4
Acabamos de desenhar o nosso formulrio, colocando todos os componentes a ele
pertencentes. Os visveis e os no visveis. Mesmo os componentes no visveis estando
em cima do Memo, no atrapalharo a apresentao do texto.
Salve seu trabalho para darmos 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 programa 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 /o'o do menu, para chamar o procedimento associado. Este
procedimento ir 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:
procedure TPrincipal0;o?o1ClicE!Sender% T:FGect";
begin
Memo10Clear;
7ecortar10=naFled%False;
Copiar10=naFled%False;
Colar10=naFled%False;
end;
P$%&'() 54
DELPHI 4
A opo Abrir trabalhar com a caixa de dilogo OpenDialog, verificando o valor retornado
por Execute e carregando o contedo do arquivo selecionado, na propriedade Lines do
objeto Memo.
procedure TPrincipal0BFrir1ClicE!Sender% T:FGect";
begin
i4 :penDialog10=@ec$te then
Memo10Hines0HoadFromFile!:penDialog10Filename";
end;
Digite o cdigo para as outras caixas de dilogo. Elas trabalham alterando as propriedades
do Memo aps as mudanas realizadas pelo usurio.
procedure TPrincipal0Sal?ar1ClicE!Sender% T:FGect";
begin
i4 Sa?eDialog10=@ec$te then
Memo10Hines0Sa?eToFile!Sa?eDialog10Filename";
end;
procedure TPrincipal0Fonte1ClicE!Sender% T:FGect";
begin
FontDialog10Font%Memo10Font;
{inicializa a FontDialog com a font de Memo}
i4 FontDialog10=@ec$te then
Memo10Font%FontDialog10Font;
end;
A linha entre chaves indica um comentrio, no sendo tratada pelo compilador
do Delphi.
procedure TPrincipal0Cor1ClicE!Sender% T:FGect";
begin
ColorDialog10Color%Memo10Color;
i4 ColorDialog10=@ec$te then
Memo10Font0Color%ColorDialog10Color;
end;
Quando o programa comea a ser executado, o evento OnCreat ocorre com o Formulrio,
no procedimento deste evento, iremos apagar o contedo do Memo e desabilitar as opes
do menu Editar.
procedure TForm10FormCreate!Sender% T:FGect";
begin
Memo10Clear;
7ecortar10=naFled%False;
Copiar10=naFled%False;
Colar10=naFled%False;
end;
P$%&'() 55
DELPHI 4
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 TPrincipal0Memo1Change!Sender% T:FGect";
begin
7ecortar10=naFled%Tr$e;
Copiar10=naFled%Tr$e;
end;
Os recursos de Recortar, Colar e Copiar utilizam o objeto 0,lip+oard. Com ele ns
usamos a rea de transferncia do Windows e podemos trocar informao entre programas.
O objeto TMemo possui mtodos prprios de trabalhar com o Clipboard, eles esto nos
procedimentos para os itens do menu Editar mostrados abaixo.
procedure TPrincipal07ecortar1ClicE!Sender% T:FGect";
begin
Memo10C$tToClipFoard;
Colar10=naFled%Tr$e; {habilita o item Colar}
end;
procedure TPrincipal0Copiar1ClicE!Sender% T:FGect";
begin
Memo10CopyToClipFoard;
Colar10=naFled%Tr$e;
end;
procedure TPrincipal0Colar1ClicE!Sender% T:FGect";
begin
Memo10PasteFromClipFoard;
end;
As opes /e)rito e Itlico, formataro o texto e mudaro tambm a propriedade ,$ec3ed
do item no menu, indicando que elas esto selecionadas. Os procedimentos associados
negrito e itlico, trabalham juntos com o procedimento 5onte que verificar o estado das
opes alterando as propriedades da fonte do Memo.
nicie declarando o procedimento 5onte na seo de definio do tipo TPrincipal - nosso
formulrio. E depois, implemente-o na seo Implementation.
procedure Memo1Change!Sender% T:FGect";
procedure 7ecortar1ClicE!Sender% T:FGect";
procedure Copiar1ClicE!Sender% T:FGect";
procedure Colar1ClicE!Sender% T:FGect";
procedure Fonte;
private
{ Private declarations }
public
{ Public declarations }
end;
P$%&'() 56
DELPHI 4
implementation
{$R *.DFM}
procedure TPrincipal0Fonte !";
begin
if !;egrito10ChecEedFalse" and !5tlico10ChecEedFalse" then
Memo10Font0Style% ./;
if !;egrito10ChecEedTr$e" and !5tlico10ChecEedFalse" then
Memo10Font0Style% .4s#old/;
if !;egrito10ChecEedFalse" and !5tlico10ChecEedTr$e" then
Memo10Font0Style% .4s5talic/;
if !;egrito10ChecEedTr$e" and !5tlico10ChecEedTr$e" then
Memo10Font0Style% .4s#old, 4s5talic/;
end;
procedure TPrincipal0;egrito1ClicE!Sender% T:FGect";
begin
;egrito10ChecEed% ;ot ;egrito10ChecEed;
Fonte;
end;
procedure TPrincipal05tlico1ClicE!Sender% T:FGect";
begin
5tlico10ChecEed% ;ot 5tlico10ChecEed;
Fonte;
end;
Quando o usurio clicar no menu Sair, fechar o formulrio, finalizando a execuo do
programa pois este o nico formulrio do nosso aplicativo. sto feito com o uso do
mtodo Close.
procedure TForm10Sair1ClicE!Sender% T:FGect";
begin
Close;
end;
Salve seu trabalho, e teste o programa pressionando F9.
Ns j aprendemos a associar um cone ao nosso projeto, agora iremos aprender a
desenhar um, utilizando o aplicativo Ima)e Editor do Delphi. Para inicializ-lo, v at a
opo Tools do menu principal do Delphi, e escolha mage Editor.
P$%&'() 57
DELPHI 4
Escolha a opo /e< do menu 5ile, e Icon5ile.
Na janela de propriedades, escolha uma matriz de 32 x 32 pixels e 16 cores.
P$%&'() 58
DELPHI 4
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 o seu cone memorizando o nome completo incluindo o caminho. E feche o aplicativo
mage Editor.
O formulrio possui no canto superior esquerdo o cone padro do Delphi. Para trocar este
cone pelo nosso cone da caneta, deveremos alterar a propriedade con do formulrio e
carregar o cone que acabamos de desenhar.
P$%&'() 59
DELPHI 4
Use este cone para representar o Bloco de Notas no Windows, da mesma forma descrita
para a Calculadora.
P$%&'() 60
DELPHI 4
E:EMP*O I@ ; RE*N"IO #ESPER0A#OR
Este projeto contm um outro componente no visvel - o 00imer. Este componente gera o
evento On0imer a intervalos regulares determinados em sua propriedade Inter'al. Esta
propriedade esta expressa em milisegundos, ou seja, para que o evento OnTimer ocorra a
cada segundo: nterval:=1000. Se nterval:=0 o Timer estar desativado.
Devemos ter cuidado na programao do Timer, porque mesmo ele sendo capaz de gerar
um evento a cada milisegundo, o procedimento que trata o evento pode demorar mais do
que o valor de nterval, ocorrendo perda de algumas execues do procedimento ligado a
ele, ou se nteval 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 selecionado por vez, em cada grupo ou no formulrio caso o
boto esteja fora de algum grupo.
As opes de escolhas do Radio"roup esto na propriedade Items. Quando
selecionamos esta propriedade, a janela Strin) list editor mostrada, nela editamos os
botes de opo do grupo. Entre com as duas opes, como mostrado a seguir.
P$%&'() 61
DELPHI 4
Feito o formulrio, vamos digitar o cdigo para os eventos associados.
Declare primeiro as variveis Ligado e Tecla. Ligado indicar qual o boto de opo est
selecionado, e Tecla armazenar um caractere digitado no teclado.
implementation
var
Higado% #oolean;
Tecla% Char;
{$R *.DFM}
P$%&'() 62
DELPHI 4
Quando o Formulrio for criado, o boto Desligado ser selecionado atravs da linha
"RadioGroup1.temndex:= 0. A propriedade ItemIndex, indica qual o boto do grupo est
selecionado.
Colocaremos a data do sistema em Label2 usando a funo FormatDateTime, de acordo
com a tabela mostrada no projeto da Calculadora.
procedure TForm10FormCreate!Sender% T:FGect";
begin
7adioGro$p105tem5nde@ % 9;
HaFel&0Caption%FormatDateTime!1dddd,dd IdeI mmmm IdeI
yyy1 ,Date"; {a fun!o Date retorna a data do sistema}
end;
A propriedade temndex do RadioGroup1 ser igual a 1 se o boto Ligado for selecionado,
e igual a 0, caso Desligado esteja selecionado.
procedure TForm107adioGro$p1ClicE!Sender% T:FGect";
begin
if 7adioGro$p105tem5nde@ 1 then
Higado%Tr$e
else
Higado%False;
end;
Quando o usurio digita algo em um quadro Edit, o ocorre evento Oe=Press. 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 Oe=Press envia para a procedure, o parmetro Oe= do tipo ,$ar, sendo esta
varivel verificada pelo programa.
procedure TForm10=dit1JeyPress!Sender% T:FGect; ?ar Jey% Char";
begin
Tecla%!Jey";
if !!Tecla K 191" or !Tecla L 1-1"" and !Tecla KL 1%1" then
begin
#eep;
Jey%chr!9"; {a fun!o chr"#$b%te&' retorna o caractere
corres(ondente ao n)mero # na tabela *+C,,}
end;
end;
P$%&'() 63
DELPHI 4
Quando o evento Timer ocorrer (no caso a cada segundo - nterval:=1000), ser feita uma
verificao do contedo do Edit1 e se o alarme est Ligado ou no. O Timer tambm
atualiza a hora mostrada no Label1. Se a hora no Edit1 for menor ou igual a hora do
sistema e a varivel Ligado verdadeira, o Beep soar.
procedure TForm10Timer1Timer!Sender% T:FGect";
begin
if !=dit10Te@t K TimeToStr!Time""and !Higado" then
begin
#eep;
#eep;
end;
HaFel10Caption%TimeToStr!Time";
end;
P$%&'() 64
DELPHI 4
MP0O#OS "R5I,OS
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 alguns 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.
O exemplo abaixo desenha um ponto vermelho nas coordenadas (50,50) do formulrio,
quando o boto for selecionado.
P$%&'() 65
DELPHI 4
CORES
O Delphi possui trs formas diferentes de atribuir valores para o parmetro !or de um objeto
grfico, so elas:
a) R"+ - (NRed, NGreen, NBlue), onde NRed, NGreen e NBlue pode variar de 0 a 255.
Ponto vermelho: Canvas.Pixels[x,y,]:= RGB(255,0,0);
b) QLLbb))rr - 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.
- Para cores fixas :clAqua, clBlack, clBlue, clDkGray, clFuchsia, clGray, clGreen,
clLime, clLtGray, clMaroon, clNavy, clOlive, clPurple, clRed, clSilver, clTeal, clWhite, e
clYellow.
- Para cores definidas pelo sistema: clActiveBorder, clActiveCaption,
clAppWorkSpace, clBackground, clBtnFace, clBtnHighlight, clBtnShadow, clBtnText,
clCaptionText, clGrayText, clHighlight, clHighlightText, clnactiveBorder,
clnactiveCaption, clnactiveCaptionText, clMenu, clMenuText, clScrollBar, clWindow,
clWindowFrame, e clWindowText.
Exemplo: Ponto Azul - Canvas.Pixels[x,y]:= clBlue:
DESENHO DE LINHAS
Para desenharmos 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 Mo'e0o e *ine0o para mover a Pen
(caneta). Mo'e0o posiciona a caneta em um determinado lugar no Formulrio. *ine0o
traa uma linha, que vai da posio corrente (PenPos) at as coordenadas especificadas.
P$%&'() 66
DELPHI 4
Copie o procedimento abaixo, inserindo-o no mesmo formulrio do exemplo do ponto.
procedure TForm10#$tton1ClicE!Sender% T:FGect";
begin
With Can?as do
begin
Mo?eTo!9,9";
HineTo!199,ClientMeight"; {Cliente-eight$.*ltura da
/rea de cliente no formul/rio}
HineTo!&99,1)9";
end;
end;
Quando queremos alterar vrias propriedades ou mtodos de um mesmo objeto, ns no
precisamos indicar o seu nome em todos as linhas, basta usarmos a instruo .it$&&&do.
Esta instruo significa que entre as palavras reservadas +e)in &&& End, o uso do objeto fica
implcito para qualquer acesso a uma de suas propriedades ou mtodos.
Can?as0Pen0Style% psDot;
Can?as0Pen0Color%cl#l$e;
ou
With Can?as0Pen do
begin
Style% psDot;
Color%cl#l$e;
end;
No exemplo acima, utilizamos este recurso com o objeto Canvas e seus mtodos MoveTo e
LineTo.
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:
P$%&'() 67
DELPHI 4
procedure TForm10#$tton1ClicE!Sender% T:FGect";
begin
With Can?as do
begin
Mo?eTo!9,9";
HineTo!199,ClientMeight";
Pen0Color%cl#H$e;
HineTo !&99,1)9";
end;
Note que a segunda linha desenhada da cor azul.
Vamos montar exemplos que usem as outras duas propriedades - Width e Style.
procedure TForm10#$tton1ClicE!Sender% T:FGect";
var
=stilo% array .900*/ o4 TPenStyle;
i% 5nteger;
S6% 5nteger;
SN% 5nteger;
begin
=stilo.9/% psSolid;
=stilo.1/% psDash;
=stilo.&/% psDot;
=stilo.'/% psDashDot;
=stilo.(/% psDashDotDot;
=stilo.)/% psClear;
=stilo.*/% ps5nsideFrame;
S6 % ClientWidth;
SN % ClientMeight;
With Can?as do
begin
SN%Tr$nc!SNO,"; {a (rocedure 0runc' transforma um
valor do ti(o Real em ti(o ,nteiro}
4or i% 9 to * do
begin
Pen0Style% =stilo.i/;
Mo?eTo!9,!i8SN"2&9";
HineTo!S6,!i8SN"2&9";
end;
end;
end;
Comeamos declarando a matriz Estilo como do tipo 0PenSt=le. Nesta matriz
armazenaremos todos os estilos da caneta.
,lient.idt$ e ,lient-ei)$t, retornam um valor do tipo inteiro indicando o tamanho da rea
do cliente no formulrio, quando este nmero dividido ele passa a ser um tipo Real, ento
ns precisamos convert-lo novamente em nteiro para que os mtodos MoveTo e LineTo
possam aproveit-lo.
P$%&'() 68
DELPHI 4
Antes de executar o exemplo acima, altere a propriedade ,olor de Form1 para cl.$ite
(Color:=clWhite) para uma visualizao melhor das linhas, teremos ento todos os estilos
de linha desenhados no formulrio mostrado abaixo:
Altere o procedimento anterior, para serem mostradas as vrias espessuras de linha.
procedure TForm10#$tton1ClicE!Sender% T:FGect";
var
i% 5nteger;
S6% 5nteger;
SN% 5nteger;
begin
S6 % ClientWidth;
SN % ClientMeight;
With Can?as do
begin
SN%Tr$nc!SNO,"; {a (rocedure 0runc' transforma um
valor do ti(o Real em ti(o ,nteiro}
for i% 9 to * do
begin
Pen0Width% i21;
Mo?eTo!9,!i8SN"2&9";
HineTo!S6,!i8SN"2&9";
end;
end;
end;
P$%&'() 69
DELPHI 4
DESENHO DE RET)NULOS
Para desenharmos retngulos usamos o mtodo Rectangle do TCanvas. Como parmetros
so utilizadas as coordenadas do canto superior esquerdo e inferior direito do retngulo.
Canvas.Retangle (X
1
, Y
1
, X
2
, Y
2
);
Digite o exemplo abaixo.
procedure TForm10#$tton1ClicE!Sender% T:FGect";
begin
With Can?as do
begin
7ectangle !19,19,119,119";
7ectangle !1'9,19,''9,119";
end;
end;
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 formulrio, seria como uma borracha em cima de
um papel desenhado.
Para preenchermos estes retngulos, usamos o tipo 0+rus$ 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.
P$%&'() 70
DELPHI 4
procedure TForm10#$tton1ClicE!Sender% T:FGect";
begin
With Can?as do
begin
#r$sh0Style%FsFDiagonal;
#r$sh0Color%cl#lacE;
7ectangle !19,19,119,119";
#r$sh0Color%cl7ed;
#r$sh0Style%FsMori<ontal;
7ectangle !1'9,19,''9,119";
end;
end;
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. Siga o exemplo a seguir.
procedure TForm10#$tton1ClicE!Sender% T:FGect";
begin
With Can?as do
begin
7ectangle !19,19,199,,9";
=llipse !19,19,199,,9";
=llipse !119,19,&99,,9";
end;
end;

P$%&'() 71
DELPHI 4
FIURAS
O Delphi permite a incluso de figuras no formulrio atravs do objeto Ima)e ( ), onde
poderemos carregar arquivos dos tipos EMF, WMF, BMP ou CO.
As figuras so vistas como valores da propriedade Picture do controle Ima)e. Podemos
atribuir um valor para esta propriedade em tempo de projeto, ou utilizar a procedure
*oad5rom5ile para carregar um arquivo de imagem durante a execuo do programa.
Construiremos agora um projeto que ir carregar sucessivas figuras em um controle mage
a cada clique em um boto.
Abra o programa Paint do Windows e desenhe quatro figuras semelhantes s mostradas
abaixo, salvando-as com os nomes indicados.
Estas figuras daro a impresso de movimento da "luz".
Para o cdigo do boto utilizaremos a estrutura case&&&of. O Delphi possui modelos de
cdigo (code templates) caso o programador no se lembre da sintaxe exata de
determinada estrutura, estes modelos podem ser editados ou adicionados outros. Para
ativar o code template basta acionar ,trl4j, e logo ser mostra um popup com os cdigos
permitidos.
Entre com o cdigo a seguir para o boto at o ponto indicado, pressionando ,trl4j e
escolha case statement.
P$%&'() 72
DELPHI 4
Complete o cdigo seguindo a listagem a seguir.
implementation
var
sinal%integer;
{$R *.DFM}
procedure TForm10#$ttonClicE!Sender% T:FGect";
begin
with 5mage do
begin
case sinal of
9%begin
pict$re0load4rom4ile !1c%P000P4rame10Fmp1";
sinal%1;
end;
1%begin
pict$re0load4rom4ile !1c%P000P4rame&0Fmp1";
sinal%&;
end;
&%begin
pict$re0load4rom4ile !1c%P000P4rame'0Fmp1";
sinal%';
P$%&'() 73
DELPHI 4
end;
'%begin
pict$re0load4rom4ile !1c%P000P4rame(0Fmp1";
sinal%9;
end;
end;
end;
end;
procedure TForm10FormCreate!Sender% T:FGect";
begin
sinal%9;
end;
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 Ima)e e colando mais outros
trs mage, todos na mesma posio. ncluindo tambm um controle 0imer para que a
mudana ocorra automaticamente.
Altere a propriedade Enabled:=False do Timer. E para os controle mage, @isible:=False e
na propriedade Picture carregue as figuras utilizadas anteriormente - Frame1 a 4.
P$%&'() 74
DELPHI 4
Digite o cdigo a seguir:
procedure TForm10#$ttonClicE!Sender% T:FGect";
begin
if #$tton0caption1Parar1 then
begin
#$tton0caption%1B$tomQtico1;
Timer0enaFled%False;
e@it; {sai da (rocedure' sem e1ecutar as linhas seguintes}
end;
Timer0enaFled%tr$e;
#$tton0caption%1Parar1;
end;
procedure TForm10TimerTimer!Sender% T:FGect";
begin
case sinal of
9%begin
5mage103isiFle%Tr$e;
5mage(03isiFle%False;
sinal%1;
end;
1%begin
5mage&03isiFle%Tr$e;
5mage103isiFle%False;
sinal%&;
end;
&%begin
5mage'03isiFle%Tr$e;
5mage&03isiFle%False;
sinal%';
end;
'%begin
5mage(03isiFle%Tr$e;
5mage'03isiFle%False;
sinal%9;
end;
end;
end;
Como prximo passo vamos incluir um controle Scroll+ar ( ) que ir controlar a variao
da propriedade nterval do Timer.
P$%&'() 75
DELPHI 4
Altere as propriedades da ScrollBar de acordo com a figura a seguir:
Onde:
Oind - especifica se a scrollbar ser horizontal ou vertical.
*ar)e,$an)e - 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.
Small,$an)e - determina o quanto muda a posio quando o usurio clica nas setas
da barra de rolagem.
Digite a procedure a seguir para o evento On,$an)e da ScrollBar, que ocorre quando
mudamos a posio da barra de rolagem.
procedure TForm10Scroll#arChange!Sender% T:FGect";
begin
Timer0inter?al%Scroll#ar0position;
22* (ro(riedade (osition cont3m o valor da (osi!o da barra de
rolagem' e varia entre 455 e 4555 neste e1em(lo.
end;
P$%&'() 76
DELPHI 4
E:EMP*O @ ; ,A0*O"O
Neste projeto de catlogo telefnico, trabalharemos com acesso a arquivos do tipo
aleatrio. Ele ser constitudo por trs Units e dois Formulrios. Duas Units sero
associadas aos formulrios e a outra Unit conter apenas cdigos de acesso ao disco (HD)
sem estar associada a nenhum formulrio.
nicie um novo projeto e crie o formulrio, inserindo e modificando as propriedades dos
objetos, como a figura abaixo.
Altere a propriedade 5ilter do controle Sa'e#ialo). Ser ento mostrada a janela 5ilter
Editor, edite-a como mostra o modelo abaixo.
P$%&'() 77
DELPHI 4
D um duplo clique no controle MainMenu e edite o menu.
Deveremos inserir um novo formulrio ao nosso projeto que ser utilizado para selecionar
um determinado registro do nosso arquivo de dados. Para inserir um novo formulrio ao
projeto, escolha a opo /e< 5orm do menu 5ile ou selecione o boto ( ) 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 ,ombo+ox (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.
A propriedade Style, determina o tipo de ComboBox que iremos trabalhar, que pode ser:
cs#rop#o<n - Cria uma lista drop-down com uma caixa de texto, para entrada de
texto manualmente. Todos os itens so Strings de qualquer comprimento.
,sSimple - 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.
,s#rop#o<n*ist - Cria uma lista drop-down com uma caixa de texto, mas o usurio no
poder entrar com texto manualmente.
csO<ner#ra<5ixed - Cria uma lista drop-down com uma caixa de texto, para entrada
de texto manualmente. Mas cada item do ComboBox ter seu comprimento em caracteres
determinado pela propriedade temHeight.
P$%&'() 78
DELPHI 4
,sO<ner#ra<@ariable - 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 nosso quadro combo, 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 formulrio ou no, ns iremos criar uma Unit no
vinculada a nenhum formulrio. Escolha a opo /e<&&& do menu 5ile ou o boto ( ) na
barra de ferramentas e aparecer a janela New tens, escolha Unit.
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.
P$%&'() 79
DELPHI 4
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 0=pe, antes do bloco de definio de variveis @ar:
t=pe
TMeusValores = Shortnt;
'ar
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:
t=pe
TMeusValores = Longnt;
Venda e Custo eram variveis Shortnt, aps a nova definio passam a ser Longnt.
REISTROS
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 nterface da nova Unit (DiscoUnt - nome salvo em disco).
$nit DiscoUnt;
interface
type
{registro com dados (essoais}
TPessoas7egrecord
C;ome% string.'9/;
CTele4one% string.1)/;
C=ndereco% string.(9/;
end;
TPessoas file of TPessoas7eg;
var
PesBrC% Pessoas;
O Delphi possui um tipo denominado ar%ui'o, 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.
P$%&'() 80
DELPHI 4
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.
Logo aps, informamos ao Delphi que existe um tipo de arquivo composto 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 trabalharem, ns declaramos
esses parmetros no cabealho da procedure, indicando um nome de referncia, o seu tipo
de dado e o prefixo 'ar. Primeiro declaramos as procedures na seo nterface e depois
implementamos na seo mplementation.
procedure BFrirBrC!var B%TPessoas; var ;omeBrC%string;
var ;%Foolean";
procedure FecharBrC!var B%TPessoas";
procedure Gra?arBrC!var B%TPessoas;var 7eg;%integer;
var 7eg%TPessoas7eg";
procedure HerBrC!var B%TPessoas;var 7eg;%integer;
var 7eg%TPessoas7eg";
implementation
procedure BFrirBrC!var B%TPessoas; var ;omeBrC%string;
var ;%Foolean";
begin
Bssign !B, ;omeBrC";
if ; then
7ewrite !B"
else
7eset !B";
end;
procedure FecharBrC !var B%TPessoas";
begin
Close !B";
end;
procedure Gra?arBrC !var B%TPessoas; var 7eg;%integer;
var 7eg%TPessoas7eg";
begin
SeeE !B,7eg;";
Write !B,7eg";
end;
procedure HerBrC !var B%TPessoas; var 7eg;%integer;
var 7eg%TPessoas7eg";
begin
SeeE !B,7eg;";
7ead !B,7eg";
P$%&'() 81
DELPHI 4
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
Assi)n. Assi)n diz ao Delphi que todas as operaes com a varivel tero ligao com um
arquivo em particular.
Assi)n(varivel, nome do arquivo);
Aps a associao, abrimos o arquivo, que pode ser de duas formas:
1) Reset - abre um arquivo existente para leitura ou gravao.
2) Re<rite - abre um arquivo novo para leitura ou gravao. Caso j exista o arquivo,
todos os dados anteriores sero perdidos.
Reset(nome do arquivo);
Re<rite(nome do arquivo);
Para gravar ou ler um registro, usamos as funes .rite e Read, informando a varivel do
arquivo e em qual varivel estar ou conter o registro.
.rite(PessArq, Reg);
Read(PessArq, Reg);
PONTEIRO DE REISTROS
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
operao ser realizada com o registro 4.
Para acessar um registro aleatoriamente, usamos a procedure See3. Esta procedure
posiciona o ponteiro no registro que quisermos, antes de uma leitura ou gravao.
Seek(PessArq, RegN);
Os registros em um arquivo so numerados seqencialmente a partir do registro 0. Existem
mais duas funes teis para manipulao de arquivos, 5ileSi2e e 5ilePos. A primeira
indica quantos registros o arquivo tem, e a segunda indica a posio do ponteiro.
P$%&'() 82
DELPHI 4
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 em que esteja trabalhando,
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 nosso formulrio frmCatalogo (CatalogoUnt), ter acesso aos procedimentos das
unidades ProcurarUnt e DiscoUnt. Ento, declaramos estas duas unidades logo aps as
unidades j colocadas pelo Delphi.
$nit Catalogo;
inter4ace
$ses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, Men$s, StdCtrls,
Proc$rarUnt,DiscoUnt;
Declare as variveis que iremos utilizar na unidade CatalogoUnt, como mostrado abaixo.
private
{ Private declarations }
BrC;o?o,BrCBt$al% string;
;o?o,BrC$i?oBFerto% Foolean;
public
{ Public declarations }
end;
Comece a implementao dos procedimentos associados aos objetos e seus eventos,
seguindo as listagens abaixo.
procedure T4rmCatalogo0Sair1ClicE!Sender% T:FGect";
begin
Close;
end;
procedure T4rmCatalogo0;o?o1ClicE!Sender% T:FGect";
begin
;ome0Te@t%11;
Tele4one0Te@t%11;
=ndereco0Te@t%11;
;o?o%Tr$e;
BrC;o?o%1Temp0dat1;
BrCBt$al% BrC;o?o;
DiscoUnt0BFrirBrC !PesBrC, BrC;o?o, ;o?o";
BrC$i?oBFerto%Tr$e;
end;
P$%&'() 83
DELPHI 4
procedure T4rmCatalogo0BFrir1ClicE!Sender% T:FGect";
begin
;ome0Te@t%11;
Tele4one0Te@t%11;
=ndereco0Te@t%11;
if :penDialog10=@ec$te then
begin
BrCBt$al%:penDialog10Filename;
;o?o%False;
DiscoUnt0BFrirBrC !PesBrC, BrCBt$al, ;o?o"
end
else
=@it;
BrC$i?oBFerto%Tr$e;
end;
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 T4rmCatalogo0Ftn;o?oClicE!Sender% T:FGect";
var
7eg% DiscoUnt0TPessoas7eg;
7eg;% integer;
begin
;ome0SetFoc$s;
if BrC$i?oBFerto4alse then
begin
ShowMessage !1BFra primeiro $m arC$i?o1";
e@it;
end;
if Ftn;o?o0Caption1R;o?o1 then
begin
;ome0Te@t%11;
Tele4one0Te@t%11;
=ndereco0Te@t%11;
Ftn;o?o0Caption%1BRdicionar1;
end
else
begin
with 7eg do
begin
C;ome%;ome0Te@t;
CTele4one%Tele4one0Te@t;
C=ndereco%=ndereco0Te@t;
end;
4rmProc$rar0Hista05tems0Bdd !;ome0Te@t";
7eg;% FileSi<e!PesBrC";
DiscoUnt0Gra?arBrC !PesBrC, 7eg;, 7eg";
Ftn;o?o0Caption%1R;o?o1;
end;
P$%&'() 84
DELPHI 4
end;
P$%&'() 85
DELPHI 4
procedure T4rmCatalogo0FtnBt$ali<arClicE!Sender% T:FGect";
var
7eg % TPessoas7eg;
7eg; %integer;
begin
with 7eg do
begin
C;ome%;ome0Te@t;
CTele4one%Tele4one0Te@t;
C=ndereco%=ndereco0Te@t;
end;
4rmProc$rar0Hista05tems0Bdd !;ome0Te@t";
7eg;% FilePos!PesBrC"S1;
DiscoUnt0Gra?arBrC !PesBrC, 7eg;, 7eg";
end;
procedure T4rmCatalogo0FormCreate!Sender% T:FGect";
begin
BrC$i?oBFerto%False;
end;
procedure T4rmCatalogo0Sal?ar1ClicE!Sender% T:FGect";
begin
if Sa?eDialog10=@ec$te then
begin
BrC;o?o%Sa?eDialog10Filename;
DiscoUnt0FecharBrC !PesBrC";
7enameFile!BrCBt$al,BrC;o?o";{a fun!o RenameFile'}
;o?o%False; {renomeia um ar6uivo}
DiscoUnt0BFrirBrC !PesBrC, BrC;o?o, ;o?o";
end;
end;
proced$re T4rmCatalogo0FtnProc$rarClicE!Sender% T:FGect";
begin
4rmProc$rar0ShowModal;
end;
Para mostrar outro Formulrio, usamos o mtodo S$o< ou S$o<Modal. 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 fechado a janela Modal.
P$%&'() 86
DELPHI 4
Comece a construo do cdigo para o formulrio frmProcurar, informando ao Delphi que
ela ir acessar a unidade #iscoUnt.
unit Proc$rarUnt;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls,DiscoUnt;
Declare as variveis Re/ e Re).
private
{ Private declarations }
7eg;% integer;
7eg% TPessoas7eg;
Siga a listagem abaixo para os eventos associados.
procedure T4rmProc$rar0FormBcti?ate!Sender% T:FGect";
begin
Hista0Clear; {lim(a o conte)do do Combo7o1}
SeeE !PesBrC,9";
while Not =o4 !PesBrC" do {en6uanto n!o chegar ao final
do ar6uivo' faa}
begin
7ead!PesBrC,7eg";
Hista05tems0Bdd !7eg0C;ome";
end;
end;
procedure T4rmProc$rar0FtnCancelarClicE!Sender% T:FGect";
begin
Close;
end;
P$%&'() 87
DELPHI 4
procedure T4rmProc$rar0Ftn:EClicE!Sender% T:FGect";
begin
7eg;%Hista05tem5nde@;
DiscoUnt0HerBrC !PesBrC,7eg;,7eg";
With 4rmCatalogo do
begin
;ome0Te@t%7eg0C;ome;
=ndereco0Te@t%7eg0C=ndereco;
Tele4one0Te@t%7eg0CTele4one;
end;
Close;
end;
Para preencher um quadro combo com dados, temos duas possibilidades:
1) Usar o mtodo Add para a sua propriedade Items. Em tempo de execuo.
2) Editar a propriedade tems em tempo de projeto.
Por fim, declare a unidade CatalagoUnt na seo mplementation. Porque 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}
P$%&'() 88
DELPHI 4
+A/,O #E #A#OS SIMP*ES
Um banco de dados pode ser definido como um conjunto unificado de informaes
compartilhadas por pessoas autorizadas de uma organizao. A funo de um Banco de
Dados permitir o armazenamento e a recuperao da informaes necessrias para as
pessoas da organizao 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 particular, e a coluna possui uma parte das informaes de uma
linha. A figura a seguir ilustra uma tabela de Clientes.
Cdigo Nome Telefone
001 Aldair 554-8788
002 Marina 879-9687
005 Aline 572-2258
012 Jos 7070-8580
150 Mrcio 446-3987
A tabela mostrada acima possui os campos ou colunas: Cdigo, Nome e Telefone. E em
cada linha temos a identificao de um cliente em particular.
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 c$a'e primria. Ns podemos escolher qualquer campo de uma tabela para ser uma
chave primria, sempre levando em considerao que ela deve ser curta. Por exemplo,
usar um campo numrico melhor do que um campo formado por Strings. Como a chave
primria determina a singularidade de um registro, 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 Cdigo como nossa
chave primria.
Alm de determinarmos os campos e a chave primria da nossa tabela, tambm teremos
que definir o tipo de dado, comprimento, formato e o domRnio para cada campo desta
tabela.
0ipo de #ado: refere-se ao contedo do dado, podendo ser numrico, alfabtico, data, hora
ou cadeia de caracteres longa ou curta.
,omprimento: refere-se ao tamanho ou nmero mximo de posies que poder assumir o
valor ou contedo de cada dado.
5ormato: refere-se forma com que os dados devero ser editados ou apresentados,
definindo-se as posies de smbolos.
#omRnio: especifica se os valores dos dados pertencem a uma lista de valores pr
definidos, podendo estar em uma lista, ou satisfazer uma regra.
DATABASE DES*TOP
P$%&'() 89
DELPHI 4
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, gerenciar duas tabelas. Uma com o cadastro dos clientes e
outra com as vendas realizadas para estes clientes.
Execute o Database Desktop, selecionando a opo #atabase #es3top no menu 0ools.
Abra uma nova tabela como mostra a figura a seguir.
P$%&'() 90
DELPHI 4
Escolha o tipo Paradox 7. Aparecendo ento a janela Create Paradox 7 Table.
Digite o nome para o primeiro campo (CODGO) e mude para tipo de campo (Type) usando
a tecla Tab. Com o campo Type selecionado, de um clique com o boto direito do mouse
nele, para ser exibido 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 nosso campo
CODGO 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.
O campo CODGO ser a nossa chave primria para a identificao dos clientes na tabela
Clientes. Para definir um campo como chave primria, pressione qualquer tecla quando o
campo Key estiver selecionado, marcando este campo com um K - asterisco.
P$%&'() 91
DELPHI 4
D continuidade entrando com outros campos, seguindo o modelo apresentado abaixo.
P$%&'() 92
DELPHI 4
Salve-a como Clientes.db.
Logo aps, abra uma nova tabela no mesmo formato, e construa-a como mostrado abaixo.
Para que a tabela Vendas se relacione com a tabela Clientes, deveremos definir o campo
CODGO como ndice secundrio na tabela Vendas.
No ComboBox 0able properties, selecione a opo Secondar= Indexes e clique no boto
Define..., aparecendo o quadro de dilogo #efine Secondar= Index.
Na janela #efine Secondar= Index, selecione o campo CODGO e d um clique na seta
para introduzi-lo como campo ndice, e finalmente d um clique no boto OK para aceitar a
opo.
P$%&'() 93
DELPHI 4
Ser ento solicitado um nome para este ndice, digite NDCODGO.
Salve a tabela como Vendas.db. Saia do Database Desktop, atravs do menu 5ile, opo
Exit.
O Delphi possui um assistente para a construo de formulrios de acesso a Banco de
Dados (5orm .i2ard), ns iremos utiliz-lo para construirmos o nosso projeto, que utiliza
as tabelas de Clientes e Vendas construdas anteriormente.
Volte ao Delphi, e exclua o formulrio Form1 que o Delphi cria junto com um novo projeto.
No menu Project, escolha a opo Remo'e from Project&&&, ou o boto ( ) na barra de
ferramentas, e exclua Form1 no salvando o arquivo. Pois o 5orm .i2ard criar um novo
formulrio automaticamente.
P$%&'() 94
DELPHI 4
Excludo o formulrio, inicie o wizard escolhendo a opo 5orm .i2ard&&& do menu
#atabase. O Database Form Wizard um assistente para a criao de Formulrios
envolvendo banco de dados. Este assistente 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.
DBN(*&%(+,-
O nosso primeiro formulrio ter duas divises, uma para cada tabela. A primeira conter os
dados relativos a um cliente, e a segunda as compras realizadas por este cliente. nicie o
Form Wizard, seguindo as opes mostradas nas figuras a seguir; pressionando o boto
/ext para continuar com o assistente.
P$%&'() 95
DELPHI 4
Estas opes criam um formulrio com duas divises, usando componentes 00able. Um
componente TTable realiza a conexo entre o formulrio e uma tabela do banco de dados.
Ele um componente visvel somente em tempo de projeto - semelhante ao componente
TTimer.
nclua a tabela Clientes.db, como sendo a master %uer=. Ou seja, a tabela que ir
comandar a apresentao do dados.
Selecione o boto SS para incluir todos os campos da tabela Clientes.db no formulrio.
P$%&'() 96
DELPHI 4
A opo @ertical posiciona os campos dentro do formulrio, um acima do outro.
Alinhamento *eft, posiciona as legendas ao lado esquerdo dos quadros de Edit.
P$%&'() 97
DELPHI 4
Defina a tabela Vendas.db como a tabela de detalhes.
nclua todos os campos da tabela Vendas, e a seguir, escolha o formato "rid para a
apresentao da tabela Vendas.
Selecione os campos que faro a ligao entre as duas tabelas, escolhendo I/#,O#I"O
como ndice. Em #etail 5ields e Master 5ields, selecione o campo ,O#I"O como campo
de juno em ambas as tabelas e pressione Add. Como mostrado a seguir.
P$%&'() 98
DELPHI 4
Pressione /ext e finalize o Form Expert. O seu formulrio estar como a figura a seguir.
P$%&'() 99
DELPHI 4
Vamos agora, alterar as propriedades de alguns componentes do formulrio.
Comece alterando o tamanho do Panel3 referente aos dados dos clientes. E redesenhe o
formulrio como a figura abaixo.
P$%&'() 100
DELPHI 4
Para formatar a entrada de dados, ou seja, definir o formato do dado, para a tabela
Clientes.db, d um clique duplo em 0able8 para acessar o editor de campos (fields edit).
Selecione o campo CEP e no Obje!t "nspe!tor, procure a propriedade Edit Mas3. Esta
propriedade abre o quadro de dilogo "nput Mas6 Editor onde poderemos escolher uma
mscara para o campo CEP, escolha *on) Tip ,ode e na caixa nput Mask elimine um
dgito 9, como mostra as figuras a seguir.
Faa o mesmo para o campo Telefone, escolhendo a mscara Phone. Feche a "nput Mas6
Edit.
Selecione o campo ,O#I"O em 0able9, e mude a propriedade @isible?>5alse, para no
aparecer o cdigo do cliente no componente DBGrid, pois ele j ser exibido por um
componente Edit.
Selecione o EditEstado e altere a propriedade ,$arcase?>ecUpper,ase, para que os
caracteres neste TEdit sejam apresentados em maiscula.
nsira um boto BitBtn no Formulrio com as seguintes definies de propriedades:
1 - Caption:=Sai&r; Kind:=bkCLose
P$%&'() 101
DELPHI 4
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 Acti'e dos dois componentes TTable (Table1 Table2) de
False para True. sto 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.
D o nome de frmClientes ao Formulrio e salve como frmClientesUnt.pas.
O prximo formulrio ser construdo manualmente, sem o uso do Form Wizard. No
utilizaremos o Form Wizard apenas por questes didticas, mas este novo Formulrio
tambm poderia ser construdo utilizando este assistente.
Este segundo formulrio servir para cadastrar vendas. O usurio selecionar 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.
nsira um novo formulrio ao projeto escolhendo a opo /e< 5orm do menu 5ile ou o
boto ( ). Monte este novo formulrio utilizando os componentes descritos na figura
abaixo.
P$%&'() 102
DELPHI 4
Altere as propriedades, de alguns componentes, indicadas na tabela a seguir:
Selecione todos os TEdit, dando um clique em cada um enquanto pressiona a tecla Shift, e
altere a propriedade DataSource de todos ao mesmo tempo para dsrVendas. Depois
selecione um por vez e altere a propriedade DataField correspondente a cada TEdit.
D um clique duplo em tblVendas para editar o campo Data. Repare que a janela Fields
Editor aparece vazia sem nenhum campo listado. Clique com o boto direito do mouse no
Fields Editor e escolha a opo Add 5ields&&&, selecione todos os campos e pressione O3,
para inserir todos os campos da tabela Vendas.db no Fields Editor.
P$%&'() 103
,omponente Propriedade @alor
Table1 DatabaseName C:\Curso Delphi 4
TableName Vendas.db
Name tblVendas
Active True
DataSource1 DataSet tblVendas
Name dsrVendas
Table2 DatabaseName C:\Curso Delphi 4
TableName Clientes.db
Name tblClientes
Active True
DataSource2 DataSet tblClientes
Name dsrClientes
DbNavigator DataSource dsrVendas
Name navVendas
ShowHint True
DELPHI 4
Voltando ao Fields Edit, selecione o campo #A0A e altere o formato da propriedade
EditMas3 para #ate. Aps a insero de todos os campos da tabela Vendas no
componente tblVendas, as propriedades destes campos podem ser acessadas diretamente
atravs do Object Inspector. Como ilustra a figura a seguir.
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 que estamos projetando - Vendas, o nome dos clientes 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 CODGO.
Portanto o DbLookupComboBox trabalha com duas tabela simultaneamente, uma que
fornece os dados para a lista e outra que est associada ao DbLookupComboBox. A tabela
abaixo explica as propriedades relativas a esta vinculao.
P$%&'() 104
DELPHI 4
Siga a tabela abaixo para determinar as propriedades do nosso DbLookupComboBox.
A lista de clientes ser vinculada atravs do campo CODGO mas estar exibindo ao
usurio, o campo NOME.
O componente #+Radio"roup apresenta uma srie de opes pr-definidas a serem
selecionadas pelo usurio, contendo um boto para cada opo. Estas opo so
determinadas pela propriedade Items. O valor do campo na tabela associada ao
DBRadioGroup, ser o mesmo valor do boto selecionado.
Selecione o DBRadioGroup e edite a propriedade tems, configurando trs opo para
produtos vendidos, seguindo o modelo a seguir.
P$%&'() 105
Propriedade Uso
DataSource ndica qual tabela associada.
DataField ndica o campo associado.
ListSource Determina a tabela que fornecer os dados
para a lista.
KeyField ndica qual o campo da tabela acima ser
usado como vnculo.
ListField ndica qual campo ser mostrado na lista do
quadro combo.
Propriedade @alor
Data Source dsrVendas
Data Field CODGO
ListSource dsrClientes
KeyField CODGO
ListField NOME
DELPHI 4
Altere outras propriedades conforme a tabela mostrada abaixo:
Salve este Formulrio com o nome de frmVendasUnt.Pas. O Formulrio final mostrada
abaixo.
O prximo formulrio ser a abertura do programa. A partir dele sero chamados os dois
formulrios construdos anteriormente.
Acrescente um formulrio vazio e construa-o da seguinte forma:
P$%&'() 106
Propriedade @alor
DataSource dsrVendas
DataField PRODUTO
Columns 3
Caption vazia
DELPHI 4
A propriedade -int dos Speed+uttons, contm o texto que ser mostrado quando o mouse
ficar parado por alguns instantes sobre o boto. Define ShowHint:=True, para ativar esta
funo.
Com isto conclumos a construo de nossa interface grfica com o usurio.
Temos ento em nosso projeto trs formulrios - frmControle, frmClientes e frmVendas.
Todos foram salvos no disco com o mesmo nome da sua propriedade Name mais "Unt".
Comearemos o cdigo pelo frm,ontrole.
implementation
uses 4rm3endaUnt, 4rmClientesUnt;
{$R *.DFM}
procedure T4rmControle0Speed#$tton'ClicE!Sender% T:FGect";
begin
Close;
end;
procedure T4rmControle0Speed#$tton&ClicE!Sender% T:FGect";
begin
4rm3enda0Show;
end;
procedure T4rmControle0Speed#$tton1ClicE!Sender% T:FGect";
begin
4rmClientes0Show;
end;
Cdigo para frm@endas.
procedure T4rm3enda0#it#tn1ClicE!Sender% T:FGect";
begin
4rm3enda0Mide; {o m3todo -ide esconde o Formul/rio' mas
n!o a elimine da mem8ria' en6uanto 6ue Close retira
o Formul/rio da mem8ria }
end;
Antes de compilar o projeto, verifique se o formulrio inicial do programa mesmo o
frmControle. No menu Project do Delphi, escolha a opo Option&&&, e defina como o Main
Form o formulrio frmControle.
P$%&'() 107
DELPHI 4
Execute o programa pressionando F9.
P$%&'() 108
DELPHI 4
*IS0A #E E:ER,U,IOS
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 nspector?
4. Quais os passos para desenvolvermos 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 programa.
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 projeto.
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 iniciar uma nova partida.
10. No projeto Bloco de Notas, quando escolhemos a opo Sair, o programa no pergunta
se queremos salvar as alteraes realizadas no texto. nclua uma varivel booleana na
seo mplementation, alterando o seu valor no procedimento Memo1Change e
verificando-a no momento de encerrar o programa.
11. nclua 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 programa 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 Compras, semelhantes a
Clientes e Vendas, e acrescente os campos ao seu critrio.
P$%&'() 109

You might also like