Você está na página 1de 124

DELPHI

Delphi 5

Delphi 5

Sumrio
INTRODUO
1.1.
1.2.
1.3.
1.4.
2.

2.10.
2.11.
3.

4.

A JANELA PRINCIPAL
OS FORMULRIOS
O OBJECT INSPECTOR
O EDITOR DE CDIGO
CODIFICANDO E COMPILANDO
SALVANDO O PROJETO
TRABALHANDO COM UMA APLICAO
CRIANDO UMA CONSOLE APPLICATION
CRIANDO UMA APLICAO GUI
2.9.1. CRIANDO E ALTERANDO APLICAO DEFAULT
2.9.2. UTILIZANDO WIZARDS
O ARQUIVO DE PROJETO
MANIPULANDO COM AS OPES DO PROJETO

9
10
12
16
23
24
26
27
30
31
32
32
33
35

AS UNITS

38

3.1.

38
38
49
50
51

AS SEES DE UMA UNIT


3.1.1. A SEO INTERFACE
3.1.2. A SEO IMPLEMENTATION
3.1.3. A SEO INITIALIZATION
3.1.4. A SEO FINALIZATION

OS FORMULRIOS

51

4.1.

51
51
52
53
53
54
55
56
57

4.2.

5.

POR QUE O WINDOWS?


ERRO! INDICADOR NO DEFINIDO.
O QUE SO AMBIENTES VISUAIS DE DESENVOLVIMENTO?
5
O QUE O DELPHI
7
POR QUE DELPHI?
8

O AMBIENTE DE DESENVOLVIMENTO DO DELPHI


2.1.
2.2.
2.3.
2.4.
2.5.
2.6.
2.7.
2.8.
2.9.

CRIANDO FORMULRIOS
4.1.1. NOVOS FORMULRIOS
4.1.2. CONFIGURANDO O OBJECT REPOSITORY
EXIBINDO FORMULRIOS
4.2.1. MANIPULANDO COM PROPRIEDADES E MTODOS
4.2.2. NOMEANDO OBJETOS
4.2.3. FORMULRIOS MODAIS
4.2.4. FORMULRIOS NO MODAIS
4.2.5. FORMULRIOS MODAIS VERSUS NO MODAIS

COMANDOS DA LINGUAGEM

58

5.1.
5.2.

58
59

5.3.

5.4.

INSTRUES SIMPLES E COMPOSTAS


INSTRUES CONDICIONAIS
5.2.1. IF 59
5.2.2. CASE
ESTRUTURAS DE REPETIO
5.3.1. FOR
5.3.2. WHILE
5.3.3. REPEAT
COMANDOS DE DESVIO DE FLUXO PADRO

60
61
61
62
62
63

Pgina: 1

Delphi 5

5.5.
6.

7.

9.

10.

63

MANIPULANDO FORMULRIOS

64

6.1.
6.2.
6.3.

65
69
70

PRINCIPAIS PROPRIEDADES
PRINCIPAIS MTODOS
PRINCIPAIS EVENTOS

COMPONENTES DE INTERFACE

70

7.1.

70
70
71
72
73
74
74
74
74
75

7.2.

8.

INSTRUO WITH (MTODO DE TAQUIGRAFIA)

COMPONENTES BSICOS DE INTERFACE


7.1.1. MENUS
7.1.2. BOTES
7.1.3. LABELS
7.1.4. CAIXAS DE TEXTO
MELHORANDO A INTERFACE
7.2.1. PANEL (PAINEL)
7.2.2. CHECKBOX (CAIXA DE SELEO)
7.2.3. RADIOBUTTON (BOTO DE RDIO)
7.2.4. RADIOGROUP (GRUPO DE BOTES DE RDIO)

DEPURANDO APLICAES

75

8.1.
8.2.
8.3.
8.4.
8.5.
8.6.

75
75
75
75
76
76

PRINCIPAIS COMANDOS DE PASSO A PASSO


DEPURAO DESDE O INCIO
DA EXECUO DEPURAO
QUANDO FICAR EM LOOP INFINITO OU TRAVAR
MARCANDO PONTOS DE PARADA (INTERRUPO)
VERIFICANDO VALORES NOS IDENTIFICADORES

TRATAMENTO DE ERROS (EXCEES)

77

9.1.
9.2.
9.3.

77
77
78

BLOCO DE PROTEO FINALLY


BLOCO DE PROTEO EXCEPT
BLOCOS ANINHADOS (FINALLY & EXCEPT)

BANCO DE DADOS EM DELPHI

79

10.1.

80
80
81
82
83
84
85
85
85
86
87
87
87
88
90
90
90
90
91
91
91
91

10.2.
10.3.
10.4.

10.5.

O QUE UM ALIAS (APELIDO)?


10.1.1. DATABASE DESKTOP
10.1.2. TIPOS DOS CAMPOS (PARADOX & DBASE)
10.1.3. DATABASE EXPLORE OU SQL EXPLORE
O BANCO DE DADOS DO NOSSO APLICATIVO
RESTRUTURANDO O BANCO DE DADOS
OS COMPONENTES DE BANCO DE DADOS I
10.4.1. CONJUNTO DE DADOS (DATASET)
10.4.2. ACESSO AO BANCO DE DADOS (DATA ACCESS)
10.4.3. TABLE (REPRESENTA UMA TABELA FSICA)
10.4.4. QUERY (CONSULTA OU VISO CONSTRUDA VIA SQL)
10.4.5. DATASOURCE (INDICA A ORIGEM DE DADOS)
10.4.6. MDULO DE DADOS (DATAMODULE)
OS COMPONENTES DE BANCO DE DADOS II
10.5.1. DBTEXT (ETIQUETA PARA BANCO DE DADOS)
10.5.2. DBEDIT (CAIXA DE TEXTO PARA BANCO DE DADOS)
10.5.3. DBMEMO (CAIXA DE TEXTO LONGO PARA BANCO DE DADOS)
10.5.4. DBIMAGE (REA DE IMAGEM PARA BANCO DE DADOS)
10.5.5. DBCHECKBOX (CAIXA DE SELEO PARA BANCO DE DADOS)
10.5.6. DBRADIOGROUP (G. DE BOTES DE RDIO P/ BANCO DE DADOS)
10.5.7. DBNAVIGATOR (NAVEGADOR PARA BANCO DE DADOS)
10.5.8. DBLOOKUPCOMBOBOX (SELEO FECHADA)

Pgina: 2

Delphi 5

10.6.
10.7.

11.

RELATRIO EM QUICKREPORT
11.1.

11.2.

11.3.

11.4.

11.5.

11.6.
11.7.

12.

10.5.9. DBGRID (GRADE PARA BANCO DE DADOS)


BANCO DE DADOS VIA CDIGO
COM AS MOS NA MASSA
10.7.1. CADASTRO DE DADOS GERAIS (DEPARTAMENTOS E CARGOS)
10.7.2. CADASTRO DE FUNCIONRIO (CONSULTA)
10.7.3. QUERY NOME DO CARGO
10.7.4. QUERY SIGLA DA UF & QUERY NOME DO DEPARTAMENTO
10.7.5. CADASTRO DE FUNCIONRIO (INCLUIR & ALTERAR)
10.7.6. CADASTRO DE DEPENDENTES
10.7.7. FORMULRIO DE PESQUISA

COMPONENTES QR PRINCIPAIS
11.1.1. QUICKREP ( RELATRIO RPIDO, O PROPRIETRIO )
11.1.2. QRBAND ( COMPONENTES FAIXAS/PARTE )
COMPONENTES QR DE CONTEDO CONSTANTE
11.2.1. QRLABEL ( TEXTO ESTTICO/CONSTANTE )
11.2.2. QRMEMO ( MEMO ESTTICO )
11.2.3. QRIMAGE ( IMAGEM CONSTANTE )
11.2.4. QRSHAPE ( FORMAS )
COMPONENTES QR ESPECIAIS
11.3.1. QRSYSDATA ( INFORMAO DO SISTEMA)
11.3.2. QREXPR ( CONSTRUO DE EXPRESSO)
COMPONENTES QR DE BANCO DE DADOS
11.4.1. QRDBTEXT ( ACESSA CONTEDO NO-GRFICO)
11.4.2. QRDBIMAGE ( ACESSA CONTEDO GRFICO)
BANDS ESPECFICOS
11.5.1. QRGROUP (BANDA PARA FORMAO DE GRUPO)
11.5.2. QRCHILDBAND (BANDA FILHA PARA ACOMPANHAMENTO)
11.5.3. QRSUBDETAIL (BANDA FILHA PARA ACOMPANHAMENTO)
COMPOSIES DE RELATRIOS
OS RELATRIOS DO NOSSO APLICATIVO
11.7.1. RELATRIO DE CARGOS
11.7.2. RELATRIO DE DEPARTAMENTOS
11.7.3. RELATRIOS DE FUNCIONRIOS

92
92
93
93
94
95
95
96
97
97
98
98
98
99
99
99
99
100
100
100
100
100
100
101
101
101
101
101
101
101
102
102
103
103

ENTREGANDO A APLICAO

104

12.1.
12.2.
12.3.
12.4.
12.5.
12.6.
12.7.
12.8.
12.9.
12.10.
12.11.
12.12.
12.13.
12.14.
12.15.
12.16.
12.17.

105
105
105
107
109
111
113
115
117
119
120
121
121
121
122
123
123

O INSTALLSHIELD EXPRESS
INSTALANDO O INSTALLSHIELD
EXECUTANDO O INSTALLSHIELD PELA PRIMEIRA VEZ
A JANELA PRINCIPAL
AJUSTANDO O VISUAL DESIGN
SELECIONANDO OBJETOS DO INSTALLSHIELD PARA O DELPHI
ESPECIFICANDO COMPONENTES E ARQUIVOS
SELECIONANDO OS COMPONENTES DE INTERFACE COM O USURIO
MUDANDO O REGISTRY
ESPECIFICANDO FOLDERS E CONES
CONSTRUINDO OS DISCOS DE INSTALAO
TESTANDO A INSTALAO
DISTRIBUINDO O PRODUTO
CRIANDO MLTIPLAS CONFIGURAES
COMPONENTES
TIPOS DE INSTALAO
CONCLUSO

Pgina: 3

Delphi 5

Introduo
1.1.

Histria

A histria da cincia da computao, ao contrrio da grande maioria das cincias existentes


atualmente, bem curta. Apesar dessa cincia no ter uma vida to longa quanto as demais, a
velocidade com que as mudanas e as descobertas ocorrem so, sem dvida alguma, muito maiores.
No incio da histria da computao, devido pouca tecnologia existente, os computadores eram
bem mais difceis de se programar. Os programas deveriam ser escritos da forma mais otimizada
possvel. No existia quantidade de memria suficiente para os programas funcionarem o que
tornava a programao de computadores uma verdadeira arte e poucos eram os artistas capazes de
dominar essa arte. A rpida evoluo tecnolgica fez com que computadores mais poderosos
viessem a surgir, facilitando a vida dos programadores.
Com o advento dos circuitos integrados, computadores cada vez memores e mais poderosos
surgiram no mercado. Os computadores pessoais tornaram-se cada vez mais populares criando um
mercado maior e mais amplo para a programao. Agora no s as grandes empresas tinham
condies de terem computadores para gerenciar seus negcios mas tambm as pequenas empresas
podiam contar com essa tecnologia.
Com o crescimento do mercado de informtica veio o surgimento de novas linguagens de
programao que tinham por objetivo fornecer um ambiente propcio para o desenvolvimento de
aplicativos comerciais. A utilizao de programas de computador aumentou cada vez. Porm um
problema assustador parecia despontar no horizonte. A variedade de programas existentes no
mercado acabava por acarretar gastos cada vez maiores para as empresas, gastos esses que haviam
diminudo graas aos avanos tecnolgicos dos equipamentos de informtica (hardware).
Cada programador ou equipe de programadores era responsvel pelo desenvolvimento de seu
aplicativo. A escolha da linguagem de programao, o desenho da interface com o usurio e a
prpria implementao eram feitas por esses grupos independentemente. Cada programa funcionava
e se apresentava para os usurios de forma independente. Por exemplo, poderamos ter programas
que, para efetuar a sada do sistema, fosse necessrio escolher um item de menu, enquanto que em
outro, essa opo deveria ser efetuada atravs do acionamento de uma seqncia de teclas de atalho,
como o pressionar das teclas <CTRL> + <S> simultaneamente, por exemplo. Isso era um pssimo
negcio para as empresas que aps a escolha e aquisio do programa (software) ainda eram
obrigadas a gastar uma substancial quantia de dinheiro com treinamento de pessoal para a sua
utilizao. O gasto era ainda maior caso uma migrao entre sistemas fosse necessria. Alm dos
gastos naturais com treinamento e aquisio do equipamento, existia um gasto indireto com a
adaptao dos usurios ao novo sistema. Essas dificuldades, principalmente as financeiras,
obrigavam o surgimento de algo que viesse a melhorar essa situao incmoda em que se
encontrava a informtica.
Com todos esses problemas em mente, heis que surge um novo ambiente de trabalho no
mercado. Surge o ambiente Windows, da empresa americana Microsoft. Mas o que que houve de
to especial com esse ambiente para que ele fosse considerado a salvao para esse verdadeiro caos
em que se encontrava a informtica nessa poca? Duas palavras mgicas so capazes de
responder a essa pergunta: padronizao e facilidade de uso. bem verdade que elas esto bem
relacionadas uma com a outra mas mesmo assim, elas foram as responsveis por uma verdadeira
reviravolta no ramo da informtica. Foi atravs do Windows que uma quantidade cada vez maior de
pessoas passou a usar o microcomputador. No s no trabalho, mas tambm em suas residncias as
pessoas passaram a conhecer e tirar proveito da potencialidade da tecnologia que estava em suas
mo.

Pgina: 4

Delphi 5

Uma interface mais amigvel ao usurio passou a ser utilizada. A utilizao de telas grficas ao
invs das tradicionais telas de entrada de texto passou a ser utilizada, eliminando um dos fatores
principais que mantinham as pessoas longe dos computadores, a sua dificuldade de uso. Agora, ao
invs de ter a tarefa de decorar inmeros comandos que possibilitavam a utilizao da mquina, o
usurio poderia operar o microcomputador de forma bem mais intuitiva e simplificada.
A padronizao dos programas tambm foi um outro fator de destaque para a aceitao do novo
ambiente. O Windows seguia um padro dentro de seus aplicativos e para que novos aplicativos
fossem desenvolvidos para esse ambiente, os padres tambm deveriam ser mantidos. Dessa forma,
o gasto com a adaptao a novos produtos seria feita de forma bem mais rpida, simplificada e
eficiente, estimulando assim a venda de produtos para esse novo ambiente. As empresas viam no
Windows a oportunidade de diminuir os elevados custos com o aprendizado de novas ferramentas e
aumentar a sua produtividade. Contudo uma dificuldade passou a existir, desta vez no mais para os
usurios dos computadores, mas sim para os desenvolvedores de software, a dificuldade de
programao.
Programar nesse novo ambiente era bastante complicado. Passa a existir um grande dilema
entre os programadores: continuar utilizando as linguagens mais antigas, mais simples de
programar mas que, no entanto, no seguiam qualquer tipo de padronizao e que, pouco a pouco,
vinham perdendo espao no mercado para os aplicativos desenvolvidos para o ambiente Windows
ou mudar para o desenvolvimento de aplicativos que seguissem a padronizao que estava
conquistando as empresas mas que, com relao tarefa de programao, era bem mais difcil e
complexa e que, por conseqncia, mais cara para se desenvolver.
Os analistas de sistemas e os programadores comearam a optar, mesmo com todas as
dificuldades, por desenvolver aplicativos para o ambiente Windows. Para a felicidade de todos, as
grandes empresas desenvolvedoras de linguagens de programao perceberam as dificuldades
existentes nesse processo. Gigantes como a Borland (atual Inprise Corporation) e a prpria
Microsoft comearam a procurar desenvolver novas ferramentas de programao que viessem
propiciar, de forma mais simplificada, o desenvolvimento de software para o ambiente Windows da
mesma forma como haviam feito com os ambientes Turbo para o sistema operacional DOS.
Vrias ferramentas tm sido colocadas, nos ltimos anos, disposio dos programadores
aumentando bastante o desenvolvimento de software para o ambiente Windows. Com o lanamento
do Microsoft Visual Basic, um dos Ambientes Visuais de Desenvolvimento pioneiros, um aumento
substancial de softwares produzidos foi observado. Outras empresas procuraram seguir o exemplo
da Microsoft lanando seus prprios Ambientes Visuais de Desenvolvimento para o ambiente
Windows. Contudo, o que so esses tais Ambientes Visuais de Desenvolvimento que tomaram toda
a industria de desenvolvimento de software? A resposta para essa pergunta daremos a seguir.
1.2.

O que so Ambientes Visuais de Desenvolvimento?

No incio do desenvolvimento de software para o ambiente Windows, uma das grandes


dificuldades existentes era o do desenvolvimento das interfaces. O programador via-se no meio de
uma quantidade muito grande de cdigo para que uma simples janela do Windows fosse exibida.
Imagine ento, o sacrifcio que era necessrio para o desenvolvimento do restante da interface
como, por exemplo, a colocao de botes e caixas de edio de texto. Alm da dificuldade
existente com a simples colocao desses objetos (posteriormente nesta apostila trataremos do
estudo dos conceitos bsicos de Orientao a Objetos, o que tornar claro o entendimento do que
seja um objeto) tambm chamados de controles, nas janelas do programa, ainda havia-se a
necessidade de seu alinhamento dentro delas. Aps cada tentativa de arrumao, o programador
necessitava de uma nova compilao e execuo do programa para verificar se as alteraes no

Pgina: 5

Delphi 5

cdigo fonte provocaram o efeito desejado. Ao final desse imenso trabalho de estruturao da
interface, centenas, ou at mesmo, milhares de linha de cdigo haviam sido escritas para que tudo
estivesse de acordo com o planejado pela equipe de programadores visuais responsveis pelo
projeto da interface. Tendo como um de seus objetivos facilitar todo esse processo de
desenvolvimento de software, responsvel muitas vezes por grande parte do tempo gasto durante o
desenvolvimento, surgiram os chamados Ambientes Visuais de Desenvolvimento.
A grande popularidade desses ambientes veio do fato de que eles vieram a permitir o
desenvolvimento de programas simples e complexos com pouco, ou at mesmo nenhum, esforo de
programao. A dificuldade com o desenvolvimento das interfaces para os programas
desenvolvidos para o ambiente Windows praticamente deixou de existir. Para o programador,
deixou de existir a necessidade de conhecer, entre outras coisas, uma variedade de comandos para o
posicionamento dos diversos objetos que deveriam ser colocados nas janelas do Windows.
Agora, para o programador, o desenvolvimento da interface seria feito de forma to simples
quanto se ele estivesse desenhando a interface em sua prpria janela. O desenho da interface feito
colocando-se os componentes desejados nas janelas e ajustando suas propriedades como, por
exemplo, sua largura e altura, de tal forma que a interface tome o aspecto desejado sem a
necessidade de qualquer codificao por parte do programador. Por esse motivo, alguns autores
chamam esse tipo de desenvolvimento rpido de interfaces de WYSIWYG, sigla originria do
ingls What You See Is What You Get, que significa O que voc v o que voc obtm,
referenciando justamente a forma de desenvolvimento das interfaces nessas Ambientes Visuais de
Desenvolvimento. Devido a grande facilidade com que as interfaces dos aplicativos passaram a ser
desenvolvidas, uma grande parte do tempo gasto no seu desenvolvimento passou a ser
economizado. Por esse motivo, alguns autores chamam esse tipo de ambiente de desenvolvimento
de aplicaes de RAD, que significa Rapid Application Development, do ingls Desenvolvimento
Rpido de Aplicaes. A utilizao desses ambientes diminui consideravelmente o tempo e,
principalmente, o custo de desenvolvimento de aplicaes.
Como conseqncia dessas facilidades e praticidade de desenvolvimento de aplicaes para o
ambiente Windows, cada vez maior a procura e a aceitao de Ambientes Visuais de
Desenvolvimento como o Microsoft Visual Basic (um dos pioneiros), o PowerBuilder, o Centura
(antigo SQL Windows), alm, claro, do prprio Delphi.
Devemos observar que o simples fato do desenvolvimento da interface da aplicao no
finaliza a tarefa do desenvolvimento. Resta ainda ao programador escrever o cdigo que dever ser
executado quando o usurio tomar determinadas aes como, por exemplo, pressionar o boto de
sada do programa.
Sob esse novo modelo de desenvolvimento, os programas passam a ser desenvolvidos atravs
de um novo ponto de vista. Os programas passam a ser formados por objetos que vo sendo
colocados em suas janelas (trataremos do conceito de objetos posteriormente nesta apostila), pelo
ajuste de suas propriedades, para que esses objetos tenham as caractersticas desejadas pelos
desenvolvedores, e pelos eventos aos quais esses objetos iro responder isto , as possveis aes
realizadas pelos usurios do sistema ou pelo prprio sistema, como por exemplo, o clicar do mouse
sobre um boto.
A utilizao desse novo modelo , por muitas vezes, a parte mais difcil no processo de
migrao do desenvolvimento de programas das antigas linguagens procedurais para os novos
ambientes de desenvolvimento baseados em eventos. O programador no pode mais supor uma
ordem exata na execuo do seu cdigo fonte e deve passar a tratar isoladamente cada evento
relevante de sua aplicao.

Pgina: 6

Delphi 5

Por exemplo, suponhamos um programa de banco de dados que possua um cadastro de clientes.
Nesse programa temos uma tela onde o usurio do sistema dever cadastrar cada cliente que ir
pertencer ao banco de dados da aplicao. Nos sistemas mais antigos, no baseados no ambiente
Windows, o preenchimento de cada campo era feito de forma seqencial, verificando-se facilmente
se o valor para cada um deles estava sendo colocado corretamente. Alm disso, a verificao de
campos de preenchimento obrigatrio era facilmente efetuada uma vez que, para chegar ao local de
confirmao da incluso, o usurio deveria ter passado por todos os campos da tela de cadastro,
preenchendo-os corretamente. Contudo, com o desenvolvimento de aplicativos para o ambiente
Windows, no podemos mais fazer tais suposies. Agora, na janela de cadastro de clientes, o
usurio no mais obrigado a pressionar o boto de confirmao de incluso de um novo cliente
apenas aps o total preenchimento de seus campos. Cuidados adicionais devem ser tomados para
que isso no ocorra. Um outro exemplo bastante simples e que ocorre com freqncia cada vez
maior em nosso dia-a-dia est no prprio encerramento do programa. A maneira mais corriqueira de
se finalizar um aplicativo por parte do usurio atravs da escolha de uma opo de sada existente
na aplicao. Porm, qualquer usurio poderia finalizar o aplicativo atravs de um clique no cone
de sistema localizado no canto superior direito das janelas da aplicao. Um usurio mais
experiente do ambiente Windows poderia tambm pressionar as teclas de atalho ALT + F4
provocando o fechamento da janela da aplicao. Em cada um desses trs casos, funo do
desenvolvedor fornecer o mesmo tratamento para cada uma dessas aes do usurio.
Pudemos ver que os programas no iro mais seguir aquela ordem linear de execuo que
programas mais antigos seguiam, mas sim uma execuo baseada em eventos. A ordem de
execuo do programa ir seguir a ordem dos eventos que cada usurio do aplicativo desejar.
Devemos perceber que, internamente ao tratamento de cada evento, a execuo das instrues
contidas no cdigo do programa ainda continua, de certa forma, linear porm, a escolha de qual
desses cdigos ou seja, a execuo dos eventos por parte do usurio do aplicativo, a ser executado
que no mais linear.
Mesmo com essa aparente dificuldade, o desenvolvimento de aplicaes atravs de tais
ambientes , e continuar a ser durante muito tempo, o mtodo mais rpido e eficiente de
desenvolvimento de aplicaes para o ambiente Windows.
1.3.

O que o Delphi

Como mencionado, o Delphi um Ambiente Visual de Desenvolvimento colocado no mercado


pela empresa americana Borland, atualmente chamada Inprise. O Delphi tornou-se uma verdadeira
febre dentre os programadores de aplicativos espalhados por todo o mundo devido as suas inmeras
vantagens em relao outras linguagens de programao para o ambiente Windows como, por
exemplo, o Microsoft Visual Basic. Atravs da utilizao da linguagem Object Pascal, linguagem
esta oriunda do Pascal porm fornecendo suporte programao orientada a objetos, o Delphi
possibilita a criao rpida de aplicativos para o ambiente Windows, ou seja, o Delphi uma
ferramenta RAD para o ambiente Windows.
Porm, como toda ferramenta que se apresenta como um meio para facilitar o desenvolvimento
de novos aplicativos, o Delphi tem sua contrapartida com relao a todas essas vantagens. O
equipamento necessrio para a instalao e execuo do Delphi bem mais robusto do que as
antigas linguagens de programao como C/C++ e verses anteriores do Pascal e do prprio Object
Pascal. Para a instalao do Delphi 5.0, dependendo de qual verso esteja sendo instalada
(Standard, Professional ou Enterprise) se faz necessrio o seguinte equipamento (no caso da verso
Enterprise):
Computador com processador Pentium 90 ou superior

Pgina: 7

Delphi 5

Sistema operacional Windows 95, 98 ou Windows NT com Service Pack 3


32MB de memria RAM para a verso cliente/servidor
80MB livres no disco rgido (230MB para a instalao completa da verso)
Drive CDROM
Monitor VGA
Mouse
importante observar que a verso 1.0 do Delphi perfeitamente compatvel com o sistema
operacional Windows 95/98 apesar de gerar cdigo de 16 bits para os aplicativos com ele
desenvolvido. J as verses 2.0 5.0 do Delphi no so compatveis com as verses anteriores ao
sistema operacional Windows 95 por gerar cdigo de 32 bits para os seus aplicativos. Deve-se,
portanto, ter em mente qual a plataforma para a qual ser desenvolvido os aplicativos na hora de se
escolher qual a verso do Delphi que se deseja instalar.
1.4.

Por que Delphi?

Vimos na seo anterior que o ambiente de programao Delphi utiliza, para a escrita de
cdigo fonte, a linguagem chamada Object Pascal. A linguagem de programao chamada Object
Pascal, que ser vista posteriormente nessa apostila, nada mais do que uma verso da j conhecida
linguagem Pascal, porm com suporte programao orientada a objetos. Mas ento por que
chamar este novo ambiente de Delphi ao invs de utilizar, por exemplo, o nome Object Pascal
verso X.X?
Muitos afirmam que essa mudana se deu por motivos financeiros e, principalmente, por
motivos psicolgicos. A linguagem Pascal foi, por muito tempo, considerada uma linguagem
utilizada para o ensino de prticas de programao e que, por esse motivo, seus compiladores
haviam sido desenvolvidos de tal forma a gerar cdigo executvel pouco eficiente. Esse rtulo
perseguiu as diversas verses do Pascal por muitos anos. Os programadores apesar de conhecerem a
linguagem Pascal, ensinada na maioria dos cursos de Cincia da Computao, no se aventuravam a
programar comercialmente nessa linguagem devido pouca eficincia de seu cdigo executvel.
A Borland, ao desenvolver seu novo ambiente de desenvolvimento utilizando uma nova verso
para a linguagem Pascal, chamada Object Pascal, decidiu utilizar um nome que no lembrasse em
nada a antiga, e pouco atrativa, linguagem Pascal. Essa estratgia trouxe bons resultados. O novo
ambiente incorporou melhorias em relao s verses anteriores do Pascal como, por exemplo,
gerao de cdigo executvel bem mais eficiente, utilizao de uma linguagem Orientada a Objetos
seguindo o mesmo padro de vrios outros Ambientes Visuais de Desenvolvimento. Qualquer
programador acostumado, por exemplo, a desenvolver seus aplicativos em Visual Basic no teria a
menor dificuldade de iniciar seu desenvolvimento em Delphi. Alm disso, o Delphi trazia consigo
uma vantagem em relao aos demais ambientes, utilizava como linguagem de programao o
Object Pascal, bastante semelhante linguagem Pascal conhecida pela grande maioria dos
programadores.
Desta forma, as software houses economizariam em treinamento aos seus profissionais,
beneficiando a todos. Os programadores agora possuam um ambiente veloz e eficiente que
permitiria o desenvolvimento rpido de aplicativos e as empresas economizariam em gastos com o
treinamento de seus programadores em uma nova linguagem de programao.

Pgina: 8

Delphi 5

2. O Ambiente de Desenvolvimento do Delphi


O Delphi, conforme citado anteriormente, ao contrrio do que muita gente pensa, um
Ambiente Visual de Desenvolvimento e no uma linguagem de programao. No existe, como dito
erroneamente por muitos, a linguagem de programao chamada Delphi, mas sim um Ambiente
Visual de Desenvolvimento que foi chamado de Delphi. J esse ambiente utiliza a linguagem de
programao chamada Object Pascal. Dessa forma, iremos iniciar nosso estudo de Delphi atravs de
seu Ambiente de Desenvolvimento, tambm chamado de IDE, do ingls Integrated Development
Environment, passando posteriormente ao estudo da linguagem de programao Object Pascal.
Aps o trmino da instalao do Delphi, podemos iniciar a sua IDE atravs do cone Delphi 5
localizado na pasta Borland Delphi 5 como ilustrado na figura a seguir.

Uma vez inicializada a IDE do Delphi surgiro, inicialmente, 4 janelas que iro permitir ao
desenvolvedor trabalhar e desenvolver suas aplicaes no Delphi, como ilustra a figura abaixo.
Barra de
Atalho

Barra de Ttulo
e Menus
Paleta de
Componentes

Object
Inspector

Formulrio

Editor de Cdigo

Existem ainda outras janelas que poderiam ser exibidas dentro da IDE do Delphi dependendo
das configuraes definidas pelo desenvolvedor, porm as 4 janelas exibidas acima constituem a
instalao e configurao bsicas do Delphi. Antes de aprendermos a linguagem Object Pascal

Pgina: 9

Delphi 5

devemos nos familiarizar com o ambiente no qual iremos trabalhar, ou seja, devemos aprender
como manipular a IDE do Delphi. Dessa forma, veremos cada uma das janelas que compe a IDE
mais detalhadamente a seguir.
2.1.

A Janela Principal

A janela principal da IDE do Delphi dividida em 3 partes, so elas: a Barra de Ttulo e


Menus, a Barra de Ferramentas e a Paleta de Componentes. Apesar de termos essas divises,
apenas a primeira necessria para que a IDE do Delphi esteja em execuo, podendo as duas
outras, a Barra de Atalho e a Paleta de Componentes, bem como todas as demais janelas citadas
anteriormente, estarem ocultas, de acordo com a vontade do desenvolvedor. Comecemos, ento,
nossa explorao pela IDE do Delphi atravs de sua Barra de Ttulo e Menus.
Na Barra de Ttulo e Menus encontramos todas as opes que o desenvolvedor necessitar para
a utilizao do ambiente do Delphi. Atravs dos diversos menus a localizados, o desenvolvedor
poder criar novas aplicaes, dar manuteno em aplicaes previamente desenvolvidas, alm de
configurar todo o seu ambiente de trabalho de acordo com a sua forma de programao. Veremos os
principais itens de menu existentes na janela principal a medida em que formos utilizando a IDE do
Delphi.
A Barra de Ferramentas, tambm chamada de Barra de Atalhos, localizada do lado inferior
esquerdo da janela principal utilizada para acessar as funes mais freqentemente utilizadas pelo
desenvolver Delphi. Nela encontramos opes tais como a abertura e salva de arquivos de cdigofonte Object Pascal, compilao, execuo e depurao de programas, entre outras.
importante observarmos dois pontos com relao a Barra de Ferramentas. O primeiro que
ela contm opes que tambm esto disposio do desenvolvedor atravs de itens de menus,
permitindo no entanto, um acesso mais rpido a elas. O segundo ponto, como dito anteriormente,
que ela no precisa estar visvel para que a IDE do Delphi esteja ativa. Para ocultarmos a Barra de
Ferramentas basta clicarmos com o boto secundrio do mouse sobre
ela fazendo surgir na tela um menu Popup. Nesse menu existir
diversos itens que permitem ao desenvolvedor ocultar ou no as
diversas barras que compe a Barra de Ferramentas, conforme ilustra a
figura ao lado.
Atravs do menu Popup mostrado ao lado, podemos deixar ou no
visveis cada um dos 6 grupos de botes da Barra de Ferramentas do
Delphi, alm da Paleta de Componentes que ser vista a seguir. Esse
menu Popup poder tambm ser selecionado atravs do menu View -> Toolbars localizado na
janela principal do Delphi.
A IDE do Delphi permite ainda que a Barra de Ferramentas possa ser configurada de acordo
com as necessidades do desenvolvedor. Isso poder ser feito atravs do menu Customize mostrado
na figura anterior. Ao selecionarmos essa opo ser exibida a caixa de dilogo Customize como
mostrado na figura a seguir.
Atravs dessa caixa de dilogo o desenvolvedor
poder definir tambm quais componentes da Barra de
Ferramentas estaro visveis, atravs das opes
localizadas na pgina Toolbars, bem como colocar e
remover itens da Barra de Ferramentas e configurar
algumas opes de exibio para esses componentes,
como por exemplo, a exibio ou no dos Hints
(pequenos textos explicativos) que aparecem nos
Pgina: 10

Delphi 5

componentes a medida em que passamos o mouse por sobre eles.


O processo para adicionar ou remover um elemento da Barra de Ferramentas bastante
simples. Na pgina Commands da caixa de dilogo Customize esto listados os menus existentes na
IDE do Delphi, bem como seus respectivos itens de menu. Para adicionarmos um desses itens basta
que cliquemos no item desejado arrastando-o para o grupo de botes da Barra de Ferramentas no
qual desejamos coloc-lo. Feito isso basta soltarmos o elemento para que ele aparea na posio
desejada. Um processo simples de Drag and Drop bastante comum na maioria dos aplicativos
desenvolvidos para o ambiente Windows. A remoo de um elemento feita de forma ainda mais
simples. Para retirarmos um elemento basta arrastarmos esse elemento para fora da Barra de
Ferramentas, ou seja, o processo inverso ao realizado quando colocamos o item na Barra de
Ferramentas. Um fato ao qual devemos atentar que esse processo dever ser realizado com a caixa
de dilogo Customize sendo exibida na tela.
Por fim temos, na Janela Principal do Delphi, a Paleta de Componentes. Este elemento um
dos mais importantes da IDE do Delphi, uma vez que, na Paleta de Componentes que se
encontram os vrios objetos que iro compor as aplicaes que sero por ns desenvolvidas como,
por exemplo, os botes, caixas de texto e elementos de acesso banco de dados. A Paleta de

Componentes do Delphi mostrada a seguir.


Como podemos observar, a Paleta de Componentes dividida em vrias guias (Standard,
Additional, Win32, etc.), cada uma das quais contendo diversos componentes de acordo com suas
funes. Por exemplo, na guia Standard encontramos componentes padres dentro de uma
aplicao Windows tais como botes e caixas de texto, entre outros. J na guia Data Access,
encontramos componentes responsveis pelo acesso de nossa aplicao aos dados contidos nos
vrios bancos de dados com o qual o Delphi pode trabalhar. No canto superior direito da Paleta de
Componentes esto localizados dois botes que possibilitam a navegao dentro da Paleta de
Componentes permitindo assim a visualizao das demais guias da Paleta de Componentes. No
caso ainda da guia que esteja sendo exibida naquele momento possuir uma quantidade maior de
componentes do que aquela que pode ser visualizada dentro da Paleta de Componentes, sero
habilitados dois botes, do lado direito e esquerdo da Paleta, responsveis pela visualizao dos
demais componentes contidos na guia selecionada.
Atravs da Paleta de Componentes o desenvolvedor poder colocar os componentes
selecionados na aplicao que ele esteja desenvolvendo. Podem ser utilizados no s componentes
originrios do Delphi bem como desenvolvidos por terceiros. Ou seja, dentro do Delphi podemos
utilizar dentro de nossas aplicaes componentes disponibilizados na Paleta de Componentes pela
prpria instalao do Delphi, mas tambm podemos instalar novos componentes e utiliz-los no
desenvolvimento de nossas prprias aplicaes. Dessa forma, vemos que podemos desenvolver no
s aplicaes, mas tambm componentes que podero ser utilizados no apenas por ns mesmos,
mas por outros programadores em Delphi ou em outras linguagens de programao. O
desenvolvimento de novos componentes uma atividade praticada por muitos programadores como
forma principal de comercializao de seus produtos deixando, muitas vezes, em segundo plano o
desenvolvimento de aplicaes comerciais.
Como conseqncia dessa possibilidade de instalao de novos componentes podemos, dentro
do Delphi, configurar a Paleta de Componentes para que, entre outras coisas, ela possua novas guias
que contenham esses componentes a serem instalados. bem verdade que na maioria das
Pgina: 11

Delphi 5

instalaes de novos componentes, a prpria instalao se encarrega de criar as pginas em que


esses componentes sero instalados, porm esse fato no invalida a possibilidade do desenvolvedor
desejar criar novas pginas dentro da Palete de Componentes de tal forma a organizar a IDE do
Delphi sua prpria forma de programar. Uma das maneiras pela qual podemos configurar a Paleta
de Componentes atravs do menu popup por ela exibido como mostrado a seguir.
Atravs desse menu popup, temos a opo de permitir ou no a
exibio de Hints (dicas contendo o nome de cada um dos
componentes) para os componentes da Paleta da mesma maneira como
visto com a Barra de Ferramentas, alm da possibilidade de ocultar a
prpria Paleta de Componentes. Essa ltima opo j havia sido
mencionada anteriormente quando vimos o menu popup da Barra de Ferramentas. Existe ainda a
possibilidade de solicitarmos o apoio do Help. A utilizao do Help um ponto que devemos
sempre ressaltar por se tratar de uma fonte muito importante de informao, talvez no tanto com
relao ao menu popup mostrado aqui mas em diversos outro pontos principalmente como auxlio
prpria programao. Dentre os itens do menu popup mostrado ao lado, sem dvida alguma a que
mais ir nos interessar a opo que nos permite alterar as propriedades da Paleta de Componentes.
Essa opo tambm pode ser selecionada atravs da opo Configure Pallete, localizada no menu
Component.
A caixa de dilogo Pallete Properties, mostrada ao lado, permite que o desenvolvedor
configure a Paleta de Componentes de acordo com as suas
necessidades e preferncias. O desenvolvedor poder criar novas
guias para conter tanto novos componentes quanto para
redistribuir aqueles j existentes, atravs de uma simples operao
de Drag and Drop entre as guias de origem e destino. Alm disso,
o desenvolvedor poder remover e renomear as guias j existentes
ou, simplesmente, reordenar os componentes em suas respectivas
guias. Quando desejarmos remover uma guia deveremos ter
cuidado, pois ao selecionarmos o boto Remove, o Delphi no
solicita uma confirmao a respeito dessa remoo. Caso
desejemos restaurar a configurao original podemos clicar o
boto Default Pages, visvel apenas quando selecionamos a opo [All] localizada no ListBox
Pages. Devemos ainda lembrar que ao redistribuirmos os componentes dentro das guias da Paleta
de Componentes estamos alterando a configurao original do Delphi para atender s nossas
necessidades. Essa alteraes esto sendo feitas apenas em nosso ambiente de trabalho e no
estaro disponveis quando prescisarmos utilizar uma outra instalao para continuarmos o
desenvolvimento de nossos aplicativos. O mesmo devemos ter em mente quando utilizamos
componentes de terceiros.
2.2.

Os Formulrios

A grande maioria das aplicaes desenvolvidas para o sistema operacional Windows,


excetuando-se em alguns casos, por exemplo, as DLLs ou aplicativos desenvolvidos para trabalhar
em modo DOS, composta de uma ou mais janelas, tambm chamadas de formulrios. Dessa
forma, como no poderia deixar de ser, a grande maioria das aplicaes que iremos desenvolver
sero compostas de um ou vrios formulrios. Em aplicaes que possuam mais do que um
formulrio, devemos observar que existir sempre um formulrio responsvel pela execuo da
aplicao. Enquanto esse formulrio permanecer aberto, nossa aplicao permanecer em
execuo. Esse formulrio chamado de formulrio principal da aplicao e, devido ao papel

Pgina: 12

Delphi 5

diferenciado que ele exerce sobre a aplicao, dever receber uma ateno especial por parte dos
programadores para o ambiente Windows.
Ao iniciarmos o ambiente de desenvolvimento do
Delphi, nos apresentado um formulrio inicial, em
geral no contendo qualquer componente como
mostrado na figura. Esse formulrio inicial
exatamente o formulrio principal dessa nova
aplicao, porm essa caracterstica do formulrio
poder ser alterada posteriormente com o decorrer do

desenvolvimento do aplicativo (veremos como alterar o formulrio principal de nossa aplicao


posteriormente). Ao darmos incio ao processo de desenvolvimento das aplicaes iremos colocar
em cada formulrio os diversos componentes que iro compor tanto a sua interface, como por
exemplo, botes e menus, quanto iremos definir os procedimentos a serem executados por cada um
desses componentes como, por exemplo, o que ser executado quando clicarmos em um
determinado item de menu. Todo esse processo realizado em diversas etapas, todas elas
importantssimas no desenvolvimento de aplicaes para o ambiente Windows. A primeira delas a
colocao dos componentes em cada um dos formulrios da aplicao. Os componentes podem ser
colocados nos formulrios de vrias maneiras, veremos algumas delas a seguir.
A maneira mais simples de colocarmos um componente em um formulrio darmos um duplo
clique sobre o componente desejado na Paleta de Componentes. Por exemplo, caso desejemos
colocar um boto, localizado na guia Standard, no formulrio podemos dar um duplo clique sobre
esse componente. Ao fazermos isso, um boto ser colocado no centro do formulrio seguindo a
largura e altura padro definidos para um boto.
Embora essa seja a maneira mais simples de colocarmos um componente em um formulrio,
essa no a mais usual. Em geral, colocamos os componentes no formulrio clicando no
componente desejado na Paleta de Componentes e, em seguida, clicando no formulrio. Ao
fazermos isso, diferentemente do que acontecia anteriormente, o componente colocado, ainda com
largura e altura padro, no formulrio porm no mais na posio central do formulrio mas sim na
posio aonde o mouse foi clicado. De forma bastante semelhante, podemos colocar um
componente definindo uma nova altura e largura. Para isso basta que cliquemos no componente
desejado na Paleta de Componentes e, ao clicarmos no formulrio permaneamos com o boto do
mouse pressionado, arrastando-o at o tamanho desejado. Existem, no entanto, alguns componentes
que no permitem alterar suas dimenses conforme mostraremos mais adiante.
Devemos observar dois pontos importantes com relao aos componentes existentes na Paleta
de Componentes. O primeiro deles que nem todos os componentes que colocamos nos formulrios
das nossas aplicaes sero visveis aos usurios durante a execuo do aplicativo, ou seja, existem
dois tipos de componentes: aqueles que so visveis tanto em tempo de desenvolvimento quanto em
tempo de execuo e aqueles que s esto visveis durante o desenvolvimento da aplicao. Esses
ltimos, chamados de componentes no-visuais no permitem que suas dimenses sejam alteradas.
Esse comportamento perfeitamente compreensvel uma vez que esses componentes no sero
exibidos no formulrio durante a execuo da aplicao e por isso no faz sentido podermos
dimension-los. O segundo ponto a observarmos que, a cada componente que colocamos no
formulrio, o Boto de Seleo (aquele com o desenho de uma seta, localizado na Paleta de
Componentes) torna-se o boto ativo indicando que podemos manipular com o componente
correntemente selecionado.
Pgina: 13

Delphi 5

Uma outra maneira pela qual podemos colocar componentes em um


formulrio atravs da seleo da opo Component List, localizada no menu
View. Ao selecionarmos essa opo ser exibida a caixa de dilogo
Components como mostrado na figura ao lado. Atravs dessa caixa de
dilogo podemos selecionar o componente que desejamos colocar no
formulrio e, logo em seguida, clicarmos o boto Add to Form. Essa opo
idntica a primeira opo que mencionamos sobre como colocar um
componente no formulrio, ou seja, o componente colocado no centro do
formulrio possuindo largura e altura padro. Essa opo pode ser til
quando sabemos o nome do componente, mas no sabemos em qual guia da
Paleta de Componentes ele est localizado, tornando mais rpida a busca atravs de seu nome ao
invs de sua localizao.
Imaginemos agora que estamos desenvolvendo uma tela de cadastro qualquer. bastante
provvel que nesse formulrio seja necessrio colocar vrias caixas de texto e botes. A tarefa de
colocar esses componentes bastante trabalhosa uma vez que tenhamos de ir colocando, um a um,
os diversos componentes no formulrio. Esse o comportamento do Delphi que aps colocarmos
um componente qualquer no formulrio volta a ter o Boto de Seleo selecionado. Nessas
situaes o ideal seria que pudssemos escolher o componente que queremos colocar no formulrio
e fssemos colocando-o quantas vezes quisssemos sem que tivssemos de selecion-lo novamente
na Paleta de Componentes. Para a nossa felicidade isso perfeitamente possvel. Para tanto basta
que, mantendo a tecla Shift pressionada, selecionemos na Paleta de Componentes o componente que
desejamos colocar repetidamente no formulrio. Ao fazermos isso, o boto da Paleta de
Componentes selecionado, passando a ter uma cor levemente azulada como mostrado na figura
abaixo, indicando que podemos colocar quantos componentes desejarmos no formulrio.
Uma vez selecionado, o componente permanecer selecionado at que um outro componente
seja selecionado ou que o Boto de Seleo torne-se o boto selecionado na Paleta de
Componentes.
Uma vez colocados os componentes no formulrio, resta ao programador a tarefa de
dimension-los e alinh-los de forma a dar uma melhor aparncia sua aplicao, caso isso j no
tenha sido feito no momento da colocao desses componentes no formulrio.
O dimensionamento dos componentes, como visto anteriormente, pode ser feito tanto no
momento de sua colocao no formulrio quanto posteriormente a ela. A maneira mais comum de
dimensionarmos os componentes aps a sua colocao
no formulrio feita da seguinte maneira: devemos
selecionar o componente que desejamos manipular e
utilizando o mouse devemos clicar e arrastar um dos
oito pequenos quadrados de dimensionamento
existentes ao redor do componente como mostrado na
figura ao lado. Essa forma de redimensionar
componentes utilizada, principalmente, quando ns
estamos manipulando com apenas um nico
componente. Quando, no entanto, temos mais de um
componente
que
desejamos
redimensionar
simultaneamente para deix-los, por exemplo, com o mesmo tamanho, podemos utilizar a caixa de
dilogo Size, mostrada abaixo. Essa caixa de dilogo exibida tanto atravs da opo Size contida
no menu Edit quanto atravs da opo Size contida no menu popup exibido ao clicarmos com o
boto secundrio do mouse no componente desejado.

Pgina: 14

Delphi 5

Uma observao deve ser feita com relao ao


dimensionamento dos componentes utilizando-se a caixa de
dilogo Size. Apesar de podermos utiliz-la para
redimensionar um nico componente (para isso podemos
utilizar a opo Width e Height), a caixa de dilogo Size ser
utilizada com maior freqncia quando estivermos trabalhando
com vrios componentes simultaneamente.
Para selecionarmos mltiplos componentes devemos clicar no primeiro componente que
desejamos manipular selecionando-o assim e, em seguida, mantendo a tecla Shift pressionada,
devemos clicar nos demais componentes que sero manipulados. Uma outra forma de
selecionarmos mltiplos componentes atravs da definio de uma rea de abrangncia. Para isso,
o desenvolvedor dever clicar com o mouse em uma regio do formulrio e, em seguida, mantendo
o boto primrio do mouse pressionado, arrastar o mouse demarcando a rea cujos componentes
nela contidos devero ser selecionados. Aps a delimitao da rea desejada devemos liberar o
boto primrio do mouse para que, dessa maneira, os componentes sejam marcados como
selecionados. Uma vez que tenhamos selecionado os componentes, as opes da caixa de dilogo
Size podero ser aplicadas a eles tanto com relao altura quanto ao comprimento desses
componentes. Uma vez que sabemos como marcar vrios componentes resta-nos saber como
desmarc-los, para tanto basta clicarmos em qualquer outro componente que no esteja marcado,
tornado assim esse ltimo o componente selecionado.
Alm da tarefa de redimensionar os componentes, resta ao desenvolvedor alinh-los para dar
uma melhor aparncia ao seu programa. Para isso, da mesma forma como fizemos para
redimensionar os componentes colocados no formulrio, poderemos simplesmente clicar sobre os
componentes selecionando-os e, em seguida, arrast-los at a posio desejada, ou poderemos
utilizar as ferramentas do Delphi para isso.
Em geral, a tarefa de alinhar os componentes no formulrio no to difcil devido existncia
do grid. O grid nada mais do que os vrios pontos existentes nos formulrios exibidos na IDE do
Delphi. O comportamento default para os componentes o seu auto-alinhamento em relao aos
pontos do grid, ou seja, ao redimensionarmos ou arrastarmos os componentes pelo formulrio eles
iro sempre se posicionar de acordo com os pontos do grid
facilitando, dessa forma, o trabalho do programador.
Mesmo assim, existiro situaes em que a tarefa no ser
to simples como, por exemplo, caso desejemos centralizar
alguns componentes no formulrio. Apesar de podermos
tentar fazer isso de forma visual, no ser difcil
errarmos por uma diferena de um ou dois pontos do grid.
Para evitarmos que isso acontea, poderemos recorrer s
ferramentas de alinhamento que o Delphi nos oferece.
A primeira caixa de dilogo que poderemos utilizar para alinhar os componentes a caixa de
dilogo Alignment, mostrada ao lado, obtida atravs da opo Align selecionada a partir do menu
popup exibido ao clicarmos sobre um componente de nosso formulrio. Essa caixa de dilogo
bastante semelhante caixa de dilogo Size mostrada anteriormente. Nela podemos escolher qual o
tipo de alinhamento que desejamos aplicar aos componentes selecionados tanto com relao a sua
horizontal quanto a sua vertical. Novamente percebemos que a maioria das opes listadas
nessa caixa de dilogo s faz sentido quando aplicadas a mais de um
componente.

Pgina: 15

Delphi 5

Porm, muitas vezes, ao invs de alinharmos os componentes atravs da caixa de dilogo


Alignment, o fazemos atravs de uma outra ferramenta do Delphi, a Alignment Pallete. Para
exibirmos a Alignment Pallete devemos escolher a opo de mesmo nome localizada no menu
View. Ao fazermos isso nos ser exibida a caixa de dilogo mostrada ao lado. A Alignment Pallete
possui basicamente as mesmas funcionalidades que a caixa de dilogo Alignment mostrada acima,
porm com a diferena de que as opes de alinhamento so exibidas de forma grfica, o que torna
o entendimento da funcionalidade de cada boto muito mais fcil e rpido. Alm da exibio
grfica da funcionalidade de cada boto, exibido um hint para cada um desses botes quando
permanecemos com o mouse por sobre eles por um pequeno intervalo de tempo.
Vimos at aqui como fcil colocarmos os componentes nos formulrios de nossa aplicao,
alm das vrias maneiras possveis de como podemos redimension-los e alinh-los. Resta-nos,
apenas, mostrar como podemos remover os componentes que no desejamos mais que permaneam
no formulrio. J podemos imaginar at como isso pode ser feito (lembre-se que a programao no
ambiente Delphi bastante intuitiva). Para removermos um ou mais componentes de nosso
formulrio basta que selecionemos os componentes desejados e, em seguida, pressionemos a tecla
Delete ou atravs da opo Delete localizada no menu Edit. Caso deletemos por engano algum
componente no precisamos nos preocupar, as operaes de deleo podem ser desfeitas atravs da
opo Undelete localizada no menu Edit ou atravs de sua tecla de atalho Ctrl + Z.
2.3.

O Object Inspector

Uma das principais janelas do ambiente de desenvolvimento Delphi o


Object Inspector. Ele o principal responsvel pela definio das caractersticas e
do comportamento de cada componente colocado nos formulrios da aplicao
sendo desenvolvida. Por essa razo, em geral, ele encontra-se sempre visvel ao
iniciarmos o Delphi. Caso isso no ocorra, para visualizarmos o Object Inspector,
a qualquer momento dentro da IDE do Delphi podemos selecionar a opo Object
Inspector localizada no menu View ou utilizar sua tecla de atalho F11. O Object
Inspector mostrado na figura ao lado.
Como podemos observar, o Object Inspector composto de duas partes. Um
ComboBox contendo a lista de componentes contidos no formulrio
correntemente selecionado da aplicao, incluindo nesses componentes o prprio formulrio. O
Object Inspector contm ainda um PageControl composto por duas guias: Properties e Events. Esse
ComboBox tem a finalidade de indicar o componente atualmente selecionado no formulrio bem
como a classe a qual ele pertence (veremos o que so classes posteriormente). Podemos tambm
utilizar esse ComboBox para selecionar um novo componente, para isso basta que selecionemos seu
nome dentre os itens que aparecem na lista do ComboBox (veremos mais adiante o que o nome de
um componente).
J o Page Control divide o Object Inspector em duas guias. A primeira delas, chamada
Properties, contm as propriedades do componente correntemente selecionado, enquanto que, a
segunda guia, chamada Events, possui os eventos disponveis para esse componente. Quando
selecionamos componentes diferentes, ou seja um boto e depois uma caixa de texto por exemplo,
as propriedades e eventos apresentados so diferentes, ora as propriedades e eventos pertencentes
ao boto e ora pertencentes caixas de texto, sempre de acordo com o componente selecionado.
Esse fato muito importante e por isso devemos sempre nos lembrar que o Object Inspector exibir
as propriedades e eventos do componente correntemente selecionado, por isso no citaremos mais
essa observao no decorrer de nosso estudo do Delphi. Ora, se o Object Inspector exibe as
informaes relacionadas ao componente selecionado, o que acontece quando selecionamos dois ou
mais componentes simultaneamente? Quando selecionamos mltiplos componentes, o Object

Pgina: 16

Delphi 5

Inspector exibe apenas propriedades e eventos comuns a todos os componentes que estejam
selecionados naquele momento e, ao alterarmos o valor de qualquer propriedade ou evento,
estaremos alterando o valor dessa propriedade ou evento para todos os componentes selecionados.
Porm o que so as propriedades e os eventos de um componente? As propriedades de um
componente identificam as caractersticas dos componentes tais com altura, largura, cor e tipo da
fonte sendo utilizada pelo componente. Essas caractersticas, dentre outras divises, podem tanto
ser visveis como, por exemplo, a altura e largura do componente quanto no visveis como, por
exemplo, a definio do nome de qual tabela de um banco de dados o formulrio ir exibir
informaes. No devemos confundir os dados que esto sendo exibidos, que so informaes que
podemos visualizar, com o nome da tabela que foi selecionada para ter seus dados exibidos.
J os eventos identificam as aes que, tanto o usurio da aplicao quanto outros formulrios e
componentes, podem realizar durante a execuo do aplicativo sobre o componente selecionado,
por exemplo, um boto pode ser clicado, um formulrio pode ser redimensionado e assim por
diante. Durante a construo de cada programa, funo do programador identificar e codificar
cada evento necessrio ao funcionamento da aplicao. Dessa forma, podemos perceber que nem
todos os eventos de um componente sero codificados, podendo at mesmo no existir qualquer
codificao em um componente dentro de uma aplicao. Porm, no podemos pensar que caso um
determinado evento no seja codificado ele ir deixar de ser executado. O Windows envia todos os
eventos executados para suas respectivas aplicaes. Caso exista uma codificao associada ao
evento executado esse cdigo ser executado, caso contrrio a execuo da aplicao continua
normalmente. Veremos, a partir de agora, um pouco mais detalhadamente como manipular com as
propriedades e eventos de um componente.
A guia Properties est dividida em duas partes, do lado esquerdo esto listados os nomes, em
ordem alfabtica, de cada uma das propriedades do componente corrente e ao seu lado esquerdo
esto os valores atuais para essas propriedades. Na figura do Object Inspector, exibida
anteriormente, vemos as propriedades do formulrio chamado Form1. Esse formulrio possui vrias
propriedades, dentre elas a propriedade Caption possuindo o valor Form1.
Existem vrios tipos de propriedades dentre elas, como j mencionado, as visveis e as no
visveis, tambm chamadas de visuais e no visuais, respectivamente. Alm dessa diviso, podemos
citar propriedades disponveis em tempo de desenvolvimento e aquelas disponveis em tempo de
execuo. Ou seja, as primeiras so aquelas propriedades listadas no Object Inspector que esto
disponveis e podem ser modificadas em tempo de desenvolvimento pelo programador para possuir
os valores por ele definidos. Por outro lado, as ltimas so propriedades que no esto listadas no
Object Inspector. Para que o programador tome conhecimento da existncia dessas propriedades,
ele dever consultar a ajuda online do Delphi. Um vez conhecidas, essas propriedades s podero
ser manipuladas atravs de codificao uma vez que no aparecem no Object Inspector.
Apesar de visveis no Object Inspector, algumas propriedades disponveis em tempo de
desenvolvimento podem ser tanto alteradas em tempo de desenvolvimento quanto em tempo de
execuo atravs de codificao. J outras propriedades, chamadas read-only no podem ser
alteradas em tempo de execuo, podendo apenas ser lidas. Existe toda uma gama de combinaes
entre essas caractersticas das propriedades. Para obter conhecimento a respeito de quais
propriedades so visveis em tempo de desenvolvimento, em tempo de execuo ou em ambas, ou
quais propriedades so read-only ou no, o desenvolvedor Delphi deve consultar a documentao
online fornecida pela Inprise.
Uma vez que sabemos que as propriedades listadas no Object Inspector podem ter seus valores
alterados, resta-nos saber quais os valores podem ser atribudos a cada uma dessas propriedades.
Embora tenhamos uma quantidade muito grande de propriedades para cada componente existente

Pgina: 17

Delphi 5

na IDE do Delphi, a prtica nos levar a identificar quais so os


possveis valores que podem ser atribudos a essas
propriedades. A cada propriedade est associado um tipo de
dados que define quais valores podem ser a atribudos a cada
uma delas. Por exemplo, a propriedade Caption do formulrio,
citada anteriormente, foi definida como sendo do tipo de dados
string (veremos os diversos tipos de dados suportados pelo Delphi posteriormente), podendo
receber qualquer conjunto de caracteres. J a propriedade ClientHeight, tambm listada na figura
anterior, foi definida como sendo do tipo integer podendo receber apenas valores inteiros. Caso
tentemos colocar um valor invlido para uma propriedade, o Delphi ir exibir uma mensagem de
erro informando que o valor que tentamos inserir no corresponde a um valor vlido para aquela
propriedade. Na figura ao lado mostramos a mensagem de erro exibida pelo Delphi ao tentarmos
colocar o valor ibratec na propriedade Client Height de um formulrio. Nesse exemplo, o Delphi
nos informa que o valor que colocamos no um nmero inteiro vlido e, portanto, no deveria ter
sido atribudo propriedade Client Height.
Para facilitar o trabalho do desenvolvedor Delphi, algumas propriedades de tipos mais
complexos do que as que permitem strings e inteiros, apresentam os valores vlidos em um combo
box. Dessa forma, o desenvolvedor precisa apenas selecionar dentre um dos valores listados.
importante observar que os valores listados nos combo boxes so aqueles que podem ser atribudos
varivel sendo manipulada, independentemente se estivermos alterando-a em tempo de
desenvolvimento ou em tempo de execuo atravs da codificao do aplicativo sendo
desenvolvido. No caso de tentarmos atribuir um valor que no esteja definido para
a propriedade, ao tentarmos compilar o nosso aplicativo, o Delphi exibir uma
mensagem de erro informando que estamos tentando atribuir um valor invlido
para aquela propriedade, de forma semelhante ao que aconteceu ao tentarmos
atribuir um valor invlido dentro do Object Inspector. Um outro ponto importante a
observarmos que esses valores listados dentro do combo box no so strings e
portanto, no obedecero notao de strings. Essas propriedades so definidas
como pertencentes aos chamados tipos enumerados. A notao para a definio e
atribuio tanto de strings quanto de tipos enumerados ser vista posteriormente.
Como podemos observar na figura acima, o Delphi tambm possui
propriedades simbolizadas com um pequeno sinal de + ao seu lado esquerdo. Esse
sinal permite o desmembramento da propriedade listando itens que a compe. Por exemplo, a
propriedade Anchors listada no Object Inspector mostrado na figura anterior, possui um conjunto de
valores que podem ser atribudos a ela. Aqueles valores que desejamos que estejam contidos na
propriedade devero estar com o valor true atribudo, enquanto que aqueles que no desejamos
devero estar com o valor false. No exemplo acima, a propriedade Anchors est definida contendo
os valores akLeft e akTop uma vez que a esses valores foi atribudo o valor True. Esses tipos
especiais de propriedades, chamados Sets sero vistos posteriormente no decorrer de nosso estudo.
Podemos facilmente identificar quais propriedades so Sets uma vez que, no Object Inspector, os
valores dessas propriedades aparecem entre colchetes.
Alm das propriedades definidas como Sets, um outro conjunto de
propriedades apresentam do seu lado esquerdo um sinal de + no Object
Inspector. Essas propriedades podem representar tanto Sets quanto
Objetos. O desenvolvedor poder facilmente diferenciar cada uma
dessas duas situaes atravs do
contedo da propriedade em questo.
Ao contrrio do que acontece com os
Sets, que apresentam seu contedo

Pgina: 18

Delphi 5

entre colchetes, as propriedade que apresentam seu contedo entre sinais de parnteses representam
objetos (veremos posteriormente a definio de classes e objetos). Essas propriedades representam
novos objetos contidos dentro do componente em questo, que por sua vez tambm um objeto.
Veremos toda essa idia de objetos posteriormente, por hora basta termos em mente que podem
existir propriedades que representam tanto Sets quanto objetos. A figura anterior mostra a
propriedade Font do formulrio. Essa propriedade ilustra dois aspectos com relao a propriedades
que representam objetos. Podemos observar que a propriedade Font possui, por sua vez, outras
propriedades. Ao contrrio do que acontecia com os Sets, cujos valores que podamos atribuir eram
apenas True ou False, as propriedades que aparecem abaixo de Font podem receber valores
inteiros, strings, Sets ou at mesmo novos objetos. Uma segunda observao est no fato da
existncia de um boto, ao lado do valor da propriedade Font. Ao clicarmos esse boto ser exibida
um caixa de dilogo que nos permite preencher de forma mais agradvel o valor das propriedades
que foram listadas, em nosso exemplo, a propriedade Font. A figura ao lado mostra a caixa de
dilogo que exibida ao clicarmos no boto da propriedade Font. Devemos ter em mente que a
caixa de dilogo mostrada no de exibio obrigatria, ou seja, podem existir propriedades dentro
de componentes do Delphi que representem objetos mas que no possuam uma caixa de dilogo
para permitir uma definio mais fcil dos valroes de suas propriedades. A existncia dessas caixas
depende das pessoas que construram, ou seja, programaram cada um desses componentes. uma
prtica de programao bastante comum dentro do ambiente Delphi que, as propriedades de
componentes que representem objetos deverm ter uma caixa de dilogo associada mas isso no
torna obrigatria a existncia dessas caixas de dilogo. Caso estejamos estudando o Delphi para
desenvolver novos componentes devemos lembrar que, caso exista um propriedade que contenha
um objeto em nosso componente, devemos desenvolver uma caixa de dilogo que permita o
preenchimento das informaes para esse objeto.
A segunda guia existente no Object Inspector responsvel pela
exibio dos Eventos aos quais o componente selecionado pode responder.
Esses eventos, da mesma forma como acontecia com as propriedades, so
especficos para cada componente, ou seja, podem existir eventos comuns
ou no aos diversos componentes existentes no Delphi. A figura ao lado
mostra os eventos aos quais um formulrio pode responder.
J sabemos que o Object Inspector, de forma semelhante ao que
acontece com as propriedades, exibe os eventos especficos para cada
componente selecionado. Porm, para que servem os eventos? Os eventos
formam uma das partes mais importantes na programao dentro do
ambiente Windows. atravs do disparo de eventos que existe a interao
entre o usurio e o cdigo escrito em cada programa. Eventos so disparados por aes do usurio
ou de outros programas, e esses eventos por sua vez, executam a codificao escrita pelos
programadores durante o seu desenvolvimento. No Delphi, a maneira mais simples de associarmos
que cdigo que ser executado quando cada um desses eventos ocorrer atravs do Object
Inspector. Por exemplo, caso quisssemos exibir uma mensagem quando o usurio clicasse no
formulrio, poderamos escrever o cdigo responsvel pela exibio da mensagem e associ-lo ao
disparo do evento OnClick do formulrio. Podamos tambm efetuar essa associao atravs da
prpria codificao porm deixamos a explanao de como isso pode ser feita para uma discusso
um pouco mais avanada dentro do Delphi. A guia Events est dividida de forma semelhante guia
Properties. Do lado esquerdo esto listados os nomes dos eventos enquanto que do lado direito est
o nome de qual trecho de cdigo dever ser executado quando o evento em questo for disparado.
Com o intuito de facilitar o trabalho do desenvolvedor, o nome de cada evento segue um padro de
nomenclatura, observe que dentro do Object Inspector cada evento tem seu nome composto do
prefixo On mais o evento que ir dispar-lo.

Pgina: 19

Delphi 5

Como citado anteriormente, o Object Inspector tem como uma de suas funes associar o
evento e o cdigo a ser executado quando esse evento for disparado. Dessa forma, podemos
perceber que no existe a obrigatoriedade de termos, para cada evento um cdigo a ser executado,
ou seja, podem existir eventos sem qualquer cdigo associado. Por exemplo, no precisamos
associar cdigo algum ao evento OnClick do formulrio. Mesmo que isso ocorra, como mencionado
anteriormente, o Windows continuar enviando uma mensagem ao formulrio toda vez que ele
sofrer um clique por parte do usurio, porm nada ser executado. Da mesma forma, tambm
podemos ter inmeros eventos apontando para o mesmo cdigo, como ilustra a figura abaixo. Na
figura abaixo vemos a existncia de trs eventos distintos que, ao serem disparados, executam o
mesmo trecho de cdigo dentro da aplicao.

Por exemplo, em nossa aplicao poderamos ter um boto e um item de menu que nos
permitam sair do programa. No necessitamos escrever dois cdigos idnticos e associa-los
respectivamente ao clique no boto e ao clique do item de menu. Basta criarmos uma nica
codificao e associ-la a ambos os eventos, ou seja, tanto ao clique do boto quanto ao do item de
menu. Isso muito importante uma vez que nos permite uma melhor codificao e manuteno do
cdigo escrito, diminuindo a quantidade de erros durante a fase de manuteno do aplicativo.
Uma vez que j sabemos que podemos associar cdigo aos diversos eventos existentes em cada
componente, resta-nos escrever esse cdigo e criar a associao entre o cdigo escrito e o evento
desejado. Apesar de poder parecer um pouco estranho, iremos comear no pela codificao, mas
sim pela associao entre o cdigo e os eventos. Essa inverso ficar clara no decorrer de nossa
explicao. Ento, veremos agora as quatro alternativas que o Delphi nos oferece para associar
cdigo aos eventos listados no Object Inspector.
Vamos iniciar com o mtodo mais comum de associao. Para isso, iremos construir nossa
primeira aplicao em Delphi. Inicialmente, essa
aplicao no ir conter qualquer componente, ou seja,
ela ser composta simplesmente da janela principal
como ilustrado ao lado. Para isso devemos selecionar a
opo Close All no menu File e em seguida a opo
New Application localizada nesse mesmo menu. Caso
tenhamos modificado a aplicao anterior o Delphi ir
nos perguntar se desejamos salvar as alteraes
efetuadas, por ora responderemos no. Suponha que
desejamos exibir uma mensagem quando esse
formulrio for clicado. J sabemos que o Object
Inspector sempre manipula o componente selecionado e por isso devemos selecionar o formulrio

Pgina: 20

Delphi 5

que, nada mais do que o componente ao qual desejamos criar a associao entre a codificao e o
evento. Para selecionarmos o formulrio basta que efetuemos um clique simples no formulrio que
este se tornar o objeto selecionado no Object Inspector. Uma vez selecionado o componente,
devemos no Object Inspector, selecionar o evento que desejamos associar a codificao. Em nosso
exemplo, devemos selecionar o evento OnClick uma vez que queremos exibir uma mensagem
quando o formulrio for clicado. Uma vez que ainda no escrevemos codificao alguma, iremos
nos aproveitar de alguns recursos que o Delphi nos oferece para podermos criar tanto a codificao
inicial quanto a associao dessa codificao com o evento do formulrio. Para isso, vamos dar um
duplo clique na regio branca do lado direito do nome OnClick.
Ao fazermos isso, o Delphi abre o Editor de Cdigo, que ser visto no prximo tpico, e cria
um trecho de programa no qual podemos digitar o cdigo necessrio exibio da mensagem
quando o formulrio for clicado, como ilustrado na
figura. Esse trecho de cdigo chamado de
Procedimento de Evento, do ingls Event Procedure.
Alm da criao do trecho inicial da codificao a ser
realizada, o Delphi tambm alterou outros trechos de
cdigo dentro do prprio Editor. No iremos abordar
agora essas demais alteraes, apenas iremos salientar
que as demais alteraes feitas pelo Delphi so
importantes quando estivermos criando por conta
prpria procedimentos de eventos para as nossa
aplicaes. Apesar de no serem alteaes que um
programador iniciante estar fazendo dentro do Delphi elas devero ser observadas para um melhor
entendimento do funcionamento de um programa Delphi.
Uma outra alterao realizada pelo Delphi, facilmente perceptvel, encontra-se no Object
Inspector. Agora, ao lado do evento OnClick do formulrio, o Delphi criou a associao desse
evento com o trecho de cdigo que foi criado pelo pprio Delphi e listado no
Editor de Cdigo. Observe que essa associao criada nada mais do que a
informao de qual Procedimento de Evento ser executado quando o evento
OnClick for disparado. De forma semelhante poderamos fazer com que o
Delphi criasse qualquer Procedimento de Evento e fizesse a associao entre o
procedimento e o respectivo evento. A figura ao lado mostra como ficou o
Object Inspector aps a associao entre o Procedimento de Evento criado e o
evento OnClick do formulrio.
O Delphi, ao criar o Procedimento de Evento, forneceu a ele um nome
inicial default, formado pelo nome do componente que ir sofrer o evento, em
nosso exemplo o formulrio, juntamente com o evento que ir disparar a
execuo do procedimento, no exemplo o evento Click. Apesar do Delphi
fornecer um nome default para os procedimentos, muitas vezes podemos querer utilizar um outro
nome para o procedimento, de tal forma que se torne mais clara a finalidade daquele trecho de
cdigo a ser executado. Por exemplo, ao invs de chamarmos o procedimento de FormClick
poderamos querer que o procedimento viesse a ser chamado de ExibirMensagem.
Essa alterao pode ser facilmente realizada. Basta que mudemos o nome da associao no
Object Inspector e teclemos ENTER, que ela ser automaticamente refletida
tambm no Editor de Cdigo. Observe, no entanto, que para fornecermos o nome
desejado ao Procedimento de Evento tivemos de criar um procedimento com o
nome default e posteriormente muda-lo para o nome que desejvamos. Porm
poderamos ter criado o procedimento diretamente com o nome desejado. Essa

Pgina: 21

Delphi 5

justamente a segunda maneira que possumos para criar um Procedimento de Evento dentro do
Delphi. Ao selecionarmos o evento desejado podemos, no Object Inspector, ao invs de dar um
duplo clique no evento desejado, temos a opo de digitar diretamente o nome que desejamos
atribuir ao Procedimento de Evento e em seguida, ao darmos um ENTER, O Delphi ir criar o
procedimento da mesma forma como havia criado anteriormente, porm com o nome que definimos
ao invs de utilizar o nome default. Apesar dessa segunda opo de criao de um procedimento ser
mais clara em relao finalidade do procedimento sendo criado, ela no to utilizada em relao
primeira, por questes muitas vezes de agilidade no desenvolvimento da aplicao.
A terceira opo para criarmos procedimentos de eventos apoia-se no fato de
podermos associar diversos eventos execuo de um mesmo trecho de cdigo
fonte. A associao bastante simples. Para associarmos um evento a um
Procedimento de Evento previamente escrito basta que selecionemos, a partir do
combo box ao lado do evento que desejamos fazer a nova associao, o nome do
Procedimento de Evento previamente criado. A figura ao lado mostra a exibio no
combo box da propriedade OnDestroy o Procedimento de Evento ExibirMensagem
criado anteriormente para o evento OnClick do formulrio. Ao criarmos essa
associao, o mesmo trecho de cdigo ser executado por nossa aplicao tanto
quando o formulrio for clicado como quando ele for destrudo.
importante fazermos uma pequena observao com relao a essa
possibilidade de associarmos Procedimentos de Eventos previamente criados a outros eventos
dentro de nossa aplicao. No Combo Box dos eventos nem sempre estaro
listados todos os Procedimentos de Eventos que j foram criados em uma
aplicao. Esse fato est ilustrado na figura a seguir. Como podemos observar, o
Procedimento de Evento ExibirMensagem foi criado previamente e est
associado ao evento OnClick do formulrio. Contudo esse procedimento no
aparece no Combo Box exibido ao lado do evento OnCloseQuery do formulrio.
Fato semelhante aconteceria em vrios outros combo boxes de eventos. A
recproca tambm aconteceria se tivssemos criado inicialmente um
procedimento de evento associado ao evento OnCloseQuery do formulrio e,
posteriomente tentssemos associar esse mesmo procedimento ao evento
OnClick do formulrio.
Ao contrrio do que poderamos pensar inicialmente, isso no um bug do
Delphi e, uma vez que no se trata de um bug, existe obviamente uma
explicao para essa situao. O entendimento dessa situao facilmente observado quando
criamos um Procedimento de Evento, por qualquer um dos mtodos vistos anteriormente, e o
associamos ao evento OnCloseQuery. Ao fazermos isso, o Delphi ir exibir o Editor de Cdigo e
deixar disponvel os procedimentos criados tanto para o evento OnClick quanto para o evento
OnCloseQuery, como ilustrado na figura abaixo. Observe que esses procedimentos, apesar de serem
criados pelo Delphi de forma semelhante eles so diferentes em suas declaraes.

Pgina: 22

Delphi 5

O procedimento associado ao evento OnClick e OnDestroy do formulrio possuem apenas um


nico parmetro associado a ele, enquanto que o procedimento referente ao evento OnCloseQuery
recebe dois parmetros. Veremos como declarar e passar parmetros posteriormente, por enquanto
basta observarmos que o Delphi s ir permitir a associao de procedimentos desde que eles sejam
semelhantes, ou seja, possuam os mesmos tipos de argumentos.
A quarta maneira de criarmos um Procedimento
de Evento e de o associarmos a um evento a mais
rpida de todas. Apesar de ser a maneira mais rpida
ela muitas vezes erroneamente utilizada por
programadores inexperientes. Para ilustrarmos esse
procedimento iremos colocar um boto em nosso
formulrio conforme ilustrado. Uma vez que o boto
tenha sido colocado no formulrio vamos criar um
Procedimento de Evento associado ao clique desse
boto. Para isso, vamos dar um duplo clique no em
cima do boto. Ao fazermos isso, o Delphi cria, de
forma idntica ao que foi visto na primeira maneira de criar procedimentos associados a eventos,
um procedimento com o nome default e o associa ao evento OnClick do boto, como ilustrado na
figura a seguir.
Ao contrrio do que podemos imaginar, esse
comportamento no ser sempre o mesmo, ou seja,
caso desejemos criar um procedimento e associ-lo ao
clique do formulrio seria suficiente darmos um duplo
clique no formulrio para que o Delphi fizesse isso por
ns? A resposta no! Caso dssemos um duplo clique
no formulrio o Delphi tambm iria criar um
procedimento, mas esse procedimento no estaria
associado ao clique no formulrio, mas sim ao evento
OnCreate. Esse comportamento deve-se ao fato de que
o duplo clique em um componente no faz com que
Delphi crie automaticamente um procedimento associado ao evento OnClick daquele componente
mas sim ao fato de que o Delphi cria um procedimento associado ao evento default do componente
clicado. No caso do boto, por exemplo, o evento default o OnClick j no caso do formulrio o
OnCreate e assim sucessivamente. Para evitarmos erros desse tipo devemos nos habituar a utilizar
as trs primeiras maneiras de criao e associao de eventos at que estejamos bastante
familiarizados com os componentes existentes e seus respectivos eventos default.
2.4.

O Editor de Cdigo
O Editor de Cdigo, at a verso 3 do Delphi, nada
mais era do
que
uma
janela
dotada dos
recursos
Pgina: 23

Delphi 5

mais comuns nos editores de texto tais como o WordPad. Nessa janela podiam ser exibidos um ou
vrios arquivos de cdigo fonte. Cada um desses arquivos podia ser acessado atravs de uma guia
contendo o nome do arquivo sendo exibido. Alm disso no Editor de Cdigo eram exibidas
informaes a respeito da compilao dos programas tais como erros e warnings detectados pelo
compilador Delphi. A partir da verso 4 do Delphi, o Editor de Cdigo trouxe uma outra janela,
chamada de Code Explorer, capaz de identificar e exibir de forma mais organizada informaes a
respeito do arquivo fonte sendo exibido, tais como declaraes de constantes e variveis.
O Editor de Cdigo possui recursos que permitem a busca e substituio de trechos de cdigo,
atravs do menu Search. No entraremos em detalhe a respeito da utilizao desses recursos por se
tratarem de recursos comuns maioria dos editores de texto. Alm desses recursos de busca, o
Editor de Cdigo nos fornece a possibilidade de configur-lo de tal forma a atender melhor as
nossas necessidades. Para isso, devemos acessar a caixa de dilogo Editor Properties localizada no
menu Tools atravs da opo Editor Options. Essa caixa de dilogo possui 5 guias das quais as
quatro primeiras (General, Display, KeyMappings e Color) possibilitam a configurao visual do
Editor de Cdigo tais como a fonte e as cores que sero utilizadas. J a guia Code Insight permite a
configurao do recurso de mesmo nome existente no Delphi, veremos o Code Insight
posteriormente.
Uma observao que deve ser feita
ao utilizarmos o Editor de Cdigo
refere-se manipulao dos arquivos
que so exibidos. Uma vez que no
desejarmos mais que um determinado
arquivo seja exibido no deveremos
simplesmente clicar no cone de
sistema localizado no canto superior
direito do Editor. Caso faamos isso
estaremos fechando todo o Editor de
Cdigo e no apenas o arquivo selecionado. Para fecharmos apenas o
arquivo fonte selecionado devemos clicar com o boto secundrio do
mouse por sobre o Editor de Cdigo. Ao fazermos isso ser exibido um
menu popup que permite um acesso mais rpido a diversas opes do
Editor de Cdigo, entre elas a opo Close Page, responsvel for fechar
a pgina corrente.
Como dito anteriormente, o Editor de Cdigo, apesar de poder exibir arquivos genricos de
texto, ele a janela do Delphi responsvel pela exibio, principalmente, de arquivos que
contenham cdigo fonte escrito dentro do Delphi. Neste tpico falamos de forma genrica do Editor
de Cdigo sem nos preocuparmos com os arquivos fonte propriamente ditos. Veremos esses
arquivos com bem mais detalhe no tpico abordando as units.
2.5.

Codificando e Compilando

Vimos at aqui algumas das maneiras de um programador possui de criar os Procedimentos de


Eventos para a sua aplicao, resta-nos agora escrever o cdigo propriamente dito, necessrio para
fazer com que, em nosso exemplo, uma mensagem seja exibida. Vamos optar no mais por exibir a
mensagem no evento OnClick do formulrio mas sim quando ocorrer o evento OnClick do boto.
Para que a mensagem seja exibida basta escrevermos o seguinte cdigo no Procedimento de Evento
associado ao evento OnClick.
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Ol mundo');
end;

Pgina: 24

Delphi 5

Observe que escrevemos cdigo apenas no


procedimento associado ao evento que desejvamos
tratar. Os demais procedimentos no mais sero

utilizados em nossa aplicao por isso devero ser


removidos do cdigo fonte. Para isso, muitas vezes nos
sentimos tentados simplesmente a, no Editor de
Cdigo, remover o Procedimento de Evento que foi criado automaticamente pelo Delphi conforme
ilustrado na figura ao lado. Contudo, se fizermos isso, uma srie de erros iro ocorrer ao tentarmos
compilar nossa aplicao. Quando compilamos os nossos aplicativos, o Delphi procura por
quaisquer erros em nosso cdigo fonte, caso ele encontre erros ou apenas encontre trechos de
cdigo que, apesar de no representarem erros de sintaxe, poderiam ser evitados, as chamadas
warnings, esses sero exibidos numa pequena janela, na parte inferior do Editor de Cdigo,
juntamente com uma pequena descrio do motivo pelo qual o erro ocorreu, conforme ilustrado na
figura ao lado. Para observarmos esses erros vamos remover manualmente o Procedimento de
Evento associado ao evento OnCloseQuery do formulrio e em seguida vamos tentar compilar
nossa primeira aplicao Delphi. Para compilarmos a aplicao basta, no menu Project,
selecionarmos a opo Build Project1 (abordaremos posteriormente a compilao e execuo de
programas mais detalhadamente). Ao tentarmos compilar a aplicao, o compilador iria detectar um
erro como ilustra a figura ao lado. Esse erro ocorre uma vez removemos apenas a implementao do
procedimento FormCloseQuery. O Delphi, ao criar um Procedimento de Evento, alm de iniciar a
escrita do cdigo a ser executado quando o evento em questo ocorrer, ele escreve cdigo em
outros pontos do cdigo fonte do programa, essa a razo pela qual o erro descrito acima ocorre ao
removermos, manualmente, apenas a implementao do procedimento. Para que a compilao possa
continuar restando-nos, tambm, remover sua declarao. Podemos remover a declarao
manualmente e tentar compilar a aplicao mais uma vez.
Porm, ao tentarmos compilar a aplicao novamente um erro ir ocorrer. A explicao para esse novo
erro, mostrado ao lado, tambm bastante simples.
Quando removemos a implementao e a declarao
do procedimento no removemos todas as
ocorrncias desse procedimento dentro do cdigo
fonte de nossa aplicao Delphi. Lembre-se que,
quando trabalhamos com o Delphi, passamos a definir
dentro dos diversos eventos que um componente pode
sofrer quais executaro cada um dos procedimentos que
escrevemos. Sabemos ainda que vrios procedimentos
podem estar relacionados a um nico cdigo fonte. Para
que isso seja possvel, o Delphi obrigado a
arqmazenar, em algum local de sua codificao, essa
informao. Ao removermos a cdificao e a
declarao do procedimento, deixamos de lado a
remoo dessa indicao. Resta-nos ento, remover as referncias que haviam sido criadas pelo Object
Inspector. O Delphi reconhece essa situao e nos questiona se desejamos que essas referncias sejam
removidas para que a aplicao seja compilada novamente.

Pgina: 25

Delphi 5

Como pudemos observar, esses erros ocorreram por que o Delphi fez uma srie de modificaes
automaticamente no cdigo fonte de nossa aplicao ao permitirmos que ele criasse o Procedimento de
Evento. Dessa forma, para evitarmos que esses erros ocorram, devemos tambm permitir que o Delphi
remova essas alteraes automaticamente para ns. E isso to simples de conseguirmos como foi para que
essasincluses de cdigo fossem feitas para ns. O Delphi remove automaticamente todas os
Procedimentos de Eventos e suas respectivas referencias sempre que salvamos ou tentamos compilar
nossas aplicaes desde que no exista nenhum cdigo ou comentrio dentro do corpo do procedimento, ou
seja, entre as palavras reservadas begin e end; existentes na codificao do procedimento no dever existir
qualquer tipo de codificao nem mesmo um comentrio.
Aps termos alterado o nosso primeiro programa, deixando apenas o procedimento associado ao evento
OnClick do boto, podemos compilar a aplicao para verificar se ela faz
realmente o que espervamos. Para que possamos compilar a aplicao devemos
selecionar a opo Compile Project1 existente no menu Run. Caso j tivssemos
salvo a aplicao com um nome qualquer a opo de compilao apareceria com o
nome que tivssemos dado aplicao ao invs no nome Project1. Uma vez
compilada a aplicao, podemos execut-la e ver o resultado de sua codificao.
Para isso basta selecionarmos, no menu Run, a opo Run. A aplicao ser
executada e ao clicarmos no boto colocado no formulrio, ser exibida a
mensagem ao lado. Nenhum outro evento provocar qualquer atividade uma vez que removemos todos os
procedimentos exceto o evento associado ao clique do boto.
Devemos nos lembrar sempre que, ao executarmos a aplicao por dentro do Delphi entramos
automaticamente em modo de depurao, ou seja, caso faamos uma nova alterao no cdigo fonte
teremos de encerrar a execuo antes que possamos compilar a aplicao novamente. Dessa forma, para
sairmos do modo de depurao basta fecharmos a janela principal da aplicao que, dessa forma, seremos
levados de volta IDE do Delphi.

2.6.

Salvando o Projeto
Uma vez que terminamos o nosso primeiro aplicativo vamos salv-lo de forma a podermos futuramente
trabalhar novamente nele em nosso prprio equipamento ou em outro qualquer. Para isso, a maneira mais
rpida clicarmos no boto Save All localizado na Barra de Ferramentas. Ao fazermos isso, o Delphi ir
salvar todos os arquivos que foram criados para o desenvolvimento de nosso aplicativo.
O primeiro arquivo a ser salvo pelo Delphi, quando selecionamos a opo Save All, refere-se unit que
contm o cdigo do formulrio principal do nosso aplicativo (veremos as units mais detalhadamente
posteriormente). Devemos fornecer um nome
significativo para a unit, uma vez que esse
nome ser utilizado pelo Delphi no restante do
decorrer do desenvolvimento da aplicao.
Uma observao a ser feita que, com a
prtica poderemos comear a trabalhar com
vrios formulrios dentro de nossa aplicao
deixando para salv-los depois de j termos
escrito uma quantidade relativa de cdigo.
Essa prtica desaconselhada por alguns
motivos entre eles a possibilidade de um queda
de energia que poderia levar a perda de todo o
trabalho desenvolvido, alm de que, ao
clicarmos no boto Save All, o Delphi inicia o
processo de gravao de todas as units
contidas em nossa aplicao e, caso exista um nmero relativamente grande de units ficar cada vez mais
complicado de, no momento da gravao, identificar cada uma dessa units de tal forma a fornecer,
corretamente, seus respectivos nomes. Iremos fornecer no tpico a seguir uma explicao mais detalhada a

Pgina: 26

Delphi 5
cerca dos principais arquivos salvos pelo Delphi bem como fornecer o relacionamento existente entre eles.
No momento basta termos o conhecimento de que devemos fornecer nomes distintos para cada arquivo a
ser salvo de tal forma a identific-los de forma simplificada tanto dentro de nosso aplicativo quanto
externamente ao Delphi no momento de realizarmos backup dos mesmos.
Uma vez que tenhamos salvo a unit referente ao
formulrio principal de nossa aplicao, ou no caso
de estarmos trabalhando com vrios formulrios e
tenhamos salvo todas as units referentes a esses
formulrios, o Delphi ir permitir que ns salvemos o
arquivo, chamado de arquivo de projeto, referente
nossa aplicao como ilustrado na figura ao lado. O
arquivo de projeto um dos mais importantes dentro
de uma aplicao Delphi e ele dever ser salvo com
um nome nico dentro dessa aplicao, no podendo
por isso, ter o mesmo nome que o de uma unit
qualquer pertencente ao projeto (mesmo esses
arquivos possuindo extenses distintas como
veremos posteriormente).

2.7.

Trabalhando com uma aplicao


A IDE do Delphi, sempre ao ser iniciada, apresenta-nos uma nova aplicao para que possamos iniciar um
novo processo de desenvolvimento. Essa aplicao, tambm chamada de projeto, ir conter todo o cdigo
fonte que dar origem aos programas ou DLLs que ns venhamos a desenvolver. Devemos sempre ter em
mente que, para podermos compilar e gerar programas executveis e DLLs, deveremos estar com um
projeto aberto na IDE. Essa observao muito importante por ser uma fonte de erros bastante comum,
principalmente para aqueles programadores menos experientes no Delphi que tentam executar, atravs da
opo Run | Run, arquivos carregados isoladamente dentro da IDE do Delphi, sem ter aberto seus
respectivos projetos.
As verses iniciais do Delphi no permitiam ao desenvolvedor abrir dois ou mais projetos dentro de uma
mesma sesso do Delphi. Nas verses mais novas essa restrio no mais existe. O desenvolvedor tem a
possibilidade de trabalhar com dois ou mais projetos simultaneamente atravs do chamado Project Group,
ou seja um grupo de projetos. Porm, mesmo com a possibilidade de trabalhar com vrios projetos ao
mesmo tempo, apenas um deles estar ativo a cada momento.
As informaes a respeito dos projetos pertencentes a um Project Group so armazenadas em um arquivo
salvo com a extenso bpg. Esse um arquivo ASCII comum que pode ser editado em qualquer editor de
textos do Windows ou at mesmo do DOS, e contm as informaes a respeito dos projetos que esto
inclusos no Project Group bem como os comandos necessrios compilao desses projetos.
A possibilidade de podermos trabalhar com mais de um projeto ao mesmo tempo importante quando
estamos desenvolvendo tanto um aplicativo executvel quanto, por exemplo, DLLs por ele utilizadas.
Utilizando a funcionalidade dos Project Groups podemos alternar o trabalho entre o aplicativo e as DLLs
sem a necessidade de fechar e abrir, a cada momento, o projeto referente ao aplicativo e a cada uma das
DLLs. Porm, apesar de podermos trabalhar com mais de um projeto ao mesmo tempo vamos nos deter no
decorrer de nosso estudo a trabalhar com um nico projeto.
Feito esse comentrio a respeito dos grupos de projetos dentro do ambiente Delphi, podemos retornar a
nossa discusso sobre o desenvolvimento de cada projeto, ou seja, cada aplicao criada no Delphi. Da
mesma forma como mencionado com relao ao grupo de projetos, cada projeto Delphi possui suas
informaes salvas em um arquivo ASCII, salvo com a extenso dpr. Mostramos a seguir um exemplo de
um arquivo de projeto.
program Project1;

USES
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.RES}

BEGIN
Application.Initialize;
Application.CreateForm(TForm1, Form1);

Pgina: 27

Delphi 5

A exibio dos arquivos de projeto no feita de modo imediato, ou seja, ao iniciarmos o desenvolvimento
de um novo aplicativo, o arquivo de projeto no exibido pelo Editor de Cdigo. Para que possamos
visualizar o arquivo de projeto devemos, no menu Project, selecionar a opo View Source. Existe uma
explicao para que o arquivo de projeto no seja exibido diretamente. Por se tratar de um arquivo muito
importante, o Delphi encarrega-se de fazer a maioria das alteraes necessrias nesse arquivo, de forma
automtica, ao selecionarmos as devidas opes contidas nos diversos menus da IDE do Delphi. No
devemos alterar diretamente o arquivo de projeto a menos que tenhamos certeza absoluta das alteraes
que estejamos fazendo uma vez que isso poder acarretar o funcionamento incorreto ou, at mesmo o no
funcionamento da aplicao.
O Delphi permite o desenvolvimento de diversos tipos de aplicativos tanto executveis quanto de DLLs.
Dentre aquelas aplicaes executveis podemos distinguir dois tipos principais: as console applications e
as aplicaes GUI (Graphical User Interface), que so as aplicaes tradicionais
do ambiente Windows que possuem um ambiente grfico para interagir com o
usurio. Apesar de no muito comum podemos ter um programa Delphi escrito
apenas no arquivo de Projeto. Essas aplicaes, que em sua grande maioria
constituem as chamadas console applications, no possuem uma interface grfica
associada a eles e so executados como antigos programas DOS. J as demais
aplicaes para o ambiente Windows apresentam, em geral, uma interface grfica
coma a qual o usurio poder interagir com o aplicativo em questo.
Independentemente de qual tipo de aplicao estejamos desenvolvendo, termos de
salvar vrios tipos de arquivos durante o desenvolvimento de nossas aplicaes e
aprender a correlao entre eles. Para isso veremos rapidamente as opes
disponveis no menu File. Atravs dessas opes podemos manipular os diversos
arquivos que iro compor as nossas aplicaes. As opes dispostas nesse menu
esto divididas de acordo com a funcionalidade de cada opo. O primeiro grupo
de opes permite a criao de uma nova aplicao, atravs da opo New
Application, bem como de novos formulrios e frames, atravs das opes New
Form e New Frame. Existe ainda, nesse grupo de itens de menu, a opo New que
permite a criao auxiliada de novas aplicaes e formulrios atravs do Object Repository que ser visto
posteriormente. O segundo grupo de opes permite a abertura de projetos e outros arquivos salvos
anteriormente. Lembramos que no caso de no existir nenhum projeto aberto e atravs da opo Open,
abramos um formulrio, no sero possveis a compilao e execuo desse arquivo! Isso decorre do fato
de termos aberto um formulrio e no um projeto. O terceiro grupo de opes permite que salvemos os
arquivos de projeto e demais arquivos de trabalho que estejam abertos na IDE. Devemos ressaltar que o
nome dado ao arquivo de projeto ser o nome que ser dado ao arquivo executvel da aplicao aps a sua
compilao. O quarto grupo de opes, composto apenas pela opo Use Unit, ser visto posteriormente
quando estivermos detalhando o conceito de units. O ltimo conjunto de opes responsvel pela
impresso tanto grfica dos formulrios quanto do cdigo fonte escrito nas units. A ltima opo permite
que fechemos o Delphi. No caso de existir qualquer alterao feita no cdigo do projeto que esteja aberto,
o Delphi, antes de ser finalizado, exibir uma caixa de dilogo confirmando se as alteraes devem ou no
ser salvas.
J sabemos que as console applications so desenvolvidas utilizando simplesmente o arquivo de projeto,
porm, a grande maioria dos aplicativos a serem desenvolvidos no sero console applications, mas sim
aplicaes que iro conter uma interface grfica que ir interagir com os usurios dessas aplicaes. por
isso que, para esse segundo tipo de aplicativo, existiro outros arquivos alm do arquivo de projeto. Dentre
esses outros arquivos podemos destacar aqueles cuja extenso dfm os quais iro conter todas as
definies grficas de cada formulrio contido na aplicao. Ou seja, para cada formulrio que colocarmos
em nosso aplicativo ser salvo um arquivo de extenso dfm associado. Alm do arquivo dfm existir,
associado a ele, um arquivo de extenso pas que ir conter tanto todo o cdigo fonte referente aos eventos
desse formulrio quanto qualquer outro cdigo fonte que tenhamos escrito para esse formulrio. Esse
arquivo, chamado de unit, exibido no Editor de Cdigo do Delphi para que o programador possa
desenvolver o aplicativo.
Alm das units associadas aos arquivos de formulrios, a aplicao poder conter units isoladas. Essas
units que no esto associadas a qualquer formulrio so utilizadas principalmente para declarao de
funes, variveis e constantes de uso global dentro da aplicao. Alm desses arquivos apresentados at
aqui, o Delphi, ao salvarmos o nosso aplicativo, salva alguns arquivos adicionais contendo aspectos de

Pgina: 28

Delphi 5
configurao do ambiente bem como de configurao do prprio compilador Delphi de tal forma a permitir
que, ao levarmos o aplicativo que estamos desenvolvendo para um outro computador, possamos continuar
o desenvolvimento sem termos de configurar novamente todo o ambiente para atender as nossas
necessidades. Mostramos a seguir um resumo das principais extenses de arquivos salvos pelo ambiente do
Delphi ilustrando tambm o seu papel.
Extenso
Bpg
Dpr

Dfm

Pas
Res
Dof

Cfg

Descrio
Arquivo que contm a indicao de quais projetos compe um Project Group bem como
as diretrizes a serem utilizadas no momento de suas compilaes.
Arquivo que contm as declaraes de cada aplicativo desenvolvido no Delphi. atravs
desse arquivo que o compilador pode identificar quais units pertencem ao aplicativo bem
como a forma com a qual o aplicativo ser inicializado.
Esse arquivo contm o cdigo responsvel pela definio de cada formulrio dentro da
aplicao, ou seja, nesse arquivo que se encontra a indicao da localizao de cada
componente do formulrio bem como os valores a eles atribudos dentro do Object
Inspector.
Os arquivos com essa extenso contm cdigo fonte escritos em Object Pascal. Esses
arquivos podem ou no estar associados a arquivos dfm.
Os arquivos com essa extenso contm diversos recursos que sero ou podero ser
utilizados pela aplicao tais como o cone da aplicao e bitmaps entre outros.
O arquivo de opes do Delphi (Delphi Options File) contm a configurao atual do
projeto. Tais configuraes podem ser exibidas ao selecionarmos a opo Options listada
no menu Project.
O arquivo de extenso cfg gravado para possibilitar a compilao de um projeto Delphi
a partir da linha de comando, sem ser necessrio que o projeto seja aberto dento da IDE
do Delphi.

Alm dos arquivos com as extenses listadas acima, o Delphi pode gerar outros arquivos de outras
extenses dependendo do tipo de aplicao que esteja sendo desenvolvido ou da configurao que tenha
sido feita na IDE do Delphi. A seguir mostramos uma figura representativa de alguns dos relacionamentos
existentes entre os arquivos gerados pelo Delphi.

A figura acima ilustra o relacionamento existente entre os arquivos de grupo, de projeto, dmf e pas no
desenvolvimento de um aplicativo Delphi. Podemos observar que as units no precisam estar vinculadas a
um arquivo de formulrio, porm o inverso no acontece. Ou seja, para cada formulrio que colocarmos
em nosso aplicativo existir uma unit e um arquivo de formulrio associado.

Pgina: 29

Delphi 5

2.8.

Criando uma Console Application


Apesar de no ser o tipo de aplicao geralmente desenvolvido dentro do ambiente do Delphi, uma
aplicao console uma das mais simples que podem ser desenvolvidas. Dessa forma, iremos apenas
ilustrar de maneira bastante simplificada o desenvolvimento de uma console application. Antes de
comearmos devemos fechar a aplicao ou aplicaes Delphi que estiverem abertas na IDE para que,
dessa forma, possamos comear o desenvolvimento de uma nova aplicao. Poderamos iniciar a nova
aplicao sem ter de fechar a aplicao anterior uma vez que o Delphi a fecharia automaticamente, porm
bom nos acostumarmos a fechar por nossa prpria conta os aplicativos que estivermos trabalhando antes de
comeamos o desenvolvimento de um novo de forma a manter uma melhor organizao em nosso trabalho.
Uma vez no existindo nenhum aplicativo temos dois caminhos a seguir: escolher a opo New Application
localizada no menu File e comear um novo aplicativo ou escolher a opo New localizada nesse mesmo
menu. Caso optemos pela primeira opo o Delphi ir propiciar o desenvolvimento de uma nova aplicao
padro. Essa aplicao ir permitir, a menos que tenhamos
alterado a configurao inicial do Delphi, o desenvolvimento
de uma aplicao padro para o ambiente grfico e no uma
console application. Essa aplicao poderia ser modificada de
tal forma a permitir o desenvolvimento de uma console
application, porm essa no a melhor alternativa,
principalmente para aquelas pessoas que esto iniciando o
processo de aprendizado dentro do Delphi. Dessa forma, restanos partir para a segunda opo, a seleo da opo New
localizada no menu File. Ao fazermos isso, nos ser
apresentada a caixa de dilogo New Items mostrada ao lado.
Atravs dessa caixa de dilogo podemos escolher dentre vrias
opes de elementos contidos no Object Repository. Existe a opo de escolha desde formulrios pr
definidos at wizards que iro facilitar o desenvolvimento de novas aplicaes. Cada uma dessas opes
est dividida em guias de acordo com as suas finalidades. Para darmos incio nossa console application,
vamos selecionar o cone Console Application localizado na guia New.
Uma vez selecionada essa opo, o Editor de Cdigo do Delphi passa a exibir o cdigo inicial de nossa
aplicao como mostrado na figura. Como podemos observar, uma aplicao console composta,
inicialmente, pelo arquivo de projeto. Porm, ao
contrrio do que acontecia com arquivos de
projeto comuns, existe no cdigo apresentado
uma diretriz de compilao que indica ao
compilador Delphi que a aplicao sendo
desenvolvida trata-se de uma console
application e no uma aplicao com interface
grfica tradicional. Excluindo essa diferena, o
restante do cdigo apresentado no arquivo de
projeto idntico ao encontrado em aplicaes
grficas tradicionais, ou seja, composto pela
palavra reservada program seguida pelo nome
da aplicao, uma seo indicada pela palavra uses que ser vista posteriormente e, por fim, um bloco
begin e end que ir conter o cdigo a ser executado pela aplicao.

Devemos fazer uma pequena observao com relao ao nome da aplicao escrito logo aps a palavra
reservada program. J mencionamos o fato de que , quando trabalhamos com o arquivo de projeto no
devemos fazer alteraes manualmente uma vez que o Delphi faz as devidas alteaes quando necessrias.
Essa observao tambm vlida quando estamos trabalhando com aplicaes console. Devemos evitar
alterar o nome da aplicao diretamente no cdigo fonte de nossa aplicao uma vez que o Delphi ir fazer
isso sem acarretar qualquer problema. Caso desejemos alterar o nome do aplicativo devemos faz-lo
salvando-o com o nome que desejamos atravs da opo Save Project as localizada no menu File. O
Delphi, ao salvar o aplicativo ele alterar tanto o nome do programa contido no fonte do arquivo dpr
quanto ir alterar o nome fsico do arquivo.

Pgina: 30

Delphi 5

Com o objetivo de ilustrar o desenvolvimento de uma aplicao console, vamos escrever o cdigo
necessrio para executar o mais tradicional exemplo de programa, o Al Mundo. Para isso, no lugar do
comentrio Insert user code here, devemos escrever o cdigo abaixo.
Writeln(Al Mundo);

Aps escrevermos o cdigo acima, o Editor de Cdigo


dever estar conforme a figura abaixo. Podemos ento
compilar e executar nossa aplicao. Caso tenhamos
optado pela compilao e posterior execuo desse
programa dentro do prprio Delphi, a aplicao ser
executada e retornar rapidamente para a IDE do Delphi.
Isso ocorre, como dito anteriormente, porque quando
executamos o aplicativo por dentro do Delphi, ele passa
a ser executado em modo de depurao e, logo aps seu
trmino, o controle retornado para a IDE. Uma vez que
essa aplicao no faz muita coisa, ela apenas exibe uma
mensagem na tela e logo em seguida encerrada, sua
execuo muito rpida. Caso desejemos observar
melhor essa execuo, deveremos faz-lo atravs do Prompt do MS-DOS executando-a como qualquer
outro aplicativo.
O arquivo executvel de nossa aplicao console gerado por default no diretrio onde salvamos os seus
arquivos fontes. Caso ainda no tenhamos salvo o aplicativo, o Delphi ir gerar o executvel no diretrio
Projects localizado abaixo do diretrio de instalao do Delphi, o qual tem sua localizao default no
diretrio C:\Arquivos de Programas\Borland\Delphi5. Ao executarmos nossa aplicao veremos que ser
exibida a linha Al Mundo, e em seguida o programa finalizado.

2.9.

Criando uma aplicao GUI


Vimos at aqui como podemos utilizar o Delphi para criar uma aplicao console. Esse tipo de aplicao,
apesar de ser ainda utilizada, no o principal tipo de aplicao a ser desenvolvida dentro do Delphi. Por
isso, vamos dar incio ao desenvolvimento de nossa primeira, e mais simples, aplicao GUI.
Uma aplicao GUI, do ingls Graphical User Interface, o tipo default desenvolvido pelo Delphi, ou
seja, aquela que executada dentro da interface grfica do Windows, possuindo em geral um formulrio
atravs do qual o usurio ir interagir com o aplicativo. J vimos anteriormente um exemplo de uma
aplicao GUI atravs da qual uma mensagem era exibida quando o usurio dessa aplicao clicava no
boto existente no centro do formulrio. Embora a aplicao apresentada no realize muita coisa de
produtiva ela j representa o incio do processo de desenvolvimento de qualquer aplicao para o ambiente
grfico, ou seja, a criao de um novo projeto, a definio do formulrio principal da aplicao e a
colocao, nesse formulrio, dos componentes que iro compor a interface entre a aplicao e o usurio.
Uma vez definido o aspecto visual do formulrio dado incio ao processo de programao efetiva da
aplicao. So definidos quais eventos de quais componentes devero ser tratados pelo aplicativo e, em
seguida, feita a programao desses eventos. Uma vez feita a programao, o desenvolvedor pode
compilar e executar o aplicativo tanto para realizao de testes e depurao quanto para a entrega desse ao
cliente ou s distribuidoras do software.
Vimos tambm alguns dos vrios arquivos gerados quando salvamos nosso aplicativo bem como a
interao existente entre eles. Alguns desses arquivos foram apresentados com um pouco mais de detalhe
quando estvamos desenvolvendo uma aplicao console, resta-nos agora, apresentar de forma mais
detalhada cada um desses arquivos dentro de uma aplicao grfica.
A criao de uma aplicao grfica pode ser feita de forma semelhante de uma aplicao console, ou seja,
podemos selecionar a opo New Application listada no menu File e criar uma aplicao default ou
poderamos selecionar a opo New e selecionar a criao de um projeto pr definido existente dentro do

Pgina: 31

Delphi 5
Object Repository. Vamos abordar inicialmente a criao de uma aplicao default e mostrar a
funcionalidade de cada arquivo criado nesse processo.

2.9.1. Criando e alterando aplicao default


Ao selecionarmos a opo New Application o Delphi cria uma
nova aplicao contendo alm do arquivo de projeto um
formulrio e sua respectiva unit. Caso no tenhamos feita
qualquer alterao na configurao inicial do Delphi, a aplicao
default ser composta de um formulrio em branco, ou seja, um
formulrio sem nenhum componente. No entanto esse
comportamento pode ser alterado a qualquer momento pelo
desenvolvedor atravs da opo Repository localizada no menu
Tools. Ao selecionarmos esse menu, a caixa de dilogo Object
Repository exibida como mostrado ao lado. Atravs dessa caixa
de dilogo podemos escolher o comportamento default que ser
seguido pelo Delphi ao criarmos novas aplicaes e formulrios.
A caixa de dilogo Object Repository est dividida em dois listboxes. O primeiro deles exibe o nome das
guias que so apresentadas na caixa de dilogo New Items (exibida quando selecionamos a opo New
localizada no menu File visto anteriormente). Alm das guias exibidas no Object Repository, a caixa de
dilogo New Items ainda exibe algumas guias adicionais como, por exemplo, uma guia que contm os
prprios formulrios contidos na aplicao corrente. Os primeiros trs botes contidos nessa caixa de
dilogo permitem ao programador criar novas guias, bem como, renomear e remover as guias j existentes.

O segundo listbox exibe quais objetos esto localizados na guia selecionada. Ao selecionarmos um objeto,
os dois ltimos botes ficam habilitados para que possamos tanto editar quanto remover do repositrio esse
objeto. Alm dos botes, encontram-se nessa caixa de dilogo trs checkboxes, habilitados alternadamente,
que permitem tanto a escolha de qual formulrio ser definido como default, ou seja qual formulrio ser
criado ao selecionarmos a opo New Form contida no menu File, quanto qual formulrio ser definido
como o formulrio principal default, ou seja, ao selecionarmos a opo New Application qual ser o
formulrio criado inicialmente. Alm disso, temos a opo de definir qual o projeto default, ou seja, qual
ser o formato da aplicao default a ser criada quando selecionarmos a opo New Application.

2.9.2. Utilizando Wizards


Alm da possibilidade de criarmos um projeto em branco, a partir do qual iremos iniciar a construo de
um novo aplicativo, o Delphi tambm fornece ao programador alguns wizards que iro auxiliar no processo
de criao inicial desse aplicativo. Para que
isso seja possvel devemos comear todo o
processo de criao atravs da seleo da
opo New ao invs de comearmos com a
escolha da opo New Application.

Como dito anteriormente, ao selecionarmos a


opo New, a caixa de dilogo New Items ser
exibida. Nela devemos selecionar a guia
Projects conforme mostrado na figura ao lado.
Nessa guia temos a opo de escolher entre
alguns tipos de projetos pr-definidos como
tambm a construo de um novo projeto a
partir de um wizard. Um wizard nada mais
do que um assistente que nos auxilia no
processo de desenvolvimento de novas

Pgina: 32

Delphi 5
aplicaes. Atravs da seleo da opo Application Wizard o Delphi ir construir um novo aplicativo
utilizando-se para isso de respostas que o desenvolvedor for fornecendo a uma srie de caixas de dilogo a
ele apresentadas.

A seqncia das caixas de dilogo que


apresentada depende das opes que o
desenvolvedor for marcando no decorrer do
processo. Por exemplo, a primeira caixa de
dilogo apresentada pelo Application Wizard
permite que indiquemos quais menus o
desenvolvedor deseja que sejam exibidos em
sua aplicao. Temos a opo de escolher o
menu File e Edit entre outros conforme
ilustrado na figura ao lado. Caso o
desenvolvedor venha a selecionar o menu
File, a prxima caixa de dilogo a ser
apresentada ir perguntar quais as extenses
que o aplicativo sendo desenvolvido poder manipular. J no caso de no escolhermos o menu File, no
haver a necessidade do Wizard nos apresentar essa caixa de dilogo.

Uma vez terminado o processo de construo inicial da aplicao atravs do Wizard, o Delphi disponibiliza
para o desenvolvedor uma aplicao com sua interface e, at mesmo, algum cdigo pronto para que seja
dado incio codificao efetiva. Apesar da utilizao do wizard proporcionar um ganho inicil no tempo de
desenvolvimento, sua utilizao efetiva dentro do desenvolvimento de novas aplicaes relativamente
pequena. Essa pouca utilizao deve-se principalmente ao fato de que o idioma no qual o formulrios e
demais componentes so construdos o ingls, o que no ajuda muito quando o desenvolvimento involve
um aplicativo para ser executado utilizando-se de um outro idioma.

2.10. O arquivo de Projeto


O arquivo de projeto contido em uma aplicao GUI um pouco diferente em relao ao arquivo de
projeto apresentado anteriormente para uma aplicao
console. Mostramos ao lado a figura do arquivo de
projeto da aplicao GUI criada anteriormente. Nela
podemos observar tanto pontos comuns em relao ao
arquivo de projeto de nosso aplicativo console quanto
outros que no tnhamos at ento. Podemos observar
que esse arquivo tambm iniciado com a palavra
reservada program a qual indica o nome do projeto no
qual estamos trabalhando. Novamente ressaltamos que
no devemos alterar esse nome manualmente, ao invs
disso, devemos salvar o nosso projeto com um novo
nome para que o Delphi altere o nome do projeto para
ns.
program Project1;
A prxima seo encontrada no arquivo de projeto iniciada pela palavra reservada uses. Essa seo
bastante importante uma vez que ela indica quais arquivos so necessrios compilao de nosso
aplicativo. Na maioria dos casos o Delphi ir manipular diretamente essa seo do arquivo de projeto a
medida em que formos incluindo ou excluindo formulrios de nossa aplicao, porm, em algumas
situaes poderemos querer acrescentar manualmente algum arquivo nessa seo.

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

Pgina: 33

Delphi 5

Podemos observar que existem dois tipos de declaraes dentro da seo uses exibida acima. A primeira
delas contm uma referncia a uma unit (a unit Forms) que, a princpio, no est includa em nosso
aplicativo enquanto que a segunda a unit associada ao formulrio inicial de nosso aplicativo (a unit
Unit1). A declarao da unit Forms no arquivo de projeto importante uma vez que nessa unit que esto
as declaraes de funes e variveis necessrias ao funcionamento inicial do aplicativo e no deve ser
removida. J a segunda declarao indica a existncia da Unit1 dentro do projeto. A medida em que novas
units vo sendo adicionadas ao projeto as suas respectivas declaraes vo sendo colocadas na nessa seo
uses automaticamente pelo Delphi.
Outro ponto importante a ser mencionado a forma com que o Delphi declara essas units dentro da seo
uses. Observe que a declarao da unit no utiliza a sua extenso. Essa a razo pela qual, no momento em
que salvamos o projeto, ele no deve ter um nome que j tenha sido previamente atribudo a uma unit. Uma
vez que, dessa forma, o compilador Delphi no teria como distinguir quando o programador estivesse
fazendo referncia a uma unit ou ao projeto.
Um ltimo ponto a ser discutido aqui, porm tambm de fundamental importncia a localizao das units
em disco. O Delphi, ao tentar abrir qualquer unit para compilao ou simplesmente para a sua exibio no
Editor de Cdigo, ir procurar no diretrio onde o projeto foi salvo, ou no path definido dentro do arquivo
de projeto. Caso tenhamos salvo uma unit dentro de um diretrio diferente daquele no qual o projeto foi
salvo, essa informao ficar armazenada no arquivo de projeto e, quando tentarmos abrir esse projeto em
um outro computador, o Delphi ir procurar por essa unit na localizao onde ele havia sido salvo.
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in '../Unit2.pas' {Form2},
Unit3 in 'Unit3.pas';
No exemplo acima, temos trs units contidas no projeto, as duas primeiras referentes aos formulrios 1 e 2,
e a ltima uma unit que no est vinculada a qualquer formulrio. Observe que a unit2 no foi salva no
mesmo diretrio que o projeto e sua localizao est indicada atravs do seu caminho relativo em relao
ao qual o projeto foi salvo. Devemos ter cuidado uma vez que, ao salvarmos as units em diretrios
diferentes daquele no qual o projeto foi salvo estamos, tambm, dificultando o processo de backup dos
arquivos fonte pertencentes a esses projetos.
Uma outra definio colocado no arquivo de projeto refere-se a qual arquivo de recursos ser utilizado
pela aplicao sendo desenvolvida. Em geral esse arquivo possui o mesmo nome que o arquivo de projeto
porm com a extenso RES. Essa informao passada ao compilador por intermdio da diretiva de
compilao $R conforme mostrado abaixo.
{$R *.RES}
O asterisco colocado nessa diretiva indica que o arquivo de recursos ir possuir o mesmo nome que o
arquivo de projeto. No caso de desejarmos incluir um arquivo com nome diferente bastaria que, no lugar do
asterisco, fosse informado o nome desse arquivo.
O ltimo trecho do arquivo de projeto, definido pelas palavras reservadas begin e end indica, como
acontecia com as aplicaes console, o cdigo a ser executado inicialmente pelo aplicativo. Porm, o
cdigo escrito nessa seo manipulado diretamente pelo Delphi e no devemos mexer diretamente com
ele a menos que tenhamos certeza absoluta do que estamos fazendo uma vez que, uma alterao
equivocada nesse trecho do programa poder provocar seu mal funcionamento ou, at mesmo, a
impossibilidade de sua execuo.
Em uma aplicao grfica, como a exibida acima, o cdigo escrito entre o begin e o end poder conter o
cdigo responsvel pela alocao de memria dos formulrios e a execuo real da aplicao. Veremos
posteriormente como podemos criar formulrios dinamicamente durante a execuo de nosso aplicativo.
Nesses casos, a alocao de memria para esses formulrios no ser feita mais no arquivo de projeto mas
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.

Pgina: 34

Delphi 5
sim em algum ponto antes do qual ser necessria a exibio desse formulrio.

2.11. Manipulando com as opes do projeto


Uma vez que dentro do Delphi trabalhamos sempre com projetos devemos aprender a configurar cada um
deles. A configurao das opes de nossos projetos feita atravs da item de menu Options contido no
menu Project. Ao selecionarmos essa opo, a caixa de dilogo mostrada ao lado exibida. Essa caixa de
dilogo est divida em diversas guias responsveis pela configurao do projeto aberto na IDE do Delphi
naquele momento. Veremos as principais delas a seguir.
A primeira guia que iremos estudar a respeito da caixa de dilogo Project Options a guia Forms,
mostrada na figura ao lado. Essa guia contm, basicamente, um combobox e dois listboxes. O combobox
permite escolhermos qual ser o formulrio principal de nossa aplicao. Sempre que criarmos um projeto,
o formulrio principal aquele criado inicialmente. Porm nada impede que desenvolvamos o formulrio
principal do aplicativo posteriormente. Uma vez criado o novo formulrio, para tornarmos esse novo
formulrio o principal de nossa aplicao basta selecionarmos no combobox o formulrio desejado.
J os dois listboxes contidos na guia Forms so utilizados para
identificar quais formulrios de nossa aplicao so criados ou no
pelo Delphi automaticamente. Aqueles que o programador deseje
criar manualmente devero estar listados no listbox Available forms enquanto
que aqueles que devem ser criados automaticamente estaro no listbox Autocreate forms. Uma vez que apresentamos as opes contidas nesta guia temos
duas observaes a fazer. A primeira observao est relacionada ao prprio
arquivo de projeto. Como citado anteriormente, no devemos fazer alteraes
diretamente no arquivo de projeto uma vez que o Delphi ir manipular com
esse arquivo diretamente. Essa situao pode ser facilmente observada. Para
isso, vamos criar uma nova aplicao que ir conter trs formulrios de acordo
com as figuras ao lado. Conforme podemos observar, a criao dos
formulrios foi feita de tal forma que o formulrio principal da aplicao foi o
formulrio Form1, porm decidimos que o formulrio que deveria ser
utilizado como formulrio principal seria o segundo formulrio, ou seja, o
formulrio Form2. Veremos posteriormente qual a finalidade dos formulrios
Form1 e Form3. J sabemos como fazer essa alterao, porm vamos observar
o arquivo de projeto antes de realizarmos essa alterao para compararmos as
alteraes feitas pelo Delphi posteriormente.
Ao realizarmos a alterao, podemos perceber que a ordem de execuo do cdigo existente no arquivo de
begin foi invertida. Agora, o primeiro comando de criao
begin de um formulrio refere-se ao formulrio
projeto
Application.Initialize;
Form2
e no mais ao Form1 como era inicialmente. AApplication.Initialize;
alterao poderia ter sido feita, manualmente,
Application.CreateForm(TForm1,
Application.CreateForm(TForm2,
diretamente
no arquivo de projeto queForm1);
ela j seria exibida na
caixa de dilogo Project Options.Form2);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm3, Form3);
Application.Run;
Application.Run;
end.
end.

Pgina: 35

Delphi 5
A segunda observao refere-se aos listboxes apresentados nessa caixa de dilogo. Ao criarmos uma
aplicao dentro do Delphi e definirmos um ou mais formulrios, o Delphi tem, por definio, a criao
automtica de todos esses formulrios, ou seja, ao executarmos o aplicativo, antes dele comear a sua
execuo real exibindo a sua janela principal, ser alocada memria para todos esses formulrios. Esse
comportamento tem tanto seu lado positivo quanto seu lado negativo. O lado positivo est no fato de que,
ao tentarmos exibir qualquer formulrio definido em nosso projeto, sua exibio ser feita de forma mais
rpida uma vez que ele j foi construdo em memria. Porm, uma vez que j alocamos memria para todos
os formulrios da aplicao, poderemos estar reservando recursos do computador que nunca sero
utilizados, no caso por exemplo de um formulrio pouco exibido, o que no muito bom. Para evitar esses
dois extremos o Delphi permite-nos selecionar quais formulrios devero ser criados ou no
automaticamente durante o incio da execuo do programa. Para ilustrarmos os efeitos de termos um
formulrio criado automaticamente ou no no arquivo de projeto vamos, em nosso exemplo, mover o
formulrio Form3 do listbox Auto-create forms para o listbox Available forms. Ao fazermos isso, podemos
perceber que a linha referente a criao do
begin
formulrio Form3, contida no arquivo de projeto,
Application.Initialize;
foi removida conforme ilustrado ao lado. Da
Application.CreateForm(TForm2, Form2);
mesma forma, poderamos ter feito essa alterao
Application.CreateForm(TForm1, Form1);
diretamente no arquivo de projeto sem termos de
Application.Run;
alterar essa informao na caixa de dilogo Project
end.
Options, como havia acontecido com a definio do
formulrio principal de nossa aplicao.
A princpio poderamos pensar que a alterao
de definio entre aqueles formulrios criados
automaticamente e aqueles que esto
disponveis para o uso do desenvolvedor no
traria qualquer problema para a programao,
porm isso no verdade. Para demostrarmos
esse problema, bastante comum quando ainda
procedure TForm2.Button2Click(Sender: TObject);
no temos muita experincia em programao
begin
principalmente para o ambiente Windows,
Form3.Show;
vamos criar dois procedimentos, cujo cdigo
end;
estamos apresentando ao lado, associados
respectivamente, ao evento OnClick em cada um dos botes colocados no formulrio principal de nosso
aplicativo, o Form2. Observe que no devemos escrever todo o cdigo, mas sim as linhas contidas entre o
begin e o end de cada procedimento.
procedure TForm2.Button1Click(Sender: TObject);
begin
Form1.Show;
end;

Uma vez que tenhamos escrito o cdigo de cada procedimento


podemos compilar a aplicao. A tentativa de compilao ir resultar
em trs erros conforme mostra a figura ao lado. A nica opo que
temos nesse momento pressionar o boto OK. Ao fazermos isso, uma
mensagem semelhante aquela apresentada abaixo exibida. Por ora
no iremos fornecer uma explicao a respeito do significado dessa
mensagem. Apenas vamos clicar no boto Yes. Feito
isso uma segunda caixa de dilogo, desta vez
referente ao formulrio Form3 ser exibida e,
novamente, devemos clicar o boto Yes. O Delphi
retorna para o Editor de Cdigo para que possamos
tentar compilar novamente a nossa aplicao. Desta
vez, a aplicao ser compilada sem problemas, gerando o executvel de nosso aplicativo. Podemos ento
execut-lo dentro do ambiente Delphi como tambm fora dele.
Ao executarmos a aplicao, o formulrio principal da
aplicao ser exibido. Nele, como poderamos esperar, esto
contidos dois botes que, ao serem clicados, iro executar o
cdigo que escrevemos anteriormente. Ao clicarmos no
primeiro boto o formulrio Form1 exibido uma vez que
essa foi a funo do cdigo que escrevemos no evento OnClick do boto Button1. Porm, ao clicarmos no
boto 2 a mensagem de erro mostrada ao lado exibida. A ocorrncia desse erro deve-se justamente a no
criao automtica do formulrio pelo Delphi. Uma vez que ainda no criamos o formulrio, ou seja,
nenhuma memria foi alocada para conter os valores atribudos s suas propriedades e mtodos, ao

Pgina: 36

Delphi 5
invocarmos um de seus mtodos (o mtodo Show que veremos posteriormente), isso ir provocar um
acesso ilegal memria do Windows. Para evitarmos que isso ocorra, devemos nos preocupar em alocar
memria para esses objetos antes de podermos utiliz-los e, posteriormente sua utilizao, devemos
tambm desalocar essa memria, liberando-a para outros objetos tanto dessa quanto de outras aplicaes.
A prxima guia da caixa de dilogo Project Options que iremos
abordar a guia Application. Atravs dessa guia, exibida ao lado, o
programador pode definir algumas caractersticas prprias da
aplicao. Nela temos a opo de definir um ttulo para a aplicao,
ttulo esse que ser exibido quando a aplicao for minimizada, o
nome do arquivo de ajuda que ser associado ao aplicativo e o cone a
ser exibido quando a aplicao for minimizada. Por fim, temos a
opo de indicar qual a extenso a ser atribuda ao arquivo a ser
gerado pela compilao do cdigo fonte de nossa aplicao. Devemos
observar que aplicaes de extenso exe no necessitam do
preenchimento dessa opo. J ao desenvolvermos DLLs ou arquivos
ActiveX, a extenso desejada para o arquivo compilado, seja dll ou ocx, dever ser indicada nessa opo.
Uma outra guia cujo contedo vale a pena ser abordado a guia Directories/Conditionals. Vimos
anteriormente que uma aplicao Delphi capaz de gerar diversos arquivos cada um com a sua respectiva
extenso. Porm s vimos algumas das extenses que o Delphi capaz
de gerar. Alm daquelas extenses relativas a arquivos de cdigo fonte,
ao compilarmos nossas aplicaes o Delphi gera novos arquivos de
cdigo objeto. O comportamento default do ambiente Delphi gerar
esses arquivos de cdigo objeto no mesmo diretrio onde se encontra o
arquivo de projeto. No caso de desejarmos efetuar backups de nossas
aplicaes isso no muito desejvel j que o backup s necessita ser
feito para os arquivos de cdigo fonte uma vez que os arquivos de
cdigo objeto so gerados a partir deles. O ideal que esses arquivos
fossem gerados em outros diretrios. Essa uma das finalidades da guia
Directories/Conditionals, ou seja, definir os diretrios nos quais
arquivos de cdigo objeto sero gerados. A figura ao lado mostra a guia Directories/Conditionals definido
os diretrios nos quais os arquivos compilados e os executveis sero gerados. Caso nada for colocado,
ser assumido o diretrio aonde foi salvo o projeto.
Por fim vamos falar da guia Packages. Devemos ter muito cuidado ao manipular com os elementos desta
guia, pois isso poder afetar toda a instalao do Delphi. A guia Packages permite ao desenvolvedor
definir quais os pacotes instalados que podero ser utilizados durante o desenvolvimento de uma aplicao
bem como se a aplicao gerada ir ou no utilizar pacotes (packages) em tempo de execuo. Pacotes so
arquivos especiais do Delphi que iro conter, entre outras coisas, todas
as definies das classes e componentes que podem ser utilizados
assemelhando-se a uma DLL. Atravs da seleo dos Design Packasges
podemos definir quais os pacotes que esto disponveis dentro da IDE
do Delphi. Devemos tomar cuidado ao remover pacotes pois, ao
fazermos isso, poderemos estar removendo guias inteiras da Paleta de
Componentes. Uma vez removido o pacote, para que os componentes
removidos reapaream temos de acrescentar o pacote novamente. J a
opo Build with runtime packages indica ao compilador Delphi que o
executvel do aplicativo utilizar pacotes em tempo de execuo. Ao
selecionarmos essa opo passamos a gerar arquivos executveis com
um tamanho menor, porm passamos a ter a necessidade de levar, junto com os arquivos da aplicao, os
pacotes de componentes que foram utilizados durante o desenvolvimento desse projeto. Lembre-se que
esses pacotes, por possurem todo um conjunto de componentes dentro deles, no so arquivos pequenos o
que poder tornar uma desvantagem ter de leva-los junto com o executvel do projeto. funo do
desenvolvedor identificar a opo a ser adotada.
Agora que j temos um bom nmero de informaes a respeito de um projeto sendo desenvolvido em
Delphi, podemos nos concentrar nos demais arquivos de cdigo fonte que iro compor as aplicaes que
iremos desenvolver. Dessa forma, vamos comear o nosso estudo a respeito das units, sua composio e do
Editor de Cdigo.

Pgina: 37

Delphi 5

3.As Units
As units formam, principalmente nas aplicaes grficas, o corao de toda a aplicao. nas units que
todo o cdigo fonte da aplicao escrito. Nela encontram-se tanto definies a respeito de variveis e
constantes quanto a implementao dos procedimentos e funes existentes na aplicao.
Toda unit composta de pelo menos duas palavras reservadas utilizadas para indicar compilador o incio e
o trmino da unit. Essas palavras reservadas so unit e end.
unit Unit1;
Conforme o cdigo escrito ao lado, podemos observar que a
palavra reservada unit utilizada para indicar o incio de uma
interface
unit. Ao lado direito da palavra unit est a indicao de seu
nome. Observe que esse nome igual ao nome do arquivo salvo
implementation
em disco, porm sem a extenso pas. No devemos alterar
manualmente o nome da unit e sim utilizar a opo Save As
end.
localizada no menu File. Observe tambm que a unit finalizada
pela palavra reservada end, seguida por um ponto. Devemos
observar que a palavra reservada end ir aparecer em diversos outros trechos de cdigo dentro das units,
porm o nico local onde ela ir ocorrer, seguida de um ponto, no final da unit. No devemos alterar essa
estrutura da unit uma vez que esse end indica o final da unit. Programadores inexperientes na programao
utilizando o Delphi trocam frequentemente o ponto por ponto-e-vrgula o que faz com que a compilao do
aplicativo no mais possa ser feita.

3.1.

As sees de uma unit


Dentro das aplicaes Delphi que iremos desenvolver deveremos escrever cdigo fonte dentro das units
que iro compor nossos projetos. A unit dividida em vrias sees e, dessa forma, devemos entender o
funcionamento de cada uma dessas sees para sabermos em qual delas o cdigo que pretendemos escrever
ir melhor se encaixar.
Toda unit pode ser dividida em quatro sees distintas, so elas:

Interface

Implementation

Initialization

Finalization

As duas primeiras sees da unit apresentadas acima, as sees interface e implementation, so obrigatrias
quando do desenvolvimento de uma nova unit enquanto que as duas ltimas sees, initialization e
finalization, so opcionais. Dentro do cdigo de uma unit, as sees so escritas na seqncia em que
apresentamos acima, ou seja, a primeira seo existente dentro de uma unit a seo interface, enquanto
que a ltima a seo finalization. Nesta seo vamos nos detalhar um pouco mais nas sees interface e
finalization uma vez que essas duas so as mais utilizadas durante o desenvolvimento de um novo projeto.

3.1.1. A seo interface


A primeira seo encontrada em uma unit a seo interface. A principal funcionalidade da seo interface
conter declaraes. Essas declaraes podem ser tanto declaraes de variveis e constantes quanto de
funes e procedimentos. As declaraes contidas nesta seo, ao contrrio do que acontece nas demais
sees de uma unit, podero ser vistas e utilizadas por outras units contidas tanto no projeto correntemente
sendo
desenvolvido
quanto em outros
projetos
a
serem
desenvolvidos.
A
figura
ao
lado
apresenta a relao de
comportamento
da
seo interface em

Pgina: 38

Delphi 5
comparao s demais sees que podem estar contidas em uma unit. Esse comportamento idntico
independentemente das units pertencerem ao mesmo projeto ou estarem contidas em projetos distintos.
J sabemos que a seo interface utilizada para tornar diversos tipos de declaraes disponveis para
outras units. Porm, no basta apenas escrevermos na seo interface o cdigo que desejamos compartilhar
com outras units para que esse compartilhamento ocorra. Para que isso seja possvel, algumas aes por
conta do programador devem ser realizadas. Veremos agora, as clusulas nas quais a seo interface est
dividida e como poderemos utiliza-las para declarar cdigo e tornar esse cdigo compartilhado com outras
units.

3.1.1.1.A clusula Uses


A clusula uses utilizada dentro da seo interface de uma unit para indicar quais units contm
declaraes em suas sees interface
unit UExemplo1;
que so necessrias compilao da
unit atual. O cdigo ao lado mostra a
interface
utilizao da clusula uses dentro de
uma unit. Nesse exemplo a unit
uses
corrente, chamada de UExemplo1,
Windows, Messages, SysUtils, Classes, Graphics;
possui em sua clusula uses localizada

na seo interface referncias a 5 units.


Ao declararmos essas units passamos a
ter acesso a todas as declaraes feitas em suas sees interface. Ou seja, caso exista a declarao de uma
varivel chamada resposta dentro da unit SysUtils, a partir desse momento ela poder ser referenciada e
utilizada na unit UExemplo1 sem qualquer problema. Como pudemos observar, as units constantes na
clusula uses esto separadas por vrgula e no esto listadas com suas extenses. Alm disso, a declarao
finalizada por um ponto-e-vrgula. Essa clusula no obrigatria, porm amplamente utilizada na
maioria das aplicaes que sero desenvolvidas.
Duas observaes se fazem necessrias com relao utilizao da clusula uses dentro de um projeto
Delphi. A primeira delas refere-se ao encadeamento de declaraes na clusula uses. O Delphi no
possibilita
o
encadeamento
de
declaraes. Ou seja,
caso existam trs units
na qual a primeira
utiliza a segunda que
por sua vez utiliza a
terceira,
as
declaraes contidas
na terceira no estaro
disponveis para uso na primeira unit. Caso isso seja desejvel, a primeira unit dever fazer referncia
diretamente a terceira unit. A segunda observao refere-se a um problema que ocorria com bastante
freqncia nas verses mais antigas do Delphi, a referncia circular. Esse problema ocorre quando as
declaraes feitas na clusula uses de duas ou mais units ocasionam a formao de um crculo. A figura ao
lado ilustra a ocorrncia de uma referncia circular. Esse problema impede que a compilao do projeto
seja feita e por isso deve ser evitada.
J sabemos que podemos fazer referncia a declaraes existentes em outras units contidas tanto no projeto
corrente quanto em qualquer outro projeto relacionando o nome da unit na clusula uses, porm ainda no
sabemos como fazer essas declaraes. Dessa forma, iremos apresentar as demais clusulas que podem ser
definidas dentro da seo interface de uma unit.

3.1.1.2.Tipos bsicos do Delphi


Antes de comearmos a falar a respeito de declaraes de variveis e constantes que podem ser utilizadas
pelo nosso projeto devemos tomar conhecimentos dos principais tipos de dados que esto disponveis no
Delphi. Existe uma quantidade muito grande de tipos pr-definidos que podem ser utilizados pelos
programadores no desenvolvimento de suas aplicaes, por esse motivo, iremos apresentar no quadro
abaixo apenas um pequeno resumo daqueles tipos de dados que sero mais utilizados no desenvolvimento
de nossas aplicaes.

Pgina: 39

Delphi 5
Tipo Bsico

Faixa de valores

Byte

0 .. 255

Word

0 .. 65535

Integer

2147483648 .. 2147483647

Cardinal

0 .. 4294967295

Real

2.9 x 10^39 .. 1.7 x 10^38

Extended

3.6 x 10^4951 .. 1.1 x 10^4932

Currency

922337203685477.5808.. 922337203685477.5807

Char

Um caractere

String

Aproximadamente 2^31 caracteres

Boolean

Valor booleano (True ou False)

TDateTime

Data e hora

3.1.1.3.Declaraes de tipos
Alm dos tipos bsicos apresentados acima e ainda, aqueles que mesmo no tendo sido exibidos acima
compe os tipos bsicos do Delphi, o desenvolvedor ainda dispe da possibilidade de criar seus prprios
tipos de dados. Uma vez que esses novos tipos de dados forem criados, eles podem ser utilizados
normalmente como se fossem tipos bsicos da linguagem, podendo ser declaradas variveis e constantes a
partir deles.
Existem cinco possibilidades de criarmos novos tipos de dados dentro do Delphi, so elas:

Tipos simples

Conjutnos (Sets)

Tipos Enumerados

Registros

Classes

Colocamos nessa definio a possibilidade de criarmos classes como um novo tipo de dado por duas razes
bsicas. A primeria delas deve-se ao fato de que a localizao de suas declaraes a mesma dos demais
tipos de dados vistos, todos esto
localizados na clusula type da unit. A
unit UExemplo1;
segunda razo devido a forma de
utilizao das mesmas, ou seja, uma vez
interface
declarada uma classe ela pode ser utilizada
na declarao de variveis, que no caso de
type
estarmos trabalhando com classes sero
nome = string[50];
chamados de objetos, que pertenam a ela
funcionario = record
entre outras coisas. Independentemente do
fnome : nome;
fato de estarmos trabalhando com classes ou
idade : byte;
qualquer outro novo tipo de dados, ao ser
end;
declarado, ele ser sempre colocado no
TForm1 = class (TForm)
mesmo trecho da unit, ou seja, em sua seo
End;
type, seo responsvel por conter todas as

novas declaraes de tipos dentro de uma


unit. O exemplo ao lado ilustra a declarao
de novos tipos de dados.
Dois pontos podem ser observados tendo em vista o exemplo dado. O primeiro ponto refere-se ao fato de
podermos ter vrias declaraes de novos tipos dentro de uma mesma clusula type. Esse ponto que
estamos abordando agora no vlido apenas quando estamos definindo novos tipos de dados. Cada uma
das clusulas at aqui apresentadas ou aquelas que ainda sero vistas possuem seu escopo definido at o

Pgina: 40

Delphi 5
incio da prxima clusula. Dessa forma no necessria a cada nova definio de tipo a colocao da
palavra reservada type.
O segundo ponto que devemos observar a prpria declarao de novos tipos de dados. No exemplo
apresentado acima so declarados trs novos tipos. O primeiro deles refere-se criao de um tipo simples,
j o segundo a um registro enquanto que o terceiro refere-se a uma classe.

3.1.1.3.1.Tipos de dados simples


A declarao de um novo tipo simples a mais fcil dentre as trs. Quando declaramos um novo tipo
simples no estamos fazendo nada mais do que criando uma espcie de sinnimo para um tipo de dados j
existente, seja ele um tipo de dados bsico ou um outro tipo criado tambm na clusula type. No exemplo
dado a seguir, est sendo criado um novo tipo de dados chamado nome. Esse novo tipo , simplesmente,
uma nova representao para o tipo de dados bsico string que, neste caso, ir possuir um tamanho mximo
de 50 caracteres. Uma vez que declaramos o novo tipo nome, podemos passar a utiliz-lo em novas
declaraes, como foi feito dentro da declarao do tipo funcionario. Apresentamos a seguir a sintaxe para
a declarao de um novo tipo de dados simples.

Sintaxe
NomeNovoTipo = TipoBasico;

Exemplo
Nome = string[50];
Como podemos observar na sintaxe apresentada acima, a declarao de novos tipos de dados simples
restringe-se basicamente atribuio de um novo nome a um tipo de dados bsico ou que tenha sido
previamente definido na clusula type. Podemos ento perguntar qual a finalidade de declararmos um tipo
de dados simples! A resposta mais semntica do que prtica. Uma vez que criemos um novo tipo de
dados simples, como o tipo de dados nome criado no exemplo anterior, torna-se muito mais simples o
entendimento da funcionalidade das variveis desse novo tipo do que no caso de sua no existncia, ou
seja, ao declararmos uma varivel pertencente a esse tipo de dados fica clara a sua finalidade, a de estar
manipulando um nome.
Uma outra vantagem em estar trabalhando com um tipo de dados simples est na manuteno do cdigo
fonte criado. Caso desejemos alterar o tamanho das variveis do tipo nome basta que o faamos em um
nico lugar que essa alterao ser refletida em todas os pontos do programa onde variveis desse tipo
haviam sido declaradas.

3.1.1.3.2.Conjutos
Uma segunda maneira de declararmos novos tipos de dados dentro do Delphi atravs da declarao de
conjuntos (sets). Um conjunto funciona de forma semelhante um array (a declarao de arrays ser vista
posteriormente dentro da declarao de variveis) podendo conter uma srie de valores simultaneamente
dentro de sua definio. A seguir apresentamos a sintaxe e alguns exemplos relacionados declarao de
um tipo de dados conjunto.

Sintaxe
NomeNovoTipo = set of TipoBasico

Exemplo
Respostas = set of char;
Resultados = set of 1..50;
A declarao de conjuntos permite que sejam criadas variveis que iro conter um conjunto de valores
vlidos dentro daqueles fornecidos atravs da declarao do novo tipo. No exemplo acima, a declarao do
tipo de dados Respostas ir permitir que variveis desse novo tipo armazenem um conjunto de caracteres,
bem como o tipo de dados Resultados ir permitir o armazenamento de um conjunto de valores de 1 50.
Apesar de ainda no termos mostrado como feita a declarao de variveis dentro do Delphi, o exemplo a
seguir ilustra a atribuio de valores variveis dos tipos criados no exemplo acima. Para obter
informaes a respeito da declarao de variveis, o leitor deve consultar a prxima seo deste captulo.

Pgina: 41

Delphi 5

Exemplo
Resp1 := [ a, g, e, d];
Resul1 := [1, 34, 44, 3];
Como podemos observar, na atribuio de valores variveis do tipo conjunto, utilizados os sinais de [
e ]. Entre esses sinais, so colocados os valores atribudos varivel em questo. Um outro ponto a ser
observado refere-se a no existncia de ordenao nem de duplicidade dentro dos valores atribudos ao
conjunto. Podemos observar algumas propriedades do tipo conjunto no Object Inspector. Uma dessas
propriedades a BorderIcons pertencente ao formulrio. No Object Inspector a manipulao dos valores
que esto contidos no conjunto feita de forma muito mais simples, atribuindo-se o valor true queles
valores que desejamos que estejam no conjunto e false caso contrrio. No caso de desejarmos modificar
esses valores via codificao, devemos seguir a sintaxe apresentada acima.
Alm da atribuio de valores variveis do tipo conjunto, operaes de manipulao desses valores
podem ser efetuadas durante a codificao de nosso aplicativo, observe o seguinte exemplo.

Exemplo
Resp1 := [c, g] + [d, c];
Resul1 := Resul1 [34, 12];
if e in Resp1 then
ShowMessage(Valor j atribudo);
Os exemplos mostrados acima ilustram dois pontos importantes a serem observados com relao as
variveis do conjunto. O primeiro ponto refere-se s operaes de adio e subtrao de elementos de um
conjunto. Como podemos observar essas duas operaes so bastante intuitivas e funcionam de forma
semelhante quela vista na matemtica. Ao somarmos dois conjuntos, como mostrado no primeiro
exemplo, o resultado formado por um nico conjunto composto pelos caracteres c, g, d, atribudo
varivel Resp1. Observe que no existem duas ocorrncias do caractere c, ou seja, elementos repetidos
so eliminados do conjunto permanecendo apenas uma cpia de cada elemento. Fato semelhante ocorre no
segundo exemplo ao tentarmos subtrair um conjunto de outro. A tentativa de remover um elemento
inexistente de um conjunto no provoca erro. Alm disso, podemos utilizar a prpria varivel na qual
desejamos colocar o resultado da operao como um dos elementos que iro comp-la. Nesse exemplo,
estamos removendo os elementos 34 e 12 do conjunto Resul1. Por fim, o terceiro exemplo ilustra a
utilizao do operador in. Esse operador utilizado para verificar a existncia ou no de um elemento em
um conjunto. Caso o elemento exista, o resultado da operao o valor booleano true, caso contrrio o
resultado ser false.

3.1.1.3.3.Tipos enumerados
Alm da possibilidade de declararmos tipos de dados simples e conjuntos, uma outra possibilidade de
declarao de tipos de dados a declarao de tipos enumerados. Uma maneira simplificada de definirmos
tipos enumerados que um tipo enumerado composto por uma listagem de possveis valores a serem
atribudos a uma varivel do tipo sendo definido. Um exemplo tpico de um tipo enumerado, o tipo de
dados boolean. Quando declaramos uma varivel desse tipo j sabemos quais os valores que podem ser
atribudos a ela: true ou false. Observe que esses valores no so strings, so valores tratados de maneira
idntica a valores como os nmeros e por isso no vem entre aspas durante uma atribuio. Uma vez que
declaremos uma varivel booleana, qualquer outro valor que tentemos atribuir resultar em um erro de
sintaxe e a aplicao no poder ser compilada. A seguir apresentamos a sintaxe para a declarao de tipos
enumerados.

Sintaxe
NomeNovoTipo = (Valor1, Valor2, ..., ValorN);

Exemplo
Cores = (Verde, Vermelho, Azul, Amarelo);
Naipes = (Ouro, Copas, Espadas, Paus);

Pgina: 42

Delphi 5
Observe os exemplos acima. Neles podemos perceber que quando criamos um tipo de dados enumerado,
estamos definindo quais valores podem ser atribudos variveis desse novo tipo. No exemplo dado acima,
caso desejssemos criar uma varivel do tipo de dados chamado cores, os nicos valores que poderiam ser
atribudos a essa varivel seria um dos seguintes valores: Verde, Vermelho, Azul ou Amarelo. importante
observar que ao tentarmos atribuir qualquer um desses valores a uma varivel, o valor deveria ser atribudo
diretamente, como mencionado anteriormente, uma vez que o valor no uma string e sim um valor
especfico para um tipo enumerado. Ilustramos essa observao a seguir atravs da atribuio de um valor
varivel UmaCor. Essa varivel foi previamente declarada como sendo do tipo Cores apesar de no exemplo
esse fato no estar sendo mostrado. Mostraremos como declarar variveis posteriormente nesse captulo.

Exemplo
UmaCor := Azul; {Atribuio correta}
UmaCor := Azul; {Atribuio errada, no uma string}
UmaCor := Branco; {Atribuio errada, no existe o valor Branco}
Um outro ponto a ser mencionado quando trabalhamos com tipos enumerados refere-se ao fato de que a
definio dos valores que iro compor o tipo enumerado tambm estabelece uma ordenao sobre eles. Ou
seja, a cada valor definido para o tipo enumerado est associada a sua posio em relao aos demais
valores. No exemplo dado anteriormente, o valor Vermelho possui valor de ordenao menor do que o
valor Azul, sendo considerado portanto menor do que o Azul, que, por sua vez, possui um valor de
ordenao menor do que o valor Amarelo. Dessa forma, perfeitamente possvel a escrita de cdigo
comparativo entre esses valores como mostrado a seguir.

Exemplo
if UmaCor <= Vermelho then
Nesse exemplo mostramos a comparao do valor contido na varivel UmaCor com um dos valores do tipo
de dados enumerado Cor. Esse tipo de operao bem como qualquer outra que envolva a necessidade de
comparao entre os elementos de um tipo enumerado pode ser efetuado sem qualquer problema.

3.1.1.3.4.Registros
At agora vimos como declarar novos tipos de dados que, de uma certa forma, podem ser considerados
como novos tipos de dados simples. A partir de agora vamos ver como podemos declarar tipos de dados
que sejam mais complexos do que os que vimos at ento. A primeira forma que podemos declarar esses
tipos mais elaborados atravs da declarao de um tipo de dados registro. Um tipo de dados registro
composto por declaraes de vrios tipos de dados diferentes em uma nica declarao, onde cada um
desses tipos chamado de um campo dentro do registro. Mostramos abaixo a sintaxe para a declarao de
um registro.

Sintaxe
NomeNovoTipo = record
Campo1 : TipoCampo;
...
CampoN : TipoCampo;
end;

Exemplo
TFuncionario = record
Nome : string[50];
Idade : byte;
Cargo, Setor : string[30];

Pgina: 43

Delphi 5
end;
Observe que ao declararmos o tipo de dados TFuncionario estamos, antes de tudo, respeitanto um padro
adotado no desenvolvimento de novos registros, e posteriormente como iremos observar, como tambm de
novas classes, iniciando o nome de cada novo tipo com a letra T. Uma vez feita essa observao com
relao ao nome do tipo de dados, voltemos explicao do exemplo propriamente dito. Nesse exemplo,
podemos observar a existncia de quatro campos dentro do tipo TFuncionario, so eles: os campos Nome,
Cargo e Setor do tipo string e o campo Idade que armazena um valor inteiro. Devemos observar tambm
que poderamos ter criado campos de qualquer tipo de dados, at mesmo de tipos de dados Record desde
que eles tivessem sido previamente declarados.
A declarao de tipos de dados registro til devido a possibilidade de podermos agrupar valores dentro de
uma nica declarao. Quando, por exemplo, declararmos uma varivel desse tipo de dados estaremos
colocando todas as informaes a respeito de um funcionrio em um nico lugar, permitindo o acesso
rpido a cada um desses campos por intermdio de uma nica varivel.

Exemplo
Func.Nome := Jos da Silva;
Func.Idade := 18
Func.Cargo := Analista de Sistemas;
X := Func.Idade;
Os exemplos acima ilustram a utilizao de uma varivel do tipo de dados TFuncionario declarado
anteriormente. Neles vemos como podemos atribuir e ler valores dos campos de um record. O acesso a
cada campo do record feito atravs da utilizao do operador ponto. Para tanto basta que o valor que
esteja sendo atribudo, bem como a varivel na qual o valor esteja sendo colocada a partir de um campo do
record possuam o mesmo tipo de dados.

3.1.1.3.5.Classes
O ltimo tipo de dados que iremos abordar refere-se ao conceito de classes. O Delphi, por ser uma
linguagem que suporta os conceitos da programao orientada a objetos permite a declarao tanto de
novas classes quanto de objetos. A declarao de objetos ser vista na prxima seo. Feita essa
observao vamos comear nosso estudo em relao declarao de classes dentro do Delphi. A
declarao de classes bastante semelhante declarao de um tipo de dados record vista anteriormente.

Sintaxe
NomeNovaClasse = class
Declaraes da Classe
end;

Exemplo
TClasseFuncionario = class
Nome : string[50];
Salario : currency;
Procedure Aumento(pct : real);
end;
Apesar de estarmos apresentando neste momento a sintaxe para a declarao de uma classe, essa sintaxe
no est completa. Basicamente, o que ilustramos aqui a sintaxe bastante semelhante da declarao de
um record, onde a diferena encontrada at este momento entre as duas declaraes, a substituio da
palavra reservada record pela palavra reservada class. No exemplo dado, podemos perceber pelo menos
mais uma grande diferena entre as declaraes de records e classes no que diz respeito possibilidade de
declararmos mtodos dentro da declarao de uma classe, fato esse que no pode ocorrer dentro da

Pgina: 44

Delphi 5
definio de um record. No entanto, deixaremos para depois a descrio mais detalhada da sintaxe da
declarao de uma classe.

3.1.1.4.Declaraes de variveis
Uma vez que j conhecemos alguns dos tipos bsicos existentes dentro do Delphi e tambm sabemos como
criar novos tipos de dados a partir desses tipos bsicos, vamos explorar a principal razo da existncia de
tipos de dados dentro de uma linguagem de programao, a declarao de variveis.

3.1.1.4.1.Declarando variveis simples


De forma semelhante ao que aconteceu com a declarao de tipos, o Delphi tambm possui uma clusula
responsvel pela declarao de variveis, a clusula var. O exemplo ao lado mostra a utilizao da clusula
var. Como podemos observar, a declarao de variveis feita logo aps a palavra reservada var, que
indica o incio das declaraes de variveis. Podemos declarar uma ou vrias variveis. Os nomes das
variveis devem ser seguidos por sinal de dois pontos e, em seguida, o nome referente ao tipo da varivel
sendo declarada.
Podem ser declaradas variveis de qualquer tipo de dados vlido, seja ele um tipo de dados bsico ou um
novo tipo de dados declarado na clusula type da unit. No entanto, as declaraes de variveis pertencentes
a tipos de dados declarados na seo type s vlida desde que a declarao do novo tipo de dados tenha
sido feita antes da declarao da varivel ou ainda em uma unit que esteja contida na clusula uses da unit
na qual a varivel est sendo declarada.
unit Unit2;

unit Unit2;

interface

interface

type
TNome = string[50];

var
Nome : TNome;

var
Nome : TNome;

type
TNome = string[50];

implementation

implementation

end.

end.

Acima apresentamos dois exemplos de declarao de variveis. O primeiro exemplo funciona


perfeitamente e pode ser compilado sem qualquer problema. J o segundo exemplo, caso tentemos
compila-lo, ir resultar em erro de sintaxe. O erro ocorre uma vez que estamos tentando declarar a varivel
Nome que supostamente do tipo TNome. Para o Delphi, no momento da compilao da linha referente
declarao da varivel Nome, no existe definido nenhum tipo de dados chamado TNome. Dessa forma, as
declaraes feitas no segundo exemplo apresentado acima no funcionam e resultam em erro de sintaxe.
Resta-nos fazer duas pequenas observaes a respeito da declarao de variveis dentro do Delphi. A
primeira refere-se declarao de mltiplas variveis. Quando desejamos declarar vrias variveis de um
mesmo tipo de dados podemos faz-la separando cada varivel por uma vrgula e, ao final das declaraes
dos nomes das variveis, colocamos o sinal de dois pontos e o tipo dessas variveis. A Segunda observao
refere-se possibilidade de declarao de vrias clusulas var dentro de uma mesma seo interface.
Apesar de podermos declarar vrias dessas clusulas, tal tipo de procedimento no muito comum e deve
ser evitado por uma simples questo de esttica e organizao do cdigo fonte.

3.1.1.4.2.Declarando variveis arrays


A declarao de variveis array, tambm conhecidas em outras linguagens de programao como vetores,
tambm pode ser feita dentro do Delphi. A declarao de arrays til quando desejamos declarar uma srie
de variveis de mesmo tipo de dados, cujo acesso a elas deve ser feito de forma conjunta. No faz parte do
escopo deste material falar sobre a finalidade de uma declarao de arrays, mas sim definir a sintaxe
adotada pelo Delphi para a declarao desse tipo de varivel. Para uma explicao mais detalhada em
relao utilizao de arrays, o leitor deve consultar material especfico sobre estruturas de dados.

Pgina: 45

Delphi 5

Sintaxe
NomeVar : array [PosIni..PosFin] of Tipo;
NomeVar : array [PosIni1..PosFin1, ..., PosIniN..PosFinN] of Tipo;

Exemplo
Gabarito : array [1..20] of char;
Provas : array [1..16, 1..20] of char;
A sintaxe apresentada acima ilustra dois tipos possveis de declaraes de arrays. A primeira delas referese declaraes de arrays unidimensionais enquanto que a segunda mostra como podemos declarar arrays
multidimensionais. No primeiro exemplo, a declarao da varivel gabarito que pode conter vinte
caracteres cada um deles nas posies de 1 a 20 do array, respectivamente. J no segundo exemplo, a
varivel gabarito representa um array bidimensional, semelhante a uma tabela contendo 16 linha com 20
colunas em cada uma delas, onde em cada campo desta tabela podemos colocar um caractere.
Algumas observaes fazem-se necessrias em relao declarao de arrays bem como o acesso aos
valores neles contidos. A primeira observao diz respeito a sintaxe da declarao do array. Como
mostrado acima, na declarao do array estabelecida tanto a posio inicial quanto a final dos elementos
do array. Atravs dessa definio fica tambm estabelecida a quantidade de elementos que podero estar
contidos nesse array. Para esses valores podemos estabelecer qualquer numerao, porm as numeraes
mais comuns para a posio inicial do array a posio 0 ou a posio 1, como feito nos exemplos
anteriores. Apesar disso, fica a critrio do desenvolvedor a definio de quais sero as faixas de valores a
serem utilizadas.
A segunda observao refere-se ao acesso aos valores contidos no array. Para acessarmos cada elemento
contido no array devemos fazer referncia a posio em que esse elemento ocorre dentro do array. O
exemplo abaixo ilustra algumas das diversas formas que podemos utilizar para fazer referncia a uma
posio especfica do array.

Exemplo
Gabarito[12] := d;
Provas [5, 20] := c;
Provas [5] [20] := c;
Os exemplos acima ilustram como acessar um elemento de um array unidimensional bem como exibe duas
maneiras de acessarmos o mesmo elemento em um array bidimensional.

3.1.1.5.Declaraes de constantes
Um outro tipo de declarao bastante comum em muitas
linguagens de programao a declarao de constantes.
Como no poderia deixar de ser, o Delphi tambm permite
a declarao de constantes que podero ser utilizadas em
seu cdigo fonte. Como vem acontecendo com outros
tipos de declaraes, a declarao de constante tambm
possui um local especial na qual elas ocorrem, a clusula
const. A figura ao lado exemplifica a declarao de
constantes dentro de uma unit do Delphi. A sintaxe da
declarao de constantes semelhante quela vista para a
declarao de variveis. Devemos colocar o nome da
constante a ser declarada seguida no sinal de igualdade e o
valor a ser atribudo. Essa a sintaxe a ser utilizada na
maioria das declaraes de constantes. Porm, como
veremos a seguir, existem algumas excees a essa
sintaxe.

unit Unit2;
interface
const
DiasNaSemana = 7;
Companhia = 'Ibratec';
SalarioMinimo = 151.00;
HorasNoDia = byte(24);
DiasDoAno : integer = 365;
implementation
end.

No exemplo apresentado podemos observar dois pontos interessantes em relao declarao de


constantes. O primeiro ponto refere-se a possibilidade de informarmos o tipo de dados ao qual a constante

Pgina: 46

Delphi 5
sendo declarada dever possuir. Podemos informar o tipo de dados desejado apenas para constantes de
tipos de dados ordinais. Caso no informemos o tipo de dados para constantes ordinais ou de qualquer
outro tipo de dados, o Delphi possui uma srie de regras que iro determinar o tipo de dados ao qual a
constante ir pertencer. Para uma melhor definio das regras a respeito da atribuio de tipos de dados a
constantes declaradas dentro do Delphi, o leitor dever consultar a ajuda do prprio Delphi.
O segundo ponto que devemos observar a declarao de constantes tipadas. Uma constante tipada
assemelha-se bastante declarao de variveis at mesmo em sua sintaxe. A constante DiasDoAno
representa esse tipo de declarao de constantes. Alm da diferena de sintaxe entre a declarao de
constantes tipadas e aquelas que no so tipadas, existe uma importante diferena comportamental entre
elas. As constantes tipadas, ao contrrio do que acontece com as constantes no tipadas, tambm chamadas
de constantes verdadeiras, podem ter seus valores modificados durante a execuo da aplicao. Esse
comportamento faz com que as constantes tipadas assemelhem-se ainda mais a variveis.

3.1.1.6.Declarando funes e procedimentos


O ltimo ponto que iremos abordar com relao seo interface em relao declarao de funes e
procedimentos. De uma forma geral as funes e procedimentos so chamados de mtodos quando
declarados dentro de uma classe, porm existe uma diferena bsica entre ambos. Enquanto que um
procedimento no retorna qualquer valor ao ponto ao qual ele foi executado, a funo por sua vez retorna.
Antes de mostrarmos a sintaxe para a definio de procedimentos e funes devemos entender em que
ponto da seo interface eles devem ser declarados. Sintaticamente, podemos declarar tanto funes quanto
procedimentos na seo interface em qualquer ponto aps a clusula uses, no caso dela existir. Ou seja, a
declarao de uma funo ou procedimento pode vir tanto na clusula type, no devendo estar dentro de
uma declarao de um record ou de uma classe, quanto nas clusulas var e const. Devemos, no entanto,
tentar preservar alguma organizao durante o desenvolvimento do aplicativo. Para isso, devemos declarar
tanto as funes quanto os procedimentos existentes em um nico ponto da seo interface de nossa unit
como, por exemplo, aps a declarao de todas as variveis da seo var.

Sintaxe
procedure NomeProcedure;
proceudre NomeProcedure (argumentos );
function NomeFunction : TipoRetorno;
function NomeFunction (argumentos ) : TipoRetorno;

Exemplo
procedure UmaProcedure;
procedure ExibeMsg (Msg : string; Qtd : byte);
function VarificaCamposObrigatorios : boolean;
function VerificaCPF (CPF, Dgt : string) : boolean;
Como podemos observar nas sintaxes apresentadas acima, ao declararmos uma funo ou um procedimento
temos a possibilidade de passar ou no argumentos para eles. No caso de no passarmos qualquer
argumento, a utilizao dos parnteses no deve ser feita, ao contrrio do que ocorre em outras linguagens
de programao. J quando desejamos passar argumentos para qualquer funo ou procedimento, devemos
passar cada um dos argumentos e seus respectivos tipos de dados separados por um ponto e vrgula. Nesses
casos, os argumentos devem vir com seus tipos indicados como na declarao de variveis de um unit, ou
seja, separados de seus tipos atravs de um sinal de dois pontos.. Opcionalmente, quando da declarao de
dois ou mais argumentos de mesmo tipo, esses argumentos podem vir separados por vrgula como tambm
acontecia nas declaraes de variveis. Quando tratamos com funes devemos tambm indicar o tipo de
dados a ser retornado quando da execuo da funo. Observe que indicamos um nico tipo de dados a ser
retornado uma vez que uma funo poder retornar apenas um nico valor.
Um outro aspecto importante que devemos observar est no fato de que apenas declaramos os
procedimentos e as funes, ou seja, seus cabealhos. Veremos posteriormente como e onde declarar o
corpo desses procedimentos e funes alm de como poderemos indicar o valor a ser retornado por cada
uma das funes declaradas.

Pgina: 47

Delphi 5

3.1.1.6.1.Argumentos por valor e por referncia


Existem duas maneiras de declararmos e passarmos valores tanto para procedimentos quanto para funes,
a passagem por valor e a passagem por referncia. As duas diferem-se com relao a forma como as duas
tratam em sua implementao os argumentos passados. Vamos mostrar essa diferena atravs de um
exemplo. No exemplo a seguir iremos imaginar a existncia de um procedimento, poderia ser uma funo
sem qualquer perda de generalidade na explicao, que recebe um argumento do tipo integer.

Exemplo
Passagem por valor

Passagem por referncia

X := 3;

X := 3;

ProcExemplo (X);

ProcExemplo(X);

Qual o valor de X aps a execuo?

Qual o valor de X aps a execuo?

Definio do corpo do procedimento


procedure ProcExemplo(Argumento : integer);
begin
Argumento := Argumento + 1;
end;
Antes de tudo devemos ressaltar que iremos tratar mais detalhadamente a escrita de procedimentos e
funes posteriormente. Por enquanto, vamos tratar da diferena entre a passagem de valores por referncia
ou por valor. Quando passamos valores por valor para uma funo ou procedimento, esses valores
permanecem inalterados ao trmino da execuo do procedimento ou da funo, independentemente das
atribuies dentro deles. J quando passamos valores por referncia, ao alterarmos o argumento dentro da
funo ou procedimento, esse ser o valor aps trmino da execuo da funo ou procedimento. No
exemplo acima, o valor da varivel X aps a execuo do procedimento ProcExemplo quando da passagem
por valor permanecer 3, enquanto que na passagem por referncia ser alterado para 4.
Uma vez que sabemos qual o comportamento de uma funo ou procedimento com relao a passagem de
parmetros por valor ou por referncia, resta-nos saber como podemos indicar ao Delphi que queremos que
um argumento seja passado por valor ou por referncia.

Sintaxe
Passagem por valor
Procedure NomeProcedure (Argumento : TipoDeDados);
Passagem por referncia
Procedure NomeProcedure (var Argumento : TipoDeDados);

As sintaxes apresentadas acima, apesar de tratar apenas das declaraes de procedimentos podem ser
utilizadas nas declaraes de funes. Observe que, para declararmos um argumento como sendo passado
por valor no devemos fazer uso de qualquer palavra reservada. J em declaraes de argumentos passados
por referncia devemos utilizar a palavra reservada var. Devemos observar que necessrio declarar a
palavra reservada var antes de cada argumento que desejamos definir como sendo passado por referncia.

Um detalhe importante se refere definio de passagem de argumentos constantes. Esse tipo de


declarao semelhante ao que vimos na passagem por referncia, porm, ao invs de utilizarmos a
palavra reservada var devemos fazer uso da palavra reservada const como mostrado no exemplo a seguir.

Sintaxe
procedure NomeProcedure (const Argumento : TipoDeDado);

Pgina: 48

Delphi 5

Exemplo
procedure ProcExemplo (const Argumento : integer);
Quando declaramos um argumento como sendo um parmetro constante, estamos indicando que o
argumento passado para a funo ou procedimento no pode
ser alterado no corpo do procedimento. Caso tentssemos
alterar o valor do argumento dentro do corpo da funo ou
procedimento, ao compilarmos a aplicao o Delphi iria
acusar um erro como mostra a figura ao lado. Esse
comportamento assemelha-se ao que seria esperado se
tivssemos declarado uma varivel local ao procedimento ou
funo. A grande vantagem em relao declarao de uma
constante local est no fato de, ao passarmos como
argumento para a funo, estaremos criando uma
constante dinamicamente, uma vez que o valor da
constante atribudo no momento da chamada da funo ou procedimento.

3.1.2. A seo implementation


Vimos na seo anterior a seo interface. Nela pudemos declarar novos tipos, variveis e constantes.
Essas declaraes podiam ser disponibilizadas para outras units, pertencentes ou no ao projeto corrente,
como se fossem declaraes globais. Agora vamos dar incio
ao estudo da seo implementation. Essa seo assemelha-se
bastante seo interface uma vez que nela podemos
tambm declarar novos tipos, variveis e constantes da
mesma maneira como havamos feito anteriormente atravs
da utilizao das palavras reservadas type, var e const
conforme mostramos ao lado. A diferena bsica existente
entre as declaraes feitas na seo implementation daquelas
que fazemos na seo interface est na visibilidade dessas
declaraes.
Como mencionamos em nossa explicao a respeito da seo
interface, as declaraes nela efetuadas possuem carter global, ou seja, podem ser vistas e utilizadas em
qualquer outra unit desde que essa unit esteja includa em sua clusula uses. Por outro lado, as declaraes
feitas na seo implementation possuem carter local, ou seja, podem apenas ser utilizadas dentro da
prpria unit onde esto declaradas.
Alm do aspecto visibilidade, vimos que uma outra funo da seo interface a possibilidade de
podermos declarar funes e procedimentos. Porm, alm de termos a possibilidade de declararmos esses
procedimentos na seo interface, o que os tornam procedimento e funes disponveis as demais units,
devemos ainda escrever a codificao para os mesmos, ou seja, devemos escrever o corpo de cada um
desses procedimentos. A codificao do corpo desses procedimentos e funes feita na seo
implementation da unit. importante salientar que no necessitamos declarar o cabealho dos
procedimentos na seo interface, no caso em que desejamos escrever funes ou procedimentos locais a
unit corrente, basta escrevermos o corpo dessas diretamente na seo implementation.
Independentemente de qual seja a visibilidade que desejamos dar as funes e procedimentos que iremos
escrever, a forma com que iremos escrever esses procedimentos exatamente a mesma. A seguir
mostramos a sintaxe que dever ser utilizada na escrita do corpo de cada um dos procedimentos ou funes
a serem declaradas nas units do projeto. importante observar que a sintaxe que iremos apresentar um
pouco diferente quando estivermos tratando da implementao de procedimentos e funes pertencentes a
uma classe.

Sintaxe
procedure NomeProc (Argumentos : TipoDeDados);
Begin
Cdigo do procedimento

Pgina: 49

Delphi 5
end;

Exemplo
procedure ExibeMsg(Msg : string);
begin
ShowMessage(Msg);
end;
Observe que ao escrevermos o corpo de cada procedimento ou funo devemos repetir todo o cabealho
antes de colocarmos as palavras reservadas begin e end. Entre essas duas palavras reservadas que iremos
escrever efetivamente o cdigo a ser executado.
Uma vez que j sabemos tanto como declarar funes quanto como escrever o corpo de cada uma delas,
devemos nos lembrar que as funes diferenciam-se dos procedimentos pelo fato de retornarem um valor
para o ponto de onde elas foram chamadas. Por isso resta-nos mostrar, dentro do corpo da funo, como
podemos indicar qual valor deve ser retornado, ao local da chamada da funo.

Sintaxe
Result := ValorRetorno;
NomeFuncao := ValorRetorno;

Exemplo
Result := True;
VerificaCPF := True;
if x < 3 then
Result := true
Else
Result := False;
Observe que existem duas maneiras de retornarmos um resultado para a funo. A primeira delas atravs
da utilizao da palavra reservada result. Result nada mais do que um argumento implcito contido no
cabealho de cada uma das funes que declaramos. Ao atribuirmos valores palavra reservada result
estamos informando ao Delphi quais valores desejamos retornar ao ponto em que a funo foi chamada. A
segunda maneira atravs da qual podemos retornar resultados de funes atravs da atribuio do valor
desejado ao prprio nome da funo. No exemplo acima, o valor true atribudo ao prprio nome da
funo VerificaCPF.

3.1.3. A seo initialization


A seo initialization uma seo opcional dentro da declarao de uma unit, iniciando-se pela palavra
reservada initialization e prosseguindo at o incio da seo finalization ou o trmino da unit. Essa seo
utilizada para colocar cdigos que devem ser executados durante a inicializao do aplicativo. Nela
colocamos declaraes como, por exemplo, a inicializao de variveis.

A figura ao lado mostra a utilizao da seo initialization


dentro de uma unit. Observe que nessa seo podemos
colocar desde simples atribuies de valores a variveis que
foram declaradas em outras sees da unit ou de outras units,
bem como outras codificaes mais complexas. Ao
observarmos o cdigo existente na seo initialization,
podemos observar que as declaraes feitas nessa seo
assemelham-se a declaraes que poderiam ter sido feitas em
qualquer funo ou procedimento existente em uma unit. A
principal diferena que o cdigo que escrevemos na seo

Pgina: 50

Delphi 5
initialization ser executado automaticamente no incio da execuo do programa, enquanto que, para
executarmos outros procedimentos deveramos chamar esses procedimentos para que o cdigo associados a
eles sejam executados.

3.1.4. A seo finalization


A seo finalization a ltima seo que pode ser declarada dentro de uma unit, podendo existir apenas se
a seo initialization tiver sido previamente declarada. Nessa seo so declarados cdigos a serem
executados ao trmino da execuo do programa. Uma vez que a seo initialization de uma unit seja
executada, o Delphi garante a execuo da seo finalization correspondente. Dessa forma, podemos
perceber dois pontos em relao s declaraes feitas na seo finalization de uma unit. A primeira delas
que essas declaraes so, em geral, responsveis pela liberao de recursos que tenham sido alocados na
seo initialization. O segundo ponto que, uma vez que as declaraes contidas na seo initialization
podem no ter sido concludas corretamente, ou seja, pode ter havido algum erro durante a sua execuo, o
cdigo que escrevemos na seo finalization deve ser robusto o suficiente para lidar com essas situaes.

4.Os Formulrios
Uma vez que j possumos conhecimento suficiente a respeito do ambiente Delphi, podemos iniciar nosso
aprendizado naqueles itens que mais sero utilizados no desenvolvimento de nossos aplicativos. Como no
poderia deixar de ser, vamos iniciar esse processo atravs do estudo dos formulrios que, dentro das
aplicaes desenvolvidas para o ambiente Windows, iro estar presentes em sua grande maioria.

4.1.

Criando formulrios
J sabemos que por estar contido na maioria das aplicaes desenvolvidas para o ambiente Windows, ao
iniciarmos o Delphi ou um novo projeto, um novo formulrio ser criado e definido como o novo
formulrio principal para a nossa aplicao. Esse formulrio principal no ser, muito provavelmente, o
nico formulrio que estar contido nessa aplicao. Alm disso, podero existir situaes em que o
desenvolvedor deseja definir um novo padro para o formulrio principal de novas aplicaes,
diferentemente daquele formulrio, sem qualquer componente, conforme definido pela instalao padro
do Delphi. At mesmo para os novos formulrios que iremos criar, podemos desejar que esse padro seja
alterado. Antes de mostrarmos como alterar o comportamento padro, ns vamos mostrar as trs principais
formas atravs das quais podemos criar novos formulrios dentro do ambiente do Delphi.

4.1.1. Novos formulrios


As duas primeiras maneiras que o desenvolvedor possui de criar um novo formulrio so idnticas. A
primeida delas acionada pelo item de menu New Form contido no menu File, e a segunda atravs no speed
button New Form localizado na Barra de Ferramentas da janela principal do Delphi. Em amabas as
situaes, um novo formulrio criado se utilizando sempre da definio de qual formulrio foi
estabelecido como o default para a configurao do Delphi em vigor.
A segunda maneira que o desenvolvedor Delphi possui de criar um formulrio atravs da seleo do item
de menu New localizado no menu File. Ao selecionarmos esse item de menu, o Delphi ir exibir a caixa de
dilogo New Items. Essa caixa de dilogo exibida contendo o Object Repository, ou seja, um Repositrio
de Objetos a partir do qual o desenvolvedor poder escolher objetos previamente criados e utiliz-los em
suas aplicaes.
O Object Repository est dividido em guias de acordo com a
funcionalidade de cada objeto nelas contido. Por exemplo, na guia
Forms esto contidos modelos de formulrios enquanto que na guia
Dialogs esto contidos modelos de caixas de dilogo. Existem
tambm algumas guias especiais como o caso da guia New que
contm objetos mais comuns que podem ser utilizados em vrios
tipos de aplicaes. J a guia Project1 uma guia especial, cujo
nome depende do nome da aplicao corrente, ou seja, ao
salvarmos o projeto com um outro nome, o ttulo dessa guia ser
modificado, passando a exibir o nome do projeto corrente. Nessa
guia, ao contrrio do que ocorre nas demais, esto contidos os

Pgina: 51

Delphi 5
formulrios que foram desenvolvidos nessa aplicao de tal forma a permitir sua reutilizao em outros
formulrios desse mesmo projeto e no formulrios pr-definidos instalados junto com o Delphi. Para
criarmos um novo formulrio a partir do Object Repository podemos selecionar tanto o formulrio padro
contido na guia New como qualquer outro formulrio contido nas demais guias do Object Repository.
A figura acima ilustra a guia New contida no Object Repository. Nessa guia podemos observar a existncia
de um cone, responsvel pela criao de um novo formulrio, chamado Form. Ao selecionarmos esse
cone e clicarmos no boto Ok o Delphi ir criar um novo formulrio default. Para alterarmos o formulrio
default que criado pelo Delphi deveremos modificar a configurao do Object Repository.

4.1.2. Configurando o Object Repository


O desenvolvedor Delphi possui a possibilidade de configurar o Object Repository de tal forma a poder
adaptar o ambiente de programao s suas necessidades, melhorando dessa forma o tempo de
desenvolvimento de novas aplicaes. Para configurarmos o Object
Repository devemos exibir a caixa de dilogo Object Repository,
mostrada ao lado, atravs do item de menu Repository localizado no
menu Tools. Como podemos observar na figura, a caixa de dilogo
Object Repository composta por dois List Views. O primeiro contm
algumas das guias contidas no Object Repository quando da sua
exibio atravs do menu New, mencionado anteriormente, exceto
pelo item [Object Repository] que contm todos os objetos do
repositrio. O segundo lista os objetos contidos na guia, ou pgina,
selecionada no primeiro ListView. Devemos observar que os botes
contidos nessa caixa de dilogo tornam-se habilitados na medida em
que vamos selecionando cada elemento de seus listviews.
Nessa caixa de dilogo podemos configurar o Object Repository para exibir suas guias na ordem que
melhor se adapte ao desenvolvedor, para isso basta que elas sejam colocadas no Listview Pages na ordem
em que desejamos. A reorganizao dos itens dentro do Listview pode ser feita tanto atravs dos dois
botes localizados na parte inferior esquerda da caixa de dilogo quanto atravs de uma simples operao
de drag and drop. Com relao s pginas contidas no Object Repository, o desenvolvedor poder criar
tanto novas pginas como tambm poder renomear as pginas j existentes. Alm disso, o desenvolvedor
tem a possibilidade de remover pginas indesejveis. Devemos ter cuidado ao clicar no boto Delete Page
uma vez que no exibida nenhuma caixa de dilogo solicitando a confirmao de que desejamos remover
a pgina selecionada.
Em relao aos objetos colocados em cada guia, atravs da caixa de dilogo Object Repository, temos a
possibilidade tanto de edit-los quanto de remover cada um dos objetos contidos no Object Repository. O
boto Edit Object exibe a caixa de dilogo Edit Object Info, mostrada abaixo, permitindo que alteremos
informaes a respeito do objeto corrente tais como o seu nome e o cone que ir represent-lo no Object
Repository. A alterao dessas informaes normalmente no necessria uma vez que elas so
preenchidas quando do momento da insero de um novo objeto no Object Repository. No iremos nos
preocupar nesse momento com a criao de novos objetos dentro
do Object Repository, devemos apenas ter conhecimento de que
podemos criar novos objetos para que esses possam ser
utilizados, posteriormente, em novas aplicaes.
Vimos at aqui que podemos manipular com os objetos que
existem no repositrio, mas no mencionamos como podemos
alterar o comportamento default com relao criao de novos
formulrios. Para isso temos uma opo em relao tanto
definio do formulrio principal de novos aplicativos quanto
para novos formulrios de nossa aplicao, ou seja, o formulrio
que criado ao selecionarmos a opo New Form localizada no menu File. Podemos observar que, ao
selecionarmos um objeto que represente um formulrio, tornam-se habilitados dois CheckBoxes na parte
inferior direita da caixa de dilogo Object Repository. Caso desejemos alterar o formulrio default criado
basta que selecionemos um novo formulrio qualquer e marquemos o CheckBox New Form. Feito isso,
todas as vezes que escolhermos uma opo de criao de um novo formulrio, ser criado um formulrio
idntico quele que escolhemos. Caso desejemos posteriormente retornar ao comportamento default do
Delphi basta desmarcarmos a opo que acabamos de marcar.

Pgina: 52

Delphi 5
Alm de podermos escolher o formulrio que ser criado quando da escolha de uma opo de criao de
novo formulrio, temos ainda a opo de determinar qual o formulrio a ser criado como sendo o
formulrio principal da aplicao. Para isso basta seguirmos o mesmo procedimento descrito anteriormente,
porm ao invs de selecionarmos o checkbox relativo opo New Form devemos selecionar o checkbox
relativo opo Main Form.
Alm de podermos definir qual o comportamento para os formulrios de nossa aplicao, temos ainda a
opo de alterar o comportamento default associado criao de novas aplicaes. Ao selecionarmos um
objeto que represente novas aplicaes, como por exemplo, aqueles exibidos no item Projects contido no
listview Pages ao invs de objetos associados a formulrios, exibido no canto inferior direito o checkbox
New Project. Ao marcarmos esse checkbox estaremos determinando qual objeto ser utilizado no momento
da criao de um novo projeto.

4.2.

Exibindo Formulrios
Uma vez que tenhamos criado novos formulrios dentro de nossa aplicao devemos definir quando eles
sero exibidos para que possamos escrever o cdigo necessrio exibio dos mesmos. A definio do
momento em que cada formulrio ir ser exibido depende, nica e exclusivamente, das definies do
desenvolvedor. Em relao ao cdigo necessrio a exibio do formulrio, o Delphi permite duas maneiras
de exibirmos esses formulrios.

4.2.1. Manipulando com propriedades e mtodos


Antes de comearmos a tratar com os formulrios ou com qualquer outro componente que esteja a nossa
disposio no Delphi devemos nos familiarizar com a forma atravs da qual poderemos manipular com
suas propriedades e mtodos dentro do Editor de Cdigo. Vimos at aqui como fcil manipularmos com
as propriedades de um componente dentro do Objetct Inspector. Veremos agora que tambm bastante
simples manipularmos no somente com as propriedades, mas tambm com os mtodos dentro do Editor de
Cdigo do Delphi.
Todas as vezes que desejamos executar um mtodo ou manipular com o valor de uma propriedade de
qualquer componente a mesma regra aplicada, devemos utilizar o operador ponto para efetuarmos essas
operaes. O quadro abaixo ilustra a maneira atravs da qual poderemos manipular com esse operador
junto aos componentes do Delphi.

Sintaxe
Objeto.Propriedade := valor;
Objeto.Mtodo;

Exemplo
Button1.Caption := Ok;
Form1.Font.Size := 12;
Form1.BorderIcons.biSystemMenu := true; //Errado
Table1.Open;
Vamos observar a sintaxe apresentada no quadro acima. Observe que cada vez que desejamos manipular
com uma propriedade ou mtodo fazemos referncia inicialmente ao objeto e depois ao mtodo ou
propriedade que desejamos manipular. A referncia ao objeto feita atravs de seu nome. Uma vez que a
propriedade que esteja sendo manipulada possua subpropriedades, elas tambm podero ser manipuladas
atravs do operador ponto como ilustrado no exemplo acima. Contudo, devemos ter cuidado para no
tentarmos manipular com propriedades do tipo set como se elas fossem objetos, como o caso da
propriedade BorderIcons pertencente aos formulrios.

Pgina: 53

Delphi 5

4.2.2. Nomeando objetos


O Delphi como o prprio desenvolvedor necessita de uma forma atravs da qual poder manipular com as
propriedades e mtodos dos componentes dentro de uma aplicao. A maneira pela qual essa referncia
feita atravs do nome desses componentes. Cada componente dentro da aplicao, incluindo o prprio
formulrio, dever possuir um nome. A propriedade name a nica existente em todos os componentes
dentro do Delphi. Existem duas regras que devem ser seguidas durante a atribuio de nomes a cada objeto
existente na aplicao.
A primeira regra refere-se composio do nome do objeto. O nome de cada objeto no dever ser
composto por caracteres acentuados. Alm de no podermos utilizar caracteres acentuados, a utilizao de
espaos no permitida. Caso tentemos definir o nome de um componente utilizando qualquer um desses
caracteres no permitidos, o Delphi nos informar do erro conforme ilustrado ao lado. Observe que no
exemplo existem dois erros. O primeiro devido a tentativa de utilizar um caractere acentuado e o segundo
devido utilizao do espao em branco separando o nome do
componente. Ao invs disso, deveramos utilizar caracteres sem
acentuao e, em substituio ao espao em branco, poderamos ter
utilizado o caractere underscore, o que resultaria no nome
Formulario_Principal.
Um comentrio deve ser feito em relao atribuio de nomes aos componentes dentro de uma aplicao
Delphi. Uma vez atribudo um valor propriedade name de um componente que exiba ou contenha texto
como o caso de uma caixa de texto, um boto, ou o prprio formulrio, a propriedade desse componente
que contem o texto a ser exibido alterada automaticamente para conter o nome que foi atribudo ao
componente. No exemplo acima, caso atribussemos Formulrio_Principal propriedade name do
formulrio, tanto essa propriedade quanto a propriedade caption seriam alteradas. Um detalhe com relao
a esse comentrio est no fato de que essa atribuio s feita no caso da propriedade caption nunca ter
sido alterada. Uma vez que tenhamos alterado a propriedade caption e posteriormente venhamos a alterar a
propriedade name, essa alterao em nada modificar o valor previamente atribudo propriedade caption.
Um outro comentrio que deve ser feito est relacionado com a escrita de cdigo dentro da aplicao.
Lembre-se que, para manipularmos propriedades e mtodos dentro do Editor de Cdigo fazemos sempre
referncia ao nome do componente. Uma vez que j tenhamos escrito cdigo, manipulando com um
determinado componente, e desejemos alterar seu nome, o Delphi no ir varrer todo o cdigo da aplicao
para realizar essa alterao para ns. Cada ponto em que o nome desse componente ocorre deve ser
alterado de tal forma a que, na prxima compilao do aplicativo, nenhum erro ocorra.
A segunda regra que deve ser observada na atribuio de nomes a componentes de nossa aplicao se
refere unicidade desses nomes. O valor da propriedade name para cada componente dever identific-lo
unicamente dentro da aplicao. A princpio poderamos imaginar que, devido a essa regra, nenhum
componente poderia ter o nome idntico a um outro componente existente na aplicao, porm isso no
de todo verdade. Quando estamos tratando com formulrios sim, no podero existir dois formulrios com
os mesmos nomes, ou seja, os mesmos valores atribudos s suas propriedades name. J com os demais
componentes essa regra s aplicada para os componentes colocados no mesmo formulrio. Componentes
localizados em formulrios distintos podem possuir nomes idnticos uma vez que o Delphi os identificar
unicamente atravs da composio do nome do formulrio juntamente com o nome do componente como
mostrado no quadro abaixo.

Exemplo
Formulario_Principal.ButtonOK.Caption = OK;
FormCadCliente.ButtonOK.Caption := Confirma;

Observe no quadro acima os cdigos que poderiam ter sido escritos em um procedimento de evento
qualquer. Neles vemos a atribuio de valores propriedade caption de dois componentes distintos que
possuem o mesmo nome. Isso possvel uma vez que esses componentes esto localizados em formulrios
distintos. O exemplo dado acima tambm proveitoso para mostrar como podemos alterar valores de
propriedades de componentes localizados em outros formulrios que no aquele no qual o componente foi
colocado. Quando estamos escrevendo cdigo queira alterar propriedades ouexecutar mtodos de
componentes contidos no prprio formulrio no qual o procedimento de evento foi criado, opcional a

Pgina: 54

Delphi 5
colocao do nome do formulrio antecedendo o nome do componente que se deseja manipular. J quando
desejamos manipular com componentes contidos em outros formulrios, essa referncia obrigatria.

Exemplo
ButtonOK.Caption := OK; //Escrito no prprio formulrio
Formulario_Principal.ButtonOK.Caption = OK; //Escrito em outro.
ButtonOK.Caption := Confirma; //Escrito no prprio formulrio
FormCadCliente.ButtonOK.Caption := Confirma; //Escrito em outro.
Caption := Ttulo;

O ltimo exemplo mostra uma atribuio a uma propriedade sem referenciar o nome de qualquer
componente. Esse cdigo ir compilar e executar normalmente caso ele tenha sido escrito dentro de um
procedimento de evento associado a qualquer formulrio ou componente a ele pertencente. Nesse caso,
como no foi colocado a que componente ele est associado, o Delphi interpreta que o desenvolvedor est
fazendo referncia ao prprio formulrio para o qual o cdigo foi escrito. Ou seja, atravs desse cdigo
estaramos alterando o caption do formulrio. O motivo pelo qual o Delphi interpreta a codificao dessa
maneira melhor compreendida quando trabalharmos com os conceitos de Orientao a Objetos, por ora
devemos apenas nos lembrar das regras de atribuio de nomes aos componentes e de como podemos
utilizar esses nomes para escrever a codificao de nossos aplicativos.

4.2.3. Formulrios modais


Apesar da nomenclatura no ser muito comum, a ocorrncia e
exibio de formulrios modais bastante comum em
aplicaes desenvolvidas para o ambiente Windows. Um
exemplo que ocorre com muita frequncia durante a
exibio de caixas de dilogo nesses aplicativos. Por exemplo,
ao selecionarmos a opo Open localizada no menu File do
prprio Delphi, exibida a caixa de dilogo responsvel pela
abertura de arquivos a serem exibidos no Editor de Cdigo.
Enquanto essa caixa de dilogo permanecer aberta, ou seja,
sendo exibida, o desenvolvedor no pode voltar ao
desenvolvimento da aplicao utilizando as demais janelas da
IDE do Delphi. Isso ocorre porque a caixa de dilogo Open foi exibida de maneira modal. As janelas
exibidas de maneira modal tm como uma de suas caractersticas o fato de deterem o controle da execuo
da aplicao at que elas sejam fechadas. Apesar de serem muito comuns durante a execuo de caixas de
dilogo elas podem ocorrer em qualquer outra situao
dependendo, claro, da funcionalidade de cada janela dentro
da aplicao. A exibio de uma janela de forma modal
bastante simples, bastando para isso, a execuo de um
mtodo pertencente ao formulrio, o mtodo ShowModal.
Vamos construir um pequeno exemplo para ilustramos a
utilizao do mtodo ShowModal. Iniciemos, portanto, uma
nova aplicao e coloquemos um boto nesse formulrio
conforme ilustrado na figura ao lado. Alm do formulrio
principal para o nosso exemplo iremos precisar de um
segundo formulrio, formulrio esse que ser exibido de forma modal ao clicarmos no boto do Form1.
Esse segundo formulrio no precisa conter nenhum componente conforme ilustra a figura ao lado e pode
ser criado atravs da opo New Form contida no menu File. Resta-nos agora criar o procedimento de
evento associado ao evento OnClick do boto chamado Button1 e escrever o cdigo necessrio exibio
do formulrio chamado Form2. O processo de criao do procedimento de evento pode ser feito utilizando-

Pgina: 55

Delphi 5
se qualquer um dos mtodos descritos anteriormente e por isso no ser, de agora em diante, explicitado.
Em relao aos nomes dos componentes, por questes de praticidade, sero mantidos, porm, caso seja de
desejo do desenvolvedor alter-los essas alteraes devero ser feitas agora antes do incio da codificao
como foi discutido anteriormente. A codificao final para o procedimento de evento ser a mostrada a
seguir.

procedure TForm1.Button1Click(Sender: TObject);


begin
Form2.ShowModal;
end;

Antes de compilarmos e executarmos a aplicao vamos observar o cdigo acima. Nele podemos observar
um ponto importante relativo chamada do mtodo ShowModal. Uma vez que esse cdigo foi escrito a
partir de um procedimento de evento pertencente ao formulrio
Form1, ao fazermos referncia a um mtodo de um outro formulrio,
o Form2, essa referncia teve de ser feita utilizando-se a referncia
completa ao mtodo, incluindo o nome do formulrio que teria seu
mtodo executado, ou seja, o Form2. Caso no tivssemos colocado a
referncia ao Form2, a aplicao poderia ser compilada sem
problema algum, porm, ao invs de exibir o segundo formulrio ao
clicarmos no boto Button1, o aplicativo iria exibir o prprio Form1,
o que, em nosso caso particular iria provocar um erro que explicaremos posteriormente. Por ora vamos
apenas compilar a nossa aplicao.
Ao tentarmos compilar a nossa aplicao uma
mensagem de erro ser exibida como mostrado ao
lado. Esse erro ocorreu por uma razo bem simples
que, por incrvel que possa parecer, j foi explicada
anteriormente. Apesar de toda a codificao estar
correta esquecemos de um pequeno detalhe. No
procedimento de evento que acabamos de escrever tentamos executar um mtodo de um objeto que no
est localizado na unit corrente. Vimos que, todas as vezes que desejarmos utilizar qualquer definio
localizada em uma outra unit que no na que estamos codificando, uma referncia unit na qual essas
definies esto localizadas dever ser feita na clusula uses da unit sendo codificada. Foi exatamente isso
que aconteceu. Estamos nos referenciando a um objeto, o Form2, definido na unit2 a partir da unit1 sem ter
feito referncia a essa unit. Devemos ento adicionar unit2 clusula uses da unit1. Quando nos
referenciamos formulrios o Delphi exibe a caixa de dilogo mostrada ao lado permitindo que ele prprio
efetue essas alteraes para ns. No devemos, no entanto, nos habituar com isso, pois o Delphi s ir nos
ajudar nessas situaes, nas demais deveremos nos preocupar em incluir as units na clusula uses. Aps
clicarmos no boto Yes para adicionarmos a unit2 clusula uses da unit1 podemos compilar e executar a
aplicao e verificar o comportamento dos formulrios ao clicarmos no boto. Agora que j sabemos como
podemos exibir formulrios de forma modal vamos estudar como o Delphi capaz de exibir formulrio de
forma no modal.

4.2.4. Formulrios no modais


De forma idntica exibio modal, o Delphi exibe formulrios de forma no modal atravs da execuo
de um mtodo pertencente ao formulrio. Esse mtodo chama-se Show e executado de forma idntica ao
mtodo ShowModal visto anteriormente. Para ilustrarmos o funcionamento desse mtodo podemos
substituir o exemplo para que o formulrio Form2 passasse a ser exibido de forma no modal. Basta
alterarmos o cdigo escrito no procedimento de evento associado ao evento OnClick do boto para que isso
ocorra conforme mostrado abaixo.

Pgina: 56

Delphi 5

procedure TForm1.Button1Click(Sender: TObject);


begin
Form2.Show;
end;
Uma vez que compilemos a aplicao nenhum erro ir ocorrer uma vez que j havamos acrescentado a
unit2 clusula uses da unit1. Caso isso ainda no tivesse sido feito, deveramos faz-lo para que a
aplicao pudesse ser compilada e executada sem erros.
A exibio de formulrios de forma modal ou no modal pode ser feita de acordo com a vontade e
necessidade do desenvolvedor, no entanto, deve-se tomar cuidado para que erros no ocorram. Por
exemplo, caso tivssemos escrito o cdigo a seguir.
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show;
Form2.ShowModal;
end;

Ao executarmos a aplicao e clicarmos no boto, um erro


ir ocorrer conforme ilustrado ao lado ou, dependendo da
configurao do Delphi, o erro mostrado abaixo seria
exibido diretamente.
Esse erro deve-se ao fato de
exibirmos o formulrio de forma no modal e, logo em
seguida, tentarmos exib-lo de forma modal. Isso no possvel a menos que fechemos o formulrio antes
de tentarmos exibi-lo de outra maneira. Apesar do cdigo assima parecer pouco comum, e de fato , esse
erro pode ocorrer quando exibimos o formulrio a partir de procedimentos de eventos distintos. Devemos
sempre determinar como cada formulrio de nossa aplicao ser exibido e manter essa definio durante
todo o processo de desenvolvimento de forma a evitar que erros desse tipo venham a ocorrer.

4.2.5. Formulrios Modais versus no modais


Vimos at aqui em nosso estudo a respeito dos ormulrios que eles podem ser exibidos de forma modal ou
no modal. Existe uma diferena bsica entre esses dois tipos de exibio permitindo ou no que a
aplicao contine ou no podendo ser utilizada antes ou no do formulrio que foi exibido seja fechado.
Porm essa no a nica diferena existente entre
formulrios modais e no modais. Uma outra diferena
que existe que o mtodo show foi definido dentro do
Delphi como um procedimento enquanto que o mtodo
showmodal trata-se de uma funo. Veremos
posteriormente as diferenas existentes entre funes e
mtodos posteriormente, no momento basta sabermos que
uma funo retorna um valor enquanto que um
procedimento no. Dessa forma, sabemos que um formulrio exibido de forma modal capaz de retornar
um valor enquanto que um formulrio exibido de forma no modal no capaz de retornar um valor para o
ponto de onde esse mtodo foi executado. Observe que um mtodo uma denominao genrica tanto para
procedimentos quanto para funes.
Um ltimo aspecto que iremos observar est na forma como o cdigo de chamada desses dois mtodos
executado. Observe os dois cdigos apresentados abaixo.
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show;
ShowMessage(Ol);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form2.ShowModal;
ShowMessage(Ol);
end;
Pgina: 57

Delphi 5
Poderamos esperar que ambos os cdigos funcionassem da mesma maneira, porm isso no acontece. O
cdigo escrito para o evento OnClick do boto Button1 exibe o segundo formulrio e logo em seguida
exibe uma caixa de mensagem co o texto Ol. J o segundo procedimento, tambm exibe o segundo
formulrio mas s ir exibir a caixa de mensagem quando o Form2 for fechado. Podemos concluir que o
mtodo show no prende a execuo do programa uma vez que a caixa de texto exibida atravs do
procedimento ShowMessage foi executado antes mesmo do segundo formulrio ter sido fechado. No
entando, quando exibimos o segundo formulrio utilizando o mtodo ShowModal, a execuo do cdigo
relativo ao procedimento ShowMessage s executado ao fecharmos a caixa de mensagem.

5.Comandos da linguagem
Comeamos nossa caminhada no aprendizado do mundo Delphi atravs do estudo dos formulrios. J
temos conhecimento de uma propriedade do formulrio, a propriedade name, e de dois mtodos, show e
showmodal, responsveis pela exibio dos formulrios. No entanto, para continuarmos o nosso estudo e
sermos apresentados a outras propriedades e mtodos devemos aprender os principais comandos da
linguagem Object Pascal. Essa apresentao faz-se necessria principalmente para podermos ilustrar com
exemplos mais teis cada uma dessas propriedades e mtodos.

5.1.

Instrues Simples e Compostas


J utilizamos, apesar de no ter sido explicitamente fornecida a definio, vrias instrues, ou comandos,
dentro do cdigo de um procedimento de evento. Existem dois tipos de instrues que podem ser escritas
dentro de uma codificao Delphi, so elas instrues simples e instrues compostas.
As instrues simples so aquelas que possuem em sua codificao apenas um nico comando. Lembremos
que todo comando escrito em Object Pascal finalizado por um ; (ponto-e-vrgula). Os exemplos abaixo
ilustram instrues simples.

procedure TForm1.Button1Click(Sender: TObject);


begin
x := x + 1;
Form2.ShowModal;
ShowMessage(Ol);
end;

Observe que, no exemplo dado, existem trs comandos simples, todos eles dentro do mesmo procedimento.
Devemos sempre nos lembrar que as instrues dentro do cdigo Object Pascal, independentemente de
serem simples ou compostas, devem ser escritas dentro de procedimentos ou funes, portanto no
podendo ocorrer espalhadas no meio da unit.
O segundo tipo de instruo, as intrues compostas, possuem em geral mais de uma instruo simples
associada a ela. Apesar de no ser muito comum, instrues compostas podem conter uma nica instruo
simples em seu corpo. As instrues compostas so delimitadas por um bloco composto pelas palavras
reservadas begin e end e finalizadas por um ; (ponto-e-vrgula) de forma semelhante delimitao de
um procedimento de evento visto no exemplo acima. No entanto, uma instruo composta vem no corpo
desses procedimentos como se fosse uma instruo simples conforme o exemplo a seguir.
procedure TForm1.Button1Click(Sender: TObject);
begin
x := x + 1;
begin
Form2.ShowModal;
ShowMessage(Ol);
end;
end;

Pgina: 58

Delphi 5
Como podemos observar, uma instruo composta possui em seu corpo uma ou vrias instrues simples e,
pode at mesmo, possuir outras instrues compostas. Apesar de no ser to perceptvel nesse momento a
finalidade de estarmos utilizando instrues compostas elas so muito teis no desenvolvimento de
aplicaes uma vez que as intrues, simples ou no, contidas em uma instruo composta, so
consideradas pelo compilador como uma nica instruo simples. As instrues compostas so largamente
utilizadas no isoladamente como no exemplo anterior mas como parte de intrues mais complexas,
compondo as instrues condicionais e de laos, ou de repetio, que sero vistas a seguir.

5.2.

Instrues Condicionais
As instrues condicionais so aquelas que determinam o fluxo de execuo do programa atravs da
verificao de uma condio booleana. No Delphi existem dois tipos de instrues booleanas, a instruo if
e a instruo case.

5.2.1. If
A instruo if uma das instrues mais comuns nas linguagens de programao existindo at na
linguagem assembler e, como no poderia deixar de ser, tambm existe no Object Pascal. No quadro
abaixo ilustramos as duas formas bsicas que o comando if pode aparecer um um programa escrito em
Object Pascal acompanhado de alguns exemplos.

Sintaxe
If <condio> then <instruo> ;
if <condio> then <instruo> else <instruo>;

Exemplos
if x >= y then ShowMessage(Limite ultrapassado) ;
if odd(x) then ShowMessage(O nmero mpar)
else ShowMessage(O nmero par);
if (x > 0) and (x < 10) then x := x + 1;
If (x > 3) and (y <= 5 ) then
Begin
x := x 1;
y := y + 1;
End
Else
x := x + 1;
If x >= y then
If x = y then
ShowMessage(X igual a Y)
Else
ShowMessage(X maior do que Y)
Else
ShowMessage(X menor do que Y);

Como podemos observar no quadro acima, a instruo if possui, basicamente, duas formas. A primeira
delas constituda apenas da instruo if seguida da instruo a ser realizada no caso da condio booleana
a ser testada resulte em um valor verdadeiro enquanto que a segunda permite que tanto uma intruo seja
realizada no caso do resultado da condio ser verdadeira quanto no caso dela ser falsa. Um detalhe
extremamente importante relacionado com a instruo if e que resulta em muitos erros principalmente para

Pgina: 59

Delphi 5
pessoas inexperientes com o Delphi que a instruo que precede o else no deve ser terminada com um
ponto-e-vrgula ao contrrio do que acontece com as demais instrues da linguagem.
Um segundo ponto a ser observado no exemplo acima a possibilidade de termos comandos if aninhados,
ou seja, uns dentro dos outros conforme mostrado no ltimo exemplo dado acima. Um outro ponto que
pode ser observado atravs dos exemplos que a instruo a ser executada tanto pelo comando if no caso
da condio ser verdadeira quanto pelo else no caso dela ser falsa, pode ser tanto uma instruo simples
quanto ums instruo composta. Observe o exemplo a seguir.

Exemplos
if (x >= y) and (y < 10) then
x := x - 1;
y := y + 1;
if (x >= y) and (y < 10) then
begin
x := x - 1;
y := y + 1;
end;

Os exemplos apesar de semelhantes tm execues diferentes. No primeiro exemplo, a primeira instruo


s ser executada no caso do resultado da expresso booleana for verdadeira enquanto que a segunda
instruo ser executada independentemente do resultado da expresso booleana. J no segundo exemplo,
ambas as instrues sero executadas apenas no caso do resultado ser verdadeiro. Essa a principal
finalidade das instrues compostas, agrupar instrues a serem executadas em instrues condicionais e
de repetio.

5.2.2. Case
A medida em que vamos escrevendo instrues ifs aninhadas elas vo tendo seu entendimento cada vez
mais complexo, dificultando o desenvolvimento e a manuteno do cdigo escrito. Em substituio
escrita de ifs aninhados, o Object Pascal oferece a instruo case. A instruo case permite, da mesma
maneira que a instruo if, o controle condicional relativo ao fluxo do programa, porm esse controle
feito de forma mais clara e, em muitos compiladores, de forma mais eficiente em relao ao cdigo gerado.

Sintaxe
Case <Seletor>
<Rtulo 1> :
<Rtulo 2> :
<Rtulo n> :

Then
<Instruo 1> ;
<Instruo 2> ;
<Instruo n> ;

end;
Case <Seletor> Then
<Rtulo 1> : <Instruo 1> ;
<Rtulo 2> : <Instruo 2> ;
<Rtulo n> : <Instruo n> ;
else
<InstruoOutroCaso>;
end;

Exemplos
Case Caractere Then
a : ShowMessage(Caractere invlido) ;
b, c, d : begin
x := x + 1;
Soma := x + y;

Pgina: 60

Delphi 5
end;
e..z :;

end;
Case Nota Then
0 : Texto := Reprovado ;
1..5 : Texto := Recuperao ;
6..9 : Texto := Aprovado ;
10 : Texto := Parabens;

end;
Observemos o quadro anterior. Nele est sendo mostrado as duas sintaxes possveis para a escrita de uma
instruo case dentro de um programa em Object Pascal. Em ambos os casos, a instruo case utilizada
para executar uma instruo, simples ou composta, dependendo do valor do seletor passado. O seletor ser,
na grande maioria dos casos, uma varivel cujo valor deseja-se ser testado. Um detalhe a ser observado na
utilizao da instruo case est na restrio da utilizao de tipos de variveis como seletores para uma
instruo case. O Object Pascal s permite que sejam utilizados seletores de tipos de dados ordinais. Dessa
forma, no so permitidos, por exemplo, a utilizao de seletores do tipo string nem de ponto flutuante.
Um fato interessante relacionado instruo case aparece nos rtulos que podem ser utilizados dentro da
instruo. Nos exemplos fornecidos podemos observar que podem ser utilizados desde valores simples,
valores mltiplos, ou at mesmo uma faixa de valores a serem testados. Caso nenhum dos valores definidos
pelos rtulos do comando case represente o valor fornecido pelo seletor da instruo poder ser definido
dentro da instruo, um rtulo else que ser executado nessas situaes. Ou seja, o else dentro de uma
instruo case identifica as instrues a serem executadas no caso de nenhum dos rtulos fornecidos. O
else opcional dentro de uma instruo case.

5.3.

Estruturas de Repetio
As instrues que vimos at agora so bastante teis durante o desenvolvimento de uma aplicao. No
entanto existem ainda algumas outras instrues que permitem o controle do fluxo de execuo do
programa de forma repetitiva e no s de forma sequncial baseada em uma condio booleana como
acontecia com as instrues condicionais. Por isso, iremos dar incio ao estudo das instrues do Object
Pascal responsveis pelo controle do fluxo de execuo de um programa atravs da repetio de suas
instrues com base em condies booleanas.

5.3.1. For
A primeira instruo de repetio que iremos estudar a instruo for. Essa instruo amplamente
utilizada quando desejamos repetir uma ou um conjunto de intrues por um determinado nmero fixo de
vezes. Por esse motivo, a intruo for utiliza-se de um contador para determinar se essa quantidade de
interaes que o lao dever realizar j foi atingido ou no.
Sintaxe
for <Contador := <Valor1nicial> to <ValorFinal> do
<Instruo>;
for <Contador := <Valor1nicial> downto <ValorFinal> do
<Instruo>;

Exemplos
for Cont := 1 to 10 do
Acum := Acum + Cont;
for Cont := 10 downto 1 do
Acum := Acum + Cont;
for Cont := 1 to 10 do
begin
Acum := Acum + Cont;
ShowMessage(IntToStr(Acum));
End;
for Cont := 1 to 10 do
Cont := Acum + Cont; //Errado

O quadro acima mostra as duas sintaxes possveis para a instruo for. As duas funcionam da mesma
maneira diferenciando-se uma da outra unicamente pela forma como o contador utilizado. Na primeira
sintaxe apresentada, o contador incrementado a cada interao do lao. J na segunda, o contador

Pgina: 61

Delphi 5
decrementado. Os exemplos apresentados permitem verificar que podem compor a instruo for tanto
instrues simples quanto compostas. Essa caracterstica se repete para as demais instrues de repetio e
por isso no mais repetiremos essa afirmao a menos que exista alguma diferena de comportamento.
Dois pontos importantes dever ser observados em ambas as sintaxes utilizadas para a instruo if. O
primeiro deles que o contador utilizado no lao uma varivel local ao procedimento no qual o lao est
sendo executado. O segundo ponto importante que a varivel a ser utilizada como contador para o lao
for no pode ser alterada dentro do lao como mostrado no exemplo. A tentativa de alterar o seu contedo
resulta em erro durante a compilao do aplicativo, funo do prprio Object Pascal incrementar ou
decrementar o contador deixando o desenvolvedor livre dessa preocupao.

5.3.2. While
A segunda instruo de repetio que iremos estudar a instruo while. Essa instruo, de forma
semelhante ao que acontecia com a instruo for tem sua execuo controlada por uma condio booleana
s que, ao invs da condio ser analisada em relao a um contador, a condio booleana a ser avaliada
pode ser uma expresso booleana qualquer.
Sintaxe
while <Condio> do
<Instruo>;

Exemplos
while Cont < 10 do
Cont := Acum + Cont;
while Cont < 10 do
Acum := Acum + Cont; //Cuidado -> Loop infinito
while Cont < 10 do
begin
Acum := Acum + Cont;
Cont := Cont + 1;
end;

A sintaxe utilizada pela instruo while bastante simples como pode ser observado no quadro acima. Para
que o fluxo de execuo do programa passe a executar a intruo do lao while basta que a condio
declarada seja verdadeira. Uma vez em execuo, as instrues contidas no lao s deixaram de ser
executadas quando a condio do lao se tornar falsa. Uma vez que a varivel de controle do lao no
mais controlada automaticamente, funo do desenvolvedor evitar que erros ocorram em relao
atualizao dessa varivel. No exemplo acima, mostramos a ocorrncia de um loop infinito. Caso o
desenvolvedor escreva equivocadamente o cdigo apresentado, uma vez que o lao comece a ser executado
ele nunca ser finalizado, o que muito provavelmente estar errado. O ltimo exemplo mostra que sempre
devemos alterar, de alguma forma, o valor das variveis que controlem o lao while, para garantir que esse
termine e o processamento do aplicativo continue normalmente.

5.3.3. Repeat
A ltima instruo de repetio que iremos estudar a instruo repeat. Essa instruo assemelha-se
bastante instruo while vista anteriormente salvo algumas diferenas que sero vistas posteriormente.
Vamos, ento, observar a sintaxe utilizada para a instruo repeat juntamente com alguns exemplos.
Sintaxe
Repeat
<Instruo>;
Until <Condio>;

Exemplos
Repeat
Acum := Acum + Cont;
Cont := Cont + 1;
Until Cont >= 10;
Repeat
Acum := Acum + Cont;
Until Cont >= 10; //Cuidado -> Pode ser um lao infinito
Cont := 1;
Repeat
Acum := Acum + Cont;

Pgina: 62

Delphi 5
Until Cont >= 10; //Cuidado -> Lao infinito

A instruo repeat tambm possibilita a execuo de instrues tendo como base uma condio booleana.
No entanto, ao contrrio do que acontecia com a instruo while, as instrues contidas na instruo repeat
permanecero em execuo enquanto a condio do lao permanecer falsa, ou seja, o lao termina quando
a condio testada passa a retornar o valor verdadeiro. Essa exatamente a primeira diferena existente
entre a instruo repeat e a instruo while. Uma segunda diferena entre esses dois comando est na
necessidade da determinao de um bloco de comando para que mltiplas instrues sejam executadas
dentro do lao. Quando utilizamos a instruo while devemos utilizar begin e end para determinar o bloco
de comandos a serem executados dentro dessa instruo. J com o comando repeat isso no necessrio. A
prpria instruo repeat tem seu trmino determinado pela palavra reservada until indicando quais
instrues devem ser executadas pelo lao. Por fim, uma outra diferena entre essas duas instrues est no
fato da instruo repeat ser sempre executada pelo menos uma vez enquanto que a instruo while poder
ou no ser executada. Esse comportamento deve-se ao fato da condio da instruo while ser testada no
incio do lao enquanto que a condio da instruo repeat s ser testada no final.
Os exemplos acima mostram tanto a correta utilizao da instruo repeat quanto alguns erros que podem
acontecer ao utilizarmos essa instruo. Por se tratar de uma instruo de repetio semelhante instruo
while, devemos tambm nos preocupar com a manipulao das variveis que controlam a sua execuo
para evitar a ocorrncia de um lao infinito.No segundo exemplo, a instruo repeat poder provocar a
execuo de um lao infinito dependendo do valor que foi atribudo inicialmente varivel cont. J no
ltimo exemplo, um lao infinito ir ocorrer devido ao fato do valor inicial que foi atribudo varivel no
ser alterado durante a execuo do lao.

5.4.

Comandos de Desvio de Fluxo Padro


As instrues de controle do fluxo de execuo estudadas at aqui podem ter sua seqncia de execuo
alterada permitindo, por exemplo, a sada antecipada de um lao. Para que isso seja possvel o Object
Pascal dispe de um conjunto de instrues capazes de alterar a seqncia de execuo de cdigo tanto no
nvel das instrues de repetio quanto at de execuo do prprio aplicativo. A seguir enumeramos as
principais instrues existentes no Object Pascal bem como suas funcionalidades.

5.5.

BREAK: Este comando serve para forar a sada de qualquer estrutura de repetio.
Independentemente da condio ou do valor do contador, no momento em que a execuo do
aplicativo atinge esta instruo, o fluxo de execuo passa para a primeira instruo aps o lao.

CONTINUE : Age, tambm no lao, de maneira oposta a Break, levando o fluxo de processamento
de volta primeira linha da estrutura de repetio. Porm, ao chegar nessa linha o contador,
no caso de um lao for incrementado e, logo em seguida, o teste responsvel pelo controle do
lao novamente testado de tal forma a verificar se ele deve ou no ser executado mais uma vez.

EXIT : O comando exit semelhante ao comando break visto anteriormente, porm ao contrrio de
forar o fluxo de execuo a sair do lao no qual ele se encontrava, o comando exit utilizado
para forar a sada de um procedimento ou funo. O fluxo de execuo ao invs de ser
passado para a instruo seguinte ao lao ele passado para o procedimento ou funo
chamadora de onde ele foi chamado.

HALT : necessrio muito cuidado com o uso deste comando uma vez que ao ser executado, o
comando halt encerra o aplicativo imediatamente, deixando, por exemplo, ainda abertos quaisquer
arquivos que tenham sido abertos pela aplicao entre outras.

Instruo With (Mtodo de Taquigrafia)


Vimos at aqui as principais instrues responsveis pelo controle do fluxo de execuo de um aplicativo
escrito em Object Pascal. Alm de instrues de tomada de deciso e de repetio, o Delphi dispe de
outros tipos de instrues tais como a instruo with.
A instruo with no possui qualquer influncia no fluxo da execuo de aplicativos, ela tem o nico
objetivo de melhorar o cdigo escrito nesses aplicativos propiciando uma diminuio do cdigo escrito e
melhorando seu entendimento.

Sintaxe

Pgina: 63

Delphi 5
with <objeto/varivel> do
<Instruo>;

Exemplos
Funcionario.Nome := Andr;
Funcionario.Idade := 26;
Funcionario.Cargo = Analista de Sistemas;

Form1.Font.Size := 16;
x := x + 1;
Form1.Font.Style := [ ];
Form1.Font.Color := clBlue;

with Funcionario do
begin
Nome := Andr;
Idade := 26;
Cargo = Analista de Sistemas;
End;
with Form1.Font do
begin
Size := 16;
x := x + 1;
Style := [ ];
Color := clBlue;
end;

O quadro acima mostra a sintaxe que deve ser utilizada quando desejarmos utilizar a instruo with.
Observe que, como parte da instruo, podemos utilizar tanto um objeto quanto uma varivel. Essas duas
possibilidade tambm esto ilustradas no quadro acima. No primeiro exemplo temos a utilizao de uma
varivel, previamente declarada na seo var, chamada Funcionrio. Essa varivel tem como seu tipo
TFuncionario, declarado anteriormente quando explicamos o tipo de dados Record. No exemplo temos
tanto o cdigo utilizado sem a instruo with como com ela. Observe que, ao utilizarmos a instruo with
no precisamos colocar, antes de cada campo da estrutura, a varivel que estava sendo manipulada.
Alm da utilizao de variveis do tipo record, mostrada no primeiro exemplo, a instruo with tambm
pode ser utilizada com objetos. O segundo exemplo apresentado, ilustra essa situao. Nele manipulamos
com propriedades do objeto Font, que por sua vez pertence ao objeto Form1. Com esse exemplo podemos
tambm observar que podemos, dentro da instruo with, manipular com vrios nveis de definies de
objetos. Tambm nesse ltimo exemplo podemos observar que nem todas as intrues contidas na
instruo with necessitam obrigatoriamente tratar com propriedades ou campos pertencentes ao objeto, ou
varivel, sendo manipulado. Nesse exemplo, temos uma intruo responsvel pelo incremento da varivel
x, declarada anteriormente em uma seo var. O compilador duarnte a fase de compilao do aplicativo,

identifica que essa varivel no pertence ao objeto sendo manipulado e verifica se existe uma varivel x
que tenha sido declarada anteriormente. Caso exista, a compilao feita normalmente, caso contrrio uma
mensagem de erro retornada na parte inferior do Editor de Cdigo informando o erro conforme ilustrado
na figura abaixo.

6.Manipulando Formulrios
Iniciamos os nossos estudos trabalhando com os formulrios. Vimos como eles podem ser exibidos atravs
de dois de seus mtodos e as diferenas entre a exibio de formulrios modais e no modais. No entanto,
demos uma parada nesse estudo de tal forma a aprendermos alguns dos comandos existentes no Delphi
responsveis pela determinao do fluxo de execuo de nossos aplicativos. Essa para foi de extrema
importncia uma vez que, no decorrer de nosso aprendizado do Delphi, necessitaremos desses comandos
para podermos escrever aplicativos que faam algo mais do que simplesmente exibir uma caixa de dilogo
ou um formulrio. De agora comearemos a aprender um pouco mais sobre os formulrios aprendendo
novas propriedades, mtodos e eventos teis. Devemos ressaltar que no iremos abordar, no decorrer de
nosso estudo, todas as propriedades que os componentes que iremos estudar apresentam uma vez que, se
isso fosse feito, seria impossvel terminarmos esse estudo. Essa mesma observao tambm vlida tanto
para os mtodos quanto para os eventos de cada componente a ser estudado. Alm disso, alguns
componentes apresentam propriedades em comum, nesses casos no iremos abordar essas propriedades
todas as vezes que elas ocorrerem, apenas em sua primeira ocorrncia.

Pgina: 64

Delphi 5

6.1.

Principais propriedades
Vamos ser apresentados agora s principais propriedades de um formulrio. Antes de comearmos
devemos saber que j conhecemos a propriedade name que aparece em todos os componentes do Delphi e
que, a alterao do valor dessa propriedade, uma das primeiras coisas a ser feita ao iniciarmos o
desenvolvimento de uma aplicao, no caso da propriedade name do formulrio, ou ao colocarmos um
componente qualquer no formulrio.
Com o objetivo de ilustrarmos a funcionalidade das principais propriedades do formulrio, ns iremos
construir um pequeno aplicativo, no incio com pouca ou mesmo nenhuma funcionalidade, apenas para que
possamos observar o comportamento de cada propriedade a ser estudada. Em seguida, vamos resumir a
utilizao de cada propriedade em um quadro ilustrativo. Dessa forma, vamos comear uma nova aplicao
atravs da seleco da opo New Application, localizada no menu File. Caso tenhamos feito alguma
alterao na aplicao atual, o Delphi ir nos perguntar se desejamos salvar ou no essas alteraes. Para
salvarmos basta selecionarmos o boto Yes e darmos nomes tanto s units quanto prpria aplicao como
j visto anteriormente.
Uma vez que tenhamos criado uma nova aplicao vamos colocar alguns componentes em seu formulrio
principal. Ser necessrio um componente button e
dois componentes edit conforme mostrado na figura ao
lado. Podemos observar que colocamos um dos
componentes edit, propositadamente, em um local que
ele no possa ser visto completamente dentro do
formulrio, isso no tem importncia agora uma vez
que estamos simplesmente querendo ilustrar algumas
das propriedades do formulrio. Uma vez que
tenhamos colocado esses componentes vamos alterar
algumas das propriedades do formulrio e depois
vamos criar dois procedimentos, o primeiro associado
ao evento OnClick desse formulrio e no do boto
como poderamos pensar inicialmente, e o segundo
associado ao evento OnClick do boto. Comecemos pela alterao de algumas das propriedades do
formulrio.
A primeira propriedade que iremos modificar a propriedade AutoScroll, trocando o valor true pelo valor
false. Ao fazermos isso podemos observar uma mudana no visual do formulrio. Agora, a barra de
rolagem que existia no rodap do formulrio desapareceu. A propriedade AutoScroll responsvel por
definir se o formulrio ir ou no exibir automaticamente barras de rolagem no caso de serem colocados
componentes em regies fora da rea de exibio de um formulrio. Essa propriedade importante quando
queremos desenvolver aplicaes que possuam uma quantidade excessiva de componentes em seus
formulrios. Um fato importante que pudemos observar que, ao alterarmos o valor da propriedade
AutoScroll, o efeito da alterao refletido direta e imediatamente na aplicao sendo desenvolvida,
mesmo estando ainda em sua fase de desenvolvimento dentro da IDE do Delphi. Devemos ter cuidado
porque muitas outras propriedades, ao terem seus valores alterados, s permitem a visualizao dos efeitos
da alterao durante a execuo do aplicativo e no dentro da prpria IDE.
A segunda propriedade que iremos alterar a propriedade BorderIcons. Observe que essa propriedade do
tipo set e apresenta como itens quatro valores distintos: biSystemMenu, biMinimize, biMaximize e biHelp.
Vamos alterar essa propriedade de tal forma que ela s possua os elementos biSystemMenu e biHelp ativos,
ou seja, com valor true atribudo a esses itens enquanto que as demais iro possuir o valor false. Ao
contrrio do que aconteceu com a propriedade AutoScroll, ao alterarmos a propriedade BorderIcons no
observamos qualquer alterao no formulrio. Isso porque as alteraes realizadas na propriedade
BorderIcons s so percebidas quando a aplicao estiver sendo executada e no dentro da IDE do Delphi.
Esse comportamento tambm bastante comum entre as propriedades no s do formulrio mas tambm de
muitos outros componentes.
Uma outra propriedade que iremos alterar neste nosso exemplo a propriedade BorderStyle. Observe que
essa propriedade uma propriedade que possui uma srie de valores possveis a serem atribudos a ela, so
eles: bsDialog, bsSingle, bsNone, bsSizeable, bsToolWindow e bsSizeToolWin. Esses so os valores
possveis, definidos a partir de um tipo de dados enumerado chamado TFormBorderStyle, criado no Delphi
conforme mostra a ajuda on-line mostrada ao lado. Com isso j sabemos que, no caso de desejarmos alterar
o valor dessa propriedade em tempo de execuo, ou seja, atravs de cdigo escrito utilizando Object

Pgina: 65

Delphi 5
Pascal, a atribuio dever ser feita diretamente utilizando-se um desses valores, no podendo, portanto, ser
utilizadas aspas ou qualquer outro delimitador. Daremos um exemplo posteriormente de como poderemos
fazer tal codificao. Por ora vamos alterar o valor dessa propriedade para bsSingle.
A propriedade Caption a propriedade do formulrio mais alterada no desenvolvimento de aplicaes.
Vamos alter-la tambm de tal forma a ela possuir o valor Meu primeiro exemplo. Observe que a medida
em que vamos digitando, o texto contido na barra de ttulo do formulrio vai se modificando de tal forma a
conter exatamente o texto sendo digitado. Antes mesmo de executarmos a aplicao j sabemos qual a
finalidade dessa propriedade dentro de um formulrio.
Por fim vamos alterar os valores contidos em trs propriedades do formulrio. So elas a propriedade
FormStyle, a propriedade Icon e a propriedade WindowState. A propriedade Icon contm um objeto do tipo
TIcon e por isso sua atribuio dentro do Editor de Cdigo do Delphi no pode ser feita de modo to
imediato quanto pode ser feito com valores de tipos bsicos, sets ou mesmo enumerados. So necessrios
alguns cuidados adicionais como a criao do objeto entre outros, que sero vistos posteriormente quando
estivermos trabalhando com os conceitos de orientao a objetos. Porm, quando definimos os valores para
essas propriedades atravs do Object Inspector, o Delphi encarrega-se desses detalhes para o
desenvolvedor. Para selecionarmos um valor para a propriedade Icon devemos clicar o boto que aparece
no Object Inspector ao selecionarmos essa
propriedade. Ser exibida a caixa de dilogo Picture
Editor,
mostrada ao lado, que ir permitir que selecionemos
um arquivo
que contm um cone a ser exibido para este
formulrio.
Para definirmos o cone a ser utilizado devemos
clicar
o
boto Load, selecionar o arquivo e, em seguida clicar
no boto
Ok. Em nosso exemplo vamos selecionar o arquivo
factory.ico, localizado no diretrio c:\Arquivos de
Programas\Arquivos
Comuns\Borland
Shared\Images\Icons. Observe que ao selecionarmos
o arquivo e
clicarmos o boto Ok na caixa de dilogo Picture
Editor, o
cone localizado no canto superior esquerdo do
formulrio
alterado para exibir o cone selecionado. Devemos lembrar que ao alterarmos o cone do formulrio,
mesmo que esse cone seja o cone do formulrio principal da aplicao, no estamos alterando o cone da
aplicao, que mostrado quando a minimizamos, mas sim o cone do prprio formulrio. Para alterarmos
o cone da aplicao devemos faz-lo atravs da caixa de dilogo Project Options mostrada anteriormente.
J as duas outras propriedades, FormStyle e WindowState, so propriedades de tipos enumerados que
possuem os valores fsMDIChild, fsMDIForm, fsNormal e fsStayOnTop para a primeira propriedade e
wsMaximized, wsMinimized e wsNormal para a segunda. A propriedade FormStyle responsvel pela
definio do tipo de formulrio a ser exibido pela aplicao. Dependendo de qual o valor atribudo a essa
propriedade o formulrio ter um comportamento diferente dentro da aplicao. Dos valores possveis o
mais comum fsNormal que indica um comportamento normal para o formulrio, ou seja, indica que o
formulrio pertence a uma aplicao SDI (Simple Document Interface), tais como o prprio Delphi por
exemplo. Alm das aplicaes SDI temos tambm as aplicaes MDI (Multiple Document Interface) como,
por exemplo, o Microsoft Word at a sua verso para o Office 97. Vamos alterar o valor da propriedade
FormStyle para fsStayOnTop. Novamente no observamos qualquer alterao no formulrio dentro da IDE
do Delphi.
A ltima propriedade que iremos abordar pertencente ao formulrio a propriedade WindowState.
Podemos perceber a funcionalidade dessa propriedade sem ao menos alter-la uma vez que os valores que
podemos atribuir a ela j nos do uma idia de sua funcionalidade. Essa propriedade responsvel pela
definio do estado do formulrio, determinando se ele est minimizado, maximizado ou normal. Para
ilustrarmos a utilizao dessa propriedade vamos criar um procedimento de evento associado ao evento
OnClick do boto. Esse procedimento dever ter o cdigo mostrado abaixo.
procedure TForm1.Button1Click(Sender: TObject);
begin
WindowState := wsMaximize;
end;
O cdigo acima ilustra dois pontos importantes da programao utilizando o Object Pascal. O primeiro
refere-se a atribuio de valores a variveis de tipos enumerados. Como j havia sido mencionado
anteriormente, a atribuio feita diretamente, sem a utilizao de aspas ou qualquer outro identificador. O

Pgina: 66

Delphi 5
segundo ponto est na atribuio do um valor a uma propriedade que aparentemente no pertence a
nenhum objeto. Como isso possvel uma vez que vimos que para manipularmos tanto com propriedades
quanto mtodos de objeto deveramos fazer uso do operador pornto? Em nosso exemplo isso no est
sendo feito. No informamos que WindowState uma propriedade do objeto Form1, porm veremos que
tanto o Delphi ir compilar a aplicao quanto ir execut-la corretamente.
Alm de criarmos um procedimento de evento para o evento OnClick do boto tambm iremos criar um
outro para o evento OnClick do formulrio como j havia sido informado no incio desta seo. Esse
procedimento ter por finalidade mostrar o funcionamento de duas das propriedades do formulrio vistas
nesta seo. Ao criarmos o procedimento deveremos escrever o cdigo mostrado a seguir.
procedure TForm1.FormClick(Sender: TObject);
begin
ShowMessage(ActiveControl.Name);
if BorderStyle = High(BorderStyle) then
BorderStyle := Low(BorderStyle)
else
BorderStyle := Succ(BorderStyle);
end;
Observe que o cdigo escrito acima faz uso de um procedimento e de uma funo. O procedimento
ShowMessage, como j sabemos, exibe uma caixa de dilogo contendo a string passada como parmetro.
Em nosso exemplo, passamos como parmetro a string definida na propriedade name do objeto contido na
propriedade ActiveControl do formulrio. Parece complicado? Pode parecer, mas na realidade bastante
simples e ficar mais simples ainda quando compilarmos e executarmos o nosso exemplo. Por ora vamos
falar das funes Succ, High e Low que tambm utilizamos no cdigo acima. Essas funes so utilizadas
para manipularmos com variveis e propriedades de tipos ordinais. Lembre-se que tipos ordinais possuem
esse nome por determinarem uma ordenao sobre os valores que constituem esse tipo. A funo succ no
faz nada mais do que retornar o prximo valor de uma varivel ou propriedade de um tipo ordinal. J as
funes high e low so utilizadas para informar os maiores e menores valores de um tipo ordinal qualquer.
O quadro abaixo mostra algumas das funes existentes para a manipulao de tipos ordinais.
Funo

Parmetro

Finalidade

Ord

Expresso ordinal

Valor da expresso ordinal

Pred

Expresso ordinal

Ordinal anterior referente ao resultado da expresso

Succ

Expresso ordinal

Ordinal posterior referente ao resultado da expresso

High

Tipo ordinal

Maior valore referente ao tipo ordinal passado como parmetro

Low

Tipo ordinal

Menor valore referente ao tipo ordinal passado como parmetro

Uma vez que j falamos rapidamente a respeito do cdigo escrito para esse aplicativo vamos compil-lo e
executa-lo para que possamos entender melhor tanto o cdigo escrito quanto as propriedades que ele
manipula. Para isso ou selecionamos a opo Run
contida no menu Run, ou utilizamos o speedbutton
contido na Barra de Ferramentas do Delphi, ou ainda
utilizamos a tecla de atalho F9. Ao executarmos a
aplicao, o formulrio principal da aplicao ir
aparecer na tela como mostra a figura ao lado.
Lembre-se que ns codificamos alguns eventos dessa
aplicao e por isso vamos testar o que cada um desses
eventos ir fazer quando for disparado. Vamos
comear pelo evento associado ao clique do boto. Ao
clicarmos o boto o formulrio maximizado. Isso
ocorre devido a atribuio do valor wsMaximize a essa
propriedade. Neste exemplo fizemos uma atribuio
propriedade WindowState, contudo poderamos ter apenas consultado esse valor para realizarmos uma
outra operao qualquer.

Pgina: 67

Delphi 5
O primeiro evento que vimos nesse exemplo no tinha muita utilidade, servia apenas para ilustrar uma
atribuio de um valor a uma propriedade em tempo de execuo. J o segundo evento que foi tratado
mais interessante. Antes de clicarmos no formulrio para testarmos o segundo evento, vamos retornar o
formulrio para seu tamanho original. Porm em nossa aplicao no existe o boto para que a janela
retorne ao seu tamanho normal. Isso acontece devido alterao que fizemos na propriedade BordeIcons
do formulrio. Cada item dessa propriedade identifica quais sero os botes que estaro disponveis em
tempo de execuo para o formulrio em questo. Em nosso exemplo disponibilizamos apenas os botes de
sistema (biSystemMenu) e de ajuda (biHelp).
Uma observao importante necessria ao tratarmos com a propriedade BorderIcons. Lembre-se que esta
propriedade do tipo set, ou seja, ela pode possuir uma seqncia de valores de forma arbitrria. Os
valores que ela ir conter indicam quais o botes que estaro disponveis no formulrio, porm mesmo que
todos os botes seja colocados disposio nem todos eles estaro visveis ao mesmo tempo como poderia
ser esperado. Por exemplo, caso removamos o boto biSystemMenu, nenhum outro boto ficar visvel no
formulrio independentemente deles estarem ou no definidos na propriedade. Um outro exemplo o boto
biHelp. Esse boto s ficar visvel no caso de tanto o boto biMaximize quanto biMinimize estarem
desabilitados. Essa foi exatamente a situo de nossa aplicao. Alm disso, outras propriedade afetam a
exibio desses botes como o caso da propriedade BorderStyle como ser visto adiante.
Uma vez que no temos o cone para retornar o formulrio ao seu tamanho
original, devemos dar um duplo clique em sua barra de ttulo. Agora sim, que j
estamos com o formulrio em seu tamanho original, podemos continuar a
manipular o nosso aplicativo. Vamos clicar no formulrio de tal forma a executar
o procedimento de evento associado. Ao fazermos isso, uma caixa de dilogo
exibida mostrando o nome do componente Button1 conforme mostra a figura ao
lado. A exibio do nome Button1 ocorre pois esse era o componente que estava
selecionado no formulrio quando ele foi clicado. Se o componente selecionado
fosse a caixa de texto Edit1, esse seria o nome exibido na caixa de dilogo. Isso
ocorre uma vez que a propriedade ActiveControl do formulrio contm o componente que est ativo no
formulrio naquele instante. Observe que a propriedade ActiveControl um objeto que, por sua vez,
tambm possui propriedades e mtodos e, por isso, pudemos exibir o contedo de sua propriedade name.
Atravs da utilizao da propriedade ActiveControl tambm poderamos alterar qual o componente ativo do
formulrio a qualquer instante, para isso seria necessria apenas a atribuio do nome do componente
propriedade conforme exemplificado a seguir.
Exemplo
/* Cdigo escrito */
ActiveControl := Edit1;
/* Cdigo escrito */
O cdigo escrito acima bastante simples. Trata-se de uma atribuio direta do nome do objeto
propriedade ActiveControl do formulrio. Devemos observar que no atribuda uma string, que
contedo da propriedade name do componente, mas sim o prprio objeto Edit1. Ao executar essa linha,
componente que passa a estar ativo no formulrio, ou seja, que passa a ter o foco da aplicao
componente Edit1.

o
o
o

Agora que j sabemos o que faz a primeira linha de cdigo escrita no procedimento associado ao evento
OnClick do formulrio, podemos continuar clicando no boto OK da caixa de mensagem que foi exibida.
Uma vez que a caixa fechada podemos perceber que o formulrio modificado. O que aconteceu? A
borda do formulrio foi alterada! Essa alterao exatamente o que o prximo comando que havamos
definido proporciona. A funo succ faz com que seja atribuda propriedade BorderStyle do formulrio
um novo valor, o valor seguinte quele atualmente atribudo propriedade BorderStyle. Porm no
utilizamos simplesmente a funo succ uma vez que quando chegssemos ao final dos valores do tipo
enumerado a atribuio seria sempre para o ltimo valor possvel. Para evitar isso, foi colocada uma
instruo condicional que testa se a propriedade BorderStyle j possui o maior valor possvel. No caso do
teste ser verdadeiro ser atribudo o menor valor possvel a essa propriedade, caso contrrio a funo succ
a que ficar encarregada de definir qual o valor a ser atribudo propriedade BorderStyle. Observe tambm
que dependendo do tipo de borda que esteja sendo atribuda ao formulrio, nem todos os botes relativos
propriedade BorderIcons so exibidos. Conforme havamos mencionado anteriormente, a propriedade
BorderStyle tem influncia sobre a exibio ou no desses botes. Com isso devemos ter cuidado tanto

Pgina: 68

Delphi 5
com o tipo de borda que estejamos atribuindo ao nosso formulrio bem como com os valores que tenhamos
colocado na propriedade BorderIcons, pois caso tenhamos removido o cone de sistema o usurio no ter
como fechar o formulrio a menos que utilize as teclas ALT + F4 ou finalize a tarefa utilizando o
gerenciador de tarefas do Windows.
Antes de fecharmos a aplicao e retornarmos para a IDE do Delphi vamos observar o efeito de uma outra
propriedade do formulrio que alteramos no Object Inspector. Vamos tentar alternar entre as aplicaes
que estejam em execuo utilizando as teclas ALT + TAB. Ao fazermos isso, podemos perceber que
conseguimos alternar entre as aplicaes porm o nosso aplicativo Delphi sempre permaneceu por sobre as
demais janelas. Isso ocorreu devido a alterao feita na propriedade FormStyle. Ao colocarmos o valor
fsStayOnTop fizemos com que esse formulrio sempre permanecesse sobre as demais aplicaes
independentemente de qual aplicao esteja sendo manipulado naquele momento.
O ltimo ponto que vamos observar antes de fecharmos a aplicao se refere posio como o formulrio
foi exibido. A menos de uma coincidncia fantstica o formulrio no deve ter sido exibido no centro da
tela como poderamos querer que tivesse acontecido. Se observarmos melhor, o formulrio foi exibido
exatamente na mesma posio em que ele se encontrava quando estvamos desenvolvendo-o na IDE do
Delphi. Isso ocorre graas a uma propriedade do formulrio que define tanto a posio como, em alguns
casos, o tamanho do formulrio com que ele exibido pela primeira vez. Vamos fechar a aplicao e
retornar IDE do Delphi. No Object Inspector podemos observar uma propriedade chamada position
pertencente ao formulrio. Essa a propriedade responsvel por essa definio. Observe que o valor
default para ela poDesigned, ou seja, de acordo com que foi definido quando estava na IDE. Caso
desejssemos que o formulrio fosse exibido no centro da tela bastaria alterarmos o valor dessa
propriedade para poScreenCenter. Verifique na ajuda do Delphi os possveis valores para essa propriedade
e o que cada um deles faz.
Um ponto que pode ser observado nas propriedades sets e de tipos enumerados do Delphi que os valores
seguem um padro de nomeao. As duas primeiras letras de cada valor identifica, de alguma maneira, a
propriedade a qual ele pertence. Por exemplo, os valores da propriedade BorderIcons comeam pelas letra
bi, j os valores para a propriedade Position comeam pelas letras p e assim sucessivamente. Caso
desejemos desenvolver novos tipos devemos seguir esse padro para que outros desenvolvedores consigam
trabalhar com esses tipos de forma mais amigvel.
O quadro a seguir traz um resumo das principais propriedades vistas at aqui.
Propriedade

6.2.

Valores

Finalidade

ActiveControl

Componentes do Form

Definir o componente ativo de um formulrio

BorderIcons

biSystemMenu, biMaximize,
biMinimize, biHelp

Determinar quais botes esto disponveis no canto superior


diretiro do formulrio

BorderStyle

bsDialog, bsSingle, bsNone,


bsSizeable, bsToolWindow,
bsSizeToolWin

Determinar o tipo de borda que ser utilizado pelo formulrio.

Caption

String qualquer

Texto a ser exibido na barra de ttulo do formulrio

FormStyle

fsNormal,
fsMDIChild,
fsMDIForm, fsStayOnTop

Determina o tipo de formulrio a ser exibido.

Icon

Objeto da classe TIcon

cone a ser exibido no canto superior esquerdo do formulrio.

Position

poDesigned,
poDefault,
poDefaultPosOnly,
poDefaultSizeOnly,
poScreenCenter,
poDesktopCenter,
poMainFormCenter,
poOwnerFormCenter

Determina a posio e tamanho pr-definidos para alguns


tiupos de formulrios.

WindowState

wsNormal,
wsMinimized,
wsMaximized

Determina como o formulrio ser exibido na tela.

Principais mtodos
Uma vez que vimos as principais propriedades da classe formulrio podemos dar incio ao estudo de seus
principais mtodos. Durante o nosso estudo sobre formulrios modais e no modais j fomos apresentados

Pgina: 69

Delphi 5
a dois desses mtodos: show e showmodal. Como vimos esses mtodos so responsveis pela exibio de
formulrios dentro de nossas aplicaes. Alm desses, existem outros mtodos dentro da classe formulrio
que devem ser estudados. J que sabemos como exibir formulrios comear o nosso estudo a respeito dos
principais mtodos dos formulrios sendo apresentados ao mtodo responsveis por fech-lo.
De forma semelhante ao que foi feito para ilustrar as principais propriedades do formulrio, iremos
construir uma pequena aplicao para ilustrar tanto os principais mtodos quanto os principais eventos
existentes para um formulrio. Dito isso, vamos comear a nossa nova aplicao, salvando a aplicaio
anterior se necessrio. Desta vez, vamos criar a aplicao manipulando com as propriedades que j foram
vistas na seo anterior, por exemplo, alterando os nomes dos formulrios e componentes que forem sendo
criados.

6.3.

Principais eventos

7.Componentes de Interface
7.1.

Componentes Bsicos de Interface


7.1.1. Menus
Lembra-se como era penoso fazer um Menu em qualquer linguagem de ambiente caracter? Pois ! Na
programao delphi pode esquecer todo aquele tempo e esforo, pois apenas alguns clicks e atribuir
nomes e ttulos as opes/comandos e pronto o menu principal est pronto para uso.

MAINMENU

(Menu Principal)

Pgina de Componentes: Standard Classe: TMAINMENU

P r o p r i e d a d e s
Items

Chamar o Editor de Menu para incluso de Itens


Dicas

No editor de Menu d um click


com o boto da direita do mouse
em um item para:
Inserir ou deletar o item;
Criar sub-menu no item atual;
Ir para outro Menu.

P r o p r i e d a d e s

d e

c a d a

I T E M

(do menu)

Checked

Marcado ou No-Marcado ?

ShortCut

Configurar tecla de Atalho

GroupIndex

Se <> 0 indica que pertence a um grupo de Itens

RadioItem

S pode ter um item marcado no grupo?

Nota.:

Para inserir um separador de Menu s colocar no Caption de um item um - (hfen).

Voc quer que quando o usurio der um click pressionando o boto da direita aparea um menu flutuante
(Local/Rpido/Suspenso)? No tem o que fazer! A maioria dos componentes possuem um propriedade
chamada PopUpMenu s nela voc indicar o name do componente PopUpMenu disponvel que voc
preparou. Abaixo temos o componente PopUpMenu em estudo:

Pgina: 70

Delphi 5

POPUPMENU (Menu Flutuante ou Local)


Pgina de Componentes: Standard Classe: TPOPUPMENU

P r o p r i e d a d e s
AutoPopUp

Charmar automaticamente?

Alingment

Exibir: no centro, esquerda ou direita do click?

Obs.: Propriedades do Item do PopUpMenu igual ao do Menu Principal

7.1.2. Botes
BUTTON (Boto de Comando)
Pgina de Componentes: Standard Classe: TButton

P r o p r i e d a d e s
Caption

Ttulo (Legenda) do objeto.

Name

Nome do objeto quando referenciado na Unit.

Default

Se Pressionar Enter esse boto ser o acionado ?

Cancel

Se pressionar Esc esse boto ser acionado ?

ShowHint

Apresentar o H i n t (Dica de Ajuda flutuante) ?

Hint

Texto da Descrio (Dica de Ajuda) flutuante. ShowHint = True para funcionar

ModalResult

Retorno que o boto emitir quando usado

Visible

Visvel ou Invisvel ?

Enabled

Habilitar ou desabilitar ?

Top

Distncia do Topo do Formulrio

Left

Distncia da Esquerda do Formulrio

Height

Altura do Objeto (Tamanho Vertical)

Width

Largura do Objeto (Tamanho Horizontal)

TabStop

Receber foco com a tecla TAB ?

TabOrder

Nmero de Ordem para receber o foco quando pressionada a tecla TAB

Figura 6 - Boto

Apenas para o usurio ler.


Utilizado no cdigo-fonte.

Enabled = False
Name = 'ButtonAlterar'
(Obs.: Visto apenas na execuo)
Caption = 'Alterar Tamanho'
Enabled = True
Left = 280
Top = 96
Width = 105
Height = 25
Hint = 'Um click para alterar o tamanho'
ShowHint = True
TabStop = True
Procedure TForm1. ButtonAlterarClick (Sender:
comTabOrder
Dica = 1
TObject);
OnClick = ButtonAlterarClick
begin

Figura 7 - Desabilitado

ButtonAlterar.Height := ButtonAlterar.Height + 10;


ButtonAlterar.Width := ButtonAlterar.Width + 10;
end;

Pgina: 71

Delphi 5

P r o p r i e d a d e s

d e

E v e n t o s

OnClick

Quando o Objeto for Clicado chamar o Procedimento de Evento indicado

OnEnter

Quando receber o foco chamar o Procedimento de Evento indicado

OnExit

Quando perder o foco chamar o Procedimento de Evento indicado

BITBTN (Boto de Comando com Bitmap)


Pgina de Componentes: Additional Classe: TBitBtn
Dicas
P r o p r i e d a d e s
Glyph

Carregar a Imagem que o boto exibir

NumGlyphs

Quantidade de partes da Imagem Carregada

Kind

Imagens de Tipo Padro

LayOut

Posicionamento da Imagem quanto ao Texto

ModalResult

Retorno que o boto emitir quando usado

SPEEDBUTTON

Altere, primeiramente, o Tipo da


propriedade Kind e o componente
far automaticamente as mudanas
nas seguintes propriedades: Caption,
Name, Glyph e ModalResult.

(Boto Ferramenta)

Pgina de Componentes: Additional Classe: TSPEEDBUTTON


Dicas
P r o p r i e d a d e s
Flat

Efeito Tipo ferramenta do Internet Explorer

Glyph

Carregar a Imagem que o boto exibir

GroupIndex

Se <> 0 indica que pertence a um grupo de botes

Down

Se = True o boto est abaixado (pressionado)

AllowAllUp

Se = True indica que s pode ter um boto abaixado


no Grupo de Botes. GroupIndex <> 0

Spacing

Espaamento entre o Texto e bitmap

LayOut

Posicionamento da Imagem quanto ao Texto

Para trabalhar com um grupo de


botes onde s um possa ter o estado
abaixado em um certo momento.
Siga os seguintes passos:
1. Selecione todos que formam o
grupo;
2. Altere o GroupIndex para um
valor diferente de zero ;
3. Altere AllowAllUp para True;
4. Tire a seleo e faa um teste
alterando o valor de Down dos
botes, um de cada vez.

7.1.3. Labels
LABEL (Etiqueta/Rtulo para Descrio)
Pgina de Componentes: Standard Classe: TLabel
Dicas

P r o p r i e d a d e s
Align

Posio do Objeto no formulrio

Alignment

Alinhamento do Texto:
Esquerda,Centro ou direita

LayOut

Posio do Texto na Etiqueta

ShowAccelCha

True para permitir o uso de Tecla Quente

1a Para indicar a HotKey (Tecla


quente) basta, na propriedade
Caption, voc antes da Letra
escolhida colocar um caracter &.
Ex.: Sai&r. E pronto ficar assim:
Sair . No esquea de habitar
ShowAccelChar;
2a A etiqueta no pode receber
foco, mas pode passar o foco. Para
isso, indique a Tecla quente e utilize
a
propriedade
FocusControl
escolhendo um controle, como um
Objeto Edit.

Pgina: 72

Delphi 5
r

(&)

FocusControl

Passar o foco para ...


dever ser True

WordWrap

Rolamento do Texto dentro da Etiqueta

. ShowAccelChar

7.1.4. Caixas de Texto


EDIT

(Caixa de Edio ou Caixa de Texto)

Pgina de Componentes: Standard Classe: TEdit


Dicas
P r o p r i e d a d e s
CharCase

Letras em Minsculo, Normal ou Maisculo

Color

Cor para o Objeto

AutoSize

Mudar de largura dependendo do Texto

ReadOnly

Apenas para Ler ?

BorderStyle

Estilo da Borda do Objeto

Ctl3D

Efeito Tridimensional (3D) no Componente ?

MaxLength

Largura mxima do Texto

Text

Texto do Objeto

Font

Formatao da fonte: Tipo, Tamanho, Cor e...

AutoSelect

Quando receber o foco Selecionar o Texto ?

PassWordChar

Caracter apresentado quando for uma senha

P r o p r i e d a d e s

d e

1a Quando for trabalhar com


entrada de Senha altere a propriedade
PassWordChar para *;
2a Para no permitir a edio do
contedo altere a propriedade
ReadOnly para True ;
3a Para controlar a Entrada de
Dados use:
CharCase
e
MaxLength.

E v e n t o s

OnChange

Quando o contedo do objeto mudar ser chamado o Procedimento de Evento indicado

OnDblClick

Quando o Objeto receber Dublo-click ser chamado o Procedimento de Evento


indicado

MASKEDIT

(Caixa de Edio com Mscara)

Pgina de Componentes: Additional Classe: TMASKEDIT

P r o p r i e d a d e s
Text

Texto do Componente

EditMask

String de configurao da Mscara

Caracteres de Configurao para E D I T M A S K


;

Separador de campos da mscara

: e /

Separador padro do sistema

Caracter Numrico ou Sinal Opcional

Obrigatrio: A e C - Opcional: a e c

Qualquer Caracter

Pgina: 73

Delphi 5
Obrigatrio: L

- Opcional: l

Apenas Caracter alfabtico

Obrigatrio: 0

- Opcional: 9

Apenas Caracter Numrico

Pular espaos em branco iniciais

O prximo caracter literal

<>

Sem verificao de MAISCULAS/minsculas

>

Converte para MAUSCULAS o que segue

<

Converte para minsculas o que segue

Estrutura da String de Configurao no E D I T M A S K


!(999)000-0000;1;_

Composio da Mscara (de fone por Exemplo).

;1

1 salvar tudo (Literal e Dados) e


0 salvar apenas os Dados (Nmeros ou Letras)

;_

7.2.
7.2.1.

Caracter exibido para posies vazias (limpas).

Melhorando a interface

PANEL

(Painel)
Pgina de Componentes: Standard Classe Tpanel

P r o p r i e d a d e s
Align

Posio do Componente no Formulrio

BevelInner

Contorno Interno: Baixo, nenhum e Alto Relevo

BevelOuter

Contorno Externo: Baixo, nenhum e Alto Relevo

BevelWidth

Largura da Linha de Contorno

7 . 2 . 2 . CHECKBOX

Dicas
Nas propriedades BevelInner,
BevelOuter & BevelWidth voc
poder dar um efeito 3D muito
interessante ao Painel. Cuidado para
no exagera!

(Caixa de Seleo)

Pgina de Componentes: Standard Classe: TCHECKBOX


Dicas
P r o p r i e d a d e s

7.2.3.

Checked

Marcado ou No-Marcado ?

Alignment

Alinhamento do Texto

State

Tipos de Marcas: Marcado Preto, Marcado Cinza


ou No-Marcado

AllowGrayed

Se True ento podemos ter trs State, seno


apenas dois (Marcado ou No-Marcado)

RADIOBUTTON

Observe abaixo o relacionamento


entre as propriedades:
AllowGrayed = True
Checked
True
False
False

State
cbChecked
cbGrayed
cbUnChecked

(Boto de Rdio)

Pgina de Componentes: Standard Classe: TRADIOBUTTON

Pgina: 74

Delphi 5

P r o p r i e d a d e s

7.2.4.

Checked

Marcado ou No-Marcado ?

Alignment

Alinhamento do Texto

RADIOGROUP

(Grupo de Botes de Rdio)

Pgina de Componentes: Standard Classe: TRADIOGROUP


Dicas
P r o p r i e d a d e s
Columns

Quantidade de Colunas no Componente

ItemIndex

Informa o ndice do Item Selecionado.


Se 1 ento nenhum item foi selecionado

Items

Lista de Itens do Componente.

Para adicionar opes (ou botes ) ao


grupo de botes de rdio faa o
seguinte:
1. Acesse a propriedade Items do
RadioGroup e quando v o boto com
reticncia (...) d um click;
2. No memo da caixa de dilogo que
apareceu digite as opes, uma em
cada linha, e d OK.

8.Depurando aplicaes
Depois do projeto compilado h sempre a necessidade, para teste ou por problemas de resultado, do
desenvolvedor querer depurar o seu programa procurando o(s) erro(s) ou apenas testando o fluxo do
programa. Ento nesta aula vamos estudar o depurador integrado do ambiente.
E aprender a fazer
pontos de parada, verificar valores dos identificadores e entender as categorias de informaes de
depurao no Delphi. Temos que ter em mente, primeiramente, que o depurador interno (integrado)
chamado toda vez que voc executa um programa no ambiente Delphi & outra coisa importantssima o
Delphi uma ferramenta de programao visual para aplicaes Windows (ambiente grfico) e, sendo
como tal, os seus programas no so uma seqncia de comandos executados um a um, como em qualquer
linguagem de ambiente caracter (Clipper, Cobol, Fortran, C...). Entretanto, so baseados em mensagens
(eventos), no existindo a possibilidade de executar passo a passo cada linha do cdigo-fonte. Sendo
assim, devemos marcar pontos de parada (interrupo) nos trechos de cdigo que voc quer depurar.

8.1.

8.2.

Principais Comandos de Passo a Passo


Step Over,

F8 (Passo a Passo por sobre o cdigo. No entrar em cada sub-rotina);

Step Into,

F7 (Passo a Passo por dentro do cdigo. Entra em cada sub-rotina)

Depurao desde o Incio


Sem executar solicite Step Over (F8 ou Run-Step Over) ou Step Into (F7 ou Run-Step Into);

8.3.

Da execuo depurao
Execute o Projeto (boto Run ou F9);
D uma Pausa (boto Pause da SpeedBar ou Menu Run-Program Pause);
Depurao Passo a Passo (Step Over ou Step Into);

Obs.: Leia sempre a barra de ttulo principal do Delphi para ver o estado do depurador interno
(Running [executando programa] ou Stopped [aguardando: F7, F8 ou F9]

8.4.

Quando ficar em Loop Infinito ou Travar


No ambiente integrado Delphi:

Pgina: 75

Delphi 5
Solicite o Reset da Execuo (Run-Program Reset)

Fora do ambiente de desenvolvimento Delphi:


Apenas um vez pressione [Ctrl+Alt+Del];
Na lista de programas em execuo selecione o "rebelde" e Finalize-o.

Obs.: Para depurar tambm o Mdulo "Program" do Projeto (arquivo DPR) selecione
na Caixa de Dilogo "Environment Option" na guia (pgina) "Preferences" o item "Step Program Block"

8.5.

Marcando Pontos de Parada (interrupo)


Escolha a linha e:
Coloque o curso na linha que voc quer uma parada e Pressione F5 ou
D um click na barra cinza vertica ao lado da margem esquerda do editor na altura da linha ou
D um click solicitando o Menu flutuante na linha e escolha o comando "Toggle Breakpoit"

Visualizao de um Ponto de Parada

8.6.

Verificando Valores nos Identificadores


Dica de Avaliao de Sobrevo (Fly-by evalution hints):
Apresenta uma dica contendo o valor de qualquer identificador quando debaixo do ponteiro do mouse.
Disponvel apenas na depurao;

Visualizao do Uso do Recurso


Visualizao do Uso do Recurso

Pgina: 76

Delphi 5

Para Monitorar uma varivel selecione o nome da varivel e:


sem tirar a seleo invoque o menu flutuante e escolha o comando "Add Watch at Cursor"
ou
pressione [Ctrl+F5] e automaticamente iremos caixa de dilogo "Watch Properties".

Depois de configurada a monitorao o nome da varivel estar em uma lista. Para remove-la basta
selecionar e pressionar a tecla [Del].

Lista de Monitorao

9.Tratamento de Erros (Excees)


At agora trabalhamos sem nos preocuparmos com erros que aparecem na execuo do aplicativo. Voc teve
ter percebido que o Delphi quando algo ocorre de errado em tempo de execuo do aplicativo em desenvolvimento, ele
mesmo d um mensagem de erro informando o problema. Porm no profissional por exemplo quando um usurio
est trabalhando com um aplicativo e acontece um erro. Ele receber no momento uma mensagem curtssima em ingls
acompanhada, s vezes, de um cdigo ou nome de erro totalmente obscuro, no ajudando em soluo alguma. E logo
em seguida o computador travar ou o aplicativo descarregado sem o menor aviso ao usurio, deixando-o furioso e
frustado com o produto. Bem, para no acontecer isso que no Object Pascal h a possibilidade do programador
proteger o cdigo-fonte. E quando ocorrer um erro (exceo) o programador ter o poder de trat-lo e enviar ao usurio
uma mensagem amistosa em seu idioma nativo e sem maiores transtornos. Ou, por outro lado, o programador pode
fazer um tratatamento do problema e sem incomodar o usurio com alguma mensagem.

9.1.

Bloco de proteo Finally


Bloco que protege o cdigo e sempre que termina-o, ocorrendo erro ou no, executa um ou mais
instrues de finalizao do processamento.
Try
< Instrues protegidas >
Finally
< Instrues executadas sempre aps as Instrues Protegidas. Ocorrendo erro ou no! >
End

9.2.

Bloco de proteo Except


Bloco que protege o cdigo e sempre que ocorre um erro ele executa um ou mais instrues de para
tratamento do erro. E alm disso o programador pode avisar ao usurio sobre o problema acontecido via uma
caixa de dilogo (usando, por exemplo, MessageDlg ) ou no.
Try
< Instrues protegidas >

Pgina: 77

Delphi 5
Except
[ on { NomeDoTipoDeExceo } do [ NomeDeUmSubRotinaPersonalizada; ]
< ou Instrues em um bloco begin-end para tratar e/ou Informar Erros >
[ else ]
{ Para todos os outros tipos de Erros }
End

H vrias maneiras de voc usar essa estrutura de bloco depois da palavra Except:
1.

Apenas de forma generalizada (para qualquer tipo de erro) com uma ou mais instrues:

... Except
begin
ShowMessage('Ocorre um erro! Repita a operao, por favor.');
{ . . . outras instrues . . . };
end; ...
2.

Focalizando Tipos de Erros em particular que podem acontecer ao cdigo protegido e indicar uma
Sub-rotina personalizada , uma instruo ou algumas instrues, para cada:

... Except
on EDivByZero
do TratarErroDeDivisao;
on EConvertError do ShowMessage('Erro de Converso!!!');
on EDatabaseError do
begin
ShowMessage('Erro na manipalao dos Dados');
Edit1.Text := '';
end; ...

Ateno! A recepo do erro seqencial. Ocorrendo um erro no vai ser verificado o prximo tipo
de erro da seqncia informada no except.

9.3.

Blocos Aninhados (Finally & Except)


Um recurso que no existe e que muito til e importante, uma estrutura unindo os blocos FINALLY e
EXCEPT em um s bloco. Porm podemos inventar fazendo um aninhamento dos dois blocos obtendo um
estrutura mesclada de tratamento de erro. Esse ter, resumindo, uma rea de proteo de cdigo, uma rea de
tratamento do erro e uma rea de limpeza e/ou de finalizao.
Try { Incio do Bloco: Try ... Finally }
Try

{ Incio do Bloco: Try ... Except }


< rea de Cdigo Protegido... >

Except { Se ocorre um erro... }


on NomeDoErro do
< Instrues da rea de Tratamento do erro... >
End;
Finally

{ Fim do bloco: Try ... Except }

{ Fim do bloco:

Try ... Finally }

< Instrues da rea para Tratamento final.

Pgina: 78

Delphi 5
Havendo erro ou no sero executadas... >
End; { Fim do Try ... Finally }

10.Banco de Dados em Delphi


Um dos recursos que agrada mais aos programadores na programao Delphi a parte de Banco de Dados.
A facilidade de se trabalhar a conexo e as referncias no aplicativo aos elementos do banco de dados. E a
ausncia dos detalhes de baixo nvel que sempre aparecem, especialmente nos aplicativos cliente/servidor
(travar, liberar... ).
Os componentes Delphi especficos para banco de dados, sejam para acesso ou controle. Deixando tudo
mais fcil e diminui em muito a codificao. Com certeza tudo, em programao visual, uma questo de
"setagem" das propriedades dos componentes. Como voc j observou at agora com a maioria dos
componente visuais e no-visuais.
Em Delphi o aplicativo no tem acesso direto aos dados. H uma interface que gerencia e viabiliza o
processo de controle da fonte de dados para o seu aplicativo e sem ela nada funciona. O nome dessa
interface BDE (Borland Database Engine). Abaixo a Estrutura de Acesso a Banco de Dados no Delphi:
Ap lica tivo

Delp hi

BDE

ODBC
SQL Links

Paradox
dBase
ASCii
FoxPro
Access
9

DB2
InterBase
Oracle
Informix
SysBase

Arquivo Texto
Access
Arquivos Excel
Oracle
InterBase
MS-SQL Server e Outros

MS-SQL Server
Interface de Dados & Formatos de Dados:
1. Formatos Nativos:
1.1. BDE d acesso direto a vrios formatos, como:
dBase (.dbf), Paradox (.db), ASCII(.txt), FoxPro(.dbf) e Access (.mdb);
1.2. BDE + SQL Links acesso para servidores remotos, formatos:
Oracle, DB2, Informix, InterBase, Sybase e MS-SQL Server;
2. ODBC (Conectividade de Banco de Dados Aberta) da Microsoft, formatos:
Access, Arquivos Excel, Oracle, InterBase, SQL Server, arquivo de Texto e etc... .

Utilitrio Delphi para Banco de Dados:


1. DataBase DeskTop: Utilitrio para criar, manter e alimentar tabelas de vrios formatos.
2. DataBase Explorer ou SQL Explorer: Utilitrio para manuteno e consulta de Alias (apelido que
informa onde est a fonte de dados e qual o seu formato), consulta e insero/excluso de dados das
tabelas, montagem de consultas por meio de cdigo SQL e manuteno de dicionrios;
3. Form Wizard: Assistente de criao de formulrio de Banco de Dados (Menu DataBase-Form
Winzard...);
4. BDE Administrator: Utilitrio que gerencia a configurao e os "Alias" (apelidos);
5. Data Migration Wizard: Assistente de Converso de formatos de dados;

Com certeza voc j est ciente desta terminologia, mas no custa relembrar:

Tabela: Conjunto de Tuplas (Linhas/Registros) e Atributos (Colunas/Campos);


Arquivo de formato Simples de Dados: Conjunto de Registros (linhas) e Campos (colunas).
Consulta: Tabela dinmica e no fsica, resultante de uma Seleo ou Unio;

Pgina: 79

Delphi 5

Banco de Dados baseado em Tabelas:


Um s arquivo contendo um conjunto de Tabelas, Consultas
(Vises), ndices, Procedures ... em que qualquer operao de consulta resulta em um Tabela de Dados ;
Banco de Dados baseado em Registros: Conjunto de Arquivos (simples de dados, ndices e memo)
separados fisicamente em que qualquer operao de consulta resulta em Registros;
Tcnicas de Ajustamento: Indexao e Ordenao.
As duas formas de fonte de dados: a Baseado em Registros e a Baseado em Tabelas so acessadas pelo
Delphi e voc pode trabalhar com arquivos simples de dados (Baseado em Registros), como no formato
dBase, com os seus ndices e "campos MEMOs" em arquivos separados, porm em uma mesma pasta de
arquivos (diretrio).
Ou, trabalhar com formato Interbase (Baseado em Tabelas), que tem todas as
tabelas, consultas, ndices e ... em um s arquivo. Para o BDE, quanto ao acesso, a mesma coisa pois ele
possui um abordagem particular que trata os dois da mesma forma. como se ele, o BDE, olhando para
uma Pasta de Arquivos dos arquivos dBase (dados, index e memo) visse um Banco de Dados baseado em
Tabelas. Tratando todo e qualquer arquivo de registros como uma tabela. Porm por natureza um Banco
de dados baseado em Tabelas e totalmente diferente, ideologicamente e tecnologicamente falando, de um
Banco de dados baseado em Registros. O ltimo no so suportadas certas operaes.
Quanto a indexao e/ou ordenao so feitas automaticamente aps um deleo ou incluso.

10.1. O que um Alias (Apelido)?


O alias uma referncia ou vnculo relacionado a um Banco de Dados. Pense no antigo comando Path do
"falecido" DOS que informava o caminho para se encontrar os comandos do sistema operacional. Lembrase?! Bem, para cada banco de dados (Bas. em Tabelas ou em Registros) h um nome relacionado a ele que
facilita muito porque voc no precisar digitar um caminho (unidade e caminho [NomeDoArquivo]) para
referencia-se a um determinado Banco de dados e ter acesso a ele . Basta setar o nome do Alias no
componente e voc acessar a qualquer elemento do Bando de Dados. Conheceremos os componentes
mais tarde.

10.1.1. DataBase DeskTop


Para cria suas tabelas, ndices (primrios e secundrios), integridade referncial, senhas, editar dados e fazer
manutenes. Voc usar o utilitrio DataBase DeskTop.
I. Para Abrir uma tabela:
1. Escolha no Menu: File - Open;
2. Indique o Alias do Banco de Dados ou a Pasta de Arquivos;
3. Escolha o nome da tabela;
II. Para Editar Dados (fazer manuteno dos dados) de uma tabela:
1. Abra a tabela;
2. Escolha no Menu: Table - Edit Data.
III. Para Restrutura uma tabela:
1. Abra a tabela;
2. Escolha no Menu: Table - Restructure
IV. Passos para criar uma tabela e ndice primrio:
1. Carregue o utilitrio e escolha no seu menu File - New - Table;
2. Indique o formato (tipo da tabela);
3. Na criao da Estrutura s digite o nome do campo (use o "TAB" para navegar);
4. Estando no Tipo pressione "Barra de Espao" (com o Mouse d um Clique o boto da direita) e
escolha o tipo;
5. Defina o Tamanho;
6. Estando no "Key" (Chave Primria) e sendo o campo atual a chave primria ou parte dela pressione
"Barra de Espao" (usando o Mouse d um Duplo-Clique) e aparecer um "*";
7. Defina os outros campos repetindo os passos de 3 a 6;
8. Terminado salve a tabela em uma Pasta de Arquivos ou indicando um Alias.

Pgina: 80

Delphi 5

Caixa de Dilogo "Create Table" do DataBase DeskTop

V. Passos para criar ndices secundrios:


1. Entre na Caixa de Dilogo "Create Table" do DataBase DeskTop;
2. Acesse a Caixa de Combinao "Table Properties" e opte por "Secondary Indexes";
3. Logo abaixo da caixa de combinao existe um boto de ttulo "Define", pressione-o;
4. Na caixa de Dilogo "Define Secondary Indexes" escolha os campos e passe-os para lista de campos do ndice;
5. Salve a ndice com um nome sugestivo.

Caixa de Dilogo "Define Secondary Index"

10.1.2. Tipos dos Campos (Paradox & dBase)


J que vamos trabalhar com Paradox e/ou dBase, ento vamos observar seus tipos:

Tipo
Alpha (A)
Number (N)
Money ($)
Short (S)

FORMATO PARADOX
Tamanho
Nota
1 - 255
Alfanumrico
Ponto Flutuante
Formato Moeda
Numerico curto

Pgina: 81

Delphi 5

Long Integer (I)


BCD (#)
Date (D)
Time (T)
Timestamp (@)
Memo (M)
Formatted Memo (F)
Graphic (G)
OLE (O)
Logical (L)
Autoincrement (+)
Binary (B)
Bytes (Y)

0 - 32
1 - 240
0 - 240
0 - 240
0 - 240
0 - 240
1 - 255

Numerico Longo
Ponto-flutuante Especial
Data
Hora
Hora & Data
memorando
*.MB
Def. Tamanho Opcional
Def. Tamanho Opcional
Booleano
Auto-incremento
Def. Tamanho Opcional
Byte

FORMATO DBASE
Tipo
Tamanho
Character ( C )
1 - 254
Float (F)
1 - 20
Number (N) {BCD}
1 - 20
Date (D)
Logical (L)
Memo (M)
OLE (O)
Binary (B)
-

Nota
Caracter
Ponto Flutuante
Numerico
Data
Booleano
Memorando
OLE
Grfico

10.1.3. DataBase Explore ou SQL Explore


uma Ferramenta tima para consultas e edies (manuteno) de dados dos bancos de dados que
possuem Alias. Possui uma lista da estrutura de Acesso do BDE a esquerda de forma hierrquica e uma
apresentao dos dados em grade a direita na guia "DATA". Pode-se fazer consulta ao dados via cdigo
SQL na gua "Enter SQL". Nela podemos cria novos Alias, s no podemos criar tabelas.
1.
2.
3.
4.
5.

Para Criar um novo Alias (apelido):


V para o incio da rvore (o item DataBases);
Acesse o Menu: Object - New;
Escolha o formato do Banco de Dados. Ateno! o formato denominado STANDARD para o Banco de
Dados que tratar com os formatos: Paradox, dBase e Ascii;
Na propriedade PATH indique a unidade e o caminho de onde est o Bando de Dados;
Aplique (salve) a criao escolhendo o menu: Object - Apply
Apagar Elemento
Cancelar Operao
Aplicar Operao

Begin/Commit & RollBack


Primeiro, Anterior, prximo e ltimo
Incluir, deletar, Editar,
Gravar, Cancelar e Atualizar

Visualizar Imagem/Memo

Pgina: 82

Delphi 5

10.2. O Banco de Dados do Nosso Aplicativo


Siga os passos a seguir:
1. Com o Windows Explorer (Gerenciador de Arquivos) crie a pasta que armazenaremos o nosso Banco de
Dados.
2. No DataBase Explore crie um Alias do Tipo "Standard" com a propriedade "Path" tendo o caminho da
pasta que acabamos de criar.
3. Observe a pequena e resumida Modelagem da dados para voc compreender os relacionamentos das
tabelas:
CodCargo
CodDepart
CodFunc

Funcionrio
N

Cargo

CodFunc

Dependente

CodDepend

Departamento

CodCargo

CodDepart
Chave Primria
Chave Estrangeira
Chave Estrangeira Parte da Chave Primria

4. No DabaBase DeskTop crie as Tabelas e salve-as no Alias do nosso Banco de Dados com as estruturas a
seguir:
4.1. Tabela de Funcionrios (nome do arquivo: Funcionario.DB):
Campo
Tipo
Alpha
CodFunc
NomeFunc
Alpha
DataDeNascFunc
Date
EndFunc
Alpha
UfFunc
Alpha
CodCargo
Alpha
CodDepart
Alpha
FotoFunc
Graphic
NotaFunc
Memo

Tamanho
3
45

Ch. Primria ndice Secundrio


X
X

65
2
2
2
20

Pgina: 83

Delphi 5
4.2. Tabela de Dependentes (nome do arquivo: Dependente.DB):
Campo
CodDepend
NomeDepend
DataDeNascFunc
CodFunc

Tipo
Alpha
Alpha
Date
Alpha

Tamanho Ch. Primria ndice Secundrio


3
X
45
X
3

4.3. Tabela de Cargos (nome do arquivo: Cargo.DB):


Campo
CodCargo
NomeCargo

Tipo
Alpha
Alpha

Tamanho
3
25

Ch. Primria
X

ndice Secundrio
X

4.4. Tabela de Departamentos (nome do arquivo: Departamento.DB):


Campo
CodDepart
NomeDepart

Tipo
Alpha
Alpha

Tamanho
3
25

Ch. Primria
X

ndice Secundrio
X

10.3. Restruturando o Banco de Dados


claro que voc no vai trabalhar assim. Fazendo e refazendo, mas s vezes acontece e voc quer alterar. Por
isso vamos vivnciar o trabalho de restruturao de tabelas, para quando for necessrio voc no ter dificuldades.
Para apagar um campo use: [Ctrl]+[Del]. Para mover clique no nmero de ordem do campo e arraste-o.
Altere
seguindo as orientaes abaixo:
1.

Alterar Funcionrios (Altere apenas os listados e o elemento em negrito-Itlico):


Campo
CodFunc
CodUF
NotaFunc

Tipo
Short
Short
Memo

Tamanho

Ch. Primria ndice Secundrio


X

20
Obs.: CodUF substituir o campo UfFunc

2.

Restruturar Dependentes (Alterar os elemento em negrito-Itlico e Trocar as posies de CodFunc e


CodDepend):
Campo
CodFunc
CodDepend
NomeDepend
DataDeNascFunc

3.

Tipo
Short

Tamanho

Ch. Primria
X

ndice Secundrio

Alterar Departamentos (Altere apenas os listados e o elemento em negrito-Itlico):


Campo
CodDepart

5.

Tamanho Ch. Primria ndice Secundrio


X
X
X
45
X

Alterar Cargos (Altere apenas os listados e o elemento em negrito-Itlico):


Campo
CodCargo

4.

Tipo
Short
Short
Alpha
Date

Tipo
Short

Tamanho

Ch. Primria
X

ndice Secundrio

Criar a Tabela de Estados e UF's (nome do arquivo: EstadosUF.DB):

Pgina: 84

Delphi 5

Campo
CodUF
NomeEstado
SiglaUF

Tipo
Short
Alpha
Alpha

Tamanho

Ch. Primria
X

ndice Secundrio

25
2

Obs.: obvio que h uma soluo de manipulao de UF que no armazenado no BD, porm optamos por essa para usarmos um
componente de BD com essa tabela.

Complemento nossa rpida modelagem:


CodUF

Funcionrio

UF's
CodUF

10.4. Os Componentes de Banco de Dados I


H duas categorias de componentes, quando se fala de Banco de Dados: os componentes de Acesso e os
componentes de controle.
Os "de Acesso", pelo nome j d para saber que, cuidam de toda parte relacionada ao
acesso ou vnculo com parte (tabelas...) ou todo o banco de dados, enquanto os "de Controle" trabalham com as
informaes (registros ou campos) que esto nas tabelas ou consultas-SQL.

10.4.1. Conjunto de Dados (DataSet)


Antes de mais nada temos que saber o que um DataSet. Um Dataset Conjunto de todas as ocorrncias ou
"registros" de uma tabela ou consulta-SQL. O Dataset (Conjunto de Dados) pode est, em um certo momento, em um
dos principais estados abaixo listados:
1.Tabela ou Consulta-SQL Fechada (dbInactive);
2.Em Consulta (dbBrowser);
3.Em Pesquisa, preparada para busca de informao, (dbSetKey);
4.Em Edio, atribuies de informaes ao dataset, (dsEdit) &
5.Em Insero, incluso de novas informaes ao dataset, (dbInsert)
Nota.: Nesta aula iremos estuda os mtodos que possibilitam a mudana do estado de um DataSet.

10.4.2. Acesso ao Banco de Dados (Data Access)


Componentes que interagem com o bancos de dados. Iremos estudar os seguintes: Table (Tabela, gera um
DataSet), Query (Consulta-SQL, gera um DataSet) e DataSource (especifica o DataSet, "resultado" de uma Table ou
Query) que ser a Origem de Dados para os controles de dados). Na seqncia falamos sobre os controles de dados...
Voc j viu a Estrutura Geral de Acesso a Banco de Dados, porm no viu a estrutura de vnculos dos
componentes de banco de dados em um aplicativo Delphi.
Abaixo temos uma Estrutura Exemplo:

APLICATIVO DELPHI
DBEditCodigo

DBEditNome

DBEditReferencia

DBEditCodPedido

DBEditDataPedido

BDE

Arquivo(s) Fsico(s)
Pgina: 85

Delphi 5

Figura - Estrutura de Vnculos dos componentes de banco de dados.

10.4.3. TABLE (Representa uma Tabela fsica)


Pgina de Componentes: DataAccess Classe: TTABLE
Indica e representa uma tabela fsica de um certo Banco de dados, gerando um DataSet para a mesma. No
pode ser utilizada diretamente pelos "outros componentes", necessitando de um componente intermediador
(DataSource).
Ateno!!! As propriedade esto posicionada na ordem que devem ser setadas (configuradas).

Name
DataBaseName
TableName
Exclusive
ReadOnly
MasterSouce
MasterField
IndexFieldNames
IndexName
Active
RecordCount

P r o p r i e d a d e s
Nome Identificador do componente
Nome do Banco de Dados ou Alias
Nome da tabela fsica do banco de dados
DataSet no compartilhado (exclusivo)?
DataSet apenas de Leitura?
Nome Identificador do DataSource da Tabela Mestre
Campo da Tabela Mestre
Nome do Campo que se quer indexar
Nome do Index (ndice secundrio) que se quer indexar
Abrir o DataSet ?
Apenas em Tempo de Execuo possui a quantidade de "Registros" do DataSet.
Ex.: LabelQuantDeRegistros.Caption := IntToStr ( Table1.RecordCount );

M t o d o s
MUDANA DE ESTADO DO DATASET
Open
Abrir um DataSet (Table ou Query).
Ex.: Table1.Open;
Close
Fechar um DataSet.
Ex.: Query2.Close;
Edit
Ativa o modo de Alterao para o "registro" corrente do DataSet
Insert
Inserir um "registro" vazio e torn-o corrente no DataSet
Post
Grava o "registro" atual no DataSet
Cancel
Aborta ou Cancela uma Alterao (Edit) ou Incluso (Insert)
Delete
Apaga o "registro" corrente do DataSet
Refresh
Atualiza o DataSet de uma Table
Append
Anexa um "registro" vazio no final e torn-o corrente no DataSet de uma Table
PESQUISA
SetKey
Preparar o DataSet indexado de uma Table para Pesquisa
KeyFieldCount
Quando um ndice composto por mais de um campo voc deve atribuir o
nmero do campo pelo qual quer basear sua pesquisa.
Ex.: Table1.KeyFieldCount := 0; {Explicao: vai baseado no primeiro campo}
GotoKey
Retorna "True" se a pesquisa exata teve xito.
If Table.GotoKey Then ShowMessage (' Cdigo j existe!');
GotoNearest
Retorna "True se a pesquisa aproximada ou inexata teve xito.
If Table.GotoNearest Then ShowMessage ('Iniciais encontradas!!!');
POSICIONAMENTO
First
Ao primeiro
Last
Ao ltimo
Next
Ao prximo
Prior
Ao Anterior
MoveBy ( )
Mova-se "n" "registros".
Ex. 1o: 5 registro frente: Table1.MoveBy(5);
Ex. 2o: 5 registro para trs: Table1.MoveBy(-5);

Pgina: 86

Delphi 5
10.4.4. QUERY (Consulta ou Viso construda Via SQL)
Pgina de Componentes: DataAccess Classe: TQUERY
Constri uma tabela virtual com base em uma ou mais tabelas de um certo Banco de dados por meio de
cdigo SQL, formando-se um DataSet. J que usamos a verso Client/Server vamos construir o cdigo
SQL com a ajuda de um utilitrio chamado de "Query Builder", no devido momento iremos conhec-lo.
No pode ser utilizada diretamente pelos "outros componentes", necessitando de um componente
intermediador (DataSource).
Ateno!!! As propriedade esto posicionada na ordem que devem ser setadas (configuradas).

Name
SQL
DataBaseName
Active
Params
DataSource
RecordCount

P r o p r i e d a d e s
Nome Identificador do componente
Cdigo SQL que vai ser executado quando a Query for aberta
Nome do Banco de Dados ou Alias. Geralmente automaticamente setado por
causa do cdigo SQL.
Abrir o DataSet ?
Quando a query tem vnculo com uma tabela necessrio informar o nome do
campo de relacionamento (que passado como parmetro)
Name do DataSource que possibilitar o vnculo da query com a tabela "mestre"
Apenas em Tempo de Execuo possui a quantidade de "Registros" do DataSet.

10.4.5. DATASOURCE (Indica a Origem de Dados)


Pgina de Componentes: DataAccess Classe: TDATASOURCE
Componente que faz comunicao entre uma Table (ou Query) e os componentes de controle de dados
(DBEdit, DBText...) possibilitando-os a enxergar os campos representados por essa (table ou query).
Como voc viu na figura de Estrutura de vnculos dos componentes, logo no incio dessa aula, o
DataSource fundamental a toda essa estrutura no aplicativo.

Name
DataSet
Enabled

P r o p r i e d a d e s
Nome Identificador do componente
Name de uma Table ou Query que servir como uma "fonte de Dados"
Ativar ou Desativar ?

10.4.6. Mdulo de Dados (DataModule)


Em qualquer programao visual nos temos um formulrio no qual colocamos alguns componentes para
compor a interface do nosso aplicativo em desenvolvimento. Porm na verso 3 do Delphi foi
incorporado, na parte de Banco de Dados, uma coisa parecida com um formulrio para colocarmos os
componentes de Acesso a dados (Table, Query, DataSource...) chamado de DataModule, definido e
vinculado a uma Unit como acontece para os formulrios. Tornando o desenvolvimento mais ordenado,
pois nas verses anteriores tnhamos componentes de Acesso a Dados espalhados por vrios formulrios.
Bem, h outros objetivos mas vamos ficar por aqui.
Agora vamos executar o seguinte para o nosso Banco de Dados recm criado:
1.

No ambiente Delphi abra o nosso aplicativo e insira um DataModule (Menu File - New Data Module);

2.

O DataModule ser apresentado e nele voc colocar uma Table para cada Tabela do Nosso Banco de Dados, e
para cada Table coloque um DataSource (no DataSet indique a Table);

3.

Set tudo na seqncia correta, como indicado no posicionamento das propriedades e como ministrado pelo
instrutor.
No esquea de denominar "names" sugestivos;

Pgina: 87

Delphi 5

DataBaseName
= "indique o Alias criado "
TableName = Funcionario.DB
IndexFieldNames = CodFunc

DataSet = TableFunc

DataBaseName
= "indique o Alias criado "
TableName = Dependente.DB
IndexName = IdxCodFunc
MasterSource
= DataSourceFunc
MasterFields = CodFunc *

DataBaseName
= "indique o Alias criado "
TableName = Departamento.DB
IndexName = IdxNomeDepart

Visualizao do Mdulo de Dados com os componentes de Acesso

4.

DataBaseName
= "indique o Alias criado "
TableName = Cargo.DB
IndexName = IdxNomeCargo

DataBaseName
= "indique o Alias criado "
TableName = EstadosUF.DB
IndexName = IdxNomeEstado

Ateno! A Table para a tabela de Dependentes ter uma "configurao" diferenciada das outras Table. Pois
teremos que relacion-la com uma Table Mestre (Master). E a Table Mestre ser a de Funcionrios (TableFunc).
Acompanhe a seqncia a seguir:
4.1. Depois que colocar o componente Table e sua DataSource e fizer as setagem normais (Name, DataBaseName,
TableName ... ). V para a propriedade MasterSource e indique o "Name" do DataSource da TableFunc;
4.2. D Duplo-clique para setar a propriedade MasterField. Aparecer, ento, uma caixa de Dilogo de nome
"Field Link Designer";
4.2.1. Escolha na Caixa de Combinao o ndice secundrio baseado no
cdigo do funcionrio disponvel para a tabela de dependendes;
4.2.2. Aparecer na lista "Detail Fields" o nome de campo CodFunc, selecione-o;
4.2.3. Selecione na lista "Master Fields" o nome de campo CodFunc, tambm;
4.2.4. Pressione o boto de Ttulo "Add" que est ao centro da Caixa de Dilogo;
4.2.5. Pronto agora use o boto "Ok" para confirma a unio pelo campos indicados.

Figura - Caixa de Dilogo "Field Link Designer"

10.5. Os Componentes de Banco de Dados II


Os Componentes de Controle de Dados so aqueles que exibem e permitem edio das informaes do
bancos de dados, tambm chamados de controles consciente de dados (data-aware). Iremos estudar os
seguintes: DBNavigator, DBEdit, DBMemo, DBText (parecido com Label), DBImage (parecido com
Image), DBCheckBox, DBRadioGroup, DBLookUpComboBox e DBLookUpListBox.

Pgina: 88

Delphi 5
Esses componentes no tem acesso direto a tabela fsica, necessitam de um DataSource que indique um
certo DataSet (Table ou Query).

1.
2.
3.
4.
5.
6.

Antes de entrarmos no componentes de Controle de Dados (data-aware). Vamos nos lembrar do que j
fizemos no Nosso Aplicativo:
Formulrio Principal com Menu;
Formulrio de Entrada (Splash) com som;
Formulrio Sobre;
Formulrios Secundrios chamados pelas opes do Menu Entretenimento (Multimdia);
O Banco de Dados (as tabelas paradox em um diretrio) e seu Alias;
O Mdulo de Dados (DataModule) referenciando as tabelas do Nosso Alias;
Bem, s falta os Cadastros: Funcionrios e Dados Gerais (Departamentos e Cargos ) e os relatrios.
Vamos dar uma olhada na interface final dos formulrios envolvidos nos cadastros:
1

Em um s formulrio os cadastros de
As pginas
departamentos e cargos.
possuem a mesma interface.
Nesse formulrio existir: incluso,
excluso e alterao, s que trabalharemos
sem cdigo.
Voc vai ver como isso
funciona.

2
Neste formulrio temos o cadastro
de funcionrio. A interface muda um
pouco quando estamos em uma das
operaes.
Nesse formulrio existir: incluso,
excluso e alterao, agora usando um
pouco de cdigo Object Pascal.

3
Este formulrio ser apresentado quando
pressionarmos o boto Lista Dependentes do
cadastro de funcionrio.
Ele um Cadastro
simples sem cdigo algum para os dependentes,
porm automaticamente so relacionados ao
funcionrio atual (corrente). Isso por causa das
propriedades: MasterSource e MasterFields da
Table dos Dependentes.
Pgina: 89

Delphi 5

Este formulrio ser apresentado


quando pressionarmos o boto
Buscar do cadastro de funcionrio.
Nele pesquisaremos por um ou
alguns funcionrio. O resultado da
busca ser gerado por cdigo SQL
de uma Query.

Agora que j fomos apresentados aos formulrios de cadastro vamos continuar com o assunto e no momento
adequado iremos trabalhar em cada um neles.

DataSource
DataField

Propriedades Comuns aos Controles de Dados


Name do DataSource relacionado ao DataSet (Table ou Query) requerido
Name do campo do DataSet (Table ou Query) ao qual se quer ter acesso

10.5.1. DBTEXT (Etiqueta para Banco de Dados)


Pgina de Componentes: DataControls Classe: TDBTEXT
Tem o mesmo objetivo da Label, no permitir acesso do usurio ao seu contedo.

10.5.2. DBEDIT (Caixa de Texto para Banco de Dados)


Pgina de Componentes: DataControls Classe: TDBEDIT
Tem o mesmo objetivo e uso do Edit.

10.5.3. DBMEMO (Caixa de Texto Longo para Banco de Dados)


Pgina de Componentes: DataControls Classe: TDBMEMO
Utilidade e objetivo igual ao componente Memo.
10.5.4. DBIMAGE (rea de Imagem para Banco de Dados)
Pgina de Componentes: DataControls Classe: TDBIMAGE
Extenso do componente Image para vnculo com um campo Grfico de um DataSet.

Pgina: 90

Delphi 5
10.5.5. DBCHECKBOX (Caixa de Seleo para Banco de Dados)
Pgina de Componentes: DataControls Classe: TDBCHECKBOX
Extenso do componente CheckBox para vnculo com um campo Lgico de um DataSet.

10.5.6. DBRADIOGROUP (G. de Botes de Rdio p/ Banco de Dados)


Pgina de Componentes: DataControls Classe: TDBCHECKBOX
Extenso do componente RadioGroup para vnculo com um campo de um DataSet que possua mltipla escolha
ou opo.
Propriedades Particulares
Nomes dos botes (itens) do grupo
Valor, de cada item, que ser encaminhado ao campo se o item (boto) for
escolhido. Cada valor para o seu respectivos item.
Obs.: Se no for indicado os valores, por padro, ser encaminhado ao campo da
tabela o ttulo do item escolhido pelo usurio.

Items
Values

10.5.7. DBNAVIGATOR (Navegador para Banco de Dados)


Pgina de Componentes: DataControls Classe: TDBNAVIGATOR
Possibilita o deslocamento (navegao) entre os "registros" e aplicao das operaes (incluso, deleo e
alterao) num DataSet.

DataSource
Hints
VisibleButtons
ConfirmDelete

OnClick

Propriedades Particulares
Name do DataSource relacionado ao DataSet (Table ou Query) controlar
Descrio no idioma do usurio para cada boto do componente de navegao
Apresentar este boto ?
Sempre perguntar antes de apagar ?
Propriedade de Evento
Quando for clicado um dos botes.
Pode-se no procedimento de Evento
verificar qual foi o boto clicado.
Botes: nbInsert, nbEdit, nbPost,
nbCancel ...

10.5.8. DBLOOKUPCOMBOBOX (Seleo Fechada)


Pgina de Componentes: DataControls
Classe: TDBLOOKUPCOMBOBOX
Possibilita relacionamento ou conexo com duas Origens de Dados.
principal) e a Segunda do DataSet secundrio.

A Primeira do DataSet mestre (a

Exemplo de um caso: No queremos que na tabela de funcionrios guarde-se o nome do estado pois
criaria um redundncia (repetio) de Dados, ento na tabela funcionrio guardaremos um cdigo
identificador que represente aquele estado e conseqntemente teremos uma segunda tabela que ter todos
os estados. Bem, agora temos outro problema pois o usurio no vai querer decorar o cdigo de cada
estado, ento teremos que baseados no cdigo do estado achar o nome do estado correspondente e
apresent-lo. Isso bem natural! Porm ser necessrio escrever algumas linhas de cdigo e gasta-se

Pgina: 91

Delphi 5
um pouco de tempo. Entretanto no ser necessrio pois existe esse componente que esse que estamos
estudando que facilitar nossas vidas e tornar o desenvolvimento mais rpido.

DataSource
DataField
KeyField
ListSource
ListField

Propriedades Particulares
Name do DataSource relacionado ao DataSet (Table ou Query) Mestre
Name do campo do DataSet Mestre que ser o nosso alvo de alterao
Name do campo do DataSet Secundrio que efetivar a unio dos DataSets
Name do DataSource relacionado ao DataSet (Table ou Query) Secundrio
Name(s) do(s) campo(s) do DataSet secundrio que ser (ro) exibido(s).
Obs.: O separador do "names" ser o ";" (ponto-e-vrgula).
Ex.: NomeEstado;SiglaUf

10.5.9. DBGRID (Grade para Banco de Dados)


Pgina de Componentes: DataControls Classe: TDBGRID
Extenso do componente Grid para vnculo um DataSet, completo.

DataSource
Columns

Options

Propriedades Particulares
Name do DataSource relacionado ao DataSet (Table ou Query) requerido
Propriedade que permiti tratamento individual para cada coluna da Grade. Por
padro a Grade ter a quantidade de colunas baseada na quantidade de campos do
DataSet vinculado (ou conectado), isso automaticamente.
Propriedade que permiti setar o comportamento da Grade

10.6. Banco de Dados via Cdigo


Ns j vimos alguns recursos, na aula sobre o componente Table, porm aqui temos mais outros para voc
trabalhar via cdigo-fonte com o banco de dados:
1. Verificar a quantidade de registros em um DataSet: RecordCount
Ex.: VariavelInteira := TableCliente.RecordCount;
2. Desabilitar/Habilitar todos os componentes de controle relacionados:
DisableControls Ex.: TableCliente.DisableControls;
EnableControls
Ex.: TableCliente.EnableControls;
3. Verificar se o Table est sem dados (Vazio): IsEmpty
Ex.: If TableProduto.IsEmpty Then
ShowMessage (No h Produtos Cadastrados);

Pgina: 92

Delphi 5
4. Deletar todos os dados da Table: IsEmptyTable
Ex.: TableProduto.EmptyTable;
5. Referir-se a um certo campo da Table:
FieldByName ( )
Ex.: TableUnidade.FiedByName(Sigla_Unidade).Value;
6. Para ler ou gravar um valor do campo ser necessrio, quando usar FieldByName ( ) , a propriedade AsString
ou AsInteger para converter os contedo do campo para o tipo compatvel.
Observe abaixo outras
propriedades de converso de contedo de campo:
AsFloat, AsDateTime e AsBoolean.
Ex.:

MinhaVariavel := TablePedido.FieldByName(ValorTotal).AsFloat;
TablePedido.FieldByName(Cod_Pedido).AsString := MaskEditCodPed.Text;
DataEmissao := TablePedido.FieldByName(Data_Emissao).AsString;

Obs. 1: Voc pode usar o mtodo de acesso direto do mesmo modo do anterior, mas no legvel. Fields [ ] .
Ex.: CodPedido := TablePedido.Fields[1].AsString;
Obs. 2: Para ler ou gravar uma informao em um campo que foi adicionado pelo Editor de Campos voc pode
usar os mtodos de converso, acima citados, ou a propriedade Value.
7.

Objeto Tbookmark, marca o ponto que est para volta posteriormente:


1. var PontoMarca : TBookmark; {declarando a varivel de marca }. . .
2. PontoMarca := Table1.GetBookmark; {Capturando a posio corrente }. . .
3. Table1.GotoBookmark ( PontoMarca ); { Posicionando na marca informada }. . .
4. Table1.FreeBookmark ( PontoMarca ); {Liberando da memria a marca}

8.

Propriedade Eof (Fim de Arquivo) e Bof (Incio de Arquivo).


Ex.: If TableProduto.Eof Then
begin
MessageBeep(0);
ShowMessage (Chegou no fim da Tabela);
end
else TableProduto.Next;

10.7.

Com as Mos na Massa

Nessa aula iremos trabalhar naqueles formulrios que nos foram apresentados na aula anterior, um a um, e
aprenderemos mais recurso de banco de Dados, passo a passo.
Ateno! Em todos os formulrios que apresentam dados iremos abrir o(s) DataSet(s) quando o formulrio for
apresentado (OnShow) e fech-los quando o formulrio for fechado (OnClose).

10.7.1. Cadastro de Dados Gerais (Departamentos e Cargos)


1

Etapa I:
1.
2.
3.

4.

Inserir um novo formulrio e que na execuo no possa ser redimensionado;


Salve a Unit com um nome sugestivo, como "UDGerais.pas";
Estando na Unit do novo formulrio use o comando: File-Use Unit, indicando a
Unit do Mdulo de Dados (DataModule), assim enxergaremos aos componentes de
acesso;
No formulrio Principal do Projeto coloque a chamada Modal para o novo
formulrio;

Pgina: 93

Delphi 5
PageControl
DBNavigator
H um DbText aqui ser
exibido sempre na
consulta
Aqui temos um MaskEdit
que ser exibido e usado
apenas na incluso

Bevel

DBEdit que estar em apenas de


leitura quando em consulta
Um RadioGroup Comum que
far a mudana do
IndexFieldNames do DataSet

Label que receber a


quantidade Atual de registros
do DataSet

Etapa II:
1.

2.
3.

4.

5.
6.

Quando o usurio solicitar a incluso voc apresentar o MaskEdit do cdigo,


ocultar o DBText do cdigo, desabilitar o RadioGroup e liberar a entrada de
dados do DBEdit do Nome;
Quando o usurio cancelar ou gravar, fazer o inverso do item acima;
Na incluso quando o usurio sair do MaskEdit do Cdigo voc dever Pesquisar
com o mtodo SetKey se esse cdigo j existe e proceder adequadamente. Ateno!
Lembre-se que usando "SetKey" voc mudar o Estado do DataSet devendo usar
o mtodo "Insert" para poder incluir, se o cdigo no existir;
Para se fazer a pesquisa solicitada no item acima a tabela dever est indexada pelo
cdigo, antes voc dever obrigatoriamente guarda a indexao anterior a incluso
para depois da incluso aplic-la;
Quando o usurio usar o RadioGroup para trocar a classificao voc dever indexar o
Dataset alterando a propriedade IndexFieldNames;
Na parte abaixo do RadioGroup onde h a informao de quantidade de registro voc
dever usar a propriedade adequada para atualizar a label com essa informao
quando apresentar o formulrio e, tambm, quando fizer incluses ou excluses;
S
i
T l ESC
f
l i d
f h

10.7.2. Cadastro de Funcionrio (consulta)

2a

Etapa I:
1.

2.
3.

4.

5.

Usando o Editor de Campos adicione todos os campos da tabela de funcionrios (d


um clique com o boto da direita em cima da TableFunc e escolha a opo "Fields
Editor". Aparecer um lista flutuante repita a operao sobre essa lista, mas escolha a
opo "Add fields" e pressione o "OK");
Faa as Instrues de 1 a 5 do formulrio anterior para esse novo formulrio;
Os DBEdits para o Cargo, Departamento e UF faremos uma abordagem para
aparecer os nomes se baseando nos cdigos (CodDepart, CodCargo e CodUF),
respectivos, que possumos no registro atual do funcionrio. Por enquanto apenas
coloque-os nas posies como na imagem abaixo, sem setar as propriedades de Banco
de Dados;
Imagens exibidas nos Botes: novo (Filenew.bmp), Alterar (Edit.bmp), Apagar
(Trash.bmp), Buscar(Crdfile2.bmp) e Dependentes (Docstack.bmp) esto no diretrio
de images para botes do Delphi (...\Delphi 3\Images\buttons);
Todos os componente de entrada de dados, vistos na figura abaixo, so da pgina Data
Controls.

Chamar o formulrio
de Pesquisa

Um DBNavigator

Pgina: 94

Delphi 5

Bem, creio que voc j montou uma interface como a da figura acima. Ento vamos aos detalhes das Querys
uma para o nome do Cargo e a outra para o nome do Departamento, informaes que constam em outras tabelas.
Iremos utilizar o "Query Builder" utilitrio que encontrado na verso Client-Server. Ele vai nos ajudar a construir o
cdigo SQL que necessrio aos componentes do tipo Query.

10.7.3. Query Nome do Cargo


I. Passos para montagem do Cdigo SQL da Query:
1.
2.

No "DataModule" coloque uma Query e o seu DataSource para Nome do Cargo;


D um Clique com o boto da direita e escolha a opo Query Builder;

3.
4.

Aparecer um caixa de dilogo solicitando o ALIAS do Banco de Dados, informe;


Agora foi exibida outra caixa de dilogo solicitando as tabelas envolvidas para construo do nosso
cdigo SQL, escolha a tabelas: Cargo e depois a de funcionrio, nesta ordem. E feche a caixa de
dilogo;
Relacione, arrastando o campo CodCargo e soltando-o no de mesmo nome na outra tabela, no sentido
tabela Cargo para a tabela funcionrio, as tabelas envolvidas. Ir aparecer uma linha de conexo
(relacionamento) ligando as duas tabelas;
Pronto! Pressione o boto que tem uma imagem de Check
para salvar na propriedade SQL da
query. Terminamos o cdigo SQL, vamos indicar o parmetro agora . . .

5.

6.

II. Passos para indicao do parmetro da Query:


1.
2.
3.
4.
5.
6.
7.

Ainda com o DataSer da Query fechado (Query.Active = False);


D duplo-clique na propriedade SQL para editar o cdigo SQL:
Na clusula "Where" substitua o nome da tabela "f u n c i o n a r i o . " por dois-pontos ( : ). Com isso
voc indicou quem o parmetro;
D duplo-clique na propriedade Params e ser exibida um caixa de dilogo para definio do parmetro;
Nessa caixa de dilogo, que j contem o nome do campo que voc l no cdigo SQL indicou com os
dois-pontos que era um parmetro, informe o tipo desse parmetro;
Vincule o DBEdit Nome do Cargo query.
Pronto, acabou! Agora s ativar a Query (Query.Active = True) para testar tudo;

10.7.4. Query Sigla da UF & Query Nome do Departamento

Pgina: 95

Delphi 5
Repita os passos: Montagem do Cdigo SQL da Query & Indicao do parmetro da Query, para as
outras Querys (UF e Nome do Departamento), escolhendo as tabelas e campos correspondentes a informaes
necessrias;

Figura - Querys com Parmetro e seus DataSources

9 Quando a parte de consulta tudo pronto. Agora vamos trabalhar na interface para incluir & alterar. E depois
voc poder colocar as instrues necessrias para os botes de comando (novo, alterar, apagar...).

10.7.5. Cadastro de Funcionrio (Incluir & Alterar)


2b

Etapa II:
Instrues para Incluso:
1.

2.
3.

4.
Figura - Interface da incluso

DBLoopUpComboBoxs

Quando o usurio solicitar a incluso voc


apresentar o MaskEdit do cdigo, os
botes Gravar, Abandonar, Ler foto e os
DBLookUpComboBoxs; ocultar o DBText
do cdigo, os DBEdits: Nome do Cargo,
Departamentoos e UF, e os botes que no se
apresentam na figura ao lado e liberar as
entradas de dados do DBEdits e DBMemo;
Quando o usurio cancelar ou gravar fazer o
inverso do item acima;
Na incluso quando o usurio sair do
MaskEdit do Cdigo voc dever Pesquisar
com o mtodo SetKey se esse cdigo j
existe e proceder adequadamente;
Para Carregar a foto use um componente
OpenPictureDialog para ajudar. E j que
adicionar-mos os campos ser possvel usar o
mtodo "LoadFromFile ( )" no o campo
Grfico para carregar a fotografia.

DBLoopUpComboBox para Estado


Listar: Sigla e Nome dos Estados

DBLoopUpComboBox para Cargo


Listar: Nome dos Cargos

Pgina: 96

Delphi 5

Instrues para Alterao:


1. Idem instrues para Incluso, porm no dever ser apresentado o MaskEdit do cdigo, permanea com o
DBText do cdigo exibido;
2. Tanto na incluso como na alterao h na interface caixas de combo, na verdade no so caixa de combo
simples so DBLookUpComboBox para diminuir o cdigo-fonte e agilizar o desenvolvimento, basta setlos corretamente;
3. Se o usurio usar a Tecla ESC o formulrio dever fechar, mas dever perguntar antes.

10.7.6. Cadastro de Dependentes


3

Instrues Gerais:
1.

2.
3.

J que a tableDepend est ligada a uma table Mestre


(TableFunc) pelo CodFunc quando for includo um
dependente automaticamente esse dependente ter o
cdigo do funcionrio do registro corrente do DataSet
da TableFunc;
Esse cadastro simples para mostrar voc como
funciona o vnculo de componentes do tipo Table.
Personalize os nomes das colunas como na figura ao
lado.

10.7.7. Formulrio de Pesquisa

Instrues Gerais:

MaskEdit
(Aqui o Evento OnChange acionar a busca)
RadioGroups Comuns
(Aqui o Evento OnClick acionar a busca)
DBGrid ligado a Query de Busca

1.
2.

No "DataModule" coloque uma Query para a Busca que no usar parmetro e um DataSource;
Na verdade a busca ser montada num cdigo SQL de uma Query. E o seu DataSet ser o resultado da nossa
busca ou pesquisa;

Pgina: 97

Delphi 5

3.
4.
5.

6.

Ateno! Como a propriedade SQL da Query do Tipo TString, assim tambm como a propriedade
Lines do componente Memo, ento podemos usar os mtodos, como: Clear e Add, para montar em tempo de
execuo o nosso cdigo SQL;
A montagem do Cdigo SQL e a abertura do DataSet da Query ir acontecer quando o usurio digitar uma ou
algumas letras no MaskEdit ou quando clicar um dos botes de rdio;
Quando o usurio d duplo-clique em um funcionrio que est na grade, a janela de procura fechar e
voltaremos ao cadastro de funcionrio j posicionados no funcionrio escolhido;
Quando o usurio fechar a janela de Procura e na grade de resultado da busca s encontrar-se um funcionrio.
Ser fechada a janela de procura e voltaremos ao cadastro de funcionrio posicionados neste funcionrio,
automaticamente. Para isto use a propriedade "RecordCount" e veja se igual a 1.
Uma possibilidade de contedo da propriedade SQL da Query, em tempo de execuo, ser:

SELECT Funcionario."CodFunc", Funcionario."NomeFunc", Cargo."NomeCargo", EstadosUF.Estado


FROM "Funcionario.DB" Funcionario , "Cargo.db" Cargo, "EstadosUF.DB" EstadosUF
WHERE (Funcionario.CodCargo = Cargo.CodCargo) And (Funcionario.CodUF = EstadosUF.CodUF)
And ( Upper( Funcionario.NomeFunc ) like "Carl%" )
And (Funcionario.Sexo = "M") And (Funcionario.FoiDemitido = False)
ORDER BY Funcionario.NomeFunc

11.Relatrio em QuickReport
Os componentes QuickReport so produtos, de uma empresa da Noruega chamada QSD
AS, com total compatibilidade com o Delphi. Assim como voc monta as interfaces nos
formulrios para o usurio interagir, voc montar relatrios que sero exibidos na tela ou
listados na impressora.
As diferenas so as seguintes: primeiro, quando criamos um
QuickReport
relatrio de forma visual ns no vemos os componentes, em tempo de execuo, apenas
veremos o resultado por eles gerados; Segundo, No necessrio DataSource para os componentes
QuickReport enxergarem os dados de um DataSet & terceiro, voc no montar o relatrio diretamente
em um formulrio, mas num componente QuickReport (Pai, proprietrio), que ser colocado no formulrio,
que muito parecido com o prprio formulrio, pois nele colocaremos e posicionaremos outros
componentes QuickReport menores para formar o relatrio. Um Relatrio QuickReport na verdade um
LayOut onde as informaes iro se posicionar, em tempo de execuo, nos devidos lugares indicados por
voc.
Ns sabemos que um relatrio se compe de partes como, por exemplo, as enumeradas abaixo:
1.
2.
3.
4.
5.

Cabealho da Pgina;
Cabealho das Colunas;
rea de Dados (os detalhes);
Rodap da Pgina &
rea de Sumrio

Essas partes, acima citadas, em QuickReport as chamaremos de Bands (Bandas/Faixas) e cada uma ser de
um tipo para que aja a identificao, separao e reproduo dessas partes no relatrio gerado. Bem,
antes de comearmos, realmente na prtica, iremos conhecer os componentes QuickReport e suas
principais propriedades.

11.1. Componentes QR Principais


11.1.1. QUICKREP ( Relatrio Rpido, o proprietrio )
Pgina de Componentes: QReport Classe: TQUICKREPORT
Componente Proprietrio (Pai) onde colocaremos as partes (Bands).

DataSet

Propriedades
Informar o Name da Table ou Query que o relatrio ir usar

Pgina: 98

Delphi 5

ShowProgress

Propriedade onde podemos colocar um pequeno texto descritivo sobre o relatrio


Podemos no prprio componente Relatrio indicar as bandas comuns. No sendo
necessrio colocar realmente, a partir da pgina de componentes, um a um os
componentes do Tipo QRBand no nosso componente QuickReport.
Deseja apresentar a progresso do processo ?

Print
Preview

Mtodos
Imprimi o relatrio.
Apresenta a visualizao de impresso.

Description
Bands

Ex.: RelatorioProdutos.Print;
Ex.: RelatorioProdutos.Preview;

Comandos do Menu Flutuante


(D um clique com o boto da Direita do Mouse no QuickReport)

Zoom In
Zoom Out
Preview
Report Setting

Aumenta a visualizao do componente relatrio (Mais Zoom)


Diminui a visualizao do componente relatrio (Menos Zoom)
Executa uma Visualizao de Impresso, no sendo necessrio executar o projeto
Configurao da pginas do nosso relatrio (Tamanho, fonte...)

11.1.2. QRBAND ( Componentes Faixas/Parte )


Pgina de Componentes: QReport Classe: TQRBAND
Componente que colocamos em um QuickReport para compor o relatrio. Nele colocaremos outros
componentes QR que sero apresentados mais adiante.

BandType
ForceNewPage
FooterBand
HasChild
ParentBand

Propriedade
Informar o Tipo dessa Banda
Forar um quebra de pgina ?
Name da Band que o rodap desse componente Band
Essa Band tem uma QRChildBand ? (Tem um Band que a acompanha (filha) ? )
Se essa Band for do Tipo QRChildBand indica-se o Name do Pai dela

Os componentes de Tipo Band Especficos iremos estudar no final.

11.2. Componentes QR de contedo Constante


11.2.1. QRLABEL ( Texto Esttico/constante )
Pgina de Componentes: QReport Classe: TQRLABEL
Componente que colocaremos em uma Banda e o usaremos como usamos um componente Label em um
formulrio.

Alignment
AlignToBand
Caption

Propriedade
Alinhamento do Ttulo
Alinhar o componente dentro da Banda ?
(Se True, ento ele usar a contedo da propriedade Alignment, tambm)
Texto esttico que ser exibido

11.2.2. QRMEMO ( Memo Esttico )


Pgina de Componentes: QReport Classe: TQRMEMO
Componente que colocaremos em uma Banda e o usaremos como usamos um componente Memo em um
formulrio.

Pgina: 99

Delphi 5
11.2.3. QRIMAGE ( Imagem constante )
Pgina de Componentes: QReport Classe: TQRIMAGE
Componente que colocaremos em uma Banda e o usaremos como usamos um componente Image em um
formulrio.

11.2.4. QRSHAPE ( Formas )


Pgina de Componentes: QReport Classe: TQRSHAPE
Componente que colocaremos em uma Banda e o usaremos para melhorar a apresentao.

Shape
Pen

Propriedade
Possibilita escolher entre as formas disponveis (linha vertical, retngulo ... )
Possibilita: mudar a espessura (With) e a Cor da Linha (Color)

11.3. Componentes QR Especiais


11.3.1. QRSYSDATA ( Informao do Sistema)
Pgina de Componentes: QReport Classe: TQRSYSDATA
Componente que colocaremos em uma Banda para informar: data, hora, nmero da pgina ... .
Propriedade
Tipo de informao (apenas data, apenas hora, nmero da pgina ... ) que ser
apresentada.

Data

11.3.2. QREXPR ( Construo de Expresso)


Pgina de Componentes: QReport Classe: TQREXPR
Componente que colocaremos em uma Banda para apresentar o resultado de uma expresso nele armazenado.

Expression
Mask
Master

Propriedade
Expresso que ser executada na gerao do relatrio.
(Ex.1: Copy(Company,1,1)
ou
Ex.2: Pedido nr.: + CodPed
Mascara de apresentao da informao
Name do QuickReport que possui o Daztaset para atualizao dessa expresso

11.4. Componentes QR de Banco de Dados

DataSet
DataField

Propriedades Comuns aos Componentes QRDB


Name do DataSet (Table ou Query) requerido
Name do campo do DataSet (Table ou Query) ao qual se quer ter acesso

Pgina: 100

Delphi 5
11.4.1. QRDBTEXT ( Acessa contedo no-Grfico)
Pgina de Componentes: QReport Classe: TQRDBTEXT
Componente que colocaremos em uma Banda de Detelhes ou Sub-detalhes para apresentar o contedo de um
campo tipo: alfanumrico, numrico ou memo.

11.4.2. QRDBIMAGE ( Acessa contedo Grfico)


Pgina de Componentes: QReport Classe: TQRDBIMAGE
Componente que colocaremos em uma Banda de Detelhes ou Sub-detalhes para apresentar o contedo de um
campo tipo imagem.

11.5. Bands Especficos


11.5.1. QRGROUP (Banda para Formao de Grupo)
Pgina de Componentes: QReport Classe: TQRGROUP
Componente Banda especfico que faz quebras (grupo) no relatrio.

Expression
ForceNewPage
FooterBand

Propriedade
O grupo quebrado toda vez que o resultado da expresso mudar
Forar um quebra de pgina ?
Name da Band que o rodap desse componente Band de Grupo

11.5.2. QRCHILDBAND (Banda Filha para Acompanhamento)


Pgina de Componentes: QReport Classe: TQRCHILDBAND
Componente Banda que fica vinculada a outra banda Pai.

ParentBand

Propriedade
Name do Pai (Parent)

11.5.3. QRSUBDETAIL (Banda Filha para Acompanhamento)


Pgina de Componentes: QReport Classe: TQRSUBDETAIL
Componente Banda que fica vinculada a um sub-grupo.

Bands

Propriedade
Para indicar se h bandas rodap e cabealho

11.6. Composies de Relatrios


Bandas do Relatrio em Grupo:
1. PageHeader (Cabealho da Pgina);
2. Componente QRGroup

Pgina: 101

Delphi 5

3.
4.
5.
6.

com um componente de expresso com a expresso de Quebra;


ColumnHeader (Cabealho das Colunas);
Detail (rea de Dados (detalhes));
Summary (rea de Sumrio) e
PageFooter (Rodap da Pgina).

Bandas do Relatrio em Mestre/Detalhes:


1. Bands da Listagem Simples;
2. Componente QRSubDetail , FooterBand =RodapeGroup1;
3. Componente QRBand,
com BandType=rbGroupFooter, HasChild = True e Name=RodapeGroup1;
4. Componente QRChildBand, c/ ParentBand = RodapeGroup1

11.7. Os Relatrios do Nosso Aplicativo


Pelo menu do nosso Aplicativo teremos apenas trs relatrios: um para funcionrios, um para departamentos e
outro para cargos. Decidir que os trs sero, cada um, do tipo lista e que faremos para os funcionrios um outro
relatrio, do tipo mestre-detalhes, que apresentar para cada funcionrio os seus dependentes.
Iremos seguir uma
abordagem que a seguinte: para cada relatrio lista teremos um formulrio com name e caption sugestivos. E
nesses formulrios sero usados no sistema para o usurio escolher a ordenao (indexao) e se quer visualizar a
impresso ou imprimir. O quarto relatrio (mestre-detalhes do funcionrio) ficar dividindo o mesmo formulrio e
nesse formulrio o usurio dever escolher se o relatrio ser o simples (lista) ou o mestre-detalhes, alm das opes j
citadas anteriormente.

Figura - Viso do formulrio e componentes do relatrio de Cargos

11.7.1. Relatrio de Cargos


Passos para implementao do relatrio no nosso projeto:
1.
2.
3.

4.
5.

6.
7.
8.

Insira um novo formulrio, coloque name e caption sugestivos;


Salve com o nome URelCargos.pas na pasta do nosso projeto;
J que temos o nome definitivo da unit em desenvolvimento podemos fazer os vnculos de uso de units
(unidades). Usando File-Use Unit faa o seguinte:
3.1. Estando na unit do relatrio indique o uso da unit do DataModule (mdulo de dados);
3.2. Em seguida v para a unit do formulrio principal e indique que ir usar a unit do relatrio;
No formulrio do relatrio coloque um componente relatrio QuickReport para montarmos o nosso relatrio;
Sete as seguintes propriedades do QuickReport:
5.1. DataSet ter o name da Table principal do relatrio;
5.2. Bands solicite uso das seguintes: Ttulo, Cabealho dos campos, detalhes e rodap da pgina;
Coloque os elementos necessrios ao relatrio e para testar abra a tabela antes de ver o Preview;
Coloque a chamada Modal no item do menu respectivo do formulrio principal;
Monte a interface como na figura abaixo e coloque as instrues necessrias.

Pgina: 102

Delphi 5

Em tempo de projeto esconda as barras


de rolamento do formulrio;
No evento de criao do formulrio
sete a altura e a largura de forma que no
aparea o componente QuickReponte na
execuo e que fique parecida com a figura
ao lado.
Figura - Interface para o relatrio de cargos

11.7.2. Relatrio de Departamentos


Passos para implementao do relatrio no nosso projeto:
1.
2.
3.

4.
5.
6.
7.
8.
9.

Insira um novo formulrio, coloque name e caption sugestivos;


Salve com o nome URelDepart.pas na pasta do nosso projeto;
J que temos o nome definitivo da unit em desenvolvimento podemos fazer os vnculos de uso de units
(unidades). Usando File-Use Unit faa o seguinte:
3.1. Estando na unit do relatrio indique o uso da unit do DataModule (mdulo de dados);
3.2. Em seguida v para a unit do formulrio principal e indique que ir usar a unit do relatrio;
J que temos o relatrio de Cargos pronto copie ele e cole no formulrio do rel. de Departamentos;
Altere as seguintes propriedades do QuickReport:
5.1. DataSet ter o name da Table principal do relatrio;
Altere os elementos necessrios no relatrio e para testar abra a tabela antes de ver o Preview;
Coloque a chamada Modal no item do menu respectivo do formulrio principal;
Quanto a interface com o usurio copie os componentes do formulrio de Cargos e cole no formulrio de
Departamentos.
Pronto! S colocar, agora, as instrues nos devidos procedimentos de evento e acabou.

11.7.3. Relatrios de funcionrios


Relatrio Lista
Passos para implementao do relatrio no nosso projeto:
1.
2.

Faa os passos que voc executou anteriormente, para montar o relatrio simples de departamentos, para montar o
relatrio, simples em lista, dos funcionrios;
Verticalmente aumente a banda dos detalhes e alm dos campos de cdigo e nome do funcionrio coloque os
seguintes campos: foto, sexo, endereo, data de nascimento e nota, como na interface abaixo:

Figura - Viso da composio do relatrio tipo lista para funcionrios

Pgina: 103

Figura - Interface para os relatrios de funcionrios

Delphi 5

Relatrio Mestre-Detalhes
Passos para implementao do relatrio no nosso projeto:
1.
2.

3.
4.

5.
6.
7.
8.
9.

No mesmo formulrio do relatrio de lista para os funcionrio coloque um componente QuickReport para
montarmos o nosso relatrio mestre-detalhes;
Sete as seguintes propriedades do QuickReport:
2.1. DataSet ter o name da Table principal (TableFunc) do relatrio;
2.2. Bands solicite uso das seguintes: Ttulo, Cabealho dos campos e detalhes, por enquanto;
Coloque a partir da pgina de componentes uma Banda SubDetail, sete-a da seguinte forma:
3.1. DataSet ter o name da Table de detalhes (TableDepend);
Coloque a partir da pgina de componentes uma banda e sete-a como abaixo:
4.1. Na propriedade BandType indique-a como rbGroupFooter
4.2. O seu name como GroupFooter1;
4.3. A propriedade HasChild = True;
Selecione a Banda Child que apareceu e altere um pouco a altura dela, assim ela dar um espao entre os grupos;
Volte a Banda SubDetail e sete-a da seguinte forma:
6.1. FooterBand = GroupFooter1 (indicando que o rodap para totais do grupo essa banda);
Na propriedade Bands do QuickReport solicite uso da Banda de rodap de pgina;
Na banda de Rodap do grupo (GroupFooter1) voc dever colocar uma expresso para contar a quantidade de
dependentes que foram listados no grupo, como voc v na figura abaixo;
Coloque os elementos necessrios ao relatrio, como na figura abaixo, e para testar abra as tabelas antes de ver o
Preview.

Detail

Sub-Detail

GroupFooter

Figura - Aspecto do relatrio Mestre-detalhes de funcionrios

12.Entregando a aplicao
Uma das etapas mais importantes no desenvolvimento de qualquer software sua entrega e instalao na
mquina de nossos clientes. Em diversas linguagens de programao essa etapa tem tornado-se uma
verdadeira dor de cabea para os desenvolvedores que, alm de ter tido todo o trabalho de desenvolvimento
ainda tem que se preocupar com a configurao da mquina na qual seu software est sendo instalado.

Pgina: 104

Delphi 5
Na verso 1.0 do Delphi essa preocupao tambm existia. Apesar do desenvolvedor contar com
caractersticas que facilitavam a instalao de seus produtos como, por exemplo, a utilizao de um alias
no desenvolvimento de aplicativos para a rea de banco de dados, o processo de instalao ainda era
trabalhoso. Como parte integrante do Delphi 1.0 estavam includos os discos de instalao do DBE, caso o
aplicativo sendo instalado fizesse acesso um banco de dados, e do runtime do ReportSmith, caso o
aplicativo gerasse relatrios desenvolvidos por ele. Apesar da instalao e configurao desses produtos ser
feita de forma bastante simplificada, ainda era um trabalho a mais que deveria ser realizado pelo
desenvolvedor na hora da instalao de seu produto na mquina de seu cliente.
Com lanamento do Windows 95, um novo padro de instalao de software, atravs do uso de entradas
em registros do sistema operacional, passou a ser utilizado permitindo um melhor gerenciamento dos
produtos correntemente instalados, facilitando o processo de desinstalao.
O InstallShield Express, de agora em diante chamado apenas de InstallShield, foi desenvolvido pela
Stirling Technologies com o objetivo de proporcionar aos desenvolvedores de software uma ferramenta
capaz de facilitar o processo de distribuio de seus produtos. Desde a primeira verso do Delphi para o
ambiente Windows95, o Delphi 2.0, a Borland j forneceu juntamente com seu produto uma cpia do
InstallShield para facilitar ainda mais seus usurios. Passaremos agora a realizar um estudo sobre essa
ferramenta, em sua verso lanada para acompanhar o Delphi 5.0, o InstallShield Express Delphi Edition,
verso 1.11a.

12.1. O InstallShield Express


O InstallShield Express o programa mais utilizado para a criao de instalaes de produtos ente
desenvolvedores, no s de pequenas mas de grandes empresas. Em sua verso distribuda juntamente com
o Delphi 5.0, o desenvolvedor poder contar com todo o suporte s diretrizes para instalaes de software
para o sistema operacional Windows95, tais como entrada de registradores automtica e gerao de
programas de desinstalao.
importante observar que, nessa verso do InstallShield, distribuda com o Delphi 5.0, apenas suportado
o desenvolvimento de instalaes para o ambiente de 32 bits, no sendo possvel, portanto, a instalao
desses produtos no Windows 3.11 ou no prprio MS-DOS.

12.2. Instalando o InstallShield


O processo de instalao do InstallShield bastante simples. Ao colocarmos o CD de instalao do Delphi
5.0 no equipamento no qual desejamos instalar o InstallShield,
aparecer na tela uma janela solicitando a escolha de qual aplicativo
gostaramos de instalar. Devemos escolher a opo InstallShield
Express. A situao descrita anteriormente ilustrada na figura ao
lado.
dado incio ao processo de instalao atravs da utilizao do
InstallShield Wizard, to comum na maioria dos softwares
desenvolvidos para o Windows95. A partir deste ponto sero
solicitadas apenas 3 informaes: O nome do usurio e da companhia
na qual o InstallShield est sendo instalado e a localizao onde os
arquivos do InstallShield devero ser colocados.
Ao trmino da instalao, aparecer na tela uma janela informando o usurio desse fato. Alm disso,
existir a opo de executar o InstallShield. Para que isso seja possvel, basta que o assinalarmos o
checkbox existente nessa janela e clicarmos o boto de finalizar.

12.3. Executando o InstallShield pela primeira vez


Aps o trmino da instalao, o InstallShield j encontra-se pronto para ser executado e comearmos a
gerar os nossos primeiros discos de instalao. Quando executamos o InstallShield pela primeira vez,
exibida a caixa de dilogo mostrada ao lado.
Temos a opo de escolher duas opes: Abrir um
projeto de instalao existente ou Criar um novo
projeto de instalao. Essa caixa de dilogo ser

Pgina: 105

Delphi 5
exibida toda vez que o InstallShield for inicializado a menos que a opo Dont display this screen again
seja assinalada. Uma vez que tenhamos criado o nosso primeiro projeto a opo de abrir o nosso ltimo
projeto ficar disponvel para seleo. Iniciemos, ento, escolhendo a opo para Criar um novo projeto de
instalao e, em seguida, pressionemos o boto OK.
Aps clicarmos o boto OK, uma seqncia de caixas de dilogo apresentada para que possamos criar um
projeto de instalao de software. A primeira dessas
caixas de dilogo mostrada ao lado. Essa utilizada
para identificar o projeto que est sendo
desenvolvido. Devemos, atravs do Directory List
Box selecionar o diretrio no qual sero armazenados
os arquivos a serem criados para o novo projeto. Caso
ainda no exista o subdiretrio no qual desejamos
colocar o nosso projeto, poderemos especific-lo no
New Subdirectory Edit Box. Na figura acima, caso
desejssemos colocar o nosso projeto num diretrio
chamado ProjectX localizado no diretrio IS Express
Delphi Edition, bastaramos colocar ProjectX no Subdiectory Edi Box.
Devemos, ainda, dar um nome ao nosso projeto. Para isso, basta colocarmos no Project Name Edit Box o
nome desejado. Convencionalmente, dado ao projeto o nome da aplicao que foi desenvolvida. Observe
que o nome que o nome dado ao projeto automaticamente colocado no texto acima do Directory List Box,
com a extenso iwz (do ingls InstallShield Wizard).
Existe ainda a possibilidade da criao de uma instalao mltipla. Esse tipo de instalao bastante
comum em aplicaes comerciais onde dada ao usurio a oportunidade de escolher entre vrios tipos de
instalao. Com a verso do InstallShield fornecida com o Delphi 5.0 possvel escolher entre 3 tipos de
instalao:

Tpica

Normalmente uma instalao completa, incluindo todos os componentes do sistema em questo.

Compacta

Normalmente composta apenas por aqueles componentes necessrios execuo do sistema

Customizada

Permite ao usurio escolher quais os componentes a serem instalados


Para que isso seja possvel devemos assinalar a opo Include a Custom Setup Type. Por hora vamos
comear com o desenvolvimento de uma instalao simples, no assinalando, portanto, essa opo. No
nosso exemplo, criaremos um projeto chamado Calc a ser armazenado no diretrio ProjectX como
mostrado na figura acima. Podemos dar continuidade ao desenvolvimento de nosso projeto pressionando o
boto Create. Pronto, agora j possumos um esqueleto para o desenvolvimento de nosso projeto de
instalao, restando apenas preencher os espaos em branco.
Passamos a partir de agora a mostrar cada um dos passos a serem preenchidos para que possamos, enfim,
obter os discos de instalao de nosso produto, so eles:

Set the Visual Design

Fornece informaes bsicas a respeito da aplicao.

Select InstallShield Objects for Delphi

Utilizado para fornecer informaes a respeito de objetos do Delphi tais como o BDE a serem
utilizados pela aplicao

Specify Components and Files

Fornece informaes a respeito dos arquivos a serem instalados, bem como os diversos tipos de
instalao existentes

Select User Interface Components

Informa quais as caixas de dilogo que sero exibidas no processo de instalao

Pgina: 106

Delphi 5

Make Registry Changes

Utilizado para informar quais alteraes sero efetuadas nos registros do sistema

Specify Folders and Icons

Fornece informaes a respeito dos cones e das pastas que sero utilizadas na instalao

Run Disk Builder

Cria as imagens dos discos de instalao baseadas nas informaes fornecidas nos passos anteriores

Test the Installation

Testa o processo de instalao

Create Distribution Media

Cria os discos de instalao


A janela obtida aps o clique do boto Create mostrada
ao lado.Nessa janela esto dispostos todos os passos
apresentados anteriormente, bem como suas subdivises.
Antes de comearmos nossa explicao sobre cada um dos
passos a serem seguidos at a gerao final dos discos de
instalao gerados pelo InstallShield vamos falar um
pouco sobre as opes presentes na janela exibida acima.

12.4. A janela principal


A janela principal do InstallShield composta por uma srie de menus, um toolbar, um statusbar e,
opcionalmente, um projeto. Os menus existentes na janela principal do InstallShield so apesentados a
seguir:

File

Contm opes tais como Abrir e Salvar alm de uma lista dos projetos usados mais recentemente

View

Permite configurar a exibio ou no da toolbar e da statusbar

Checklist

Fornece uma maneira alternativa de se acessar os diversos passos para a criao dos discos de
instalao do projeto corrente

Help

Oferece acesso ajuda do InstallShield


Algumas das opes fornecidas atravs dos menus do InstallShield tambm esto disponveis atravs do
toolbar mostrado a seguir.
Save

Test Run

Explorer

About

New

Build
Open

Copy To Floppy
Help

Pgina: 107

Delphi 5

New

Abre a caixa de dilogo Abrir Novo Projeto

Open

Abre a caixa de dilogo Abrir

Save

Salva o projeto corrente com o nome e localizao atual

Build

Abre a caixa de dilogo do Disk Builder

Test Run

Executa um teste de execuo do projeto corrente

Copy To Floppy

Abre a caixa de dilogo Copy to Floppy

Explorer

Executa o Windows Explorer

About

Abre a caixa de dilogo About

Help

Executa a ajuda sensvel ao contexto. Ao clicar nesse boto, o ponteiro do mouse muda de formato.
Clique sobre um elemento qualquer para obter ajuda especfica para esse elemento.
importante observar que, da mesma maneira como acontece com o Delphi, o InstallShield capaz de
trabalhar apenas com um nico projeto por vez. Caso esteja-se trabalhando em um projeto e escolha-se a
opo Abrir e um outro projeto seja selecionado, o projeto corrente ser fechado automaticamente para que
o outro seja aberto. O mesmo acontece caso um novo projeto seja criado.
Com o objetivo de fornecer alguma ajuda na hora de selecionar um dos botes mostrados acima, existe um
statusbar na parte inferior
da
janela
principal,
mostrado ao lado.
A medida em que o se passa o ponteiro do mouse por sobre os botes do speedbar, uma ajuda rpida sobre
a funcionalidade desse boto exibia no statusbar.
Alm dos botes contidos no speedbar e do statusbar, a janela principal do InstallShield composta por
uma janela contendo um checklist das opes existentes, mencionadas anteriormente, para a criao de uma
instalao.
Item
Concludo

Passos
Itens

O checklist mostrado ao lado serve como um


guia para indicar as opes a serem preenchidas
para a gerao dos discos de instalao de um
software. Nem todos os passos mostrados no
checklist so de preenchimento obrigatrio,
dependendo da instalao sendo criada, porm
so exibidos como forma de referncia para
futuras instalaes.

Cada um dos passos listados no checklist


composto por um ou mais itens que podem ser
configurados. Para que isso seja possvel bastase clicar com o mouse por sobre o boto que est do lado esquerdo do item que se deseja configurar. Aps
o clique, ser exibida a caixa de dilogo correspondente para a configurao do item selecionado. Existe
ainda a possibilidade de se selecionar qualquer um dos passos do checklist atravs das opes do menu

Pgina: 108

Delphi 5
Checklist. Aps a concluso de cada item do checklist um marcador de concluso aparecer do lado
esquerdo do item concludo. Veremos adiante a funcionalidade de cada um desses itens.
Existe ainda a opo de ir para uma segunda pgina, clicando-se com o mouse por sobre a pequena dobra
de pgina existente no canto inferior direito do checklist. Essa segunda pgina mostra algumas informaes
de como entrar em contato com os desenvolvedores do InstallShield para enviar comentrios, sugestes e
problemas encontrados com o produto.

12.5. Ajustando o Visual Design


Vamos a partir de agora comear, realmente, a desenvolver e criar a instalao de nosso produto. A
primeira coisa a fazer fornecer algumas informaes bsicas a respeito do software que vamos instalar.
Para isso, comearemos preenchendo as informaes solicitadas no primeiro passo do checklist mostrado
acima. Ao clicarmos no item Application Information a caixa de dilogo mostrada a seguir exibida.
A caixa de dilogo mostrada ao lado utilizada pelo InstallShield para
obter informaes que sero utilizadas internamente no processo de
instalao. Porm, algumas dessas informaes so de preenchimento
obrigatrio pois so utilizadas no para atualizar os registros do sistema
operacional Windows95, so elas: o nome da aplicao, a vero do
produto e o nome da companhia. Essas informaes j vm preenchidas
com valores default, podendo ser alterados mas no devem ser deixados
em branco. Caso isso acontea, o InstallShield no ser capaz, por
exemplo, de incluir o registro de desinstalao do produto durante sua
instalao. Nesse item existem 5 campos a serem preenchidos como
mostrado a seguir:

Application Name
Contm o nome da aplicao. O nome da aplicao pode conter, no mximo, 80 caracteres e preenchido,
por default, com o nome do projeto que est sendo criado no InstallShield
Application Executable
Indica o arquivo executvel primrio da aplicao. A escolha do arquivo executvel pode ser feita atravs
do boto browse. Aps a seleo desse arquivo, apresentado, na caixa de texto, a localizao desse
arquivo, por exemplo, da seguinte forma:
[Program Files]\Controle.exe

O especificador [Program Files] utilizado pelo InstallShield para identificar um grupo dentro do processo
de instalao, ou seja, um diretrio selecionado pelo usurio no momento da instalao. Essa noo ficar
bem mais clara adiante, quando mostrarmos como criar Grupos de Componentes para uma instalao
Version
Indica qual a verso do produto a ser instalado
Company
Indica o nome da companhia desenvolvedora do produto
Default Destination Directory
Especifica o diretrio default para a instalao do produto. O padro a ser seguido o seguinte:
<ProgramFilesDir>\<Companhia>\<Aplicao>

O especificador <ProgramFilesDir> contm o diretrio default de instalao no computador onde o


aplicativo ser instalado, em geral, Arquivos de Programas no Windows95. Companhia e Aplicao so
substitudas pelo nome da companhia e da aplicao respectivamente. Esse ser o diretrio exibido para o
usurio no momento da instalao porm, nada impede que o diretrio no qual o aplicativo ser instalado
seja alterado no momento da instalao.

Pgina: 109

Delphi 5
Existem diversos outros especificadores que podem ser utilizados no InstallShield para customizar ainda
mais todo o processo de instalao, para uma explanao mais detalhada desses especificadores verificar na
ajuda do InstallShield, sob o ttulo de Express Directory Specifiers.

Aps o preenchimento dos campos acima temos 3 opes a seguir: clicar o boto OK, confirmando os
valores colocados (o sinal de verificao aparecer do lado esquedo do item Applicaion Information), clicar
o boto Cancel, cancelando a operao ou, por fim, selecionar uma das tabs restantes para continuar
preenchendo as informaes para a instalao.
Vamos clicar no segundo tab, chamado de Main Window, existente na caixa de dilogo Set the Visual
Design para continuarmos a fornecer informao sobre a nossa instalao.

Na aba Main Window mostrada acima, so solicitadas informaes a


respeito da aparncia da janela principal do programa de instalao que
est sendo desenvolvido. Essas informaes so descritas mais
detalhadamente a seguir:

Main Title
Existem duas opes a serem seguidas neste ponto, a escolha de um
texto, com no mximo 80 caracteres, ou a escolha de um bitmap, com no mximo 16 cores, para ser
colocado como ttulo na janela principal do aplicativo de instalao. Por default, a opo selecionada a de
colocao de um texto, porm podemos selecionar um bitmap mudando o radio button para a opo de
bimap. Para escolhermos qual bitmap a ser exibido, podemos utilizar o boto Browse. Um detalhe a ser
observado que, para selecionarmos a opo de bitmap, no basta apenas clicarmos no boto Browse,
devemos ainda escolher o radio button correspondente para que essa seja a opo escolhida. Caso
contrrio, ser exibido como ttulo a localizao (path) do arquivo selecionado. O ttulo, ou bitmap,
selecionado ser exibido no canto superior esquerdo da janela.
Logo Bitmap
Essa opo utilizada para escolher um bitmap como, por exemplo, a logomarca da empresa que
desenvolveu o sistema a ser instalado, na janela principal da instalao. O processo de seleo desse bitmap
exatamente igual ao mencionado anteriormente.
Uma vez selecionado qual o bitmap a ser utilizado, dever ser feita a escolha da posio na qual ele ser
colocado na janela principal. Existem trs posies possveis: centralizada, canto superior esquerdo e canto
superior direito. Caso seja escolhido o canto superior esquerdo, o bitmap para a logomarca ser sobreposto
pelo bitmap do ttulo da janela caso este exista.
Background Color
Aqui temos a opo de escolher a cor que ser utilizada como cor de fundo para a janela principal do
aplicativo de instalao. O default Dithered Blue, o azul utilizado na maioria dos programas de instalao
existentes.

A seguir temos um exemplo da janela principal de um programa de instalao.

Resta-nos agora o ltimo tab da caixa de dilogo Set the Visual


Design, a tab Features, mostrada a seguir.
Temos aqui a opo de incluir
em
nosso
programa
de
instalao
a
opo
para
desinstalar o programa que
estiver sendo instalado.
recomendvel que essa opo

Pgina: 110

Delphi 5
eseja marcada. Dessa forma, as modificaes criadas automaticamente pelo InstallShield, por exemplo, nos
registrados do sistema operacional, podem ser feitas automaticamente por um programa de desinstalao.
Terminamos a primeira etapa de configurao de nosso programa de instalao, ajustando pequenas
propriedades que sero utilizadas pelo InstallShield para gerar o incio da instalao do produto em
questo. At agora, todas as informaes fornecidas no so influenciadas sobre qual a plataforma de
desenvolvimento utilizada, se Delphi ou qualquer outra porm, a partir de agora, vamos comear a ver
detalhes que facilitam a instalao de produtos desenvolvidos com o Delphi.

12.6. Selecionando objetos do InstallShield para o Delphi


A utilizao do InstallShield para criar instalaes para aplicativos desenvolvidos em outras linguagens,
como mencionado anteriormente, pode ser feita desde que no seja utilizada nenhuma opo desta etapa
que apresentamos nessa seo. Aqui, passaremos a referenciar objetos existentes no ambiente de
desenvolvimento do Delphi para que o InstallShield possa gerar, da melhor forma possvel, esses
programas de instalao.
A caixa de dilogo Select InstallShield Objects for Delphi composta por duas tabs, a primeira delas
mostrada a seguir.

Temos aqui a opo de escolher quais os objetos


a serem selecionados para serem includos no
processo de instalao. Caso nenhum desses
objetos seja necessrio ao software que ser
instalado, nenhuma desses objetos deve ser
assinalado. No caso da utilizao de algum
desses objetos, o objeto necessrio dever ser
assinalado. Ao assinalarmos qualquer uma
dessas opes, ser exibida automaticamente
uma nova caixa de dilogo para que o objeto
selecionado possa ser corretamente configurado.
O boto Settings poder ser utilizado
posteriormente para alterar essa configurao,
tornando-se habilitado. Os objetos mostrados na
figura anterior so utilizados, normalmente, com
aplicaes que faam acesso Banco de Dados, para um software que no utilize o BDE ou SQL Links,
esses objetos devem ser ignorados, passando para a etapa seguinte no processo de gerao do aplicativo de
instalao.
Caso o objeto BDE (Borland Database Engine) seja selecionado, a caixa de dilogo mostrada a seguir ser
exibida automaticamente.
A caixa de dilogo BDE Installation Type exibida para que
seja feita a escolha de qual tipo de instalao do BDE que
dever ser feita na mquina do cliente. Caso seja feita a
escolha por uma instalao parcial, solicitados quais os
Drivers e Query Engines que sero utilizados no processo de
instalao. Existe, contudo, uma lista mnima de arquivos a
serem includos na instalao, o que pode causar alguns
problemas caso algum desses arquivos no seja instalado. Para
uma lista completa desses arquivos consultar o tpico da ajuda
Partial BDE Installation. Devido a esses fatores,
recomendada a escolha de uma instalao completa para evitar
qualquer problema. Uma vez selecionado o tipo de instalao do BDE a ser realizada, o boto Avanar, ou
Next, pode ser clicado.
O clique no boto Avanar d incio a uma sequncia de 4 passos para permitir a configurao do BDE que
ser instalado na mquina do cliente. O primeiro desses passos diz respeito a criao de todos os alises
utilizados pela aplicao sendo instalada. Mostramos a seguir a caixa de dilogo para a criao de aliases.

Pgina: 111

Delphi 5
Temos nessa caixa de dilogo a opo de criar os aliases que sero utilizados na aplicao, bem como
remover aqueles que porventura tenham sido colocados por engano. Para que possamos criar um alias
devemos clicar no boto New. Com isso, exibida a caixa de dilogo a seguir, solicitando o fornecimento
do nome do alias a ser criado.
Podemos colocar o nome do alias que desejamos criar e em
seguida, clicar o boto OK. Devemos observar que, os nomes
dos aliases que iremos criar na instalao devem ser os
mesmos que esto sendo utilizados pelo programa sendo
instalado.
Aps clicarmos
no boto OK, o alias colocado no listbox da caixa de dilogo
mostrada anteriormente. Uma vez que todos os aliases que sero utilizados na aplicao sejam criados
podemos passar ao passo seguinte da configurao do BDE clicando no boto Next.
A caixa de dilogo seguinte permite especificar se o arquivo de configurao do BDE deve ser salvo de tal
forma que tanto aplicaes de 32 bits quanto as de 16 bits possam acess-lo. Para que isso seja possvel, o
checkbox mostrado deve ser assinalado. A seguir mostramos a caixa de dilogo citada anteriormente.
Caso o checkbox no seja assinalado, apenas a verso de 32 bits ser salvo. Podemos clicar no boto
Avanar para continuar a configurao do BDE. A caixa de dilogo responsvel pelo terceiro passo no
processo de configurao do BDE mostrada a seguir.
A caixa de dilogo mostrada acima permite a configurao de
cada um dos aliases a ser criado no processo de instalao.
Para isso, devemos escolher no combobox Alias Name o alias
a ser configurado. Para cada um desses aliases, deveremos
especificar sua localizao, bem como o driver que ser
utilizado por ele.
Na caixa de texto
Path, devemos colocar o caminho a ser utilizado para o
armazenamento das tabelas pertencentes ao alias em questo.
Podemos utilizar como parte do caminho, os especificadores
definidos no InstallShield. No exemplo acima, foi utilizado o especificador <INSTALLDIR> para
identificar o diretrio de instalao no qual o aplicativo foi instalado.
Alm da definio do diretrio no qual os dados sero colocados, necessria tambm a especificao de
qual driver ser utilizado no acesso a esses dados. Os drivers disponveis so listados no combobox Type.
Tanto o caminho quanto o tipo de driver so de preenchimento obrigatrio, no devendo, portanto, serem
deixados em branco.
Uma vez preenchidas todas as informaes com relao aos aliases a serem utilizados pela aplicao,
podemos clicar no boto Avanar para chegarmos ltima caixa de dilogo de configurao do BDE,
mostrada a seguir.
A caixa de dilogo mostrada acima finaliza o processo de configurao do BDE a ser instalado na mquina
do cliente. Para que essas configuraes sejam utilizadas devemos clicar o boto OK. Para mudarmos
posteriormente, qualquer uma dessas configuraes, devemos clicar o boto Settings na caixa de dilogo
Select InstallShield Components for Delphi.
O segundo componente do InstallShield para o Delphi que
pode ser selecionado o SQL Links. Caso o programa a ser
instalado faa uso de qualquer um dos links existentes,
devemos assinalar essa opo. Um detalhe importante a ser
observado que, para se utilizar o componente SQL Links,
devemos tambm utilizar o componente BDE mencionado
anteriormente.
Aps assinalarmos a opo para o componente do SQL Links, a
seguinte caixa de dilogo de configurao ser exibida
automaticamente.
Atravs da caixa de dilogo mostrada acima, podemos escolher

Pgina: 112

Delphi 5
quais os drivers que devem ser instalados juntamente com o aplicativo. Por default todos os drivers esto
assinalados.
O InstallShield, no processo de instalao, instalar todos os arquivos necessrios e far todas as alteraes
nos registradores do sistema operacional para os drivers assinalados para a instalao. Devemos lembrar
que, a escolha de drivers alm do necessrio no acarreta em problema algum para a instalao, o nico
aspecto negativo est no fato da instalao e consequente diminuio do espao livre em disco, com
arquivos desnecessrios.
Uma vez configurados os componentes do InstallShield para o Delphi em seus aspectos gerais podemos
avanar para a aba Advanced. Devemos observar que o contedo dessa aba depender das opes
selecionadas na aba General. A seguir mostramos a aba Advanced.
Como pode ser observado na figura acima, a aba Advanced tem a
finalidade de exibir informaes a respeito dos arquivos que, de
acordo com as opes feitas na aba General, foram selecionados
para instalao. Nesse ponto no podemos adicionar ou remover
elementos. Para adicionarmos elementos, devemos faz-lo na aba
General, enquanto que a remoo de arquivos em particular poder
ser feita na caixa de dilogo Groups and Files que ser vista a
seguir. Para cada arquivo selecionado so exibidas informaes a
respeito da data, tamanho e verso do arquivo.
Uma vez definidos e configurados os componentes que sero
utilizados pelo InstallShield no processo de instalao, estamos prontos para seguir adiante. Podemos clicar
no boto OK e passar para o prximo passo no processo de criao de nossa instalao descrito a seguir.

12.7. Especificando componentes e arquivos


Neste ponto do processo de desenvolvimento de nossa instalao estamos prontos para especificar quais os
arquivos do software a ser instalados que sero inclusos no processo de instalao, bem como a sua
localizao na mquina do cliente. Para isso devemos escolher a opo Groups and Files localizada na
opo Specify Components and Files no checklist da instalao.

O processo de configurao dos arquivos a serem instalados pelo InstallShield est baseado no conceito de
grupos. A idia de grupo bastante simples de ser entendida e utilizada, principalmente para instalaes
que no envolvam mltiplas configuraes como o caso da qual estamos correntemente desenvolvendo.
Um grupo pode ser visto como uma coleo de arquivos relacionados como, por exemplo, os arquivos de
banco de dados de uma aplicao. A cada grupo associada uma localizao (path) que ser utilizado no
momento da instalao dos arquivos pertencentes a esses grupos na mquina do cliente.
A criao de grupos, a especificao dos arquivos pertencentes a eles e a determinao de seu local de
instalao dos grupos associados a cada uma das instalaes desenvolvidas pelo InstallShield realizada
atravs da aba Groups na caixa de dilogo Specify Components and Files mostrada a seguir.

Pgina: 113

Delphi 5

Nesse ponto podemos comear a organizar os arquivos que sero instalados estabelecendo sua localizao
relativa na mquina do cliente. aconselhvel que esses arquivos j estejam agrupados na prpria mquina
de desenvolvimento para que o processo de montagem dos grupos seja feito de forma mais fcil e rpida.
Inicialmente j existe pelo menos um grupo a ser instalado, chamado Program Files, que possui o arquivo
executvel principal da aplicao. Por default esse arquivo ser instalado no especificador
<INSTALLDIR> que identifica o diretrio selecionado pelo cliente no momento da instalao.
Dependendo de quais componentes tenham sido selecionados na caixa de dilogo Select InstallShield
Components for Delphi existiro outros grupos definidos automaticamente para instalao, como mostrado
na figura acima. Nesse momento podemos modificar a localizao desses grupos clicando o boto Modify
Group. Devemos observar que, em relao aos grupos do BDE criados automaticamente, a modificao de
sua localizao no aconselhvel. Essa observao advm do fato de que, caso j exista uma aplicao na
mquina do cliente que utilize o BDE e, consequentemente, possua seus arquivos instalados no diretrio
default indicado pelo InstallShield, a instalao atual ir instalar uma nova cpia do BDE em um local
diferente, ocupando espao desnecessrio e podendo, inclusive, causar problemas durante a execuo dos
aplicativos que o utilizem. Ao clicar-se no boto Modify Group, a caixa de dilogo a seguir exibida.

Atravs dessa opo podemos mudar tanto o nome do grupo sendo


utilizado quanto sua posio relativa na mquina do cliente. O
diretrio de destino pode ser escolhido dentre uma das opes
existentes no combobox quanto pode ser dada uma nova localizao
atravs de sua digitao direta.
Alm de modificar grupos criados automaticamente pelo InstallShield
tambm temos a opo de criar novos grupos para a instalao. Para
que isso seja possvel, devemos clicar o boto Add Group. Ao fazermos isso, ser exibida uma caixa de
dilogo, semelhante de modificao de grupo, solicitando o nome do grupo a ser adicionado, bem como
sua localizao relativa na mquina do cliente. Aps o preenchimento dessas informaes podemos clicar o
boto OK para confirmar a adio do novo grupo ou Cancel para cancelar essa adio. Uma vez clicado o
boto OK, o grupo adicionado lista de grupos de arquivos existentes. Devemos lembrar de adicionar um
ou mais grupos para os arquivos de banco de dados. Esses grupos devero conter a localizao especificada
no alias criado anteriormente caso ainda no exista nenhum grupo indicando essa localizao.
Uma vez criado um grupo devemos indicar quais os arquivos que sero colocados no diretrio indicado por
esse grupo. Para isso, devemos utilizar o Windows Explorer. Caso o Windows Explorer ainda no esteja
executando podemos execut-lo clicando o boto Launch Explorer. Uma vez em execuo, para adicionar
arquivos ao grupo desejado basta que selecionemos os arquivos desejados no Windows Explorer e
arrastemo-los para o grupo desejado, numa simples operao de drag-and-drop. Devemos observar que
no importa qual o grupo correntemente selecionado, os arquivos sero adicionados no grupo para o qual o
mouse seja arrastado.
Quando adicionamos arquivos grupos devemos tomar um cuidado em especial. No momento em que o
InstallShield vai gerar os discos de instalao para a aplicao corrente, ele faz uso do caminho
especificado no grupo ao qual ele faz parte. Isso quer dizer que, do momento em que adicionamos um
arquivo um grupo, no podemos remover nem mover esse arquivo, pois assim o InstallShield no ser

Pgina: 114

Delphi 5
capaz de gerar os discos de instalao. Aps a gerao desses discos, tanto a remoo quanto a alterao da
localizao desses arquivos pode ser feita normalmente.
A remoo de um grupo tambm feita de forma bem simples e intuitiva. Para que um grupo seja
removido basta selecionarmos o grupo em questo e pressionarmos a tecla del. O InstallShield abre uma
caixa de dilogo questionando se desejamos realmente remover o grupo selecionado e, caso esse seja
realmente o nosso desejo, o grupo ser removido. Caso existam arquivos no grupo selecionado esses
tambm sero removidos da instalao. De forma semelhante podemos remover os arquivos, basta que
selecionemos o arquivo desejado e pressionemos a tecla del. O arquivo em questo ser removido da
instalao. A diferena entre a remoo de um grupo ou de um arquivo est na confirmao da remoo.
No caso da remoo de arquivos no existe um pedido de confirmao, o arquivo removido
imediatamente aps pressionarmos a tecla del, enquanto que ao removermos um grupo, existe o pedido
pela confirmao da remoo.
O boto File Details exibe informaes a respeito do arquivo correntemente selecionado. Um exemplo da
caixa de dilogo com as informaes de um arquivo mostrado a seguir.
Uma observao que deve ser feita em relao
instalao de um software que utilize arquivos gravados
no diretrio do Windows. Quaisquer arquivos que se
tente copiar, tanto para o diretrio do Windows quanto
para o diretrio System, que j possuam nesses diretrios
da mquina do cliente verses mais recentes do que
aquelas que a instalao est tentando gravar, no sero
copiados.
No processo de desenvolvimento de instalaes simples, que no envolvam mltiplas configuraes como
mencionado anteriormente, a nica caixa de dilogo a ser preenchida a de Groups. Deixaremos de lado,
momentaneamente, o preenchimento das duas outras abas, Components e Setup Types, que sero vistas
posteriormente quando falarmos a respeito de instalaes mltiplas. Podemos seguir adiante pressionando a
o boto OK.

12.8. Selecionando os componentes de interface com o usurio


Passamos agora a selecionar e configurar as caixas de dilogo que aparecero para o usurio no momento
da instalao. Esse processo feito atravs da caixa de dilogo Dialog Boxes mostrada a seguir.
A caixa de dilogo Dialog Boxes dividida em duas
partes. Do lado esquerdo encontra-se uma lista contendo
todas as caixas de dilogo que podem ser exibidas, na
ordem em que aparecem na lista, durante o processo de
instalao. Para que uma caixa de dilogo seja exibida
basta que o checkbox do lado esquerdo de seu nome seja
assinalado. Do lado direito encontra-se, na aba Preview,
um exemplo de que tipo de caixa de dilogo ser exibida
durante a instalao para a caixa de dilogo
correntemente selecionada do lado esquerdo. Para
algumas dessas caixas de dilogo, ainda existe do lado
direito uma aba chamada Settings, que permite a configurao da caixa de dilogo correntemente
selecionada. A seguir fornecemos uma breve descrio de cada uma das caixas de dilogo que podem ser
includas no processo de instalao, indicando a possibilidade ou no de sua configurao.

Welcome Bitmap
Permite a exibio de um bitmap logo aps a exibio da caixa de dilogo de inicializao da instalao
mas antes de qualquer outra caixa de dilogo. Um exemplo de uma caixa de dilogo de inicilizazao
mostrado a seguir.

Pgina: 115

Delphi 5
A aba Settings para esse item permite a escolha de qual bitmap deseja-se exibir.
Welcome Message
Exibe uma mensagem ao usurio dando as boas vindas ao programa de instalao e fornecendo instrues
ao usurio para que esse feche todos os aplicativos que estejam correntemente em execuo antes de
continuar o processo de instalao. Um breve aviso sobre direitos autorais tambm fornecido.
O nome fornecido na caixa de dilogo Application Information colocado automaticamente no topo dessa
caixa de dilogo.
No existe a aba Settings para esta caixa de dilogo.
Software License Agreement
Exibe uma caixa de dilogo contendo o Acordo para Licena de Uso do software que est sendo instalado.
A aba Settings permite indicar o arquivo texto que contm o texto a ser exibido na caixa de dilogo citada
acima.
Readme Information
Essa caixa de dilogo utilizada para exibir um arquivo texto do tipo Leiame. importante observar que o
texto a ser exibido nessa caixa de dilogo no formatado automaticamente. Para que o texto seja
completamente exibido na caixa de dilogo, ele deve ser formatado com retorno de carro em cada linha de
acordo com a formatao desejada.
User Information
Utilizada para coletar informaes a respeito do usurio tais como nome, companhia e, opcionalmente, o
nmero serial do produto sendo instalado.
A aba Settings permite a definio de quais informaes podem ser fornecidas pelo usurio. Existem duas
opes, a primeira sem a opo para o nmero serial e a segunda, com o nmero serial.
Choose Destination Location
Atravs dessa caixa de dilogo o usurio pode escolher a localizao na qual ele deseja que o aplicativo
seja instalado. O diretrio escolhido pelo usurio ir substituir o especificador <INSTALLDIR>, nos locais
nos quais ele tenha sido utilizado no processo de criao da instalao.
A aba Settings utilizada para definir o diretrio default a ser exibido para o usurio no momento da
instalao. Pode-se ser utilizado qualquer especificador existente no InstallShield para compor o diretrio
default porm, no aconselhada a utilizao do especificador <INSTALLDIR>. Caso isso seja feito, no
momento da gerao dos discos de instalao, o InstallShield fornecer um warning alertando sobre a
utilizao desse especificador em um local no apropriado. O default utilizado pelo InstallShield para o
diretrio default de instalao segue o padro:

<ProgramFilesDir>\<Companhia>\<Aplicao>

Onde companhia e aplicao so substitudos pelas informaes fornecidas na caixa de dilogo Application
Information.
Setup Type
Permite ao usurio escolher qual o tipo de instalao desejada. Para que essa caixa de dilogo possa ser
exibida, faz-se necessrio que tenham sido criados os tipos de instalao correspondentes.
No existe a aba Settings para esta caixa de dilogo.
Custom Setup
Essa caixa de dilogo ser exibida apenas se o usurio escolher a opo de instalao customizada na caixa
de dilogo Setup Type.
Permite a escolha de quais componentes o usurio deseja instalar. Os componentes constantes nessa caixa
de dilogo devem ter sido previamente determinados na caixa de dilogo Components.

Pgina: 116

Delphi 5
No existe a aba Settings para esta caixa de dilogo.
Select Program Folder
Permite a escolha do nome do folder no qual os cones do aplicativo sendo instalado sero colocados. Por
default, o nome do folder utilizado o mesmo dado ao projeto no InstallShield.
A aba Settings permite a definio do nome que ser dado ao folder.
Start Copying Files
Permite ao usurio verificar as informaes fornecidas por ele ao programa de instalao antes do incio da
cpia dos arquivos para a mquina cliente.
No existe a aba Settings para esta caixa de dilogo.
Progress Indicator
Fornece ao usurio uma visualizao rpida do progresso da instalao. indicado o percentual de
progresso, bem como o arquivo correntemente sendo copiado.
No existe a aba Settings para esta caixa de dilogo.
Billboards
Utilizada para exibir um bitmap, ou um arquivo do tipo Windows Metafile, contendo informaes diversas
como, por exemplo, a respeito de outros produtos da empresa.
A aba Settings utilizada para escolher qual o arquivo bitmap ou metafile a ser exibido.
Online Registration
Essa caixa de dilogo utilizada para permitir o registro on-line do produto adquirido.
A aba Settings utilizada para definir o nmero de telefone a ser utilizado para a conexo, bem como o
login de acesso para se efetuar o registro.
Setup Complete
Essa caixa de dilogo utilizada ao final do processo de instalao. Atravs dela permitido tanto a
execuo imediata da aplicao, a leitura de um arquivo do tipo Leiame ou ainda o reboot da mquina do
cliente.
A aba Settings permite a escolha da opo de exibio da caixa de dilogo para dar um reboot na mquina
cliente atravs da marcao do checkbox Always show reboot computer dialog box. Podemos ainda indicar
a localizao do arquivo a ser executado automaticamente ao final da instalao, bem como os parmetros
a serem utilizados, ou ainda indicar qual o arquivo texto a ser exibido caso a opo de exibir o arquivo
readme seja selecionada.

12.9. Mudando o registry


At agora, nas diversas caixas de dilogo apresentadas nesta apostila, foram fornecidas informaes ao
InstallShield que sero diretamente visveis aos usurios no momento da instalao. Neste tpico veremos
como definir informaes que sero fornecidas ao sistema operacional.
A caixa de dilogo Make Registry Changes permite ao desenvolvedor definir as diversas chaves que sero
utilizadas nos registradores do sistema operacional, bem como definir os valores que nelas sero
armazenados. Para atender a essas finalidades,
a caixa de dilogo Make Registry Changes est
dividida em duas abas, cada um das quais
destinadas a atender as funcionalidades citadas
anteriormente. A primeira dessas abas, a aba
Registry Keys mostrada a seguir.
A caixa de dilogo Registry Keys utilizada
para definir as chaves que sero adicionadas

Pgina: 117

Delphi 5
aos registradores do sistema operacional no momento da instalao do software. O contedo dessa aba est
intimamente ligado ao contedo da segunda aba existente nessa caixa de dilogo onde, os valores exibidos
na segunda aba so relativos chave correntemente selecionada na primeira aba.
Inicialmente, a aba Registry Keys possui seis chaves previamente definidas como mostrado na figura
anterior. Essas chaves, chamadas de root keys, no podem ser removidas ou alteradas por serem utilizadas
pelo programa de desinstalao. As root keys servem como base para outras chaves a serem adicionadas ao
programa de instalao. Para maiores informaes a respeito das root keys consultar o tpico de ajuda
Registry Key Automatic Entry. Cada nova chave a ser adicionada deve, portanto, ser descendente de uma
chave j existente.
O boto Modify Key no est inicialmente habilitado uma vez que no possvel a alterao de qualquer
uma das root keys. Uma vez que uma nova chave for adicionada e selecionada, esse boto passar a estar
habilitado e poder ser utilizado normalmente. Para adicionarmos uma chave devemos primeiramente
escolher e selecionar sob qual root key desejamos adicionar a nossa chave. Em seguida devemos clicar o
boto Add Key para que a seguinte caixa de dilogo aparea.
Devemos preencher o campo New Key com o nome
da nova chave a ser criada. Durante a composio do
nome da nova chave, podem ser utilizados mais de
um nvel de chaves, sendo essas separadas por uma
barra invertida como mostrado na figura acima. Uma
vez definida a nova chave, podemos clicar o boto
OK para que a nova chave seja criada e exibida como
uma ramificao sob a root key indicada no campo
Sub Key of da caixa de dilogo Registry New Key
mostrada acima.
A modificao de uma chave existente tambm feita de forma bastante simplificada. Para isso, basta que
a chave a ser modificada seja escolhida e seja pressionado o boto Modify Key. Uma vez pressionado o
boto Modify Key, uma caixa de dilogo semelhante mostrada acima exibida contendo a chave a ser
alterada. Para alterarmos a chave baste que a nova chave seja digitada no lugar da chave atual. Para
finalizar a alterao basta que o boto OK seja clicado. Uma observao a ser feita est no fato de que, ao
selecionarmos uma chave que possua subchaves, apenas a chave selecionada ser alterada enquanto que as
subchaves permanecero inalteradas.
A remoo de uma chave, da mesma forma que a alterao, bastante simples e intuitiva. Para que uma
chave seja removida basta que ela seja selecionada e a tecla del seja pressionada. No caso da seleo de
uma chave que possua subchaves a remoo feita da mesma forma porm as subchaves tambm sero
removidas juntamente com a chave inicialmente selecionada. Uma observao a ser feita est no fato da
no solicitao de uma confirmao antes da remoo de uma chave. Devemos, portanto, Ter bastante
cuidado antes de remover alguma chave para evitarmos qualquer possibilidade de re-trabalho.
O boto Registry Editor utilizado para exibir o Editor de Registro do Windows95. Para maiores
informaes a respeito do Editor de Registro, consultar a ajuda do prprio editor.
A segunda aba da caixa de dilogo Make Registry Changes, a aba Registry - Values, utilizada para
fornecer valores para as chaves especificadas na aba Registry Keys. A caixa de dilogo Registry Values
mostrada a seguir.
O valor especificado nessa aba refere-se chave selecionada
anteriormente na aba Registry Keys. Na figura acima, por
exemplo, o valor a ser definido refere-se chave Versao. A chave
para o qual ser especificado o valor encontra-se exibida na caixa
de texto Registry Key. Para escolhermos uma nova chave, devemos
voltar aba Registry Keys e escolhermos um novo valor. Essa
alterao no pode ser feita diretamente na caixa de texto.
Para que um novo valor seja adicionado chave correntemente
escolhida devemos clicar o boto Add Value. Ao fazermos isso, a
caixa de dilogo Registry Value ser exibida como mostrado a
seguir.

Pgina: 118

Delphi 5
Devemos primeiramente especificar o tipo de valor a ser colocado atravs
dos radio buttons existentes, bem como o nome para o valor que ser
colocado como tambm o prprio valor a ser colocado. Uma vez
preenchido esses campos pode-se clicado o boto OK para que esses
valores sejam aceitos.
Alm da adio de novos valores, podemos alterar valores previamente
colocados. Para isso, devemos selecionar o valor a ser alterado e em
seguida pressionar o boto Modify Value. Ao fazermos isso, a caixa de dilogo Registry Value, mostrada
acima, novamente exibida, de tal forma a podermos alterar os valores previamente definidos, colocando
os novos valores nos campos desejados.
Por fim, podemos ainda remover valores previamente estipulados. Para isso, basta selecionarmos o valor a
ser removido e pressionarmos a tecla del. No exibida nenhuma caixa de dilogo pedindo a confirmao
da remoo para evitar uma remoo acidental. Devemos observar no entanto que, a valor default no ser
removido, independentemente de pressionarmos a tecla del com este valor selecionado.
Ao finalizarmos a definio dos valores a serem atribudos s chaves que sero utilizadas pelo sistema a ser
instalado, podemos clicar o boto OK para podermos continuar com o processo de desenvolvimento de
nossa instalao.

12.10. Especificando folders e cones


Passamos agora ao processo de acabamento final de nosso processo de desenvolvimento de uma instalao.
Nas duas caixas de dilogos que sero mostradas a seguir, passaremos a definir o ambiente no qual a
aplicao ser executada, especificando o grupo e os cones que sero instalados na mquina do cliente.
A caixa de dilogo General, mostrada a seguir, utilizada para determinar os cones que sero colocados
no grupo de programas da aplicao que est sendo instalada.
Inicialmente, exibido o cone especificado para a aplicao para a
qual a instalao est sendo desenvolvida, aquele arquivo
executvel definido como primrio da aplicao. Podemos alterar
os parmetros a serem fornecidos esses executvel, preenchendo
a caixa de texto Run Command Parameters, bem como alterar a
descrio para esse executvel. O contedo da caixa de texto
Description ser utilizado logo abaixo do cone, aps o clique no
boto Modify Icon, como mostrado na figura.
Para adicionarmos novos cones ao grupo sendo construdo,
devemos clicar no boto contendo uma reticncias, logo ao lado da
caixa de texto Run Command. Feito isso, aparecer a seguinte caixa de dilogo.
A caixa de dilogo Setup Files Browser utilizada para
selecionarmos os arquivos a serem colocados no grupo da
aplicao que ser instalado. Nessa caixa de dilogo, esto
listados os arquivos pertencentes instalao. Para que um
arquivo seja colocado, basta que ele seja selecionado, como
mostra a figura acima, e logo em seguida o boto OK seja
clicado. Os dados para o arquivo selecionado aparecero na
caixa de dilogo Geral. Para que o cone seja exibido, basta
que o boto Add Icon seja clicado. Com isso, o cone para o
arquivo selecionado ser colocado juntamente com os
demais cones previamente selecionados.

Pgina: 119

Delphi 5
Para modificarmos os atributos de um cone j existente, basta que faamos as alteraes nos campos
desejados e, para que as alteraes sejam efetivadas, o boto Modify Icon seja clicado.
Da mesma forma como mostrado com as chaves, os cones selecionados podem ser removidos ao
pressionamos a tecla del. A remoo aqui tambm feita sem que seja exibida qualquer caixa de dilogo
solicitando uma confirmao por parte do usurio.
A segunda aba pertencente caixa de dilogo Specify Folrders and Icons, chamada Advanced, propicia a
configuraes de caractersticas avanadas dos cones (programas) previamente selecionados. A figura a
seguir mostra a aba Advanced.
Como mostrado acima, a aba Advanced composta por diversas
caixas de texto, cada uma das quais contendo valores para o cone
correntemente selecionado. A primeira caixa de texto, Working
Directory, indica qual o diretrio que ser utilizado como diretrio
de trabalho para o cone selecionado. Por default, o diretrio de
trabalho o mesmo diretrio onde encontra-se o aplicativo.
importante observar que, para que quaisquer alteraes efetuadas
no aplicativo sejam efetivadas, necessrio clicar o boto Modify
Info, caso contrrio as alteraes no tero efeito.
A seguir, podemos definir um cone para o aplicativo. Para isso,
devemos clicar o boto contendo reticncias ao lado da caixa de texto Icon. Feito isso, surgir a caixa de
dilogo Setup Files Browser, mostrada anteriormente. Podemos escolher um cone contido em um arquivo
do tipo ICO ou constante de uma DLL. Devemos ter, contudo, includo o arquivo desejado previamente em
nosso projeto.
A ltima caixa de texto a ser
preenchida, denominada Short Cut
Key, determina a tecla de atalho
que ser associada ao aplicativo
selecionado. Para associarmos
uma tecla, ou combinao de
teclas, ao aplicativo, devemos
selecionar o aplicativo e, com o
foco colocado na caixa de texto
Short Cut Key, pressionar a
combinao de teclas desejada.
Caso desejemos cancelar a
associao devemos pressionar a
tecla del para apagar as teclas
associadas.
Resta-nos ainda a possibilidade de colocarmos o aplicativo no menu Inciar Programas. Para que isso seja
feito basta que o checkbox Place icon on Start Programs menu seja marcado. Essa atitude s
recomendada para instalaes onde existam apenas um nico cone sendo instalado, onde no haveria a
necessidade da criao de um grupo para o aplicativo.

12.11. Construindo os discos de instalao


Chegamos ao final do desenvolvimento de um programa de instalao. Resta-nos apenas construir os
discos de instalao para que esses possam ser distribudos para os clientes. O primeiro passo nesse sentido
est na criao de imagens para os discos de instalao, feita a partir da caixa de dilogo Disk Builder
mostrada a seguir.
O processo para a criao das imagens dos discos de
instalao bastante simples. O primeiro passo a ser
dado a seleo do tamanho dos discos que sero
utilizados para a distribuio do software. Vrios so
dos tamanhos suportados, variando desde o disco de

Pgina: 120

Delphi 5
720KB at o CD-ROM. O tamanho do disco dever ser selecionado atravs do combobox Disk Size.
Uma vez definido qual o tamanho dos discos a serem gerados, podemos dar incio ao processo de gerao
das imagens dos discos de instalao. Para isso, basta clicarmos o boto Build. Feito isso, dado incio ao
processo de gerao, que pode ser acompanhado atravs da barra de progresso existente acima dos botes
de Build, Close e Help, ou atravs do componente memo, chamado Feedback.
Ao final da gerao das imagens, um pequeno resumo resumo exibido na no memo Feedback e os
discos gerados so exibidos no list view Disk Images. A seguir mostramos o resultado da gerao das
imagens dos discos de instalao do aplicativo.
Podemos clicar o boto Close para sairmos da caixa de dilogo Build. J de posse das imagens dos discos
de instalao temos duas opes: testar a instalao que acabamos de criar ou gerar efetivamente os discos
de instalao, copiando as imagens geradas para os discos que sero utilizados na distribuio do produto.

12.12. Testando a instalao


Para testarmos a instalao que acabamos de criar devemos clicar na opo Test Run existente no checklist
de desenvolvimento. Uma vez feito isso, dar-se- incio ao processo de instalao como se esse estivesse
sendo executado normalmente, a partir de disquetes de instalao convencionais. Devemos acompanhar
todo o processo de instalao para verificar se esse est de acordo com o que foi planejado.
Devemos observar que, caso voltemos e faamos alguma modificao em alguma das opes definidas no
processo de desenvolvimento da instalao como, por exemplo, alterao de um cone e tentarmos testar a
nova instalao, resultar em um erro. O InstallShield avisar que no poder testar a nova instalao a
menos que as imagens dos discos de instalao sejam geradas novamente. Para que isso seja feito, basta
executarmos novamente o Disk Builder.

12.13. Distribuindo o produto


Resta-nos apenas criar os discos que sero distribudos aos clientes. Para isso, devemos selecionar a opo
Coppy to Floppy existente no checklist de desenvolvimento. A caixa de dilogo Copy To Floppy mostrada
a seguir exibida para permitir a gerao dos disquetes a serem distribudos.
Atravs do combobox Drive feita a escolha de qual o drive
que ser utilizado para a cpia dos discos de instalao.
Nesse combobox esto listados os drives existentes no
sistema. Caso deseje-se colocar os discos de instalao, por
exemplo, diretamente na rede, devemos selecionar a caixa de
texto Path e localizar o local aonde esses disco devem ser
colocados.
Para efetuarmos a cpia dos discos temos duas opes. A
primeira delas, atravs do clique do boto Copy Selected
Disk Image, onde a imagem do disco correntemente
selecionado ser copiado para a unidade selecionada em Destination. O progresso da cpia indicado na
barra de progresso situada logo acima dos botes Close e Help. A segunda opo atravs do clique no
boto Copy All Disk Images. Atravs dessa opo so copiadas, uma a uma, todas as imagens geradas para
a unidade selecionada. Ao final desse processo, teremos todos os discos de instalao necessrios para a
entrega do software.

12.14. Criando Mltiplas Configuraes


Mostramos at aqui a criao de um projeto de instalao envolvendo as opes mais simples, na qual
existia uma nica possibilidade para o usurio no momento da instalao. Em muitos aplicativos
comerciais, durante o processo de instalao, fornecida ao usurio a possibilidade de escolher um dentre
vrios tipos possveis de instalao. Em geral esto disponveis trs tipos de instalao, so elas: Tpica,
Customizada e Compacta. Veremos a partir de agora como desenvolver instalaes que possibilitem ao
usurio escolher opes de instalao para atender s suas necessidades como mencionado anteriormente.

Pgina: 121

Delphi 5
Uma vez iniciado o primeiro projeto no InstallShield, a caixa de dilogo que exibida no incio de toda
seo de trabalho com o InstallShield passa a disponibilizar mais uma opo como mostrado a seguir.
A partir de agora temos a opo de abrir o ltimo projeto no qual
estvamos trabalhando. Esta opo agiliza a utilizao do
InstallShield a medida em que trabalhamos com um projeto. Essa
passa a ser a opo default exibida todas as vezes em que iniciamos
o InstallShield.
Os passos para a criao de uma instalao com mltiplas
configuraes bastante semelhante ao descrito anteriormente. Devemos iniciar um novo projeto para que
a caixa de dilogo New Project seja exibida, como mostrado a seguir.
Devemos preencher todas as opes como mostrado
anteriormente. Neste ponto, o nico detalhe a ser
observado est no fato de que, por tratar-se do
desenvolvimento de uma instalao com mltiplas
configuraes, o checkbox Include a custom setup type
deve estar assinalado como mostrado na figura acima.
Podemos clicar o boto Create para dar incio ao
processo de criao da instalao.
A janela principal do InstallShield exibida
exatamente da mesma maneira como durante o
processo de desenvolvimento de uma instalao simples. As mesmas opes so exibidas no checklist, cada
uma delas devendo ser preenchida como foi mostrado nos tpicos anteriores desse manual. O processo de
desenvolvimento segue da mesma forma como mostrado anteriormente at o momento em que chegamos
na caixa de dilogo Components, a qual deixamos de explicar anteriormente mas que trataremos a seguir.

12.15. Componentes
A caixa de dilogo Components utilizada para definirmos os componentes que fazem parte de uma
instalao. Da mesma forma com que podemos criar grupos no InstallShield, onde um grupo composto
por um ou mais arquivos de forma a facilitar a organizao fsica dos arquivos em disco no processo de
instalao, podemos definir componentes. Um componente uma unidade lgica da instalao, cada um
dos quais contendo um ou mais grupos de arquivos a serem instalados. A caixa de dilogo Components
mostrada a seguir.
Atravs da caixa de dilogo Components possvel a criao de
novos componentes bem como a modificao de componentes j
existentes, alm da adio dos grupos criados anteriormente
componentes especficos. Como podemos ver, a caixa de dilogo
Components est dividida basicamente em duas partes. Do lado
esquerdo temos a indicao de todos os componentes atualmente
inclusos no processo de instalao, juntamente com os grupos
que os compe. J do lado direito, temos todos os grupos.
Para podermos criar novos componentes instalao, devemos
clicar o boto Add Component para que a caixa de dilogo Add
Component, mostrada a seguir, seja exibida.
Como mostrado na figura, devemos entrar com os valores que sero
utilizados como nome do componente a ser criado bem como uma breve
descrio. Uma vez clicado o boto OK, o novo componente ser adicionado
lista de componentes da instalao. Atravs do clique do boto Modify
Component podemos modificar tanto o nome como a descrio do
componente selecionado. J a remoo de um componente feita ao
pressionarmos a tecla del. O componente selecionado removido sem
nenhum pedido de remoo, independentemente da existncia de grupos associados a ele ou no.

Pgina: 122

Delphi 5
Um componente no tem qualquer finalidade a menos que exista um grupo ou grupos de arquivos
associados ele. Para associarmos um grupo a um componente basta selecionarmos do lado esquerdo o
componente ao qual desejamos selecionar um grupo e, do lado direito, selecionar o grupo que desejamos
associar. Logo em seguida, para realizarmos a associao basta clicarmos o boto Add to Application
Component. Uma vez criados todos os componentes necessrios ao desenvolvimento de nossa instalao
podemos clicar o boto OK para que nossas alteraes seja efetivadas.

12.16. Tipos de instalao


A caixa de dilogo mostrada a seguir utilizada para definir os diversos tipos de instalaes que estaro
disponveis ao usurio no momento da instalao.
A caixa de dilogo Setup
Types mostrada ao lado
utilizada para definirmos o
comportamento dos diversos
tipos de instalao que iro
ser apresentados ao usurio.
Do lado esquerdo so
mostrados os trs tipos de
instalao
possveis
juntamente
com
os
componentes
que
os
compem. Do lado direito
esto listados todos os
componentes existentes no
projeto.
Para
adicionarmos
um
componente a um tipo de
instalao
basta
selecionarmos,
do
lado
esquerdo, o tipo de seleo
para o qual desejamos adicionar o componente. Do lado direito, devemos selecionar o componente que
queremos adicionar e, logo em seguida, devemos clicar o boto Add to Setup Type. O boto Add to Setup
Type s torna-se habilitado quando selecionamos um componente que ainda no foi adicionado ao tipo de
instalao correntemente selecionado.
Para removermos um componente de um tipo de instalao, basta selecionarmos o componente a ser
removido no tipo de instalao desejado e pressionarmos a tecla del. Devemos observar que no possvel
removermos um tipo de instalao. Portanto, em um processo de criao de uma instalao com mltiplas
configuraes, estaro disponveis ao usurio os trs tipos de instalao mencionados anteriormente.
O restante do processo de instalao feito da mesma maneira como mostrado anteriormente, no
necessitando, portanto, de maiores explicaes.

12.17. Concluso
Como pudemos verificar, o InstallShield um software bastante simples de ser utilizado mas que fornece
uma poderosa ferramenta para a gerao de instalaes, dando uma aparncia profissional aos softwares
desenvolvidos por qualquer empresa.
Para maiores esclarecimentos, enviar correio eletrnico para o endereo mostrado na prpria janela
principal do InstallShield, visitar o site da InstallShield ou mesmo consultar o Help On-Line do produto.

Pgina: 123