apostila - WordPress.com

Transcrição

apostila - WordPress.com
APOSTILA
Desenvolvimento de
Software – I
(Delphi)
ETEC Waldyr Duron Junior
Piraju – SP
2º sem - 2011
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
Paradigmas da Programação
"Paradigma é uma forma de pensar e perceber o mundo real e determina o que
escolhemos como significativo e o que descartamos ao compreender ou descrever o que existe
ou ocorre no mundo em torno de nós".
A mudança de paradigma é uma oportunidade de encontrar novas interpretações para
antigas questões, bem como, para rever soluções tidas como definitivas.
Introdução
Antes de começarmos seria interessante ressaltar que aprender a ser um bom
desenvolvedor envolve mais do que aprender a sintaxe de uma linguagem de programação em
particular, isto porque existem muitos outros aspectos do campo do sw, que têm pouca conexão
com o ato em si de escrever código.
Se você pode está pensando: "Ora, vamos, eu só quero aprender Delphi", deveria
também pensar que a questão aqui é que, se você pretende desenvolver sw por dinheiro ou para
manter-se num emprego, e tem clientes ou chefes esperando que seu sw:
Saia funcionando da caixa,
Seja feito a tempo,
Seja livre de erros e
Seja barato,
Então, vamos ter que começar por aqui mesmo, comentando sobre
problemas como a crise de sw; o ciclo de vida e a engenharia de sw
porque apenas talento artístico indisciplinado (intuição) não resolve.
Devemos nos lembrar que o objetivo mais direto do desenvolvimento de sw é fazer o
produto final satisfazer a especificação dos requisitos. Precisamos portanto, dividir isso em algo
mais tratável. Algum grupo menor ou mais preciso de objetivos que sejam mais alcançáveis e
fáceis de lembrar.
Lembre-se de que se tem algo que é sempre permanente é a mudança. Conforme
sabemos, uma aplicação passará a maior parte de seu ciclo de vida na fase de manutenção. Então,
é importante termos um conjunto de objetivos que transceda a mudança.
Entre outros, os quatro objetivos geralmente excluídos da engenharia de software são a
capacidade de modificação, eficiência, confiabilidade e inteligibilidade. Devemos também
destacar a ergonomia.
2
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
Programação Procedimental
A maior parte dos programadores está acostumada a escrever código que é executado
de forma sequencial. Tais programas possuem inicio, meio e fim bem definidos. Tipicamente,
estes programas possuem telas de entradas de dados de algum tipo de processamento com estes
dados de forma sequencial. Esta forma de se programar é dita procedimental. A figura 1 ilustra a
sequencialidade encontrada em programas que seguem tal paradigma.
Início
Entrada de
Dados
Processamento
Fim
Esta forma de programar é uma conseqüência direta dos sistemas computacionais
disponíveis no passado. Estes sistemas eram compostos por uma CPU responsável pelo
processamento (mestre) e uma série de periféricos (escravos), responsáveis pela entrada e saída
de dados.
O custo da CPU era nitidamente superior ao de qualquer periférico e até mesmo ao
custo do trabalho de quem lidava com estes computadores. Consequentemente, todos os sistemas
davam prioridade máxima ao processamento, em relação à entrada e saída de dados.
Os programas desenvolvidos visavam normalmente a solução de problemas de natureza
científica, que naturalmente requisitavam mais recursos de CPU do que de entrada e saída de
dados.
A popularização dos computadores modificou este quadro: as aplicações comerciais
típicas dos dias de hoje exigem uma atenção maior dos programadores (e dos sistemas
computacionais) para a entrada e saída de dados.
A hierarquia rígida imposta pela estrutura de menus e a sequencialidade com que os
formulários são preenchidos pelo usuário impõem limitações sérias na qualidade da interação do
usuário com o computador na programação procedimental.
3
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
Um exemplo não baseado em eventos
Program Verif_Nome;
Var Nome : String;
Begin
Write ('Digite um nome: ');
Readln (Nome);
If Nome = 'Ze Silva' then
writeln ('Nome bem original cara')
else
writeln ('O que poderia dizer');
End.
Note que o fluxo do programa é bem definido. Primeiramente ele pergunta o nome do
usuário. Agora, você pode esperar que o usuário introduza seu nome, e não precisa se preocupar
com nenhuma outra entrada ou ação que ocorra no ambiente.
Depois que o nome é informado, uma instrução if define o que o programa deve fazer
em seguida e o programa termina. A lógica deste programa linear é direta e sequencial. O
modelo baseado em eventos não pode utilizar controle de fluxo do início até o fim, pois o
aplicativo deve manipular todas as ações ou eventos possíveis
Programação Orientada a Eventos
Um aplicativo baseado em eventos, na verdade, não faz nada - a não ser que ocorra um
evento. É isso mesmo, ele não tem um início ou final lógico. Ele simplesmente precisa saber
como responde aos diferentes tipos de eventos. Isto não quer dizer que você não pode ter um
evento que ocorra quando o programa começa ou quando vai se fechar; entretanto, você precisa
pensar sobre seu modelo de programação de modo diferente.
No exemplo anterior, você sabia exatamente que ações o usuário executaria - digitar um
nome. Contudo, pense em aplicativo processador de textos baseado no Windows. Não há meios
de saber se o usuário digitará uma frase, escolherá uma opção no menu ou dará um clique em um
botão, na barra de atalho. Independentemente da ação que o usuário executa, o aplicativo precisa
ser consistente o suficiente para responder ao evento.
A idéia básica por trás da programação dirigida a eventos é que alguns eventos
determinam o fluxo do aplicativo. Um programa gasta a maior parte de seu tempo aguardando
eventos e tem código que responde a diversos deles (nem todos, já que normalmente um
programa ignora eventos nos quais não tem interesse). Por exemplo, quando o usuário dá um
clique em um dos botões do mouse, ocorre um evento. É enviada uma mensagem descrevendo
esse evento para a janela que está sob o cursor do mouse no momento. A aplicação intercepta a
mensagem e chama o método associado ao evento correspondente. Quando o metodo termina, o
programa retorna a um estado de espera.
Como a explanação acima demonstra, eventos são serializados; cada evento é
manipulado somente após o anterior ter sido completado. Quando uma aplicação está
executando código de resposta ao evento (ou seja, não está aguardando um evento), outros
eventos para essa aplicação devem aguardar em uma fila reservada de multitarefa gerenciada
através de um manipulador de eventos.
Ações
Sistema
Eventos
4
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
Loop de Tratamento dos Eventos
O avanço da tecnologia barateou o custo dos sistemas computacionais e introduziu recursos gráficos para a
interação com os usuários (GUI- Graphic User Interface).
Uma aplicação que se utiliza de interface gráfica, permite que o usuário decida a
seqüência mais apropriada de interação. Esta abordagem muda completamente a forma de se
construir programas.
As interfaces gráficas introduziram assim uma forma completamente nova de se
programar. Nesta abordagem, uma aplicação constitui-se de um loop para tratamento de eventos
e de procedimentos associados a eventos específicos. Toda vez que ocorre um determinado
evento, o seu procedimento equivalente é executado. Eventos acontecem em decorrência da
interação do usuário com o sistema, gerados pelo sistema operacional ou ainda gerados na
própria aplicação. Exemplos de eventos: mover o mouse, pressionar uma tecla, selecionar um
ítem de menu, setar o foco para um determinado controle, etc.
A cada ação do usuário corresponde um ou mais eventos “enviados” para a aplicação.
Estes eventos devem ser identificados e tratados de maneira adequada pelo programa. Esta
abordagem é conhecida como programação orientada a eventos.
As interfaces gráficas tornaram a interação dos usuários com as aplicações bastante
atraentes. Em compensação, introduziram uma complexidade enorme do ponto de vista de
programação. Para se ter uma idéia, o código em linguagem C no windows para escreve na tela
“Alô mundo” possui cerca de 100 linhas.
Se acrescentarmos a isto o fato de que 80% do código escrito para uma aplicação é
consumido na elaboraçào de interface, fica difícil de massificar a programação em ambientes de
interface gráfica.
Felizmente, o paradigma da orientação a objetos consegui esconder do programador a
maior parte da complexidade da programação nestes ambientes.
5
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
IDE
O ambiente de desenvolvimento do Delphi é composto de várias ‘partes’ compondo um
conjunto integrado de ‘janelas’ que interagem entre si.
Vamos abordar cada uma separadamente:
O FORM DESIGN
Form é o termo utilizado para representar as janelas do Windows que compõem uma
aplicação. Os forms servem como base para o posicionamento dos componentes, que são
responsáveis pela interação entre usuário e máquina.
Para selecionarmos o form devemos clicar (uma vez) em sua área interna ou na
object inspector, e não simplesmente em seu título.
As características iniciais do form como tamanho, botões (minimizar, maximizar, fechar,
controle) e ícone podem (e serão) ser modificadas através de recursos que veremos adiante.
6
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
A BARRA DE MENU PRINCIPAL
Como todo programa padrão Windows, há uma janela onde estão situados os menus da
aplicação, a barra que contem os menus também agrupa outras partes.
A PALETA DE COMPONENTES
Aplicativos orientados a objetos trabalham com elementos que denominamos
componentes. No Delphi, os componentes encontram-se em uma paleta com várias guias.
OBJECT INSPECTOR
Uma das ‘partes’ mais importantes da orientação a objeto é a possibilidade de definir
características personalizadas aos componentes.
No Delphi, utilizamos a janela object inspector para realizar esta tarefa.
Há uma caixa de listagem1 que permite
a escolha de qual componente deverá
ser selecionado.
Duas guias:
Properties – Define as propriedades e
valores do Objeto selecionado.
Objeto atual
selecionado
Propriedade
Events – Define quais os eventos serão
manipulados pelo desenvolvedor.
1
Componente ComboBox.
Valor atual
desta
propriedade
7
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
Algumas propriedades trazem opções
diferenciadas para alteração.
Por exemplo:
Caption – Permite a inserção de uma
string de caracteres.
Color – Permite a inserção de um dos
valores pré-definidos na caixa de listagem.
BorderIcons – Toda propriedade que possui o sinal de + tem a característica de mostrar
subpropriedades. Deve-se clicar no sinal de + para expandir e no sinal de – para ocultar.
Icon – Exibe um botão de reticências (...) que dará origem a uma caixa de diálogo.
Os nomes definidos como valores das propriedades na object inspector serão os nomes
usados na construção do código em Object Pascal.
Na parte superior da janela há uma caixa de listagem que permite a seleção de componentes já
inseridos no formulário. Duas guias (Properties e Events) separam as listas de propriedades e
eventos.
As propriedades são definidas através de tipos. Podemos citar no exemplo com o objeto form:
Tipos Simples
São tipos String ou valores numéricos definidos ao digitar um valor na frente da
propriedade. Exemplo: Name, Caption, Height e Width entre outros.
Tipos Enumerados
São tipos definidos por uma quantidade limitada de opções que devem ser previamente
selecionadas, não simplesmente definidas pelo usuário.
Exemplo: Cursor, BorderStyle e WindowState entre outros.
8
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
Tipo Set
Algumas propriedades podem conter múltiplos valores. Um exemplo é a propriedade
BorderIcons com o sinal + indicando subpropriedades.
Tipos com Editor de Propriedades
As propriedades que são acompanhadas de um ícone de reticências (...) indicam que
uma janela de diálogo irá auxiliar na escolha de seu(s) valor(es). Exemplo: Icon.
Manipulando Eventos
A guia Events permite o desenvolvedor definir um handler2 em Object Pascal para um
determinado evento que pode ser disparado pelo usuário ou pelo sistema.
Um evento é uma ação disparada dentro de uma aplicação orientada a Objeto. Podemos
citar as ocorrências dos principais eventos que são disponibilizados na maioria dos componentes
em Delphi:
Evento
OnClick
OnDblClick
OnEnter
OnExit
OnKeyPress
Ocorrência
Quando o usuário clicar uma vez com o botão esquerdo
do mouse sobre o componente.
Quando o usuário dá um duplo clique no componente
com o botão esquerdo do mouse.
Quando o componente recebe o foco.
Quando o componente perde o foco.
Quando pressiona uma única tecla de caractere.
Observe a construção do procedimento criado pelo próprio Delphi:
2
Manipulador de evento
9
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
procedure TForm1.Button1Click(Sender: TObject);
begin
end;
CODE EDITOR
O editor de código é responsável por receber todas as declarações criadas pelo Delphi e
handlers criados pelo desenvolvedor.
E no ambiente Code Editor que implementamos o algoritmo na linguagem Object
Pascal.
3
Code Editor
Name do form
que define uma
nova classe
Code
Explorer
Na janela do editor pode haver uma outra janela denominada Code Explorer. É a parte
esquerda da janela, onde podemos ter uma orientação sobre os objetos, procedimentos, funções e
classes utilizadas na aplicação. Para desligar o code explorer clique no pequeno X ao lado da
guia do code editor, para visualiza-lo clique com o botão direito dentro do editor e escolha View
Explorer ou pelo teclado Ctrl+Shift+E.
Uma característica muito importante do Code Explorer é que quando inserirmos
componentes no form, a sua declaração é feita pelo Delphi de maneira automática.
3
Manipulador de eventos.
10
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
Podemos considerar também o seguinte fato:
‘Tudo o que o Delphi escrever, é problema dele’.
Agora, ‘Tudo o que você escrever é problema seu’.
Problema no sentido de atualização de código, como veremos adiante. Quando
alteramos o nome do objeto, deve-se utilizar o mesmo nome nas rotinas implementadas. Agora, o
que o Delphi declarou, ele se encarrega de atualizar.
Pode-se personalizar o Editor através do menu Tools | Editor Options.
CODE INSIGHT
Um recurso que vai facilitar nossa vida no momento de desenvolvimento de código é o
Code Insight do Code Editor do Delphi.,
Ele atua como um ajudante de complemento junto ao código do desenvolvedor. Por
exemplo, ao digitar o nome de um objeto seguido de ponto (.) abre-se uma listagem de métodos
e propriedades que podem ser utilizadas neste objeto.
Esta lista pode ser ordenada por nome, clicando com o botão direito dentro da listagem.
No momento de chamada de procedimentos ou métodos:
11
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
Para forçar o code insight em determinada situação, utiliza-se:
• Ctrl + Barra de Espaço - Para complemento de objetos; seus métodos e
propriedades.
• Ctrl + Shift + Barra de Espaço – Para complemento de parâmetros.
12
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
PROJETO EM DELPHI
O conceito de projeto em Delphi é baseado em um conjunto de arquivos necessários
para gerar uma aplicação.
Vamos destacar os principais arquivos:
Extensão
.PAS
.DPR
.DFM
Tipo e descrição
Arquivo Pascal: o código-fonte de uma
unidade Pascal, ou uma unidade
relacionada a um formulário ou uma
unidade independente.
Arquivo Delphi Project. (Contém
código-fonte em Pascal.)
Delphi Form File: um arquivo binário
(na versão 5 pode ser convertido para
texto) com a descrição das propriedades
de um formulário e dos componentes
que ele contém.
Delphi Compiled Unit: o resultado da
compilação de um arquivo Pascal.
Criação
Desenvolvimento
Sim.
Desenvolvimento
Sim.
Desenvolvimento
Sim. Todo formulário é
armazenado em um
arquivo PAS e em um
arquivo DFM.
Compilação
Apenas se o código-fonte
não estiver disponível. Os
arquivos DCU para as
unidades que você
escreve são um passo
intermediário; portanto,
eles tornam a compilação
mais rápida.
Normalmente não, mas
eles podem ser
necessários em tempo de
execução e para edição
adicional.
Necessário apenas se
opções de compilação
especiais foram
configuradas.
Exigido apenas se opções
de compilação especiais
foram configuradas.
Não. Você deve excluí-lo
se copiar o projeto em um
novo diretório.
.DCU
.BMP, .ICO,
.CUR
.CFG
.DOF
.DSK
Arquivos de bitmap, ícone e cursor:
arquivos padrão do Windows usados
para armazenar imagens de bitmap.
Desenvolvimento:
Image Editor
Arquivo de configuração com opções de Desenvolvimento
projeto. Semelhante aos arquivos DOF.
Delphi Option File: um arquivo de texto
com as configurações atuais para as
opções de projeto.
Arquivo de Desktop: contém
informações sobre a posição das janelas
do Delphi, os arquivos abertos no editor
e outros ajustes da área de trabalho.
Aquivo executável: o aplicativo
Windows que você produziu.
Desenvolvimento
Desenvolvimento
Compilação: Ligação
(linking)
.EXE
.~PA
.TODO
Necessário para
compilar?
Backup do arquivo Pascal
Desenvolvimento
Pode ser ativado ou desativado através
do Menu Tools – Editor Options - guia
display – Item: Create backup file.
Arquivo da lista to-do, contendo os itens Desenvolvimento
relacionados ao projeto inteiro.
Não. Esse é o arquivo que
você vai distribuir. Ele
inclui todas as unidades
compiladas, formulários e
recursos.
Não. Esse arquivo é
gerado automaticamente
pelo Delphi, quando você
salva uma nova versão do
código-fonte.
Não. Esse arquivo contém
notas para os
programadores.
13
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
O Delphi possui um mecanismo de gerência de arquivos de projeto informando os
principais arquivos e seu path. Clique em View – Project Manager
A figura acima é um exemplo de um projeto inicial, ainda não salvo. O diretório padrão
para criação dos arquivos é projects, obviamente devemos definir na gravação pasta e nomes de
arquivos mais específicos.
.PAS E .DPR
Para visualizarmos o código fonte da unidade (.PAS) em Delphi basta selecionarmos o
code editor (F12).
Para visualizarmos o código fonte no arquivo de projeto (.DPR) basta selecionarmos o
menu Project – View Source. O arquivo de projeto é exibido em uma guia no code editor.
Para fechar a guia basta clicar com o botão direito e escolher close page.
Unidades
Existem três tipos de unidades: unidades associadas aos formulários (as mais comuns),
arquivos de unidade usados para armazenar funções e procedures, e arquivos de unidade usados
para construir componentes.
Vamos ver una unidade básica associada a um formulário:
Unit Unit1;
Interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs;
Type
14
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
Tform1 = class(Tform)
procedure FormCreate(Sender: Tobject);
private
{Declarações privativas}
public
{Declarações públicas}
end;
var
Form1: Tform1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: Tobject);
begin
end;
end.
O código acima, junto com o código de arquivo de projeto, é tudo de que precisa no
Delphi para criar um executável que abre uma janela. Ele não fará muita coisa nesse ponto, mas
é um programa Windows funcional, na sua forma mais simples.
Veja os nomes na cláusula uses, do código acima. Trata-se dos nomes de outras
unidades. Se você decidisse escrever várias funções e procedures úteis, poderia criar sua
unidade, colocar todo seu trabalho útil nela e compilá-la para uso futuro. Vamos ver as partes
que constitui a unidade:
Cabeçalho da unidade - Um cabeçalho de unidade identifica o código como uma unit e
é seguido pelo nome.
Interface - Marca o início da parte unit interface, que é usada para declarar variáveis,
tipos, procedures, etc. A parte interface determina o que nessa unidade está disponível para
outras unidades e partes do programa. A parte interface termina com o início da parte
implementation.
Uses - A cláusula uses informa ao compilador quais bibliotecas de funções e
procedures precisam ser compiladas no executável final. O Delphi coloca, automaticamente,
várias delas lá para você.
15
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
Type - A seção de declaração type é usada para a criação de tipos definidos pelo
usuário. Esses tipos pode, então, ser usados para definir variáveis.
Especificadores de visibilidade vêm após a cláusula type na parte da interface. Os
seguintes especificadores são usados para controlar como os objetos aparecem para outros
programas e objetos:
Private - As declarações nessa seção são tratadas como públicas dentro do módulo, mas
serão desconhecidas e não acessíveis fora da unidade.
Public - As declarações nessa seção são visíveis e acessíveis fora da unidade.
Var - Usado para declara varáveis e variáveis de objeto. Em uma unidade de
formulário, var é usado na parte de interface (o Delphi coloca essa declaração para você) para
declarar o formulário como uma instância do objeto Tform. Var também é usado para declarar
variáveis na parte de implementação, assim como em procedures e funções.
Implementation - É onde todas as funções e procedures que foram declaradas na parte
interface serão realmente colocadas. Todas as declarações feitas aqui são privativas da unidade
(não disponíveis para as outras unidades).
{$R *.DFM) - Em uma unidade de formulário. O Delphi insere essa entrada para você.
Ela liga o formulário ao seu arquivo.dfm. Não remova isso de seu programa, ou você terá
problemas.
O bloco de código a seguir é executado quando seu formulário é criado. Você deve
colocar aqui, todo o código de inicialização que precise ser executado quando o formulário
começar a ser carregado. Para criar essa procedure, use o Object Inspector para ver o menu
Events do formulário e, depois, dê um click duplo no evento OnCreate.
End. - É o end final, significa o final de sua unidade.
É importante manter os cabeçalhos, as cláusulas, etc no lugar correto. O Delphi cuida
muito bem disso para você, pois ele cria a unidade e o código à medida que são feitas alterações
no formulário. Você simplesmente insere seu código na seção correta, conforme for necessário.
OPÇÕES DE PROJETO
O Delphi permite a configuração de vários itens do sistema através do menu Project – Options.
16
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
Forms
•
•
Main form - Nesta guia permite a escolha do formulário principal da aplicação.
Available form - Os formulários available (disponíveis) em caso de criação em tempo de
execução.
Application
•
•
•
Title - Define um nome para a sua aplicação diferente do nome do arquivo de projeto
(.DPR).
Help file – Define o nome do arquivo de Help (.HLP) associado à aplicação.
Icon – Define o ícone utilizado no arquivo executável. (.EXE)
Compiler
•
Estas opções permitem especificar uma compilação personalizada, ou seja, cada projeto
pode ser compilado com uma característica.
Linker
•
Estas opções incluem informações para a depuração.
Directories/Conditionals
•
Nesta guia pode-se configurar o diretório de saída para os arquivos gerados pela
aplicação.
Version Info
•
Estas informações podem ser visualizadas no Windows através do menu rápido do mouse
no arquivo executável.
Packages
•
Os packages permitem um controle de distribuição através de DLL’s básicas externas ao
executável entre outros recursos.
CONVENÇÃO DE NOMEAÇÃO
A propriedade mais importante de um componente é a propriedade Name. É ela que define
o nome interno com relação ao código escrito em Object Pascal. Para organizar e facilitar o
processo de desenvolvimento/manutenção do sistema, grande parte dos desenvolvedores
adota uma nomenclatura para tornar o código mais legível possível.
O Delphi adota como nomenclatura padrão o nome da classe da qual o componente é
instanciado e um número crescente de acordo com o número de ocorrência deste componente no
form. Exemplo: Button1, Button2, etc... são componentes instanciados da classe TButton .
Não é obrigatória a utilização da convenção de nomes utilizados nesta apostila, mas é
muito importante fazer uso de uma convenção mais clara possível.
17
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
Exemplo:
Nome gerado pelo Delphi
Button1
Edit1
Label1
Objetivo
Sair da aplicação
Receber nome do usuário
Indicar componente Edit
Convenção
BtnSair
EdtNome
LblNome
A Lista de Units
A janela de lista de units permite que você alterne entre as units que fazem parte do
projeto ativo, sem que elas tenham de estar todas abertas no editor de código. Caso você
selecione uma unit que não esteja aberta, o Delphi a abrirá e mostrará no Code Editor.
Figura 31 – A Lista de Units
A lista de units pode ser ativada através do menu View, opção Units..., ou através do
primeiro ícone inferior da SpeedBar ou através da combinação das teclas <Ctrl> <F12>.
A Lista de Forms
A janela de lista de forms permite, de forma análoga à de lista de units, que você
alterne entre os forms que fazem parte do projeto ativo, sem que eles tenham de estar todos
abertos. Caso você selecione um form que não esteja aberto, o Delphi o abrirá e mostrará para
edição no Form Designer.
18
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
A Lista de Janelas
A janela de lista de janelas do ambiente, embora menos utilizada do que as de lista de
units e forms, apresenta uma forma rápida de encontrar-se uma janela, que esteja escondida atrás
de muitas outras.
A lista de janelas pode ser ativada através do menu View, opção Window List..., ou
através da combinação das teclas <Alt> <0>.
COMENTÁRIOS
Os comentários no código fonte são importantes e podem ser feitos através dos
seguintes símbolos:
//Comentário de linha
{ Comentário de bloco }
(*Comentário de bloco *)
COMPONENTES
Agora definiremos resumidamente os principais componentes do Delphi, bem como as
suas principais propriedades e eventos. Logicamente, este material não se constitui num manual
dos componentes do Delphi, mas sim visa introduzir o programador nos recursos disponíveis.
Antes de iniciarmos as discussões sobre os componentes, iremos nos ater à explicação
de algumas peculiaridades das propriedades dos componentes. O primeiro ponto a ser observado,
está no fato de que algumas propriedades só são acessíveis em tempo de execução. Quando
acontecer tal fato, chamaremos atenção a esse respeito.
Finalmente, existem propriedades onde o Delphi incorpora um construtor de valores.
Para estes casos, aparece um botão com reticências no canto da coluna valor, do Object
Inspector, isto quando a propriedade é selecionada. Para abrir o construtor de valores basta um
clique neste botão, ou um duplo clique na propriedade.
É bom lembrar que ao criarmos uma aplicação, um dos detalhes mais importantes que
devem ser considerados é a interface com o usuário. Porque se ela for feia ou difícil de ser
entendida será mal usada e isto é a linha que divide o sucesso do fracasso no ramo de software.
O que se segue é uma referência dos componentes de interface mais utilizados.
Vamos considerar alguns objetos e suas principais propriedades, métodos e eventos.
19
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
Principais Eventos
Os eventos recaem em três categorias: de Mouse, de teclado, ou de Sistema. A maioria
dos componentes possui um evento padrão. Para verificar isso dê um duplo clique sobre o
componente no formulário.Os três eventos padrão são OnChange, OnClick e OnCreate, nesta
ordem.
Se um componente não responder a nenhum deles, significa que ele não possui evento
padrão.
Verificação: Dê um duplo clique na área do formulário e terá seu evento padrão,
depois faça o mesmo no Label. Insira um Edit e dê um duplo clique.
Evento
OnChange
OnClick
OnDblClick
OnEnter
OnExit
OnMouseDown
OnMouseMove
OnMouseUp
OnKeyDown
OnKeyPress
OnKeyUp
OnDragDrop
OnDragOver
OnEndDrag
OnStartDrag
Descrição
Acontece quando o objeto ou seus dados mudam
Clique simples do mouse sobre o componente ou Enter no componente
Duplo clique do mouse sobre o componente
Ocorre quando o componente recebe foco
Ocorre quando o componente perde foco
O botão do mouse é pressionado sobre o componente
O ponteiro do mouse passa sobre o componente
O botão do mouse é liberado sobre o componente
Uma tecla é pressionada. É enviado para o componente com o foco de entrada.
Uma tecla de caractere é pressionada. Idem
Uma tecla é liberada. Idem
O componente está sendo arrastado e é solto num local permitido
O componente está sendo arrastado e passa sobre outro componente
O componente está sendo arrastado e é solto num local permitido ou não
Acontece quando o usuário começa a arrastar; é enviado para o componente que originou
a operação de arrasto.
Principais Métodos
Método
BringToFront
CanFocus
Create
Destroy
Focused
Free
Hide
SetFocus
SendToBack
Show
Clear
Descrição
Coloca o componente na frente dos outros
Determina se o controle pode receber o foco
Cria uma instância do componente
Destrói a instância. Na verdade, deve-se utilizar o Free
Retorna se o foco está sobre o componente
Destrói a instância e desaloca a memória
Torna o controle invisível
Faz com que o controle receba o foco
Coloca o componente atrás dos outros
Torna o controle visível
Limpa o conteúdo do componente
20
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
Objeto – Form (Formulário)
Paleta – Standart
Importância: É o principal componente
container pois permite posicionar os demais
componentes em si mesmo.
É literalmente a implementação do conceito de
‘janelas’ do sistema operacional Windows.
Propriedades
ActiveControl
Align
AutoScroll
AutoSize
BorderIcons
BorderStyle
BorderWidth
Caption
ClientHeight /
ClientWidth
Color
Cursor
DefaultMonitor
Enabled
Font
FormStyle
Height
HelpContext
HelpFile
Hint
HorzScrollBar
Icon
KeyPreview
Left
Menu
Name
PopupMenu
Position
ShowHint
Permite definir qual o primeiro componente a receber foco assim que o formulário é
criado.
Altera o alinhamento e preenchimento do objeto.
Permite habilitar as barras de rolagem.
Determina se o controle será automaticamente redimensionado.
Determina os ícones a serem exibidos na barra de título do formulário.
Define o estilo da borda do formulário.
bsDialog – Borda não redimensionável, comum em caixa de diálogo
bsSingle – Borda simples e redimensionável.
bsNone – Borda invisível, não redimensionável, sem botões de controle.
bsSizeable – Borda padrão redimensionável.
Define a espessura da borda.
Indica o rótulo exibido para o componente.
Define a altura e largura da área cliente.
Define a cor de fundo de um componente.
Indica a imagem exibida pelo ponteiro do mouse quando este ficar sobre o objeto.
Associa o form a um monitor específico em uma aplicação que utiliza vários monitores.
Define se o componente está habilitado ou não.
Permite controlar os atributos do texto exibido em um componente.
Determina o estilo do formulário.
fsNormal – Definição padrão do formulário.
fsMDIChild – O formulário será uma janela-filha de uma aplicação MDI.
fsMDIForm – O formulário será o formulário-pai de uma aplicação MDI.
fsStayOnTop – O formulário permanece sobre todos os outros formulários do projeto,
exceto aqueles que também têm a propriedade FormStyle igual a fsStayOnTop.
Define a altura do objeto.
Define o tópico do arquivo help que será exibido ao pressionar a tecla F1.
Define um arquivo de help específico.
Permite exibir um texto de auxílio no momento em que o ponteiro do mouse permanece
sobre o controle.
Define o comportamento de uma barra de rolagem horizontal.
Define o ícone que será usado pelo formulário.
Define se o formulário deve ou não responder a um pressionamento de tecla, através do
evento OnKeyPress, por exemplo.
Define a coordenada da extremidade esquerda de um componente.
Permite escolher entre mais de um componente MainMenu.
Define o nome interno que identifica o componente dentro da aplicação.
Define o componente PopupMenu a ser utilizado pelo objeto.
Permite definir o tamanho e posição de um formulário no momento em que ele aparece
na sua aplicação.
Define se a string de auxílio deve ou não ser exibida quando o usuário mantém o
ponteiro do mouse sobre um controle.
21
DS-I – Desenvolvimento de Software I
Tag
Top
VertScrollBar
Visible
Width
WindowMenu
WindowState
Téc. Informática
Delphi
A propriedade Tag é uma variável do tipo Longint que o Delphi coloca à disposição do
usuário, que pode atribuir o significado mais conveniente.
Define a coordenada da extremidade superior de um componente.
Define o comportamento de uma barra de rolagem vertical.
Define se o componente aparece ou não na tela.
Define a largura do objeto.
Permite definir qual o menu responsável por manipular as janelas-filhas de uma
aplicação MDI.
Define o estado de exibição de um formulário.
Métodos
Show
ShowModal
Close
Exibe o formulário de manipulação não-modal.
Exibe o formulário de manipulação modal.
Permite fechar o formulário.
Objeto – Button1 (Botão)
Paleta – Standart
Importância: É um dos objetos mais utilizados
para confirmar e disparar rotinas associadas.
Propriedades
Action
Anchors
Referencia uma ação definida em um objeto TActionList.
Permite manter a posição relativa do objeto ao objeto ‘parente’ quando este é
redimencionado.
Associa o evento OnClick do objeto ao pressionamento da tecla Esc.
Cancel
Associa ao evento OnClick do objeto ao pressionamento da tecla Enter.
Default
ModalResult
Parent...
TabOrder
TabStop
Propriedade utilizada para encerrar a execução de um formulário Modal quando
selecionado um valor diferente de mrNone.
As propriedades Parent permitem que o componente receba a mesma formatação do
objeto proprietário.
Define a ordem na passagem de foco no momento de pressionamento da tecla TAB.
Define se o foco pára no componente.
Métodos
SetFocus
Envia o foco do windows para o componente.
22
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
Objeto – Edit (Caixa de edição)
Paleta – Standart
Importância: Um dos principais componentes
para a entrada de dados do usuário do sistema.
Propriedades
AutoSelect
AutoSize
BorderStyle
CharCase
HideSelection
Maxlength
PasswordChar
Define se o texto exibido pelo controle será selecionado quando este receber o foco da
aplicação.
Para componentes TEdit a propriedade determina se a altura do controle será
redimensionada quando o tamanho da fonte for alterado.
Determina o tipo da borda do componente.
Determina o se tipo da fonte será maiúscula, minúscula ou normal.
Define se o texto perde a seleção ao perder o foco.
Define um limite para a inserção de caracteres.
Define qual caractere será usado para ocultar o texto inserido no componente.
Permite manipular os caracteres inseridos no componente pelo usuário.
Text
Métodos
Clear
SetFocus
Limpa o conteúdo da propriedade text.
Envia o foco do windows para o componente.
Objeto – Label (Rótulo de orientação)
Paleta – Standart
Importância: Orientar o usuário à escolha de
componentes bem como sua utilização.
Propriedades
Alignment
AutoSize
FocusControl
Define o alinhamento da string na área do componente.
Para componentes TDBText e TLabel, esta propriedade define se o controle será
automaticamente redimensionado para acomodar o texto.
Define qual o componente receberá foco quando o usuário selecionar a combinação de
teclas aceleradoras (atalho) se existir.
Layout
ShowAccelChar
Transparent
Define o alinhamento vertical do texto na área do componente.
Define se o caracter ‘&’ será um literal ou tecla de aceleradora (atalho).
Define se o fundo do componente será ‘transparente’ ou não.
23
DS-I – Desenvolvimento de Software I
WordWrap
Téc. Informática
Delphi
Define se o texto poderá utilizar o ‘retorno automático’ em caso de ultrapassar a largura
definida e se a propriedade AutoSize estiver falsa.
Objeto – Memo (Memorando)
Paleta – Standart
Importância: Permite o usuário entrar com
dados do tipo TStrings, compara-se à
funcionalidade do software bloco de notas.
Objeto – CheckBox (Caixa de verificação)
Paleta – Standart
Importância: Permite verificar opções boolenas
pré-definidas ou re-definidas pelo usuário.
Propriedades
AllowGrayed
Define caso verdadeiro, três estados possíveis para o checkbox: checked (ligado),
unchecked (desligado) e grayed (parcial). Caso falso, dois estados: checked (ligado) e
unchecked (desligado).
Define se o componente está ligado ou não, caso tenha apenas dois estados.
Checked
State
Permite definir três estados se AllowGrayed for verdadeiro.
Objeto – RadioButton (Botão de ‘radio’)
Paleta – Standart
Importância: Permite escolher entre um grupo,
pelo menos uma opção.
24
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
Propriedades
Define se o componente está ligado ou desligado.
Checked
Objeto – ListBox (Caixa de listagem)
Paleta – Standart
Importância: Permite o usuário entrar ou
manipular uma lista de dados.
Propriedades
Define uma lista de Strings que aparece no componente.
Items
MultiSelect
Sorted
Permite selecionar vários itens (Strings) no componente.
Define se a lista de Strings será ordenada ou não.
Métodos
Clear
LoadFromFile
SaveToFile
Permite limpar o conteúdo da propriedade Items.
Permite ‘carregar’ um arquvo para a propriedade Items.
Permite salvar o conteúdo da propriedade Items para um arquivo.
Objeto – ComboBox1 (Caixa de listagem em formato de cortina)
Paleta – Standart
Importância: Permite o usuário entrar ou
manipular uma lista de dados.
Propriedades
Define uma lista de Strings que aparece no componente.
Items
Sorted
Define se os dados serão ordenados.
Define o texto atual da Combobox.
Text
Métodos
Clear
LoadFromFile
Permite limpar o conteúdo da propriedade Items.
Permite ‘carregar’ um arquvo para a propriedade Items.
25
DS-I – Desenvolvimento de Software I
SaveToFile
Téc. Informática
Delphi
Permite salvar o conteúdo da propriedade Items para um arquivo.
Objeto – ComboBox1 (Caixa de listagem em formato de cortina)
Paleta – Standart
Importância: Permite o usuário entrar ou
manipular uma lista de dados.
Propriedades
Define uma lista de Strings que aparece no componente.
Items
Sorted
Define se os dados serão ordenados.
Define o texto atual da Combobox.
Text
Métodos
Clear
LoadFromFile
SaveToFile
Permite limpar o conteúdo da propriedade Items.
Permite ‘carregar’ um arquvo para a propriedade Items.
Permite salvar o conteúdo da propriedade Items para um arquivo.
Objeto – GroupBox (Caixa de agrupamento)
Paleta – Standart
Importância: Permite agrupar componentes e
estabelecer um título na propriedade Caption.
Propriedades
Align
Caption
Pemite definir um alinhamento no objeto proprietário.
Define o texto informativo na parte superior do componente.
26
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
Objeto RadioGroup (Grupo de botões ‘radio’)
Paleta – Standart
Importância: Permite estabelecer um grupo de
botões de radio e manipula-los pela
propriedade ItemIndex.
Propriedades
Items
ItemIndex
Columns
Define os itens disponíveis ao usuário.
Define qual dos itens está selecionado.
Define o número de colunas para organização dos componentes.
Objeto – Panel (Painel)
Paleta – Standart
Importância: Permite agrupar outros objetos e
estabelecer um efeito visual nas aplicações.
Propriedades
Align
Bevel...
BorderStyle
Define o alinhamento do componente em relação ao seu proprietário.
Define a característica das bordas (interna e externa) bem como sua
espessura.
Define o tipo da borda.
Objetos – MainMenu e PopupMenu (Menu principal e Menu rápido)
Paleta – Standart
Importância: Define os Menus utilizados pelo
usuário pelo botão esquerdo (MainMenu) ou
pelo botão direito (PopupMenu) do Mouse.
Propriedades
27
DS-I – Desenvolvimento de Software I
Items
Images
Téc. Informática
Delphi
Define um novo item de Menu.
Define um objeto do tipo ‘ImageList’.
O objeto MainMenu permite a construção de sub-menus através de seu construtor
clicando no item com o botão direito e escolhendo a opção Create submenu. Pode-se
também excluir ou incluir items aleatoriamente através do botão direito no item desejado.
Para criar um separador de menus, utilize o operador de subtração (‘-‘) e confirme
com a tecla Enter.
Diferentes pápeis dos itens de menu
Independentemente da posição deles na estrutura dos menus, há três tipos fundamentais
de itens de menu:
Comandos: São itens de menu usado para dar um comando, para executar uma ação. Eles não
oferecem nenhuma pista visual.
Definidores de Estado: São itens de menu usados para alternar uma opção entre ligado e
desligado, para mudar o estado de um elemento em particular. Quando há dois estados, estes
comandos usualmente têm uma marca de verificação à esquerda se estiverem ativos. Neste caso,
selecionar o comando produz a ação oposta.
Itens de Diálogo: São itens de menu que fazem com que uma caixa de diálogo apareça. A real
diferença entre estes e os outros itens de menu é que o usuário terá condições de explorar os
possíveis efeitos da caixa de diálogo correspondente e de finalmente abortá-los através do botão
Cancelar da caixa. Esses comandos devem ter uma pista visual, que consiste em três pontos após
o texto. Isto não é obrigatório do ponto de vista técnico, mas é tão comum que você não deve
ignorar esta diretriz.
Mudando itens de menu em tempo de execução
A estrutura de um menu pode mudar numa série de maneiras, mas as mais importantes
se aplicam a itens individuais. Como por exemplo, quando um comando de menu não pode ou
não deve ser selecionado (Prop. Enabled), usualmente ele assume a cor cinza. Neste caso o
usuário não tem a chance de usar esse comando.
Outra mudança visual é o uso da marca de verificação (Prop. Checked), que pode ser
substituída por duas legendas diferente (Prop. Caption) para os dois estados do item, como por
exemplo: Exibir Lista e Ocultar Lista.
Editando um menu com o Menu Designer (MD)
O Delphi possui em editor especial de menus, o Menu Designer. Para invocar esta
ferramenta, coloque um componente de menu num formulário e dê um clique duplo sobre ele ou
na sua propriedade Items ou dê um clique com o botão direito do mouse sobre ele e escolha
essa opção.
28
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
Não se preocupe demasiadamente com a posição do componente de menu do
formulário, uma vez que isso não afetará o resultado; o menu é colocado apropriadamente abaixo
da Barra de Título do formulário.
Observação: Para ser mais preciso, o formulário exibe, abaixo de sua legenda, o menu indicado
em sua propriedade Menu, a qual é definida por padrão tão logo você insira o primeiro
componente de menu principal do formulário. Se o formulário tiver mais de um componente de
menu principal, esta propriedade deve ser definida manualmente e pode ser mudada tanto em
tempo de projeto como em tempo de execução.
Para criar o seu menu dentro do Menu Designer basta escrever o texto dos comandos.
Para se criar menus suspensos de segundo nível dê um clique com botão direito do mouse sobre
o item desejado e selecione o comando Create Submenu ou pressione simultaneamente <Ctrl>
<→
→>.
Você também pode utilizar as teclas <Insert> e <Delete> para inserir e deletar itens de
menu respectivamente e as setas de direção para navegar entre os itens de menu.
Para adicionar um separador ao menu suspenso, simplesmente insira um hífen como
texto do comando, sendo que o separador não responde ao evento OnClick.
Atalhos de Menu
Uma característica comum dos itens de menu é que eles contêm uma letra
sublinhada, pode ser a 1ª ou uma letra do meio. E ao pressionar <Alt> + letra, ativa menu
suspenso correspondente.
Obviamente, cada elemento da barra de menus deve ter uma letra sublinhado diferente.
O mesmo é verdadeiro para os itens de menu de um menu suspenso específico.
Para determinar a letra sublinhada, simples coloque & antes dela na definição do item.
Os itens de menu podem ter também teclas de atalho (p.e. <Ctrl> <C>). Para associar
uma tecla de atalho a uma item de menu (menus suspensos as possui) selecione um valor para a
propriedade ShortCut do item através das combinações padrões.
Mudando Itens de Menu
Três propriedades são usadas para modificar um item de menu. Usamos a propriedade
Checked para adicionar ou remover uma marca de verificação dentro do item de menu. A
propriedade Enabled pode é usada para dar a cor cinza a um item de menu a fim de que ele não
possa ser selecionado pelo usuário. A última é a Caption, o texto do item de menu.
Uma quarta operação com item de menu seria a sua remoção ou torná-lo invisível. Isso
é facilmente realizado mudando-se o valor da prop. Visible para False. Sugere-se que você
evite esta operação, pois o usuário pode confundir-se. É preferível desabilitá-lo temporariamente.
Associando Eventos a Itens de Menu
A associação de um evento a um item de menu é fita semelhante à associação de um
evento a qualquer componente. A única diferença é que ele não é visto como um componente,
logo devemos selecioná-lo utilizando caixa de seleção do Obj Inspector ou utilizarmos o MD.
Menus Pop-Up ou SpeedMenus ( com o botão direito do mouse) (Standard)
29
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
No Windows é comum ver aplicações que possuem menus locais especiais que você ativa
dando um clique com o botão direito do mouse. O menu que é exibido - um menu pop-up em
termos do Windows - usualmente depende da posição do clique do mouse. Estes menus tendem a
ser fáceis de usar, uma vez que agrupam somente os poucos comandos relacionados ao elemento
que está atualmente selecionado.
Para adicionar menus pop-up na sua aplicação, execute algumas operações simples:
1. Insira um componente PopUpMenu no formulário
2. Adicione alguns itens de menu ao componente
3. Associe o componente à propriedade PopUpMenu do componente desejado
4. E obviamente, adicionar manipuladores de eventos para o OnClick dos itens de menu
Observações:
A propriedade AutoPop = True faz o menu aparecer através do clique do botão direito
sobre o componente.
A propriedade Alignment determina onde o menu se abrirá. A parte superior do menu
será a da posição do cursor do mouse, mas o alinhamento poderá ser à esquerda ou à direita ou
no no centro do componente, dependendo do valor definido nesta propriedade.
O PopUp Menu não deve ter submenus, pois por conveniência, eles devem ser rápidos
e não possuem teclas de acesso mnemômico (Alt + letra).
Podem ter tecla de atalho (propriedade ShortCut). Mas atenção: Mesmo que menu
não esteja associado a nenhum componente e também não esteja exibido, as teclas de atalho
estarão disponíveis. Neste caso, para não acessar um item com este recurso, devemos desabilitálo.
Um componente de menu suspenso recebe o evento OnPopUp antes que ele seja
exibido. É a chance que temos de realizar qualquer preparação em seus itens, como desativar,
ajustar marcas de verificação, etc...
FUNÇÕES DE CONVERSÃO E MANIPULAÇÃO
Vamos quebrar nosso estudo sobre os componentes do delphi para falarmos sobre Casting
e Conversões de tipos , pois estas funções serão importantes para futuras esplicações e
atividades.
Como já sabemos, não podemos atribuir uma variável à outra de um tipo diferente. Caso
precise fazer isso, há duas opções. A primeira é casting e a segunda é utilizar uma função de
conversão de tipos.
Função
Objetivo
Chr
Converte um número ordinal em um caractere ANSI
Ord
Converte um valor do tipo ordinal em um número que indica sua ordem
Round
Converte um valor real em um valor inteiro, arrendondando seu valor
Trunc
Converte um valor real em um valor inteiro, truncando seu valor
Int
Retorna a parte inteira do argumento de valor de ponto flutuante
IntToStr
Converte um número em uma string
30
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
IntToHex
Converte um número em uma string com sua representação em hexadec.
StrToInt
Converte uma string em um número, levando uma execeção se a string não
representa um número inteiro válido
StrCopy
Copia uma string estilo Pascal em uma string terminada em nulo
FloatToDecimal
Converte um valor de ponto flutuante em registro incluindo sua representação
decimal (expoente, dígito, sinal)
FloatToStr
Converte um valor de ponto flutuante para sua representação string usando
representação padrão
FloatToStrF
Converte um valor de ponto flutuante para sua representação string usando a
formatação especificada
StrToFloat
Converte uma string Pascal em um valor de ponto flutuante
TextToFloat
Converte uma string terminada em nulo em um valor de ponto flutuante
DateToStr(Date: TdateTime)
Converte um dado TDateTime em String.
DateTimeToStr(DateTime:
TDateTime)
Converte um dado TDateTime em String.
StrToDate (const S: String)
Converte um dado String em tipo TDateTime.
StrToDateTime(const S:
String)
Converte um dado String em tipo TDateTime
FormatFloat(const Format:
string; Value: Extended):
string
Permite formatar um tipo ponto flutuante retornando uma string.
Edit2.Text := FormatFloat('###,###.00',soma);
Sendo soma uma variável real.
CAIXAS DE DIÁLOGO
Podemos utilizar alguns tipos de caixas de diálogo pré-definidas pelo Delphi facilitando
em muito o desenvolvimento pela ferramenta:
ShowMessage
A caixa de diálogo ShowMessage é declarada internamente pelo Delphi desta forma:
procedure ShowMessage(const Msg: string);
Onde o parâmetro Msg é um dado String. Exemplo:
ShowMessage(‘Um texto ou propriedade string será exibida.’);
31
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
MessageDlg
A caixa de diálogo MessageDlg é declarada internamente pelo Delphi desta forma:
function MessageDlg(const Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons; HelpCtx: Longint): Word;
Onde:
const Msg: string
DlgType: TmsgDlgType
Buttons: TMsgDlgButtons
HelpCtx: Longint
É uma constante string ou propriedade deste tipo.
mtWarning
Contém um ícone exclamação amarelo.
mtError
Contém um ícone vermelho de ‘parada’.
mtInformation
Contém um ícone ‘i’ azul.
mtConfirmation
Contém uma interrogação verde.
mtCustom
Não contém BitMap.
mbYes mbNo mbOK mbCancel mbAbort mbRetry
mbIgnore mbAll mbNoToAll mbYesToAll mbHelp
Define um número para o help de contexto. Por padrão, zero ‘0’.
O retorno da função é o tipo do botão como mr
Desta maneira pode-se fazer testes lógicos como no exemplo:
if MessageDlg(‘Deseja sair?’, mtConfirmation, [mbYes, mbNo], 0)=mrYes then
Application.MessageBox
Uma outra caixa de diálogo é o método MessageBox do objeto Application. Esta
função está definida da seguinte maneira:
function MessageBox(const Text, Caption: PChar; Flags: Longint): Integer;
Onde:
const Text
Caption: PChar
Flags
É uma constante string ou propriedade deste tipo.
Define uma string para o título da janela.
Define os botões, ícones e a possibilidade de focar um determinado botão.
Os valores para botões são:
MB_ABORTRETRYIGNORE,
32
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
MB_OK,
MB_OKCANCEL,
MB_RETRYCANCEL,
MB_YESNO,
MB_YESNOCANCEL
Os valores para os ícones são:
MB_ICONEXCLAMATION,
MB_ICONWARNING,
MB_ICONINFORMATION,
MB_ICONASTERISK,
MB_ICONQUESTION,
MB_ICONSTOP,
MB_ICONERROR,
MB_ICONHAND
Os valores para a definição do botão default pode ser:
MB_DEFBUTTON1,
MB_DEFBUTTON2,
MB_DEFBUTTON3,
MB_DEFBUTTON4
O retorno da função é o tipo do botão como id
(IDABORT IDCANCEL IDIGNORE IDNO IDOK IDRETRY IDYES)
Desta maneira pode-se fazer testes lógicos como no exemplo:
if Application.MessageBox('Texto','Título',MB_YESNOCANCEL +
MB_ICONINFORMATION + MB_DEFBUTTON2) = IdYes then
CHAMADA DE FORMS
Uma característica importante da apresentação dos formulários em uma aplicação, é o
fato de ser apresentado como MODAL ou NÃO-MODAL. Há dois métodos para executar a
visualização, mas antes vamos entender como isso funciona.
•
•
MODAL – O foco fica preso no formulário e não é liberado para outro form até que ele
seja fechado. O usuário pode ativar outra aplicação do Windows, mas não poderá
trabalhar em outra janela daquele programa cuja janela foi aberta como modal (até que
seja fechada).
NÃO MODAL – O foco pode ser transferido para outra janela sem que esta precise ser
fechada.
Entendido este conceito, os métodos que o Delphi utiliza para apresentar os forms são:
Show para apresentar forms NÃO-MODAIS, ou ShowModal para apresentar forms
MODAIS.
33
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
COMPONENTES (VCL)
Objeto – BitBtn (Botão com figuras opcionais)
Paleta – Additional
Importância: Permite inserir figuras para uma
melhor orientação do usuário, além de funções
pré-definidas.
Propriedades
Glyph
Kind
Define um Bitmap para o componente. (Arquivo com extensão .BMP)
Define o tipo de Bitmap exibido pelo usuário.
bkCustom
Bitmap definido pelo usuário.
bkOk
Botão OK padrão, com uma marca de verificação na cor verde e propriedade Default
igual a True.
bkCancel
Botão Cancel padrão, com um “x” na cor vermelha e propriedade Cancel igual a True.
bkYes
Botão Yes padrão, com uma marca de verificação na cor verde e propriedade Default
igual a True.
bkNo
Botão No padrão, com uma marca vermelha representando um círculo cortado e
propriedade Cancel igual a True.
bkHelp
Botão de auxílio padrão, com uma interrogação na cor cyan. Quando o
usuário clica sobre o botão, uma tela de auxílio deve ser exibida
(baseada no código do desenvolvedor).
ModalResult
bkClose
Botão Close padrão, com o desenho de uma porta. Quando o usuário clica sobre o
botão, o formulário a que ele pertence se fecha.
bkAbort
Botão Abort padrão, com um “x” na cor vermelha e propriedade Cancel igual a True.
bkRetry
Botão Retry padrão, com uma seta circular verde.
bkIgnore
Botão ignore padrão, com o desenho de um homem verde se afastando.
bkAll
Botão All padrão, com uma marca de verificação dupla na cor verde e propriedade
default igual a True.
Permite encerrar a execução de um formulário Modal quando o seu valor for diferente de
mrNone.
Objeto MaskEdit – (Caixa de edição com máscara)
34
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
Paleta – Additional
Importância: Permite estabelecer uma máscara
para a entrada de dados no componente. Pode
ser considerado literalmente um componente
‘Edit com máscara’.
Propriedades
CharCase
EditMask
PasswordChar
Define o tipo dos caracteres.
Permite definir uma máscara para entrada de dados.
Define um caracter para ocultar a entrada de dados.
A máscara definida na propriedade EditMask irá restringir os caracteres que o usuário
pode entrar numa caixa de edição, isto evita que os usuários entrem com caracteres inválidos ou
com formatos de dados indesejados para um determinado valor.
Máscara de Telefone: !\(9999\)999-9999;1;_
A máscara é formada por três partes: a 1ª é a máscara propriamente dita, a 2ª consiste
num caractere que define se os caracteres ou a máscara devem ser salvos como parte dos dados,
a 3ª define o caractere usado para representar espaços em branco na máscara.
Lista dos caracteres utilizados numa máscara
Caractere
!
>
<
\
L
l
A
a
C
c
0
9
#
:
/
;
_
<>
Significado na Máscara
Se um ! aparecer na máscara, caracteres em branco não são armazenados como dados
Marca o início do bloco que deve ser convertido em letras maiúsculas, para fechar esse bloco esperase o caractere <
Marca o início do bloco que deve ser convertido em letras minúsculas, para fechar esse bloco esperase o caractere >
Define um caractere literal, ou seja, o caractere que segue a barra invertida \ é utilizado como
caractere especial, fixo, que pode ser salvo como parte integrante do valor ou não.
Requer a entrada de caractere alfabético (A-Z, a-z) nesta posição
Permite a entrada de caractere alfabético (A-Z, a-z) nesta posição, mas não requer
Requer a entrada de caractere alfanumérico (A-Z, a-z, 0-9) nesta posição
Permite entrada caractere alfanumérico (A-Z, a-z, 0-9) nesta posição, não requer
Requer um caractere qualquer nesta posição
Permite um caractere qualquer nesta posição, mas não requer
Requer um caractere numérico (0-9) nesta posição
Permite um caractere numérico (0-9) nesta posição, mas não requer
Permite um caractere numérico, um símbolo + ou -, mas não requer
Usado como separador em dados horários. Se outro caractere separador é definido nos atributos
internacionais do Painel de Controle do seu Sistema, este caractere será usado ao invés dos dois
pontos
Separador de dia, mês e ano. Idem com relação Painel de Controle
Usado para separar as três partes que formam a máscara
Insere espaço em branco automaticamente no texto
Define que as letras maiúsculas e minúsculas serão armazenadas como digitadas
35
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
Objeto – SpeedButton (Botão para barra de ícones)
Paleta – Additional
Importância: Permite ao usuário manipular os
botões individuais ou através do conceito de
grupo.
Propriedades
Glyph
GroupIndex
AllowAllUp
Flat
Down
Define um Bitmap para o componente.
Permite agrupar um conjunto de SpeedButtons quando ao serem selecionados, tiverem a
propriedade diferente de zero.
Permite que o componente possa ter o relevo suspenso ao ser clicado. Só pode ser
utilizado junto ao conceito de agrupamento.
Define um efeito visual interessante.
Permite determinar qual componente foi pressionado. Só pode ser utilizado junto ao
conceito de agrupamento.
Exemplo:
Objeto – Image (Imagem)
Paleta – Additional
Importância: Permite inserir uma figura para
uso geral na aplicação.
Propriedades
AutoSize
Picture
Stretch
Permite alterar o tamanho do componente baseado no tamanho da figura.
Define a figura a ser exibida.
Permite alterar o tamanho da figura baseado no tamanho do componente.
Métodos
36
DS-I – Desenvolvimento de Software I
LoadFromFile
Téc. Informática
Delphi
Permite ‘carregar’ um arquivo de figura na propriedade Picture.
Para trabalhar com imagens jpg, é necessário acrescentar na cláusula uses da interface a
biblioteca jpeg.
Possibilita a exibição de uma figura (Bmp)
Propriedade
Picture
Center
Strech
AutoSize
Significado
Definição da figura do tipo BMP, ICO, WMF ou EMF
Centraliza a figura em relação ao Quadro (objeto)
Se True, adequa o tamanho da imagem com relação ao objeto
Se True, adequa o tamanho do objeto com relação a imagem
Contrário da propriedade Strech
Objeto – ToolBar (Barra de ícones)
Paleta – Win32
Importância: Permite criar barras de ícones de
maneira rápida e simples.
Propriedades
Flat
Images
HotImages
ShowCaptions
Define um efeito visual com relevo através do mouse nos botões.
Permite definir um objeto do tipo ImageList.
Permite definir um objeto do tipo ImageList a ser usado no momento em que o mouse
passa (ou clica) sobre o componente.
Permite exibir a propriedade caption dos botões.
Para adicionar botões ou separadores na ToolBar, clique com o botão direito sobre o
componente e escolha New Button ou New Separator.
Inserindo BitMaps nos botões
1. Acrescentar no formulário um ou mais componentes ImageList
2. Obviamente carregar os bitmaps no ImageList
3. Associar o ImageList com a prop. Images do ToolBar.
Por padrão, as imagens serão atribuídas aos botões na ordem em que elas aparecem, mas
você pode mudar isso facilmente, configurando a prop. ImageIndex para cada botão do
ToolBar.
Pode-se preparar mais componentes ImageList para condições especiais dos botões, e
atribuir a elas as propriedades (DisabledImages ou Images) e HotImages para cada botão do
ToolBar.
37
DS-I – Desenvolvimento de Software I
Téc. Informática
Delphi
O primeiro grupo é usado para os botões desabilitados, o segundo para o botões quando
pressionados.
Esse último grupo de imagens usualmente é mais vivo, ou seja, deve possuir as imagens
mais vivas que o seu correspondente desabilitado.
Para que as imagens vivas sejam exibidas quando da passagem do cursor do mouse
sobre os botões, defina a propriedade Flat = True, fazendo também os botões terem aparência
plana. Obviamente, associe uma ImageList à propriedade HotImages.
Não se esqueça de definir dicas instantâneas para os botões. Se você definir a
propriedade ShowHint = True (Default = False) daToolBar, a propriedade ShowHint dos botões
também será ajustada para True.
38

Documentos relacionados