projecto: curso de e-learning sobre delphi 5paf/proj/set2003/delphi5.pdf · lectivo do curso de...
TRANSCRIPT
PPrroojjeeccttoo:: CCuurrssoo ddee ee--lleeaarrnniinngg ssoobbrree DDeellpphhii 55
Ana Azevedo Setembro de 2003
Instituto Superior de Engenharia do Porto
Realizado por: Ana Rodrigues Azevedo
980301
Orientador: Eng. Carlos Vaz de Carvalho
Data de realização:
Setembro 2003
Instituto Superior de Engenharia do Porto
II.. ÍÍnnddiiccee GGeerraall
I. Índice Geral .........................................................................I II. Índice Figuras ..................................................................... V III. Normas e conceitos utilizados ...........................................VII 1. Introdução.......................................................................... 1
1.1. O projecto..................................................................... 1 1.2. O curso......................................................................... 1
2. E-learning .......................................................................... 3
2.1. Porquê e-learning? ......................................................... 3 2.2. Vantagens..................................................................... 3 2.3. Desvantagens................................................................ 4
3. Introdução ao Delphi I.......................................................... 5
3.1. Informações gerais......................................................... 5 3.1.1. Informações úteis disponíveis na Internet ....................... 5 3.2. Um pouco sobre o Delphi e sua linguagem......................... 6 3.3. O ambiente ................................................................... 7 3.4. Os Itens...................................................................... 12 3.5. Arquivos/extensões geradas pelo Delphi.......................... 13 3.6. O que são sistemas orientados a objectos e eventos ......... 13 3.7. Como criar objectos...................................................... 14 3.8. Propriedades dos objectos ............................................. 15 3.9. Métodos dos objectos ................................................... 16 3.10. Eventos dos objectos ................................................. 17 3.11. O depurador de erros................................................. 18 3.11.1. Como utilizar ............................................................ 19 3.11.2. Alternativas de depuração .......................................... 20 3.12. Resumo ................................................................... 21 3.13. Exemplos ................................................................. 21 3.14. Exercícios................................................................. 22
4. Introdução ao Delphi II ...................................................... 25
4.1. Estrutura de uma Unit................................................... 25 4.2. Variáveis..................................................................... 26 4.3. Directivas.................................................................... 27 4.3.1. Directivas Switch....................................................... 27 4.3.2. Directivas de Parâmetro ............................................. 28
I
Instituto Superior de Engenharia do Porto
4.3.3. Directivas Condicionais............................................... 28 4.4. Estruturas Condicionais................................................. 29 4.4.1. Instrução If-Then-Else ............................................... 29 4.4.2. Instrução Case.......................................................... 30 4.5. Estruturas de Ciclo ....................................................... 30 4.5.1. Estrutura For ............................................................ 31 4.5.2. Estrutura While ......................................................... 32 4.5.3. Estrutura Repeat/Until ............................................... 32 4.6. Operadores Lógicos ...................................................... 33 4.7. Trabalhando com Vectores ............................................ 33 4.8. Caracteres de formatação do EditMask ............................ 34 4.9. Comentários................................................................ 35 4.10. Funções e procedimentos ........................................... 36 4.10.1. Funções ................................................................... 36 4.10.2. Procedimentos .......................................................... 37 4.11. Trabalhando com menus ............................................ 37 4.12. Resumo ................................................................... 41 4.13. Exemplos ................................................................. 41 4.14. Exercícios................................................................. 42
5. Trabalhando com ficheiros .................................................. 45
5.1. Ficheiros ..................................................................... 45 5.2. Estruturas relacionadas................................................. 45 5.3. Funções e Procedimentos para manuseamento de ficheiros 45 5.4. Rotinas de I/O ............................................................. 46 5.5. Rotinas para ficheiros de texto ....................................... 47 5.6. Rotinas para tratamento de strings................................. 48 5.7. FTP ............................................................................ 49 5.8. Propriedades ............................................................... 49 5.9. Métodos...................................................................... 50 5.10. Eventos ................................................................... 51 5.11. Notas....................................................................... 52 5.12. Resumo ................................................................... 53 5.13. Exemplos ................................................................. 53 5.14. Exercicios................................................................. 54
6. Trabalhando com Base de Dados ......................................... 57
6.1. Conceitos de Base de Dados .......................................... 57 6.2. Borland Database Engine (BDE) ..................................... 58 6.3. O Database Desktop..................................................... 59 6.4. DataAccess e seus componentes .................................... 62 6.5. Propriedades dos componentes ...................................... 63 6.5.1. Database ................................................................. 63 6.5.2. DataSource .............................................................. 63 6.5.3. Query ...................................................................... 64 6.5.4. StoredProcedure ....................................................... 64 6.5.5. Table ....................................................................... 65 6.6. Métodos dos componentes............................................. 65
6.6.1. Database ................................................................. 65 6.6.2. DataSource .............................................................. 66 6.6.3. Query ...................................................................... 66 6.6.4. StoredProcedure ....................................................... 66 6.6.5. Query, StoredProcedure e Table .................................. 66 6.7. Eventos dos componentes ............................................. 67 6.7.1. Database ................................................................. 67 6.7.2. DataSource .............................................................. 67 6.7.3. Query, StoredProcedure e Table .................................. 68 6.8. DataControls e seus componentes .................................. 68 6.9. Propriedades dos componentes ...................................... 69 6.9.1. DBCheckBox ............................................................. 69 6.9.2. DBComboBox............................................................ 69 6.9.3. DBEdit ..................................................................... 70 6.9.4. DBGrid..................................................................... 70 6.9.5. DBNavigator ............................................................. 71 6.9.6. DBText .................................................................... 71 6.10. Métodos dos componentes.......................................... 71 6.10.1. DBComboBox............................................................ 71 6.10.2. DBEdit ..................................................................... 71 6.10.3. DBGrid..................................................................... 72 6.11. Eventos dos componentes .......................................... 72 6.11.1. DBComboBox............................................................ 72 6.11.2. DBEdit ..................................................................... 72 6.11.3. DBGrid..................................................................... 72 6.11.4. DBNavigator ............................................................. 73 6.12. Resumo ................................................................... 73 6.13. Exemplos ................................................................. 73 6.14. Exercícios................................................................. 75
7. Anexos............................................................................. 77
7.1. Como criar uma ligação ODBC para a base de dados fornecida............................................................................. 78 7.2. Resolução dos exemplos ............................................... 82 7.2.1. Capítulo 3 ................................................................ 82 7.2.2. Capítulo 4 ................................................................ 84 7.2.3. Capítulo 5 ................................................................ 87 7.2.4. Capítulo 6 ................................................................ 89
III
Instituto Superior de Engenharia do Porto
IV
IIII.. ÍÍnnddiiccee FFiigguurraass
Fig. 3.1: Barra de Ferramentas ................................................... 7 Fig. 3.2: Janela de Propriedades.................................................. 9 Fig. 3.3: Janela de Formulário..................................................... 9 Fig. 3.4: Janela de Área de Código ............................................ 10 Fig. 3.5: Objectos ................................................................... 11 Fig. 3.6: Botão Play ................................................................. 11 Fig. 3.7: Janela de Itens .......................................................... 12 Fig. 3.8: Propriedades do objecto Button .................................... 16 Fig. 3.9: Métodos possíveis do objecto Button ............................. 17 Fig. 3.10: Eventos do objecto Button ......................................... 18 Fig. 3.11: BreakPoints ............................................................. 19 Fig. 3.12: Conteúdo de variáveis ............................................... 20 Fig. 4.1: Declaração de variáveis............................................... 27 Fig. 4.2: Caixa de diálogo de criação de menu............................. 38 Fig. 4.3: Caixa de diálogo de criação de menu – cont. .................. 39 Fig. 4.4: Caixa de diálogo de criação de menu – cont. .................. 39 Fig. 4.5: Caixa de diálogo de criação de menu – cont. .................. 40 Fig. 4.6: Caixa de diálogo de criação de menu – cont. .................. 40 Fig. 6.1: DB Desktop ............................................................... 60 Fig. 6.2: Janela “Alias Manager” ................................................ 60 Fig. 6.3: Janela "Alias Manager" ................................................ 62 Fig. 6.4: Janela "Alias Manager" – cont. ..................................... 62 Fig. 7.1: Ferramentas Administrativas........................................ 78 Fig. 7.2: Administrador de origem de dados de ODBC .................. 79 Fig. 7.3: Criar nova origem de dados ......................................... 79 Fig. 7.4: Configuração de ODBC para Microsoft Access ................. 80 Fig. 7.5: Administrador de origem de dados de ODBC .................. 81 Fig. 7.6: Janela de edição de colunas ......................................... 91
V
Instituto Superior de Engenharia do Porto
VI
IIIIII.. NNoorrmmaass ee ccoonncceeiittooss uuttiilliizzaaddooss
• Todos os exercícios possuem sequência numérica crescente.
• Os nomes das teclas utilizadas no exercício estão escritos em
letras MAIUSCULAS.
• As opções de menu, os comandos, os botões, as funções, os
nomes das janelas e das caixas de diálogo e de verificação
estão em itálico nas descrições de exercícios prácticos.
• Os carecteres ou comandos que o aluno deve digitar
encontram-se em negrito.
• Toda a vez que aparecer o sinal de adição (+) entre dois nomes
de teclas, o aluno deverá pressionar estas teclas ao mesmo
tempo. Por exemplo, “Pressione as teclas ALT+TAB” significa
que o aluno deverá manter pressionada a tecla ALT enquanto
pressiona a tecla TAB.
• “clique” ou “clicar” significa posicionar o ponteiro do rato em
um objecto e pressionar e libertar rapidamente o botão
esquerdo do rato.
• “Arrastar” significa posicionar o ponteiro do rato em um objecto
e pressionar e manter pressionado o botão esquerdo do rato
enquanto movimenta o ponteiro do rato até ao local desejado.
• “duplo clique” significa pressionar e libertar o botão esquerdo
do rato, rápida e sucessivamente.
VII
Instituto Superior de Engenharia do Porto
VIII
11.. IInnttrroodduuççããoo
1.1. O projecto
A frequência do 2º semestre em regime diurno, do 5º ano
lectivo do curso de Engenharia Informática ministrado pelo Instituto
Superior de Engenharia do Porto, engloba várias disciplinas
curriculares, sendo uma delas a disciplina de Projecto.
Nesta disciplina o aluno deve escolher uma das opções
indicadas pelo Instituto ou sugerir uma escolha que é sujeita,
posteriormente, a uma avaliação por parte dos responsáveis pela
disciplina. Após a aprovação, inicia-se o Projecto escolhido.
Neste caso particular, escolhi um projecto cujo objectivo é a
elaboração de um curso de e-learning sobre Delphi. A escolha recaiu
sobre Delphi porque esta é uma linguagem de fácil aprendizagem,
mas bastante completa.
1.2. O curso
O curso será vocacionado para pessoas sem experiência em
linguagens de programação orientadas a objecto, mas com alguns
conhecimentos base de programação.
Terá como objectivo a criação de uma aplicação funcional
gráfica (sobre cd’s, dvd’s, etc.) que trabalhe com ficheiros e base de
dados.
Cada capítulo terá uma componente teórica acompanhada com
exemplos ilustrativos de cada parte da matéria dada.
No final de cada capítulo, haverá 3 sub-capítulos importantes:
1
Instituto Superior de Engenharia do Porto
• Resumo – onde serão relembrados os aspectos mais
importantes da matéria dada ao longo do capítulo;
• Exemplos – onde serão colocados problemas iniciais, com a sua
resolução apresentada em formato texto (em 7 Anexos) e em
formato digital (é fornecido por cada capitulo um projecto em
Delphi). Os exemplos visam os aspectos mais importantes da
matéria dada ao longo do capítulo. A resolução apresentada
funcionará apenas como um guia, visto poder existir mais do
que uma solução para o mesmo problema.
• Exercícios – onde serão fornecidos mais problemas (mas não as
suas resoluções).
Os exercícios terão com objectivo elaborar a aplicação idealizada,
com o propósito do aluno conseguir completar sozinho partes
funcionais da aplicação.
2
22.. EE--lleeaarrnniinngg
2.1. Porquê e-learning?
O conhecimento à distância já existe há alguns anos. Desde
cursos por correspondência ou mesmo a Tele-Educação, chegamos
agora à era da Internet.
Para quem precisa/gosta de adquirir conhecimentos e não o
pode fazer porque ou não tem a disponibilidade temporal ou física
para o fazer, ou porque simplesmente se sente mais confortável ao
seu próprio ritmo, o e-learning surge como a alternativa ideal, pois
fornece conhecimento de alto nível e encontra-se disponível 24 horas
por dia, 365 dias por ano, em qualquer parte do mundo.
2.2. Vantagens
Algumas das vantagens do e-learning são facilmente
perceptíveis:
• Nem todos os alunos aprendem ao mesmo ritmo. Nada melhor
do que nós próprios para saber as nossas dificuldades e pontos
fortes. Com o e-learning, cada um aprende quando e onde
quer. Deste modo, a aquisição de conhecimento é optimizada
ao máximo.
• Uma grande parte dos cursos de e-learning existentes são
constituídos por partes teóricas e práticas, ou seja, o aluno
assimila conhecimento e aprende como aplicar esse
conhecimento, através da realização de projectos e resolução
de tarefas.
3
Instituto Superior de Engenharia do Porto
• Em termos de empresas, estas chegam a poupar entre 50% a
70% nos custos da educação e o espaço que se poupa é
bastante relevante.
2.3. Desvantagens
Como desvantagens pode-se indicar as seguintes:
• Este tipo de ensino baseia-se na Internet. Como tal, está
sujeito a todos os tipos de falhas que poderão ocorrer (desde
servidores, redes, entre outras).
• Apesar da facilidade de acesso aos cursos, estes têm
normalmente um custo inerente (para além do custo de acesso
á Internet) que nem todos os possíveis alunos o podem
suportar.
• Como em toda a espécie de ensino que englobe professores,
estes não deixam de ser humanos e como tal, são
caracterizados pelas suas qualidades/defeitos. Nem todos os
professores existentes têm qualidades para o serem. O e-
learning depende muito do professor, pois este terá de saber
compensar a falta da componente física.
4
33.. IInnttrroodduuççããoo aaoo DDeellpphhii II
3.1. Informações gerais
O exercício que iremos praticar neste curso será um sistema de
controle para cd’s, videos, livros, entre outros.
A cada capítulo iremos melhorando o sistema, de modo a que
no último o aluno terá um sistema completo criado por ele e poderá
fazer ele próprio a manutenção dos seus dados.
O aluno aprenderá a trabalhar graficamente, trabalhar com
ficheiros e base de dados.
Para a elaboração deste curso foi utilizada a resolução
1024x768, caso a resolução do computador do aluno não seja a
mesma, alguns exemplos e imagens poderão aparecer ligeiramente
diferentes.
3.1.1. Informações úteis disponíveis na Internet
O aluno deverá consultar o site da Inprise regularmente, e
outros sites que eventualmente conheça, pois as pessoas que
trabalham com o Delphi diariamente, disponibilizam normalmente
truques e dicas importantes sobre o produto.
De seguida será apresentada uma lista de alguns endereços
úteis na internet que falam sobre Delphi.
• http://www.inprise.com.br/
• http://www.inprise.com.br/delphi/
• http://www.delphi.com/dir-app/service/aboutDelphi.asp
• http://www.borland.com/delphi/
5
Instituto Superior de Engenharia do Porto
• http://ourworld.compuserve.com/homepages/schlottke/delphi,h
tm
• http://www.dmz.com.br/digital/Programacao/Delphi
• http://www.revolution.com.br/delphistop/sitetipp.htm
• http://www.delphi.com.br/
• http://www.clubedelphi.com.br
A Inprise patrocina uma variedade de grupos de discussão ou
newsgrups, onde utilizadores podem trocar informações sobre os
produtos e ferramentas que a empresa desenvolve. Para obter uma
lista completa dos grupos e saber como se conectar com o servidor
de notícias da Inprise, entre no endereço:
http://www.inprise.com/newsgrups/
3.2. Um pouco sobre o Delphi e sua linguagem
A versão 5 é a segunda actualização do Delphi desde a Borland
tornou-se Inprise. Tanto o Delphi como outros produtos continuam a
ser comercializados com o nome Borland visando o desenvolvimento
da empresa. Na prática o nome Borland é sempre direccionado às
ferramentas de desenvolvimento oferecidas pela Inprise, conforme o
aluno pode ver nas outras ferramentas de desenvolvimento
disponibilizadas no mercado como o Borland C++ Builder e o Borland
JBuilder. Ambas pertencem à empresa Inprise.
Actualmente o Delphi5 é o produto mais rápido para construção
de aplicações para a Internet e também para as aplicações que
trabalham com base de dados. Isto quando comparamos as
ferramentas de desenvolvimento para Windows existentes no
mercado.
6
3. Introdução ao Delphi I
O Delphi encontra-se disponível em 3 versões (ou edições) –
Delphi 5 Enterprise, Professional e Standard. Aconselha-se uma visita
ao site da Inprise para um conhecimento mais profundo sobre cada
uma delas, suas especificações e tipo de equipamento recomendado.
O Delphi utiliza como linguagem base o Object Pascal,
considerada uma linguagem muito prática, versátil, extremamente
estável e que actua em método de programação orientado a a
objectos.
Embora o conceito de linguagem de programação orientada a
objectos1 possa ser um pouco confuso no início, o Delphi torna este
trabalho algo muito simples.
Durante a execução dos exercícios e exemplos, o aluno irá aos
poucos familiarizar-se com esta linguagem e verá que com poucas
linhas de código poderá construir aplicações incrivelmente poderosas.
Uma particularidade desta linguagem é que ele não distingue
entre maiúsculas e minúsculas, o que quer dizer que o aluno poderá
digitar o código tanto em maiúsculo como em minúsculo, apenas as
informações apresentadas no ecrã é que deverão estar coerentes com
o que o aluno pretende informar.
3.3. O ambiente
Abra o Delphi. Quando o Delphi é aberto, o ecrã é dividido em
diversas partes. Vamos analisá-las.
Na parte superior temos:
Fig. 3.1: Barra de Ferramentas
1 Este conceito será desenvolvido no sub-capítulo 3.6 O que são sistemas orientados a objectos e eventos.
7
Instituto Superior de Engenharia do Porto
Aqui encontramos as opções de menu, barras de ferramentas e
os tipos de componentes e objectos que podem ser adicionados ao
formulário do nosso sistema.
As barras de ferramentas localizadas no canto esquerdo, dão
acesso rápido às opções de menu mais utilizadas no Delphi. Vamos
analisar melhor os botões apresentados:
Atalho para a opção de menu New
Atalho para a opção de menu Open
Atalho para a opção de menu Save
Atalho para a opção de menu Save All
Atalho para a opção de menu Open Project....
Atalho para a opção de menu Add to Project...
Atalho para a opção de menu Remove from Project
Atalho para a opção de menu Help
Atalho para a opção de menu View Unit
Atalho para a opção de menu View Form
Atalho para a opção de menu Toogle Form/Unit
Atalho para a opção de menu New Form
Atalho para a opção de menu Play
Atalho para a opção de menu Pause
Atalho para a opção de menu Trace Into
Atalho para a opção de menu Step Over
8
3. Introdução ao Delphi I
No centro do ecrã temos 3 janelas:
Fig. 3.2: Janela de Propriedades
Fig. 3.3: Janela de Formulário
9
Instituto Superior de Engenharia do Porto
Repare na legenda “Form1” na janela de formulário. Esta janela
representa o formulário padrão do Delphi. É aqui que iremos construir
o aspecto gráfico, a interface dos nossos programas.
O que o Delphi classifica como sendo formulário é na realidade
uma janela de aplicação Windows.
A maioria dos formulários para Windows apresenta uma barra
de título, uma barra de menus, botões de maximização, minimização
e de fecho, localizados no canto superior direito do formulário.
Por último temos a seguinte janela:
Fig. 3.4: Janela de Área de Código
Esta é a janela de visualização e construção de código. Chama-
se “Code Editor” e encontra-se por trás da janela de formulário
(“Form1”).
Como a maioria dos aplicativos em ambiente Windows possui
diversas janelas, caixas de diálogo e formulários em geral, o Delphi
10
3. Introdução ao Delphi I
utiliza o conceito de Projecto para gerir a aplicação e armazena estas
informações em arquivos de extensão .dpr2
Repare que o nome do Projecto activo aparece na barra de
título do Delphi (ver Fig. 3.3). Como ainda não demos nome ao
Projecto, este é fornecido automaticamente pelo Delphi, neste caso,
chama-se Project1.
No Delphi os formulários são armazenados em arquivos de
extensão .dfm e o código em arquivos de extensão .pas2.
Basicamente existem quatro etapas na criação e execução de
uma aplicação Delphi. De uma forma resumida podemos dizer que os
passos são:
1. Escolha dos objectos existentes que queremos utilizar na
nossa aplicação e adicioná-los ao formulário.
Fig. 3.5: Objectos
2. Formatação das propriedades dos objectos escolhidos de
forma a que estes trabalhem como desejamos (ver Fig.
3.2).
3. Escrever blocos de código que indicam ao sistema o que
este deve fazer (ver imagem Fig. 3.4).
4. Finalmente compilar e executar o programa.
Fig. 3.6: Botão Play
2 Este aspecto será desenvolvido no sub-capítulo 3.5 Arquivos/extensões geradas
pelo Delphi.
11
Instituto Superior de Engenharia do Porto
3.4. Os Itens
Itens são projectos, formulários ou wizards pré-definidos que
poderão funcionar como um ponto de partida para o desenvolvimento
de uma aplicação3.
O Delphi apresenta por defeito, vários itens.
Fig. 3.7: Janela de Itens
Cada item apresentado tem funcionalidades diferentes, mas
vamos só analisar as mais importantes.
• Application – esta opção cria um projecto novo que
contem um formulário, uma unit e um .dpr ou fornece
maneira de o utilizador seleccionar um template.
• Form – Cria e adiciona um formulário em branco ao
projecto actual, ou permite seleccionar um a partir de um
template.
• Unit – Cria e adiciona uma unit ao projecto actual.
3 Para visualizar estes projectos escolha a opção File – New.
12
3. Introdução ao Delphi I
3.5. Arquivos/extensões geradas pelo Delphi
Os nomes dos arquivos são gerados quando se digita o nome
do projecto e seus formulários. As extensões geradas pelo Delphi
são:
• BMP, ICO – Arquivos gráficos.
• DCU – Unidade compilada do Delphi 5.
• ~DF – Backup de formulário gráfico.
• DFM – Arquivo de formulário gráfico.
• ~DP – Backup do projecto.
• DPR – Arquivo de projecto do Delphi 5.
• DSK – Configurações do Desktop.
• DSM – Dados do pesquisador de objecto.
• EXE – Arquivo executável compilado.
• OPT – Opções do projecto.
• ~PA – Backup da unidade.
• PAS – Código-fonte da unit.
• RES – Arquivo de recursos compilado.
3.6. O que são sistemas orientados a objectos e
eventos
Um sistema é orientado a eventos quando uma determinada
função ou rotina somente é executada quando ocorre um evento no
Windows. Por exemplo, quando um utilizador clica com o botão do
rato num botão. Este botão que poderia ser qualquer outra forma
(imagem, campo, entre outros), é considerado um objecto no
Windows.
O Delphi é uma ferramenta baseada neste conceito que nasceu
e foi amplamente difundido no sistema operacional gráfico do
Microsoft Windows 3.1.
13
Instituto Superior de Engenharia do Porto
Assim concluímos que são nestes objectos espalhados pelo
nosso sistema que acontecem os eventos que dão partida a execução
de rotinas.
Podemos também concluir que o Delphi não executa
simplesmente o código do programa linha a linha, mas espera que
eventos aconteçam, o que desencadeará a execução das rotinas.
3.7. Como criar objectos
A criação de objectos dá-se de forma bastante simples e
intuitiva. Para criar objectos basta escolher o objecto a criar dos
existentes na palete de componentes e fazer duplo clique (o que
inserirá automaticamente o objecto centralizado no formulário) ou
clique no objecto escolhido e de seguida clique no formulário (o
objecto irá aparecer no formulário na posição indicada pelo clique
efectuado).
Para observar esta diferença, proceda da seguinte forma:
1. Dirija-se à palete de componentes e faça um duplo clique
em (objecto Button) localizado na divisão Standard.
2. Dirija-se novamente à palete e faça clique em
(objecto Button). Agora faça clique em qualquer parte do
formulário.
Quando se cria um objecto, este recebe o nome standard do
objecto escolhido, seguido por uma numeração crescente.
Para observar este aspecto, mova o ponteiro do rato para cima
do primeiro botão criado (caso já esteja posicionado em cima do
primeiro botão criado, mova-se para fora e depois retorne á posição
em que se encontrava). Espere uns breves instantes. Repare que o
Delphi apresenta “Button1: TButton”. Isto indica que o nome do
objecto é Button1 e que é um objecto TButton.
14
3. Introdução ao Delphi I
Agora repita estes passos para o segundo botão criado. Repare
que agora o Delphi apresenta “Button2: TButton”, o que indica que o
nome do botão é Button2 e que também é um objecto TButton.
Ao criar o objecto, todas as suas propriedades, métodos e
eventos standard também são criados automaticamente.
3.8. Propriedades dos objectos
Podemos considerar uma propriedade de um objecto como uma
particularidade dele.
Isto também acontece na nossa realidade. Por exemplo,
imagine um copo. Quando o descrevemos podemos dizer que este é
redondo, azul e que tem base alta, o que poderia se traduzir da
seguinte forma:
Objecto: Copo.
Propriedades: forma, cor, base.
Como já vimos, no Delphi podemos aceder às propriedades de
um determinado objecto através da janela Object Inspector divisão
“Properties”4. Por exemplo, para o objecto Button, temos as
seguintes propriedades:
4 Para uma mais fácil comutação entre código, formulário e propriedades, utilize as teclas F12 para comutar entre código e formulário e F11 para mostrar/esconder a janela de propriedades.
15
Instituto Superior de Engenharia do Porto
Fig. 3.8: Propriedades do objecto Button
3.9. Métodos dos objectos
Métodos são acções (funções ou rotinas) que um objecto pode
ter. É através dos métodos que podemos formatar os
comportamentos dos objectos. Seguindo o exemplo anterior do copo,
podemos enche-lo, esvazia-lo, parti-lo, etc. Traduzindo, poderíamos
ter:
Objecto: Copo.
Métodos: Encher, Esvaziar, Partir.
16
3. Introdução ao Delphi I
Para aceder à lista dos métodos possíveis, basta escrever o
nome do objecto (no Code Editor) e esperar uns breves instantes ou
premir as teclas CTRL+SPACE, o que fará com que apareça uma lista
da qual podemos escolher o método que desejemos. Caso se saiba o
nome do método que queremos, basta escrever o nome dele.
Fig. 3.9: Métodos possíveis do objecto Button
3.10. Eventos dos objectos
Eventos são acontecimentos a que os objectos estão expostos.
Por exemplo, um copo pode partir-se:
Objecto: Copo.
Evento: Ao partir-se.
No Delphi, podemos associar código a eventos, por exemplo,
quando um copo se parte, de seguida, podemos esvazia-lo.
17
Instituto Superior de Engenharia do Porto
Podemos aceder aos eventos de um determinado objecto
através da janela Object Inspector divisão “Events”5. Por exemplo,
para o objecto Button, temos os seguintes eventos:
Fig. 3.10: Eventos do objecto Button
3.11. O depurador de erros
O depurador de erros que encontramos no Delphi 5, permite
depurar uma aplicação sem ter que sair do ambiente de
desenvolvimento, ou seja, o modo de projecto da aplicação.
Um depurador é um tipo de programa que fornece ferramentas
que permitem encontrar erros em um programa.
Há três tipos de erros que ocorrem em uma aplicação:
• Erros de compilação
• Erros físicos
• Erros lógicos
5 Para uma mais fácil comutação entre código, formulário e propriedades, utilize as teclas F12 para comutar entre código e formulário e F11 para mostrar/esconder a janela de propriedades.
18
3. Introdução ao Delphi I
3.11.1. Como utilizar
O depurador de erros do Delphi é muito fácil de utilizar. Para
tal, basta clicar num dos pontos azuis que aparecem no Code Editor
na barra cinzenta vertical do lado esquerdo e correr o programa. A
linha seleccionada aparecerá a vermelho e com um visto no sitio do
ponto azul6.
Fig. 3.11: BreakPoints
O programa funcionará normalmente e quando passar na linha
de código assinalada parará e então podemos escolher três opções:
• – correrá normalmente até encontrar outro
breakpoint ou até finalizar o programa;
• – com este botão podemos seguir o
funcionamento do programa, entrando dentro das
rotinas;
6 A este ponto chama-se “Breakpoint”.
19
Instituto Superior de Engenharia do Porto
• – com este botão podemos seguir o
funcionamento do programa, mas sem entrarmos dentro
das rotinas.
Para vermos o conteúdo das variáveis podemos fazer de várias
maneiras, mas talvez a mais fácil e mais rápida, será mover o rato
para um dos sítios onde o nome da variável esteja escrita e esperar
uns breves instantes. Aparecerá um texto com o nome da variável e
com o valor que ele tem.
Fig. 3.12: Conteúdo de variáveis
3.11.2. Alternativas de depuração
Normalmente usamos os “pontos de interrupção” (breakpoints)
para saber que um programa atingiu um certo estágio, mas existem
outras técnicas de depuração.
20
3. Introdução ao Delphi I
Uma técnica comum é mostrar mensagens simples através do
procedimento ShowMessage (que como o próprio nome indica, serve
para mostrar uma mensagem no ecrã) em linhas específicas para fins
de depuração. Há muitas outras técnicas manuais como enviar a
saída para uma janela de terminal, alterar o texto de uma label, ou
mesmo incluir uma linha e uma caixa de listagem ou campo memo.
3.12. Resumo
Neste capítulo o aluno adquiriu conhecimentos gerais sobre o
Delphi 5, incluindo onde procurar esses conhecimentos na Internet.
Adquiriu também conhecimentos fundamentais sobre o
funcionamento do Delphi tais como o seu ambiente, os itens
possíveis, os arquivos gerados pelo Delphi e como funciona o seu
depurador de erros.
Conheceu o que são sistemas orientados a objectos.
Aprendeu como criar objectos e aceder às suas propriedades,
métodos e eventos.
3.13. Exemplos
Antes de começar com os exemplos, crie uma pasta adequada
no seu computador para os guardar.
1. Abra o Delphi.
2. No formulário que aparece, mude:
a. a sua altura para 115;
b. a sua largura para 280;
c. o nome que está na barra de título para “Exemplo 1”.
3. Crie uma label.
4. Altere:
a. o seu título de acordo com o seu nome;
21
Instituto Superior de Engenharia do Porto
b. o seu tamanho;
c. a fonte;
d. a côr.
5. Crie um botão.
6. Altere o título do botão para “OK”.
7. Crie um botão bitmap que tenha a função de fechar e sair do
programa.
8. Coloque uma ajuda no botão.
9. Compile e execute o programa.
10. Teste o botão de sair do programa.
3.14. Exercícios
Antes de começar com os exercícios, crie uma pasta adequada
no seu computador para os guardar.
1. Abra o Delphi.
2. No formulário que aparece, mude:
a. a altura para 350;
b. a largura para 550;
c. o título que aparece na barra para “Biblioteca
Multimédia”;
d. o nome para “Form_Apresentacao”.
3. Crie uma imagem.
4. Altere:
a. o caminho para o caminho da imagem fornecida;
b. A sua posição esquerda para 230;
c. Topo para 10;
5. Crie duas labels.
6. Altere:
a. O título de uma para “Biblioteca”;
b. O de outra para “Multimédia”;
22
3. Introdução ao Delphi I
c. A fonte de ambas para Verdana, Negrito, 20 e com côr
Mogno;
d. Esquerda e topo de “Biblioteca” para 15;
e. Esquerda “multimédia” para 15 e topo para 55;
7. Crie outra label.
8. Altere:
a. O título para “de <seu nome>”;
b. Alinhamento à direita;
c. Topo 295;
d. Encoste ligeiramente à imagem.
9. Crie um timer.
10. Altere:
a. O intervalo para 5000;
b. O nome para “Tempo”.
11. Salve o programa na pasta que criou. Para a unit dê o nome de
“Unit_Principal” e para o nome do Projecto escolha
“Project_Curso”.
12. Compile, resolva os erros resultantes, e execute o programa.
23
Instituto Superior de Engenharia do Porto
24
44.. IInnttrroodduuççããoo aaoo DDeellpphhii IIII
4.1. Estrutura de uma Unit
Normalmente uma Unit é constituída por:
unit NomeUnit;
interface
uses // Classes que a unit utiliza
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs;
type
// Declaração de variáveis
end;
// Declaração de funções e procedimentos
const
// Declaração de constantes
var
// Declaração de variáveis
implementation
{$R *.DFM}
// Especificação das funções e procedimentos declarados
end.
25
Instituto Superior de Engenharia do Porto
4.2. Variáveis
Um dos aspectos básicos das maiorias das linguagens de
programação são as variáveis. Uma variável está normalmente
associada a um nome dado pelo programador que identifica uma
posição de memória no equipamento que servirá para armazenar
alguma informação, seja ela numérica ou caracter.
O Delphi possui os seguintes tipos de variáveis:
Tipo Intervalo
Boolean (Verdadeiro/Falso) – 1 byte
Byte 0 a 255
String 1 a 2 GB
Word 0 a 65535
Char 1 byte
Comp -263 a 263-1
Cardinal 0 a 4294967295
Single Γ1.5x10-45 a 3.4x1038
Double 5.0x10-324 a 1.7x10308
Real 2.9x10-39 a 1.7x1038
Extended 3.4x10-4932 a 1.1x104932
Integer -2.147.483.648 a 2.147.483.647
LongInt -2.147.483.648 a 2.147.483.647
ShortInt -128 a 127
SmallInt -32768 a 32767
Int64 -263 a 263-1
No Delphi é imperativo que se declare todas as variáveis que se
usem. Para declarar uma variável, utiliza-se a palavra reservada var.
26
4. Trabalhando com ficheiros
Fig. 4.1: Declaração de variáveis
Após a declaração da variável está encontra-se pronta a usar
em qualquer parte do programa durante o seu ciclo de vida.
Para usar uma variável basta escrever o nome dela. Para
atribuirmos um valor a uma variável utiliza-se a seguinte sintaxe:
Nome_variavel := valor;
4.3. Directivas
As Directivas têm um significado especial no Delphi, mas, ao
contrário das palavras reservadas, aparecem apenas em contextos
onde não podem ocorrer identificadores definidos pelo utilizador.
Apesar deste factor podemos (mas não é aconselhável) definir um
identificador que se pareça exactamente como uma directiva.
Basicamente, directivas são comentários que obedecem a uma
sintaxe definida, utilizados para controlar características do Delphi.
Começa com o caracter delimitador de comentário, seguido por um $
e um nome (de uma ou mais letras) que identifique a directiva.
Cada directiva pode ser classificada como um switch, um
parâmetro ou uma condição.
4.3.1. Directivas Switch
Directivas switch tornam propriedades do compilador on/off.
Para directiva de uma única letra, basta acrescentar + ou –
imediatamente a seguir a letra. Para directivas com mais letras,
acrescenta-se as palavras “on” ou “off”.
27
Instituto Superior de Engenharia do Porto
Estas directivas podem ser globais ou locais. Globais afectam
toda a compilação e têm de aparecer antes da parte da declaração do
programa ou da unit onde são compiladas. Locais, afectam apenas a
parte da compilação que se compreende até á próxima ocorrência da
mesma directiva, podendo aparecer em qualquer lado.
Podem ser agrupadas num único comentário de directiva ou
separadas com vírgulas sem espaços. Por exemplo:
{$B+,R-,S-}
4.3.2. Directivas de Parâmetro
Estas directivas especificam parâmetros que afectam a
compilação, como nomes de ficheiros e tamanhos de memória.
4.3.3. Directivas Condicionais
Estas directivas controlam compilação condicional de partes de
texto de código, baseadas em símbolos definidos pelo utilizador.
Todas as directivas, excepto as de switch, têm de ter pelo
menos um espaço entre o nome e os parâmetros. Alguns exemplos
de directivas:
{$B+}
{$STACKCHECKS ON}
{$R- Turn off range checking}
{$I TYPES.INC}
{$M 32768,4096}
{$DEFINE Debug}
{$IFDEF Debug}
{$ENDIF}
28
4. Trabalhando com ficheiros
4.4. Estruturas Condicionais
4.4.1. Instrução If-Then-Else
A instrução If existe em muitas das linguagens. Como a própria
designação indica, a instrução é utilizada quando queremos que uma
determinada parte do código só seja executada consoante uma
condição.
A sintaxe completa da instrução é:
If {condição} Then
Begin
{Executa esta parte do programa, caso a condição indicada
seja verdadeira}
end7
Else
Begin
{Executa esta parte do programa, caso a condição indicada
seja falsa}
end;
Exemplo:
Tempo := ‘Sol’;
If Tempo = ‘Sol’ Then
ShowMessage(‘Está sol. É melhor levar óculos de sol!!!’)
Else
ShowMessage(‘Não está sol. É melhor levar guarda-chuva!!!’);
7 É de notar que nem todas as instruções em Delphi acabam em “;”. Sempre que exista um “else”, na linha anterior não é possível colocar “;”.
29
Instituto Superior de Engenharia do Porto
4.4.2. Instrução Case
Outra estrutura condicional é a instrução Case. Esta instrução
utiliza-se quando uma expressão pode ter um de vários valores e
queremos que uma parte do código só seja executada conforme o
valor que a expressão toma na altura.
A sintaxe desta instrução é:
Case <expressão> of
Valor1: <Bloco de código que só será executado caso o valor da
expressão seja igual ao valor de Valor1>
Valor2: <Bloco de código que só será executado caso o valor da
expressão seja igual ao valor de Valor2>
...
Else
{Bloco de código que só será executado caso o valor
da expressão não seja nenhum dos indicados}
End;
Exemplo:
Cidade := 2;
Case Cidade of
1: ShowMessage(‘Estás em Lisboa.’);
2: ShowMessage(‘Estás no Porto.’);
3: ShowMessage(‘Estás em Coimbra.’);
Else
ShowMessage(‘Não sei onde estás.’);
End;
4.5. Estruturas de Ciclo
As estruturas de ciclo são utilizadas de forma a que o programa
execute uma determinada parte do código enquanto uma condição
30
4. Trabalhando com ficheiros
não for alcançada. Apesar de muito interessantes e de por vezes
facilitarem a programação, estas estruturas tem de ser utilizadas com
algum cuidado pois poderá acontecer que a condição nunca seja
alcançada e o programa nunca termine.
4.5.1. Estrutura For
É utilizada quando sabemos à partida quantas vezes queremos
que o ciclo se repita. Esta estrutura tem a particularidade de o
contador ser automático, ou seja não é necessário explicitar o
incremento ou decremento da variável contador.
A sua sintaxe é:
For variavel_contador := valor_inicial To valor_final Do
<Bloco de instruções>
ou
For variavel_contador := valor_inicial DownTo valor_final Do
<Bloco de instruções>
Exemplo:
For Contador := 1 To 5 Do
ShowMessage(‘O contador vai em ‘ + Contador + ‘;’);
Resultado:
O contador vai em 1;
O contador vai em 2;
O contador vai em 3;
O contador vai em 4;
Exemplo2:
For Contador := 5 DownTo 1 Do
ShowMessage(‘O contador vai em ‘ + Contador + ‘;’);
31
Instituto Superior de Engenharia do Porto
Resultado:
O contador vai em 5;
O contador vai em 4;
O contador vai em 3;
O contador vai em 2;
4.5.2. Estrutura While
Esta estrutura é utilizada para repetir uma porção de código
enquanto uma condição for verdadeira. Nesta estrutura é necessário
explicitar o incremento/decremento.
A sintaxe é:
While <Condição> Do
<Bloco de instruções>
Exemplo:
Contador := 1;
While Contador < 5 Do
Begin
ShowMessage(‘O contador vai em ‘ + Contador + ‘;’);
Contador := Contador + 1;
End;
4.5.3. Estrutura Repeat/Until
Esta estrutura é utilizada para repetir uma porção de código até
que uma condição seja verdadeira. Nesta estrutura é necessário
explicitar o incremento/decremento.
A sintaxe é:
32
4. Trabalhando com ficheiros
Repeat
< Bloco de instruções>
Until <Condição>
Exemplo:
Contador := 1;
Repeat
ShowMessage(‘O contador vai em ‘ + Contador + ‘;’);
Contador := Contador + 1;
Until Contador >= 5;
4.6. Operadores Lógicos
No Delphi existem os seguintes operadores lógicos:
• And - “e”; A expressão é verdadeira quando todas as condições
o são.
• Or - “ou” ; A expressão é verdadeira quando pelo menos uma
das condições o é.
• Xor - “ou“ (exclusivo); A expressão só é verdadeira quando o
valor das condições é diferente.
• Not – negação; Se a expressão é verdadeira, o resultado é falso
e vice-versa.
4.7. Trabalhando com Vectores
Os vectores são muito importantes para armazenar em
memória uma grande quantidade de dados de um mesmo tipo. Pode-
se definir um vector como um conjunto de variáveis que possuem o
mesmo nome, mas diferenciados por um índice.
Exemplo:
33
Instituto Superior de Engenharia do Porto
{Criação de um vector do tipo caracter que irá armazenar 45 registos
referentes a alunos}
Alunos: array[1..45] of Char;
{Atribuir o vector Alunos à variável Ref_Alunos}
Ref_Alunos := Alunos;
{Inserir em cada registo um nome de um aluno}
Ref_Alunos[1] := ‘Ana’;
Ref_Alunos[2] := ‘Bruno’;
Ref_Alunos[3] := ‘Carla’;
Ref_Alunos[4] := ‘Dionísio’;
Ref_Alunos[5] := ‘Elsa’;
...
Ref_Alunos[45] := ‘Fernanda’;
4.8. Caracteres de formatação do EditMask
O EditMask é uma propriedade muito funcional porque permite-
nos formatar determinados campos que poderão aparecer no ecrã.
As máscaras possíveis são:
! (exclamação): Caracteres em branco não serão armazenados.
>(maior que): Todos os caracteres estarão em maiúsculas até que
apareça o caracter <.
<(menor que): Todos os caracteres estarão em minúsculas até que
apareça o caracter >.
<>(menor e maior que): Todas as letras maiúsculas e minúsculas
serão armazenadas conforme foram introduzidas pelo utilizador.
\(barra invertida): Os caracteres serão tratados como literais.
L(letra L maiúscula): Faz com que apenas os caracteres alfabéticos
sejam aceites na posição onde se encontra o L.
34
4. Trabalhando com ficheiros
l(letra l minúscula): Faz com que apenas os caracteres alfabéticos
sejam aceites na posição onde se encontra o l, mas os caracteres
podem ser omitidos pelo utilizador.
A(letra A maiúscula): Faz com que apenas os caracteres
alfanuméricos sejam aceites na posição onde se encontra o A.
a(letra a minúscula): Faz com que apenas os caracteres
alfanuméricos sejam aceites na posição onde se encontra o a, mas os
caracteres podem ser omitidos pelo utilizador.
C(letra C maiúscula): Quaisquer caracteres podem ser aceites na
posição onde se encontra o C.
c(letra c minúscula): Quaisquer caracteres podem ser aceites na
posição onde se encontra o c e podem acontecer omissões.
0(zero): Faz com que apenas os caracteres numéricos sejam aceites
na posição onde se encontra o 0.
9(nove): Faz com que apenas os caracteres numéricos sejam aceites
na posição onde se encontra o 0 e podem acontecer omissões.
#: Faz com que apenas caracteres numéricos e sinais de adição (+)
ou subtracção (-) sejam aceites na posição onde se encontra o #.
:(dois pontos) : Usado para separar horas, minutos e segundos.
/(barra normal): Usado para separar meses, dias e anos.
;(ponto-e-vírgula): Usado para separar os pontos de uma máscara.
_(under-score): Usado para inserir espaços em branco na caixa de
edição.
4.9. Comentários
Muitas vezes para melhor compreendermos o nosso próprio
código, ou quando queremos que alguém o compreenda melhor,
usamos como método auxiliar os comentários. Os comentários são
linhas de código que serão ignoradas pelo Delphi quando este as
encontra.
Para inserirmos um comentário podemos utilizar dois métodos:
35
Instituto Superior de Engenharia do Porto
• Comentário por Bloco
A := 1;
{Todo este código
será ignorado pelo Delphi}
B := 2;
• Comentário linha-a-linha
A := 1;
// Esta linha será ignorada pelo Delphi
B := 2;
// Esta linha também
// E esta...
4.10. Funções e procedimentos
As funções e os procedimentos são pedaços de código escritos
à parte do seguimento normal de um programa que só serão
executados quando os invocarmos. Ambos podem receber
parâmetros.
4.10.1. Funções
As funções tem que obrigatoriamente retornar um valor de um
determinado tipo.
Para que uma função retorne um valor, é necessário indicar
qual é esse valor. Para tal existem dois métodos:
• Palavra reservada Result: Atribuindo a esta palavra reservada
um valor, esse valor é passado automaticamente para o valor
da função.
• Nome da função: Atribuindo ao nome da função o valor que se
quer retornar.
A sintaxe de definição de uma função é:
36
4. Trabalhando com ficheiros
Function nome_função(Par11,...,Par1N: Tipo_Variavel; ...; ParNN:
Tipo_Variavel): Tipo_Função;
Exemplo (função que calcula a soma de dois números passados por
parâmetro):
Funtion Calcula_Soma(x, y: Integer): Integer;
Begin
Result := x + y;
End;
4.10.2. Procedimentos
Os procedimentos não retornam valores.
A sua sintaxe é:
Procedure nome_procedimento(Par11,...,Par1N: Tipo_Variavel; ...;
ParNN: Tipo_Variavel);
Exemplo (procedimento que mostra uma mensagem no ecrã):
Procedure Mostra_Mensagem;
Begin
ShowMessage(‘Olá!’);
End;
4.11. Trabalhando com menus
A tarefa de adicionar e trabalhar com menus é muito fácil no
Delphi, simplesmente definindo os nomes dos itens que queremos
que apareçam na barra de menus.
Para inserir uma barra de menus, proceda da seguinte forma:
37
Instituto Superior de Engenharia do Porto
1. dirija-se à palete de objectos e seleccione o objecto
(MainMenu) localizado na divisão Standard e em seguida
clique em qualquer parte do formulário.
2. Dê duplo clique no objecto MainMenu que acabou de criar, o
que fará com que apareça a caixa de diálogo
Form1.MainMenu1.
Fig. 4.2: Caixa de diálogo de criação de menu
3. Na janela Object Inspector, dê um clique na caixa de texto
ao lado da propriedade Caption para seleccioná-la, digite
&Ficheiro8 e pressione a tecla ENTER.
4. Na caixa de diálogo Form1.MainMenu1, dê um clique à
direita da palavra Ficheiro que acabou de inserir.
8 “&” indica que esta opção de menu terá como atalho a letra “F”
38
4. Trabalhando com ficheiros
Fig. 4.3: Caixa de diálogo de criação de menu – cont.
5. Voltando à janela Object Inspector, dê um clique na caixa
de texto ao lado da propriedade Caption para seleccioná-la,
digite &Ajuda e pressione a tecla ENTER.
6. Na caixa de diálogo Form1.MainMenu1, dê um clique à
direita da palavra Ajuda que acabou de inserir.
Fig. 4.4: Caixa de diálogo de criação de menu – cont.
7. Na janela Object Inspector, dê um clique na caixa de texto
ao lado da propriedade Caption para seleccioná-la, digite
&Sobre e pressione a tecla ENTER.
39
Instituto Superior de Engenharia do Porto
Para acrescentar opções, proceda da seguinte forma:
1. Dê um clique sobre a opção de menu Ajuda da caixa de diálogo
Form1.MainMenu1 para seleccioná-la e, em seguida, dê um
clique sobre o rectângulo vazio logo abaixo.
Fig. 4.5: Caixa de diálogo de criação de menu – cont.
2. Na janela Object Inspector, dê um clique na caixa de texto ao
lado da propriedade Caption para seleccioná-la, digite &Sair e
pressione a tecla ENTER.
Fig. 4.6: Caixa de diálogo de criação de menu – cont.
40
4. Trabalhando com ficheiros
4.12. Resumo
Neste capítulo o aluno adquiriu conhecimentos mais específicos
sobre constituição de units e aspectos importantes de programação
sobre Delphi (como estruturas condicionais e de ciclo, como trabalhar
com vectores, entre outros).
4.13. Exemplos
Antes de começar com os exemplos, crie uma pasta adequada
no seu computador para os guardar.
1. Abra o Delphi.
2. Declare, como publicas, as seguintes variáveis:
a. Nome - String;
b. Idade - inteiro;
c. Morada – String;
d. VecNomes – vector de cinco strings;
e. VecIdades – vector de cinco inteiros.
3. Crie os objectos TEdit, TLabel e TButton.
a. Mude o título do objecto TLabel para “Idade:”;
b. Mude o nome do objecto TEdit para EIdade;
4. No evento OnClick do objecto do tipo TButton, digite o código
necessário para que quando o utilizador clique no botão
apareça uma caixa de mensagem a indicar se é adulto (>=18
anos).
5. Crie um objecto TMaskEdit e formate-o para apenas receber
oito caracteres.
6. Crie uma função/procedimento para cada uma das seguintes
alíneas:
a. Preencher os vectores;
b. Calcular a média das Idades;
41
Instituto Superior de Engenharia do Porto
c. Indicar se existe alguém cujo nome começa pela letra “A”
e não seja adulto ou cujo nome acaba pela letra “A” e
seja adulto.
7. Crie um menu para tratamento da alínea anterior.
8. Insira comentários.
9. Compile e execute o programa.
10. Teste o exercício.
4.14. Exercícios
1. Abra o Delphi com o projecto que gravou no exercício do
primeiro capítulo.
2. No formulário “Form_Apresentacao”, seleccione o objecto
Tempo. No evento OnTimer, escreva o código necessário para
que este formulário se feche.
3. Crie um novo formulário. Mude:
a. o nome do formulário para “Form_Entrada”;
b. o titulo para “Login”;
c. retire os BorderIcons;
d. guarde a unit com o nome “Unit_ Entrada”.
4. Crie um objecto TMaskEdit, um TEdit, dois TLabels e dois
TButton:
a. Mude o texto de uma das Labels para “Login:” e o outro
para “Password:”;
b. Formate o objecto MaskEdit para aceitar apenas oito
caracteres (Login).
c. Indique que o objecto Edit é do tipo password.
d. Mude o título dos botões para “OK” e “Cancelar”.
5. Defina as variáveis necessárias para ter um vector de logins e
passwords. No evento OnCreate do formulário preencha-o com
dados.
6. Crie uma função que indique se o login é válido.
42
4. Trabalhando com ficheiros
7. No evento OnClick do botão “OK” escreva o código necessário
para chamar a função criada na alínea anterior. Se for válido,
fechar o formulário, caso contrário, enviar uma mensagem para
o ecrã a indica-lo. No evento OnClick do botão “Cancel” escreva
o código necessário para cancelar e fechar a aplicação.
8. Crie um novo formulário. Mude:
a. a cor de fundo para cinzento escuro (gray);
b. a propriedade Position para poScreenCenter;
c. a propriedade WindowState para wsMaximized;
d. o nome do formulário para “Form_Principal”;
e. guarde a unit com o nome “Unit_Principal”.
9. Crie um menu com as seguintes opções e sub-opções:
a. Itens;
b. Listagens;
c. Sistema;
d. B. Multimédia:
a. Acerca;
b. Sair.
10. No evento OnCreate, escreva o código necessário para abrir
o formulário “Form_Apresentacao” seguido do formulário
“Form_Entrada”.
11. Abra a opção de menu Project – Options. Seleccione
“Form_Apresentacao” e clique em “>”9. Repita para o
formulário “Form_Entrada”.
12. Compile, resolva os erros resultantes, e execute o programa.
9 A lista apresentada no lado esquerdo indica todos os formulários que serão criados automaticamente pelo Delphi; A do lado direito todos os que estão disponíveis para serem criados, mais tarde, pelo programa.
43
Instituto Superior de Engenharia do Porto
44
55.. TTrraabbaallhhaannddoo ccoomm ffiicchheeiirrooss
5.1. Ficheiros
Um ficheiro de texto é caracterizado por conter caracteres
organizados por linhas e por cada linha terminar com um identificador
de fim de linha (por exemplo carriage-return ou linefeed).
5.2. Estruturas relacionadas
Algumas das estruturas mais importantes são:
Estruturas Descrição
TOpenDialog Abre uma janela em modo modal para escolha e
abertura de ficheiros.
TFindDialog Abre uma janela que permite procurar texto dentro
de um ficheiro.
TSaveDialog Abre uma janela em modo modal para escolha de
nomes de ficheiros e permite guarda-los.
TReplaceDialog Abre uma janela que permite procurar e substituir
texto dentro de um ficheiro.
5.3. Funções e Procedimentos para
manuseamento de ficheiros
Algumas das funções e procedimentos mais importantes:
Estrutura Descrição
AssignFile Associa o nome de um ficheiro externo a uma
45
Instituto Superior de Engenharia do Porto
variável de ficheiro.
ChDir Muda o directório actual.
CloseFile Termina a associação entre o nome do ficheiro
externo e a variável de ficheiro.
CreateDir Cria um novo directório.
DeleteFile Apaga fisicamente um ficheiro.
DirectoryExists Determina se um determinado directório existe.
FileClose Fecha um determinado ficheiro.
FileExists Determina se um determinado ficheiro existe.
FileRead Lê um determinado numero de bytes de um ficheiro.
FileSearch Procura num determinado caminho DOS um ficheiro.
FileWrite Escreve o conteúdo de um buffer para a posição
actual do ficheiro.
FindClose Liberta a porção de memória alocada por FindFirst.
FindFirst Procura pela primeira instancia de um nome de
ficheiro (com um determinado grupo de atributos
dado), no directório especificado.
FindNext Retorna a próxima entrada que corresponde ao
nome e atributos especificados na chamada ao
FindFirst.
GetCurrentDir Retorna o nome do directório actual.
RemoveDir Apaga um directório existente desde que este esteja
vazio.
RenameFile Muda o nome de um ficheiro.
SetCurrentDir Especifica o directório actual.
5.4. Rotinas de I/O
Algumas das funções e procedimentos mais importantes:
46
5. Trabalhando com ficheiros
Estrutura Descrição
Append Prepara um ficheiro existente para adição de texto.
BlockRead Lê um ou mais blocos de registos de um ficheiro
aberto para uma variável.
BlockWrite Escreve um ou mais blocos de registos de uma
variável para um ficheiro aberto.
Eof Testa se a posição do ficheiro está no fim do ficheiro.
FileSize Retorna o tamanho de um ficheiro em bytes ou o
numero de registos num ficheiro de registos
MKDir Cria um novo subdirectório.
Rename Muda o nome de um ficheiro.
Reset Abre um ficheiro existente.
Rewrite Cria um ficheiro e abre-o.
RmDir Apaga um subdirectório desde que este se encontre
vazio.
5.5. Rotinas para ficheiros de texto
Algumas das rotinas para ficheiros de texto são:
Rotinas Descrição
AssignPrn Atribui uma variável de ficheiro de texto a uma
impressora.
Eoln Testa se o ponteiro de ficheiro está no final da linha.
Erase Apaga um ficheiro externo.
Flush Esvazia o buffer de um ficheiro aberto para output.
Read Lê dados de um ficheiro.
Readln Lê uma linha de texto de um ficheiro.
Write Escreve para um ficheiro de texto.
Writeln Escreve uma linha (com caracter de fim de linha incluído)
num ficheiro.
47
Instituto Superior de Engenharia do Porto
5.6. Rotinas para tratamento de strings
Algumas das rotinas para tratamento de strings são:
Rotinas Descrição
CompareStr Compara duas strings distinguindo maiúsculas de
minúsculas.
CompareText Compara duas strings pelo seu valor ordinal, ignorando
diferenças entre maiúsculas e minúsculas.
Concat Concatena duas ou mais strings, resultando em uma.
Copy Retorna uma substring de uma string ou um segmento
de um vector dinâmico.
Delete Apaga uma substring de uma string.
Format Retorna uma string formatada de acordo com um
grupo de parâmetros dados.
Insert Insere uma substring numa string a partir de uma
determinada posição.
IsDelimiter Indica se um determinado caracter numa string
corresponde a um existente num grupo de
delimitadores.
Length Retorna o numero de caracteres numa string ou
elementos num vector.
LowerCase Retorna uma cópia de uma string, mas com todos os
caracteres em minúsculas.
Pos Retorna o índice do primeiro caracter de uma
determinada substring existente numa string.
QuotedStr Acrescenta aspas no inicio e fim de uma string e
retorna-a.
Str Formata uma string e retorna-a para uma variável.
StringReplace Retorna uma string com ocorrências de um caracter
substituído por outro.
Trim Apaga possíveis espaços que existam no inicio e fim de
uma string.
48
5. Trabalhando com ficheiros
UpperCase Retorna uma cópia de uma string, mas com todos os
caracteres em maiúsculas.
Val Converte uma string para a sua representação
numérica.
5.7. FTP
Para transferencias de ficheiros de e para um servidor de
internet/intranet FTP (via protocolo de FTP), o Delphi possui o objecto
(NMFTP). Este objecto encontra-se na palete de componentes,
divisão FastNet.
5.8. Propriedades
As propriedades mais importantes deste objecto são:
Propriedade Descrição
BytesRecvd Contem o numero de bytes recebidos da
transferência.
BytesSent Contem o numero de bytes enviados na
transferência.
BytesTotal Contem o numero total de bytes enviados ou
recebidos na transferência.
Connected Indica se está conectado ao servidor remoto.
CurrentDir Contem o nome do directório corrente no
servidor remoto.
FTPDirectoryList Usada apenas quando a propriedade ParseList
tem o valor TRUE. Contem a listagem do
directório obtido através do método List.
Host Contem o nome ou endereço IP do servidor
remoto.
Password Especifica a palavra passe usada para login no
servidor remoto.
49
Instituto Superior de Engenharia do Porto
UserID Especifica o login usado na conexão ao servidor
remoto.
Vendor Especifica o sistema operativo do servidor
remoto.
5.9. Métodos
Os métodos mais importantes deste objecto são:
Métodos Descrição
Abort Aborta a operação actual.
Allocate Aloca espaço no servidor remoto para guardar
ficheiros.
ChangeDir Altera o directório corrente.
Connect Conecta o cliente do servidor remoto.
Disconnect Disconecta o cliente do servidor remoto.
Download Transfere ficheiros do servidor remoto para o
computador local.
List Retorna uma listagem com os nomes dos
ficheiros e directórios existentes no directório
corrente no servidor remoto.
MakeDirectory Cria um directório no directório corrente no
servidor remoto.
Mode Altera o modo utilizado na transferência de
dados de/para o servidor remoto.
NList Retorna o nome de ficheiros e directórios do
directório corrente.
RemoveDir Remove um directório no directório corrente no
servidor remoto.
Upload Envia ficheiros do computador local para o
servidor remoto.
UploadAppend Envia ficheiros do computador local para o
servidor remoto. Caso já exista um ficheiro com
50
5. Trabalhando com ficheiros
o mesmo nome, o novo ficheiro será
acrescentado no final do já existente.
UploadRestore Envia continuação de ficheiros do computador
local para o servidor remoto.
UploadUnique Envia ficheiros do computador local para o
servidor remoto. Caso já exista um ficheiro com
o mesmo nome, um nome único será utilizado.
5.10. Eventos
Os eventos mais importantes deste objecto são:
Eventos Descrição
AuthenticationFailed Ocorre quando o userId ou a palavra passe
estão incorrectas.
AuthenticationNeeded Ocorre quando o userId ou a palavra passe
estão vazias.
Disconnect Ocorre quando o cliente se desconecta do
servidor remoto.
Failure Ocorre quando um comando de execução falha.
PacketRecvd Ocorre quando o cliente recebe dados do
servidor remoto.
PacketSent Ocorre quando o cliente envia dados para o
servidor remoto.
Success Ocorre quando um comando é completado com
sucesso.
TransactionStart Ocorre quando o servidor remoto envia dados
ao cliente através do Data Socket.
TransactionStop Ocorre quando uma transferência de dados do
servidor para o cliente termina.
51
Instituto Superior de Engenharia do Porto
5.11. Notas
Antes de se usar este componente para transferir ficheiros para
e de um servidor remoto, é necessário que primeiro nos conectemos.
Isto é conseguido atribuindo ás propriedades Host e Port valores
válidos de um servidor de FTP. Depois, atribui-se ás propriedades
UserID e Password valores de uma conta válida no servidor escolhido.
Muitos servidores aceitam Anonymous como UserID e um endereço
de email como password para se conectar. Só depois de se atribuir
estas propriedades, é que se pode efectuar o método Connect para
nos conectarmos ao servidor.
Depois de nos conectarmos, podemos obter um directório do
servidor remoto, chamando o método List e escrevendo um event
handler para o evento OnListItem.
Podemos também alterar o directório actual chamando o
método ChangeDir, especificando um nome de um directório válido.
Para efectuar upload de ficheiros para o directório actual no
servidor remoto, chamamos o método UpLoad. Este método utiliza
como parâmetros um nome de um ficheiro local e um nome para
salvar o ficheiro no computador remoto. É de notar que só se pode
efectuar upload para um servidor de FTP se tivermos as permissões
necessárias. Se o ficheiro já existir no servidor com o mesmo nome
que se especificou no método, o ficheiro será substituído pelo
enviado. Uma solução será utilizar o método UpLoadUnique.
Para efectuar Download de ficheiros do servidor remoto,
primeiro devemos chamar o método List, para sabermos se o ficheiro
que desejamos está disponível para Download. Depois chamamos o
método Download, passando por parâmetro o nome do ficheiro que
desejamos e o caminho e nome para onde o queremos salvar no
nosso computador. É de notar que não podemos efectuar download
de todos os caminhos do servidor de FTP. Normalmente é-nos
permitido fazer Download de vários ficheiros de um directório
52
5. Trabalhando com ficheiros
chamado ‘pub’. Também aqui, se especificarmos um nome para o
ficheiro a guardar que já exista, ele será substituído pelo enviado.
Para criar directórios no servidor, primeiro temos de ter as
permissões suficientes para isso. Normalmente, é-nos permitido criar
directórios num directório ‘incoming’ do servidor FTP. Para criarmos o
directório, chamamos o método MakeDirectory, passando por
parâmetro o nome do directório que desejamos criar.
Para removermos um directório, também temos de ter as
permissões necessárias. Depois, chamamos o método RemoveDir,
passando por parâmetro o nome do directório que desejamos
remover.
5.12. Resumo
Neste capítulo o aluno adquiriu conhecimentos sobre como
trabalhar com ficheiros e estruturas relacionadas.
Adquiriu conhecimentos específicos de como trabalhar com
funções e procedimentos usados para tratamento de texto e de
ficheiros.
Aprendeu também como trabalhar com servidores FTP em
Delphi.
5.13. Exemplos10
Antes de começar com os exemplos, crie uma pasta adequada
no seu computador para os guardar.
1. Abra o Delphi.
2. Crie um objecto TSaveDialog, TMemo e dois TButton.
10 Neste capítulo não serão fornecidos exemplos sobre o objecto NMFTP visto ser necessário um servidor de FTP activo. No entanto, e caso seja necessário, convida-se o aluno a consultar a ajuda do Delphi sobre este objecto, pois considera-se que esta seja bastante completa.
53
Instituto Superior de Engenharia do Porto
3. Mude o título de um dos botões para “Guardar Linha a Linha”
e o do outro para “Guardar em Linha”.
4. Dê-lhes nomes sugestivos (por exemplo, “BtnGuardarLL” e
“BtnGuardarL”, respectivamente).
5. Crie uma função que retorne todo o conteúdo do objecto
TMemo em minúsculas e todo na mesma linha.
6. Crie um procedimento que receba como parâmetro uma string
(que será o nome do ficheiro) e um boleano.
a. Se o valor do parâmetro boleano for true, transcrever
para um ficheiro o resultado da alínea 4.
b. Se for false, transcrever para um ficheiro todo o
conteúdo do objecto TMemo.
7. Ao clicar no objecto BtnGuardarLL:
a. Executar o objecto TSaveDialog;
b. Chamar a função criada na alínea 6, passando por
parâmetro o nome do ficheiro escolhido na alínea anterior
e false.
8. Ao clicar no objecto BtnGuardarL:
a. Executar o objecto TSaveDialog;
b. Chamar a função criada na alínea 6, passando por
parâmetro o nome do ficheiro escolhido pelo objecto
TSaveDialog e true.
9. Compile e execute o programa.
10. Teste o exercício.
5.14. Exercicios
1. Abra o Delphi com o projecto que gravou no exercício do
capítulo anterior.
2. Crie um novo formulário. Mude:
a. o nome do formulário para “Form_Carregar”;
b. o título para “Carregar de Ficheiro”;
54
5. Trabalhando com ficheiros
c. guarde a unit com o nome “Unit_Carregar”.
3. Crie um objecto TMemo, um TButton e um OpenDialog.
4. Dê nomes sugestivos aos objectos (por exemplo, “Memo”,
“BtnLerFicheiro” e “OpenDialog”).
5. No objecto do tipo TMemo, retire a linha que aparece por
defeito.
6. Crie um procedimento que receba como parâmetro uma string
e um caracter (por exemplo, ‘|’) e que diga a primeira posição
em que o caracter aparece.
7. Crie um botão que ao clicar nele, percorra o objecto TMemo e
que vá indicando a posição em que o caracter separador
aparece. Utilize o procedimento criado na alínea anterior.
8. No objecto do tipo TButton:
a. Mude o título para “Ler Ficheiro”;
b. Ao clicar no botão:
i. Executar o objecto OpenDialog;
ii. Ler os dados do ficheiro escolhido e escrever no
objecto TMemo.
9. No objecto OpenDialog, especifique um directório existente
como o directório inicial.
10. No formulário “Form_Principal”, opção de menu Sistema, crie
como sub-opção “Carregar de ficheiro”.
11. No evento OnClick, escreva o código necessário para chamar
o formulário “Form_Carregar”.
12. Compile, resolva os erros resultantes, e execute o programa.
55
Instituto Superior de Engenharia do Porto
56
66.. TTrraabbaallhhaannddoo ccoomm BBaassee ddee DDaaddooss
6.1. Conceitos de Base de Dados
Uma Base de Dados não é mais do que um conjunto de tabelas
de informações relacionadas entre si e compostas por campos e
registos (similar a uma agenda).
Os campos das tabelas são o tipo de informação que vamos
armazenar (como nome, morada, etc.) e os registos que os campos
conterão são as informações em si (os nomes das pessoas, seus
endereços, etc).
Alguns dos termos mais utilizados são:
Termo Definição
Base de Dados Conjunto de tabelas.
Tabela Estrutura baseada em linhas e colunas de dados.
Registo Informação que se encontra linearmente em um
grupo de campos.
Campo Um item do registo, como por exemplo, nome do
cliente.
Índice Identificador de ordem lógica vinculado a um ou
mais campos de uma tabela.
Chave Índice principal onde registos duplicados não são
permitidos.
Para trabalhar com Base de dados, o Delphi utiliza um sistema
denominado BDE (Borland Database Engine), que integra
harmoniosamente dados de diversos formatos, como dBase, Paradox,
Access e outros.
57
Instituto Superior de Engenharia do Porto
Os objectos de acesso a Base de Dados do Delphi5 permitem
que se automatize diversas tarefas que no passado exigiam um
volume significativo de programação. Por exemplo, em poucos
minutos o aluno poderá criar uma aplicação de entrada ou
manutenção de dados que manipule registos sem precisar escrever
uma só linha de código.
O mais interessante em tudo isto é que os programas poderão
incorporar imagens, listas, memorandos formatados e muito mais.
6.2. Borland Database Engine (BDE)
O BDE é uma ferramenta de 32-bit baseada em Windows que
possibilita conectividade entre as ferramentas da Borland e bases de
dados de vários formatos. Permite configurar vários drivers de base
de dados, criar e remover ODBC drivers, e criar e manter alias para
bases de dados.
Um dos pormenores a ter em atenção quando se utiliza o BDE,
é que quando se efectua uma instalação da aplicação, temos que
instalar também o BDE nos clientes.
É constituído por:
Componente Definição
Core BDE files Ficheiros .DLL essenciais que constituem o BDE.
BDE API functions Conjunto de funções para manuseamento do
ambiente, configuração, sessão, tratamento de
erros, entre outros.
BDE Administrator Ferramenta para configuração do BDE que
permite registar drivers e alias, especificar opções
de formatação de datas, e customização de BDE
drivers.
58
6. Trabalhando com Bases de Dados
Query engines Permite suporte para a linguagem QBE.
Database drivers Inclui cinco drivers de base de dados standard
(Paradox, dBASE, FoxPro, Access e Texto).
Optional drivers Permite a adição de outros drivers que poderão
ser necessários, incluindo drivers para servidores
InterBase e drivers para SQL nativo, Informix,
Oracle, Sybase e Microsoft SQL Server.
ODBC connectivity Fornece acesso a todas as fontes de dados para
os quais o ODBC se encontra disponível.
6.3. O Database Desktop
O Database Desktop é uma ferramenta de Base de Dados que
permite criar ou reestruturar, navegar e até editar tabelas de Bases
de Dados. Permite trabalhar em vários formatos (dBase, Paradox,
SQL, entre outros).
Vamos analisar em pormenor esta ferramenta11:
1. Carregue a ferramenta que se encontra em Tools. O programa
será iniciado como indica a figura:
11 Para analisar em simultâneo tem de primeiro criar uma ligação ODBC como explicado em 6. Anexos.
59
Instituto Superior de Engenharia do Porto
Fig. 6.1: DB Desktop
2. Clique na opção Tools na barra de menus e , em seguida, clique
na opção Alias Manager. A caixa de diálogo “Alias Manager”
aparece.
Fig. 6.2: Janela “Alias Manager”
60
6. Trabalhando com Bases de Dados
Public Alias: Quando esta opção está seleccionada, significa que o
alias (apelido) referente à Base de Dados estará disponível a qualquer
momento dentro do Delphi5, ou seja, ele será publico (public).
DataBase Alias: Nome (ou novo nome) de alias escolhido para a
Base de Dados.
Driver Type: O tipo ou origem da Base de Dados que será
disponibilizado.
Path: O caminho onde a Base de Dados se encontra.
Botão New: Cria e disponibiliza a Base de Dados.
Botão Browse: Usado para procurar o caminho, ou seja, o local
onde se encontra a Base de Dados.
3. Clique em New, e em seguida, digite Biblioteca12 no campo
Database alias.
4. Em “Driver Type” escolha “Microsoft Access Driver
(*.mdb)”.
5. Em “ODBC DSN” escreva “BibliotecaMultimedia”.
12 Biblioteca será o alias (apelido) que será dado à Base de Dados exemplo com o propósito de facilitar a sua localização.
61
Instituto Superior de Engenharia do Porto
Fig. 6.3: Janela "Alias Manager"
6. Clique no botão OK e, em seguida, clique no botão Sim para
confirmar as alterações realizadas.
Fig. 6.4: Janela "Alias Manager" – cont.
Com isto, a Base de Dados Biblioteca fica disponibilizada para
ser usada em qualquer aplicação Delphi.
6.4. DataAccess e seus componentes
A divisão DataAccess é muito importante pois permite conectar
à base de dados utilizando o BDE. Os componentes mais importantes
são:
Componente Definição
DataBase Encapsula uma ligação persistente à base de
dados.
DataSource Efectua ligação entre um componente do tipo
62
6. Trabalhando com Bases de Dados
DataSet (Tabelas, Querys, entre outros) e um
componente do tipo data-aware (DataControls).
Query Utiliza comandos SQL para retornar dados de
uma tabela da base de dados e disponibiliza-os
para um ou mais componentes do tipo data-
aware (através do DataSource).
StoredProcedure Permite que uma aplicação aceda a
procedimentos da base de dados.
Table Retorna dados de uma tabela da base de dados e
disponibiliza-os para um ou mais componentes do
tipo data-aware (através do DataSource).
6.5. Propriedades dos componentes
6.5.1. Database
Propriedade Definição
AliasName Especifica um alias usado na conexão.
Connected Indica se uma conexão se encontra activa.
DatabaseName Especifica o nome da base de dados associada ao
componente.
LoginPrompt Especifica se aparecerá uma janela de diálogo
para inserção do userID e password após a
abertura da conexão.
Params Contem parâmetros de conexão para o BDE alias
associado ao componente.
6.5.2. DataSource
Propriedade Definição
AutoEdit Determina se o componente entra em modo de
edição automaticamente quando recebe o focus.
63
Instituto Superior de Engenharia do Porto
DataSet Especifica o componente do tipo DataSet
(Tabelas, Querys, entre outros) sobre o qual o
componente efectua a ligação.
State Retorna o estado actual do componente (se está
em modo de edição, inserção, entre outros).
6.5.3. Query
Propriedade Definição
Active Especifica se o DataSet se encontra aberta.
DatabaseName Especifica o nome da base de dados associado ao
DataSet.
DataSource Especifica o componente do tipo DataSource de
onde se irá extrair os dados a usar.
Filter Especifica um filtro a actuar sobre o componente.
Filtered Especifica se a filtragem está activa.
Params Contem uma lista com os parâmetros utilizados
no comando SQL.
SQL Contem um comando SQL a ser executado pela
query.
6.5.4. StoredProcedure
Propriedade Definição
Active Especifica se o DataSet se encontra aberto.
DatabaseName Especifica o nome da base de dados associado ao
DataSet.
Filter Especifica um filtro a actuar sobre o componente.
Filtered Especifica se a filtragem está activa.
ParamBindMode Determina a ordem pela qual os parâmetros na
propriedade Params são comparados com os
parâmetros do procedimento remoto. Pode ser
64
6. Trabalhando com Bases de Dados
por nome ou por número.
Params Contem uma lista com os parâmetros utilizados
no comando SQL.
StoredProcName Indica o nome do procedimento remoto.
6.5.5. Table
Propriedade Definição
Active Especifica se o DataSet se encontra aberto.
DatabaseName Especifica o nome da base de dados associado ao
DataSet.
Filter Especifica um filtro a actuar sobre o componente.
Filtered Especifica se a filtragem está activa.
TableName Indica o nome da tabela da base de dados.
6.6. Métodos dos componentes
6.6.1. Database
Método Definição
Close Fecha a conexão.
Commit Guarda permanentemente todas as alterações,
inserções e remoções efectuadas durante a
transação corrente e termina-a.
Execute Executa um comando de SQL.
Open Abre a conexão.
Rollback Cancela todas as alterações, inserções e
remoções efectuadas durante a transação
corrente e termina-a.
65
Instituto Superior de Engenharia do Porto
6.6.2. DataSource
Método Definição
Edit Determina se se efectua uma chamada ao
método Edit do DataSet associado.
IsLinkedTo Verifica se o DataSource está ligado a um
DataSet especificado.
6.6.3. Query
Método Definição
ExecSql Executa um comando de SQL.
Prepare Envia previamente o comando de SQL para o BDE
para optimização.
6.6.4. StoredProcedure
Método Definição
ExecProc Executa o procedimento remoto.
Prepare Prepara um procedimento remoto para execução.
6.6.5. Query, StoredProcedure e Table
Método Definição
Append Acrescenta um novo registo vazio no final do
DataSet.
Cancel Cancela alterações efectuadas ao registo actual
que ainda não tenham sido guardadas.
Close Fecha o DataSet.
Delete Elimina o registo activo e posiciona o cursor no
próximo registo.
Edit Permite edição dos dados no DataSet.
First Posiciona o cursor no primeiro registo do DataSet.
66
6. Trabalhando com Bases de Dados
Insert Insere um novo registo vazio no DataSet.
IsEmpty Indica se o DataSet contem registos.
Last Posiciona o cursor no ultimo registo do DataSet.
Locate Procura no DataSet um registo especifico e torna-
o o registo actual.
Lookup Retorna valores de campos de um registo que
corresponde aos parâmetros de pesquisa.
Next Posiciona o cursor no próximo registo do DataSet.
Open Abre o DataSet.
Post Guarda as alterações efectuadas num registo, na
base de dados.
Prior Posiciona o cursor no registo anterior do DataSet.
Refresh Efectua um refrescamento de dados.
6.7. Eventos dos componentes
6.7.1. Database
Evento Definição
After/BeforeConnect Ocorre antes/depois de uma conexão se
estabelecer.
After/BeforeDisconnect Ocorre antes/depois de uma conexão fechar.
OnLogin Ocorre quando uma aplicação se conecta à
base de dados.
6.7.2. DataSource
Evento Definição
OnDataChange Ocorre quando o registo actual foi editado e a
aplicação move-se de um campo ou registo para
outro.
OnStateChange Ocorre quando o estado do DataSet altera (por
67
Instituto Superior de Engenharia do Porto
exemplo quando sai do estado de inserção e
passa para o estado de edição).
OnUpdateData Ocorre quando os dados do registo actual vão ser
actualizados.
6.7.3. Query, StoredProcedure e Table
Evento Definição
After/BeforeScroll Ocorre quando uma aplicação navega de um
registo para outro.
OnCalcFields Ocorre quando a aplicação recalcula campos do
tipo calculated.
OnNewRecord Ocorre quando uma aplicação insere ou
acrescenta um novo registo.
6.8. DataControls e seus componentes
A divisão de DataControls permite a utilização de componentes
especializados para tratamento de dados da base de dados. Os
componentes mais importantes são:
Componente Definição
DBCheckBox Mostra e permite edição de um campo do tipo
boleano do registo actual.
DBComboBox Mostra uma lista de valores de uma coluna de
uma tabela.
DBEdit Mostra e permite edição de um valor de um
campo do registo actual.
DBGrid Grelha que permite visualização e edição de
dados de uma forma muito similar a uma folha de
cálculos.
DBNavigator Contem botões que permitem operações sobre
68
6. Trabalhando com Bases de Dados
registos (como por exemplo, navegação,
inserção, entre outros).
DBText Mostra um valor de um campo do registo actual.
6.9. Propriedades dos componentes
6.9.1. DBCheckBox
Propriedade Definição
Checked Especifica se a check box aparece preenchida por
defeito.
DataField Identifica o campo a mostrar o valor.
DataSource Liga a check box ao DataSet.
6.9.2. DBComboBox
Propriedade Definição
DataField Identifica o campo a mostrar o valor.
DataSource Liga a combo box ao DataSet.
DroppedDown Indica o estado da parte que se encontra
normalmente invisível (se invisível ou visível).
ItemIndex Indica qual o item que se encontra seleccionado.
Items Contem uma lista com as strings visíveis.
SelLength Especifica o tamanho, em caracteres, do texto
seleccionado na caixa de edição.
SelStart Especifica a posição do primeiro caracter
seleccionado na caixa de edição.
SelText Representa o texto seleccionado na região de
edição.
Sorted Determina se os valores visíveis da combo box
estão ordenados alfabeticamente.
Style Determina o tipo de combo box.
69
Instituto Superior de Engenharia do Porto
Text Contêm uma string associada ao controlo.
6.9.3. DBEdit
Propriedade Definição
DataField Identifica o campo a mostrar o valor.
DataSource Liga o componente ao DataSet.
IsMasked Indica se o controlo possui uma máscara de
edição.
SelLength Especifica o tamanho, em caracteres, do texto
seleccionado na caixa de edição.
SelStart Especifica a posição do primeiro caracter
seleccionado na caixa de edição.
SelText Representa o texto seleccionado na caixa de
edição.
Text Indica o texto apresentado antes de, caso exista,
ter sido aplicada uma máscara.
6.9.4. DBGrid
Propriedade Definição
Columns Descreve os atributos e ligações de campos das
colunas.
DataSource Liga o componente ao DataSet.
SelectedField Especifica o campo da célula actualmente
seleccionada na grelha.
SelectedIndex Especifica o índice da coluna actualmente
seleccionada.
SelectedRows Especifica um conjunto de bookmarks para todos
os registos do DataSet que correspondem às
linhas seleccionadas na grelha.
70
6. Trabalhando com Bases de Dados
6.9.5. DBNavigator
Propriedade Definição
ConfirmDelete Determina se aparecerá uma mensagem de aviso
para confirmar remoções.
DataSource Liga o componente ao DataSet.
Flat Determina se os botões são 3D.
VisibleButtons Determina quais os botões a aparecer no
controlo.
6.9.6. DBText
Propriedade Definição
DataField Identifica o campo a mostrar o valor.
DataSource Liga o componente ao DataSet.
Transparent Especifica se é transparente.
WordWrap Especifica se há quebras de palavras quando
estas são maiores que o espaço disponível.
6.10. Métodos dos componentes
6.10.1. DBComboBox
Método Definição
Clear Remove todo o texto da caixa de edição e todos
os itens da lista.
6.10.2. DBEdit
Método Definição
Clear Atribui vazio à propriedade Text.
Reset Cancela todos as alterações que não foram
71
Instituto Superior de Engenharia do Porto
guardadas.
6.10.3. DBGrid
Método Definição
MouseCoord Retorna os índices da linha e coluna da célula que
contem as coordenadas especificadas.
6.11. Eventos dos componentes
6.11.1. DBComboBox
Evento Definição
OnChange Ocorre quando o utilizador altera o texto na caixa
de edição.
OnDrawItem Ocorre quando um item necessita de ser
desenhado.
OnDropDown Ocorre quando o utilizador acciona a lista.
6.11.2. DBEdit
Evento Definição
OnChange Ocorre quando o utilizador altera o texto na caixa
de edição.
6.11.3. DBGrid
Evento Definição
OnCellClick Ocorre quando o utilizador liberta o rato em uma
célula.
OnColEnter Ocorre quando uma célula ganha o focus.
OnColExit Ocorre quando uma célula perde o focus.
72
6. Trabalhando com Bases de Dados
OnColumnMoved Ocorre quando o utilizador move uma coluna,
utilizando o rato.
OnDrawColumnCell Ocorre quando a grelha necessita de desenhar a
célula.
OnDrawDataCell Ocorre quando a grelha necessita de desenhar a
célula, caso a propriedade estado das colunas for
csDefault.
OnTitleClick Ocorre quando o utilizador liberta o rato em um
dos cabeçalhos das colunas.
6.11.4. DBNavigator
Evento Definição
BeforeAction Ocorre quando um botão é clicado, antes da
acção ser executada.
OnClick Ocorre quando um botão é clicado, depois da
acção ser executada.
6.12. Resumo
Neste capítulo o aluno adquiriu conhecimentos sobre como
trabalhar com base de dados.
Aprendeu conceitos base sobre bases de dados, BDE e
Database Desktop.
Aprendeu ainda quais os principais objectos utilizados para
manipular bases de dados, as suas propriedades, métodos e eventos.
6.13. Exemplos
Antes de começar com os exemplos, crie uma pasta adequada
no seu computador para os guardar. Caso ainda não o tenha feito,
crie a ligação ODBC e o alias para a base de dados fornecida
“Biblioteca Multimédia”.
73
Instituto Superior de Engenharia do Porto
1. Abra o Delphi.
2. Crie os objectos TDatabase, TTable, TQuery e dois
TDataSource.
3. Crie os objectos TDBNavigator, TDBGrid, Label e TDBEdit.
4. Mude o título da Label para “Formato:”.
5. Em relação aos objectos do DataAccess, mude:
a. No objecto TDatabase:
i. A base de dados para a base de dados fornecida;
ii. Dê um nome ao objecto (por exemplo,
DBBiblioteca).
b. No objecto TTable, indique:
i. Qual a base de dados a que pertence;
ii. A tabela a que se refere – Itens;
iii. Dê um nome ao objecto (por exemplo, TBItens).
c. No objecto TQuery, indique:
i. Qual a base de dados a que pertence;
ii. O comando SQL a executar será: “Select
descricao from formatos where id_formato =
:Formato”.
iii. Especifique o tipo de dados e o tipo de parâmetro.
iv. Dê um nome ao objecto (por exemplo,
QRFormato).
d. Num dos objectos TDataSource, faça a referencia ao
objecto Table, no outro ao objecto Query.
6. Em relação aos objectos do DataControls, indique:
a. que o objecto DBNavigator faz referencia ao objecto
DataSource.
b. No objecto DBGrid, indique:
i. Que faz referencia ao objecto DataSource do
objecto Table;
ii. Liste todos os campos da tabela Itens.
74
6. Trabalhando com Bases de Dados
c. No objecto DBEdit indique:
i. Que faz referencia ao objecto DataSource do
objecto Query;
ii. Que o campo a mostrar é o “descricao”.
7. No evento OnCreate do formulário abra o objecto tabela.
8. No evento AfterScroll do objecto Table, refaça a pesquisa
efectuada pela Query, em que o parâmetro é o valor do
id_item da tabela.
9. Compile e execute o programa.
10. Teste o exercício.
6.14. Exercícios
1. Abra o Delphi com o projecto que gravou no exercício do
capítulo anterior.
2. Crie um Data Module. Dentro do Data Module crie:
a. Um objecto TDataBase;
b. Três objectos TTable;
c. Três objectos TDataSource;
d. Mude o nome do Data Module para “Tabelas”;
e. Guarde-o com o nome “Unit_Tabelas”.
3. Para o objecto TDatabase, especifique:
a. A base de dados para a base de dados fornecida;
b. Dê um nome ao objecto (por exemplo, DBBiblioteca).
4. Nos objectos TTable, indique:
a. Qual a base de dados a que pertence;
b. A tabela a que cada um se refere:
i. Itens;
ii. Formatos;
iii. Tipos de Dados.
c. Dê um nome ao objecto (por exemplo, TBItens,
TBFormatos, TBTiposDados, respectivamente).
75
Instituto Superior de Engenharia do Porto
5. Nos objectos TDataSource, faça a referencia aos objectos
TTable.
6. Crie um novo formulário. Mude.
a. o nome do formulário para “Form_Itens”;
b. o titulo para “Itens”;
c. guarde a unit com o nome “Unit_ Itens”.
7. Crie um objecto TDBNavigator, três TDBEdit, dois
TDBLookupComboBox, um TDBMemo, um TDBDateTimePicker e
respectivas Labels.
8. Associe:
a. O objecto TDBNavigator ao TDataSource;
b. Um objecto TDBEdit ao campo “id_item” do “TBItens”;
c. Outro ao campo “titulo”;
d. Outro ao campo “autor”;
e. Um objecto TDBLookupComboBox ao campo
“id_formato”, mas que liste o campo “descricao” da
tabela “Formatos”;
f. Outro ao campo “id_tipoDados”, mas que liste o campo
“descricao” da tabela “Tipos de Dados”;
g. O TMemo ao campo “descricao”;
h. Por último o TDBDateTimePicker ao campo “data”.
9. No evento OnCreate, abra o objecto TBItens.
10. No evento OnClose, feche o objecto TBItens.
11. No formulário “Form_Principal”, no evento OnClick da opção
Itens, escreva o código necessário para chamar o formulário
“Form_Itens”.
12. Compile, resolva os erros resultantes, e execute o programa.
76
77.. AAnneexxooss
77
Instituto Superior de Engenharia do Porto
7.1. Como criar uma ligação ODBC para a base
de dados fornecida.
Para criar uma ligação ODBC dirija-se ao “Painel de Controlo”,
opção “Ferramentas Administrativas”.
Fig. 7.1: Ferramentas Administrativas
78
7. Anexos
Aqui escolha a opção “Origem de Dados(ODBC)”.
Fig. 7.2: Administrador de origem de dados de ODBC
Clique em Adicionar. Irá aparecer uma nova janela onde deve
escolher “Microsoft Access Driver (*.mdb)”.
Fig. 7.3: Criar nova origem de dados
79
Instituto Superior de Engenharia do Porto
Clique em “Concluir”.
Na janela de configuração que se apresenta (Fig. 7.4), indique
no campo “Nome da origem de dados”, “BibliotecaMultimedia” e
clique em Seleccionar. Indique o caminho no qual guardou a base de
dados fornecida.
Fig. 7.4: Configuração de ODBC para Microsoft Access
Clique em OK.
A ligação já se encontra disponível pelo que se pode verificar na
figura seguinte.
80
7. Anexos
Fig. 7.5: Administrador de origem de dados de ODBC
81
Instituto Superior de Engenharia do Porto
7.2. Resolução dos exemplos
7.2.1. Capítulo 3
2.a)
1. Clique no formulário;
2. Tecle F11;
3. Na propriedade Height escreva 115.
2.b) Se o objecto seleccionado for o formulário salte para 3.
1. Clique no formulário;
2. Tecle F11;
3. Na propriedade Width escreva 280.
2.c) Se o objecto seleccionado for o formulário salte para 3.
1. Clique no formulário;
2. Tecle F11;
3. Na propriedade Caption escreva “Exemplo1”.
3. Dirija-se á palete de objectos, divisão Standard, objecto
(Label) e clique no formulário.
4.a)
1. Clique na label;
2. Tecle F11;
3. Na propriedade Caption escreva o seu nome.
4.b) Se o objecto seleccionado for a Label salte para 3.
1. Clique na Label;
2. Tecle F11;
3. Na propriedade Width escreva aumente 200 pixels ao valor
indicado.
4.c) Se o objecto seleccionado for a Label salte para 3.
1. Clique na Label;
2. Tecle F11;
3. Na propriedade Font clique em “...”; Altere o tipo de letra
para Verdana.
82
7. Anexos
4.d) Se o objecto seleccionado for a Label salte para 3.
1. Clique na Label;
2. Tecle F11;
3. Na propriedade Font clique em “...”; Altere a cor para
Mogno.
5. Dirija-se á palete de objectos, divisão Standard, objecto
(Button) e clique no formulário.
6. Se o objecto seleccionado for o botão salte para 3.
1. Clique no botão;
2. Tecle F11;
3. Na propriedade Caption escreva “OK”.
7. Dirija-se á palete de objectos, divisão Standard, objecto
(BitBtn) e clique no formulário. Na propriedade Kind escolha
bkClose.
8. Se o objecto seleccionado for o botão salte para 3.
1. Clique no botão;
2. Tecle F11;
3. Na propriedade Hint escreva uma pequena frase ou palavra
descritiva.
9. Clique no botão .
83
Instituto Superior de Engenharia do Porto
7.2.2. Capítulo 4
2.
3. Dirija-se á palete de objectos, divisão Standard, objecto
(Button) e clique no formulário. Repita os passos para os objectos
(Label) e (Edit).
3.a) Se o objecto seleccionado for a Label salte para 3.
1. Clique na label;
2. Tecle F11;
3. Na propriedade Caption escreva “Idade:”.
3.b) Se o objecto seleccionado for o Edit salte para 3.
1. Clique no Edit;
2. Tecle F11;
3. Na propriedade Name escreva “EIdade”.
4. Se o objecto seleccionado for o Button salte para 3.
1. Clique no Button;
2. Tecle F11;
3. Na divisão Events faça duplo clique em OnClick, irá ser
automaticamente redireccionado para o Code Editor.
4.
84
7. Anexos
5. Dirija-se á palete de objectos, divisão Standard, objecto
(MaskEdit) e clique no formulário.
1. Tecle F11;
2. Na propriedade EditMask Clique em “...”;
3. No campo “Input Mask” escreva “AAAAAAAA”.
6.
7. Dirija-se á palete de objectos, divisão Standard, objecto
(MainMenu) e clique no formulário.
1. Faça duplo clique seguido de F11;
2. Na propriedade Caption escreva “&Preencher Vector”.
3. Clique no quadrado ao lado. Caso a janela Object Inspector
não se encontre visível, prime de F11.
4. Na propriedade Caption escreva “&Calcular Média”.
85
Instituto Superior de Engenharia do Porto
5. Repita as duas ultimas alíneas mas troque “&Preencher
Vector” por “&Pesquisa”.
6. No evento OnClick da opção “Preencher Vector” escreva a
linha de código:
PreencherVector;
7. No evento OnClick da opção “Calcular Média” escreva a linha
de código:
ShowMessage('A média das idades é ' +
FloatToStr(CalculaMedia));
8. No evento OnClick da opção “Pesquisa” escreva a linha de
código:
Pesquisa;
86
7. Anexos
7.2.3. Capítulo 5
2. Dirija-se á palete de objectos, divisão Standard, objecto
(Button) e clique no formulário. Repita os passos para o outro botão e
para o objecto (Memo). Na divisão Dialogs, encontra o objecto
(SaveDialog).
3. Se o objecto seleccionado for o Button salte para 3.
1. Clique no Button;
2. Tecle F11;
3. Na propriedade Caption escreva “Guardar Linha a Linha”;
4. Seleccione o outro botão;
5. Tecle F11;
6. Na propriedade Caption escreva “Guardar em Linha”.
4. Se o objecto seleccionado for o Button com título “Guardar
Linha a Linha” salte para 3.
7. Clique no Button;
8. Tecle F11;
9. Na propriedade Name escreva “BtnGuardarLL”;
10. Seleccione o outro botão;
11. Tecle F11;
12. Na propriedade Name escreva “BtnGuardarL”;
5. Para concatenar strings, pode-se utilizar a função Concat ou ‘+’.
87
Instituto Superior de Engenharia do Porto
6.
7.
8.
88
7. Anexos
7.2.4. Capítulo 6
2. Dirija-se á palete de objectos, divisão DataAccess, objecto
(Database) e clique no formulário. Repita os passos para o objecto
(Table), (Query) e (DataSource). Repita o processo para
o objecto DataSource.
3. Dirija-se á palete de objectos, divisão DataControls, objecto
(DBGrid) e clique no formulário. Repita os passos para o objecto
(DBNavigator) e (DBEdit). Dirija-se á divisão Standard, objecto
(Label).
4. Se o objecto seleccionado for a Label salte para 3.
1. Clique no formulário;
2. Tecle F11;
3. Na propriedade Caption escreva “Formato:”;
5. Para que o Delphi não peça password, coloque a propriedade
LoginPrompt do objecto DataBase a False.
5.a)
I) Se o objecto seleccionado for a Database salte para 3.
1. Clique na Database;
2. Tecle F11;
3. Na propriedade AliasName escolha “Biblioteca”.
4. Na propriedade DatabaseName escolha “Biblioteca”.
II) Se o objecto seleccionado for a Database salte para 3.
1. Clique na Database;
2. Tecle F11;
3. Na propriedade Name escolha “DBBiblioteca”.
5.b)
I) Se o objecto seleccionado for a Table salte para 3.
1. Clique na Table;
89
Instituto Superior de Engenharia do Porto
2. Tecle F11;
3. Na propriedade DatabaseName escolha “Biblioteca”.
II) Se o objecto seleccionado for a Table salte para 3.
1. Clique na Table;
2. Tecle F11;
3. Na propriedade TableName escolha “Itens”.
III) Se o objecto seleccionado for a Table salte para 3.
1. Clique na Table;
2. Tecle F11;
3. Na propriedade Name escolha “TBItens”.
5.c)
I) Se o objecto seleccionado for a Query salte para 3.
1. Clique na Query;
2. Tecle F11;
3. Na propriedade DatabaseName escolha “Biblioteca”.
II) Se o objecto seleccionado for a Query salte para 3.
1. Clique na Query;
2. Tecle F11;
3. Na propriedade SQL escreva o comando “SELECT * FROM
formatos WHERE id_formato = :Formato”.
III) Se o objecto seleccionado for a Query salte para 3.
1. Clique na Query;
2. Tecle F11;
3. Na propriedade Params clique em “...”;
4. Seleccione o parâmetro;
5. Na propriedade DataType escolha “ftFloat”;
6. Na propriedade ParamType escolha “ptInput”;
IV) Se o objecto seleccionado for a Query salte para 3.
1. Clique na Query;
2. Tecle F11;
3. Na propriedade Name escolha “QRFormato”.
5.d) Se o objecto seleccionado for um dos DataSources salte para 3.
90
7. Anexos
1. Clique na DataSource;
2. Tecle F11;
3. Na propriedade DataSet escolha “DBItens”.
4. Clique no outro DataSource;
5. Tecle F11
6. Na propriedade DataSet escolha “QRFormato”.
6.a) Se o objecto seleccionado for a DBNavigator salte para 3.
1. Clique na DBNavigator;
2. Tecle F11;
3. Na propriedade DataSource escolha o objecto do tipo
DataSource.
6.b)
I) Se o objecto seleccionado for a DBgrid salte para 3.
1. Clique na DBGrid;
2. Tecle F11;
3. Na propriedade DataSource escolha o objecto do tipo
DataSource.
II) Se o objecto seleccionado for a DBgrid salte para 3.
1. Clique na DBGrid;
2. Tecle F11;
3. Na propriedade Columns clique em “...”; Aparecerá a janela
de edição.
Fig. 7.6: Janela de edição de colunas
91
Instituto Superior de Engenharia do Porto
4. Clique no botão (Adicionar novo) tantas vezes quantas o
número de campos a listar (sete).
5. Seleccione o primeiro. Na propriedade FieldName escolha
id_item.
6. Repita o passo anterior para todos os campos.
6.c)
I) Se o objecto seleccionado for o DBEdit salte para 3.
1. Clique no DBEdit;
2. Tecle F11;
3. Na propriedade DataSource escolha o objecto do tipo
DataSource correspondente.
II) Se o objecto seleccionado for o DBEdit salte para 3.
1. Clique no DBEdit;
2. Tecle F11;
3. Na propriedade DataField escolha “descricao”.
7. Se o objecto seleccionado for o formulário salte para 3.
1. Clique no formulário;
2. Tecle F11;
3. Na divisão Events faça duplo clique em onCreate, irá ser
automaticamente redireccionado para o Code Editor.
4. Escreva:
8. Se o objecto seleccionado for a table salte para 3.
1. Clique na Table;
2. Tecle F11;
3. Na divisão Events faça duplo clique em AfterScroll, irá ser
automaticamente redireccionado para o Code Editor.
4. Escreva:
92
7. Anexos
93