TECNOLÓGICA DE SERGIPE
COORDENADORIA DE INFORMÁTICA
INDICE
Paradigmas da Programação ................................................................................................................................4
Tipos Simples .......................................................................................................................................................10
Tipos Enumerados ................................................................................................................................................10
Tipo Set ................................................................................................................................................................11
Tipos com Editor de Propriedades........................................................................................................................11
Manipulando Eventos ...........................................................................................................................................11
PROJETO EM DELPHI ..........................................................................................................................................15
CONVENÇÃO DE NOMEAÇÃO...........................................................................................................................19
COMPONENTES......................................................................................................................................................27
Propriedades .............................................................................................................................................................29
Métodos ....................................................................................................................................................................30
Métodos ....................................................................................................................................................................30
Propriedades .............................................................................................................................................................31
Propriedades .............................................................................................................................................................32
Crie um formulário conforme lay-out abaixo...........................................................................................................33
A opção Apaga Tudo só poderá ocorrer após confirmação do usuário ....................................................................33
Propriedades .............................................................................................................................................................33
Métodos ....................................................................................................................................................................33
Propriedades .............................................................................................................................................................34
Propriedades .............................................................................................................................................................35
Métodos ....................................................................................................................................................................36
Propriedades .............................................................................................................................................................36
Métodos ....................................................................................................................................................................36
Propriedades .............................................................................................................................................................38
Métodos ....................................................................................................................................................................38
Propriedades .............................................................................................................................................................38
CHAMADA DE FORMS .........................................................................................................................................52
COMPONENTES (VCL) ..........................................................................................................................................53
TRATAMENTO DE EXCEÇÕES..........................................................................................................................66
UM POUCO MAIS SOBRE COMPONENTES (VCL) ......................................................................................72
Opções ..................................................................................................................................................................73
Valor .....................................................................................................................................................................73
Significado............................................................................................................................................................73
Principais Eventos ................................................................................................................................................73
Evento...................................................................................................................................................................73
Descrição ..............................................................................................................................................................73
Principais Métodos ...............................................................................................................................................74
Métodos ................................................................................................................................................................74
Descrição ..............................................................................................................................................................74
Principais Propriedades ........................................................................................................................................74
Propriedade...........................................................................................................................................................74
Descrição ..............................................................................................................................................................74
Opções ..................................................................................................................................................................74
Valor .....................................................................................................................................................................74
Significado............................................................................................................................................................74
Principais Eventos ................................................................................................................................................74
Evento...................................................................................................................................................................74
Descrição ..............................................................................................................................................................74
Principais Métodos ...............................................................................................................................................75
Métodos ................................................................................................................................................................75
Descrição ..............................................................................................................................................................75
Principais Propriedades ........................................................................................................................................75
Propriedade...........................................................................................................................................................75
Descrição ..............................................................................................................................................................75
Opções ..................................................................................................................................................................75
2
CEFET-UNED
Prof. Mário André
Valor .....................................................................................................................................................................75
Significado............................................................................................................................................................75
Principais Eventos ................................................................................................................................................76
Evento...................................................................................................................................................................76
Descrição ..............................................................................................................................................................76
Principais Métodos ...............................................................................................................................................76
Métodos ................................................................................................................................................................76
Descrição ..............................................................................................................................................................76
UM POUCO MAIS SOBRE COMPONENTES (VCL) ......................................................................................76
Images.......................................................................................................................................................................82
StateImages...............................................................................................................................................................82
Items .........................................................................................................................................................................82
ShowButtons.............................................................................................................................................................82
ShowLines ................................................................................................................................................................82
ShowRoot .................................................................................................................................................................82
ReadOnly ..................................................................................................................................................................82
Eventos.....................................................................................................................................................................82
OnEditing .................................................................................................................................................................82
OnEdited...................................................................................................................................................................82
Apêndice A - A Linguagem Object Pascal......................................................................................................84
Apêndice B - DICAS..............................................................................................................................................87
Apêndice C - INTRODUÇÃO À ORIENTAÇÃO A OBJETOS ......................................................................92
REFERÊNCIA BIBLIOGRÁFICA.............................................................................................................................94
3
CEFET-UNED
Prof. Mário André
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
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.
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
4
CEFET-UNED
Prof. Mário André
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
Program Verif_Nome;
Begin
Write ('Digite um nome: ');
Readln (Nome);
If Nome = 'Ze Silva' then
5
CEFET-UNED
Prof. Mário André
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
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.
6
CEFET-UNED
Prof. Mário André
O avanço da tecnologia barateou o custo dos sistemas computacionais e introduziu recursos gráficos para a
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.
7
CEFET-UNED
Prof. Mário André
IDE
O ambiente de desenvolvimento do Delphi é composto de várias ‘partes’ compondo um
conjunto integrado de ‘janelas’ que interagem entre si.
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.
8
CEFET-UNED
Prof. Mário André
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
Pode-se configurar a ordenação das guias clicando com o botão direito do mouse sobre
qualquer componente e clicar na opção Properties.
OBJECT INSPECTOR
Por exemplo:
1
Componente ComboBox.
9
CEFET-UNED
Prof. Mário André
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.
10
CEFET-UNED
Prof. Mário André
Tipo Set
Algumas propriedades podem conter múltiplos valores. Um exemplo é a propriedade
BorderIcons com o sinal + indicando subpropriedades.
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 Ocorrência
Quando o usuário clicar uma vez com o botão esquerdo
OnClick do mouse sobre o componente.
Quando o usuário dá um duplo clique no componente
OnDblClick
com o botão esquerdo do mouse.
OnEnter Quando o componente recebe o foco.
OnExit Quando o componente perde o foco.
OnKeyPress Quando pressiona uma única tecla de caractere.
CODE EDITOR
O editor de código é responsável por receber todas as declarações criadas pelo Delphi e
handlers3 criados pelo desenvolvedor.
E no ambiente Code Editor que implementamos o algoritmo na linguagem Object
Pascal.
2
Manipulador de evento
3
Manipulador de eventos.
11
CEFET-UNED
Prof. Mário André
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.
12
CEFET-UNED
Prof. Mário André
CODE INSIGHT
Esta lista pode ser ordenada por nome, clicando com o botão direito dentro da listagem.
13
CEFET-UNED
Prof. Mário André
end;
14
CEFET-UNED
Prof. Mário André
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:
15
CEFET-UNED
Prof. Mário André
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
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
Dialogs;
16
CEFET-UNED
Prof. Mário André
Type
Tform1 = class(Tform)
private
{Declarações privativas}
public
{Declarações públicas}
end;
var
Form1: Tform1;
implementation
{$R *.DFM}
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.
17
CEFET-UNED
Prof. Mário André
OPÇÕES DE PROJETO
O Delphi permite a configuração de vários itens do sistema através do menu Project – Options.
18
CEFET-UNED
Prof. Mário André
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
Exemplo:
19
CEFET-UNED
Prof. Mário André
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.
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.
20
CEFET-UNED
Prof. Mário André
A lista de forms pode ser ativada através do menu View, opção Forms..., ou através do
segundo ícone inferior da SpeedBar ou através da combinação das teclas <Alt> <F12>.
A Lista de Janelas
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>.
2. Roteiro:
a. Crie uma pasta Aulas Delphi e dentro desta outra Gerencia de Projeto
b. Inicialize o Delphi
21
CEFET-UNED
Prof. Mário André
q. Feche a aplicação
w. Feche a Aplicação
x. Abra novamente a aplicação e observe quantos forms são trazidos para você inicialmente
22
CEFET-UNED
Prof. Mário André
Para ativar os forms que deseja trabalhar, utilize o 2º ícone inferior do SB ou View
Project Manager, selecione o form, clique com botão direito e escolha a opção Open.
Modularização
É muito indicado que você modularize o seu projeto. Isto implica também em não
misturar funcionalidades diferentes na mesma unit.
Como assim? Você não deve colocar strings nem valores constantes diretamente no
código. Isto aumenta o trabalho quando for necessário alterar determinado valor. Teremos que
procurar em todos os módulos para saber onde fazemos referência àquele valor. E cuidado para
não confundir com uma mesma constante que possua, por coincidência, o mesmo valor que a que
estamos procurando.
Para resolver este problema, você deve criar constantes e atribuir valores a estas
constantes. Mas não defina estas constantes em qualquer unit. Crie uma unit que irá abrigar
somente a definição das constantes do projeto. Você pode nomear esta unit com qualquer nome,
exceto Const.Pas, porque const é uma palavra reservada.
Diretórios
Via de regra, é aconselhado utilizar um diretório para cada projeto Delphi. Isto porque
facilita bastante a identificação dos vários arquivos.
Um dos pontos mais importantes de um projeto é saber quais arquivos são necessários
para uma compilação completa (build). Quando temos mais de uma aplicação por diretório, esta
identificação passa a ser um problema.
Exemplo: C:\Sistema
C:\Sistema\Doc
C:\Sistema\Dados
C:\Sistema\Dll
C:\Sistema\Icones
Não perca este objetivo de vista: projeto e organização são os requisitos mais
importantes para um bom desenvolvimento.
23
CEFET-UNED
Prof. Mário André
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure SomaNum;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.SomaNum;
var Value1, Value2, Total : integer;
begin
Value1 := StrToInt (Edit1.text);
Value1 := StrToInt (Edit2.text);
Label1.Caption := IntToStr(Value1 + Value2);
end;
begin
SomaNum;
end;
end.
24
CEFET-UNED
Prof. Mário André
Execute o programa. digite 4 e 5 e depois pressione o botão Ok. O editor deve aparecer,
mostrando a posição em que o ponto de quebra foi definido, conforme figura 27. Agora o ponto
de quebra tem uma marca verde na mediamiz, mostrando que você parou neste ponto, e uma seta
verde apontando para a direita aparece na mediamiz, mostrando sua posiçao no código. Esta
linha ainda não foi executada, ou seja, a seta verde aponta para a próxima linha de execução.
Você pode definir pontos de quebra especiais que interromperão a execução apenas se
certas condições ocorrerem ou em uma passagem por um loop em particular. Isto pode
ser muito útil, se seu código falha somente em certas condições ou no meio de um
loop muito grande. Para definir condições ou contagem de passagem, você usa a opção
de menu Run | Add Breakpoint para acessar a caixa de diálogo Edit Breakpoint.
25
CEFET-UNED
Prof. Mário André
Opções de Depuração
O menu Run do Delphi contém algumas opções de depuração adicionais, que têm
toques de tecla de atalho correspondentes:
Opção Significado
Run (F9) Compila e executa iu, no modo depurador, continua a executar a partir desse
ponto.
Step Over (F8) Executa cada linha do código, mas não entra nas chamadas de funções e
procedures.
Trace Into (F7) Permite que o depurador siga o código de uma chamada de função ou
procedure.
Trace to Next Source Line Segue até a próxima linha executável.
(Shift F7)
Runt to Cursor (F4) Executa até a posição corrente do cursor, na janela do editor
Show Execution Point Coloca o cursor no ponto de execução corrente.
Program Reset (Ctrk F2) Finaliza a execução do programa
26
CEFET-UNED
Prof. Mário André
Na caixa de diálogo Watch Properties, digite Value1 na caixa de texto Expression. Isto
cria a janela Watch List, onde as variáveis controladas e seus valores correntes serão
apresentados, como na figura.
Se a variável ainda não foi criada ou atribuída, várias mensagens serão apresentadas,
indicando o status da variável em que o valor normalmente estaria. A mensagem pode indicar
Process not accessible, o que significa que o código que cria essas variáveis não foi iniciado ou
que ele terminou e as variáveis foram retiradas da memória.
Você também poderia ver a mensagem Inaccessible here due to optimation, que
normalmente significa que a variável ainda não foi atribuída. Quando as linhas de código que
tratam da variável que você atribuiu uma sentinela são executadas, o valor é apresentado na
janela Watch List.
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.
27
CEFET-UNED
Prof. Mário André
É 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.
Principais Eventos
Evento Descrição
OnChange Acontece quando o objeto ou seus dados mudam
OnClick Clique simples do mouse sobre o componente ou Enter no componente
OnDblClick Duplo clique do mouse sobre o componente
OnEnter Ocorre quando o componente recebe foco
OnExit Ocorre quando o componente perde foco
OnMouseDown O botão do mouse é pressionado sobre o componente
OnMouseMove O ponteiro do mouse passa sobre o componente
OnMouseUp O botão do mouse é liberado sobre o componente
OnKeyDown Uma tecla é pressionada. É enviado para o componente com o foco de entrada.
OnKeyPress Uma tecla de caractere é pressionada. Idem
OnKeyUp Uma tecla é liberada. Idem
OnDragDrop O componente está sendo arrastado e é solto num local permitido
OnDragOver O componente está sendo arrastado e passa sobre outro componente
OnEndDrag O componente está sendo arrastado e é solto num local permitido ou não
OnStartDrag 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 Descrição
BringToFront Coloca o componente na frente dos outros
CanFocus Determina se o controle pode receber o foco
Create Cria uma instância do componente
Destroy Destrói a instância. Na verdade, deve-se utilizar o Free
Focused Retorna se o foco está sobre o componente
Free Destrói a instância e desaloca a memória
Hide Torna o controle invisível
SetFocus Faz com que o controle receba o foco
SendToBack Coloca o componente atrás dos outros
Show Torna o controle visível
28
CEFET-UNED
Prof. Mário André
Paleta – Standart
Propriedades
ActiveControl Permite definir qual o primeiro componente a receber foco assim que o formulário é
criado.
Align Altera o alinhamento e preenchimento do objeto.
AutoScroll Permite habilitar as barras de rolagem.
AutoSize Determina se o controle será automaticamente redimensionado.
BorderIcons Determina os ícones a serem exibidos na barra de título do formulário.
BorderStyle 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.
BorderWidth Define a espessura da borda.
Caption Indica o rótulo exibido para o componente.
ClientHeight / Define a altura e largura da área cliente.
ClientWidth
Color Define a cor de fundo de um componente.
Cursor Indica a imagem exibida pelo ponteiro do mouse quando este ficar sobre o objeto.
DefaultMonitor Associa o form a um monitor específico em uma aplicação que utiliza vários monitores.
Enabled Define se o componente está habilitado ou não.
Font Permite controlar os atributos do texto exibido em um componente.
FormStyle 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.
Height Define a altura do objeto.
HelpContext Define o tópico do arquivo help que será exibido ao pressionar a tecla F1.
HelpFile Define um arquivo de help específico.
Hint Permite exibir um texto de auxílio no momento em que o ponteiro do mouse permanece
sobre o controle.
HorzScrollBar Define o comportamento de uma barra de rolagem horizontal.
Icon Define o ícone que será usado pelo formulário.
KeyPreview Define se o formulário deve ou não responder a um pressionamento de tecla, através do
evento OnKeyPress, por exemplo.
Left Define a coordenada da extremidade esquerda de um componente.
Menu Permite escolher entre mais de um componente MainMenu.
Name Define o nome interno que identifica o componente dentro da aplicação.
PopupMenu Define o componente PopupMenu a ser utilizado pelo objeto.
Position Permite definir o tamanho e posição de um formulário no momento em que ele aparece
29
CEFET-UNED
Prof. Mário André
na sua aplicação.
ShowHint 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.
Tag 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.
Top Define a coordenada da extremidade superior de um componente.
VertScrollBar Define o comportamento de uma barra de rolagem vertical.
Visible Define se o componente aparece ou não na tela.
Width Define a largura do objeto.
WindowMenu Permite definir qual o menu responsável por manipular as janelas-filhas de uma
aplicação MDI.
WindowState Define o estado de exibição de um formulário.
Métodos
Show Exibe o formulário de manipulação não-modal.
ShowModal Exibe o formulário de manipulação modal.
Close Permite fechar o formulário.
Paleta – Standart
Propriedades
Action Referencia uma ação definida em um objeto TActionList.
Anchors 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 Propriedade utilizada para encerrar a execução de um formulário Modal quando
selecionado um valor diferente de mrNone.
Parent... As propriedades Parent permitem que o componente receba a mesma formatação do
objeto proprietário.
TabOrder Define a ordem na passagem de foco no momento de pressionamento da tecla TAB.
TabStop Define se o foco pára no componente.
Métodos
SetFocus Envia o foco do windows para o componente.
30
CEFET-UNED
Prof. Mário André
Paleta – Standart
Propriedades
AutoSelect Define se o texto exibido pelo controle será selecionado quando este receber o foco da
aplicação.
AutoSize Para componentes TEdit a propriedade determina se a altura do controle será
redimensionada quando o tamanho da fonte for alterado.
BorderStyle Determina o tipo da borda do componente.
CharCase Determina o se tipo da fonte será maiúscula, minúscula ou normal.
HideSelection Define se o texto perde a seleção ao perder o foco.
Maxlength Define um limite para a inserção de caracteres.
PasswordChar 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 Limpa o conteúdo da propriedade text.
SetFocus Envia o foco do windows para o componente.
Exercício
Confeccione um formulário conforme esquema abaixo:
Funcionalidade:
1. As caixas de edição e os rótulos só ficarão habilitados se ‘Delphi’ for digitado na 1ª caixa
31
CEFET-UNED
Prof. Mário André
2. O botão Ok só ficará habilitado se o texto das últimas caixas forem iguais e diferentes de
branco.
Paleta – Standart
Propriedades
Alignment Define o alinhamento da string na área do componente.
AutoSize 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
FocusControl teclas aceleradoras (atalho) se existir.
Layout Define o alinhamento vertical do texto na área do componente.
ShowAccelChar Define se o caracter ‘&’ será um literal ou tecla de aceleradora (atalho).
Transparent Define se o fundo do componente será ‘transparente’ ou não.
WordWrap Define se o texto poderá utilizar o ‘retorno automático’ em caso de ultrapassar a largura
definida e se a propriedade AutoSize estiver falsa.
Paleta – Standart
32
CEFET-UNED
Prof. Mário André
Exercício:
Crie um formulário conforme lay-out abaixo
Para as opções de Adiciona na Posição e Apaga Linha, a Caixa de Edição Linha, deve
ser preeenchida com um valor menor que a da Caixa de Edição Total de Linhas
A opção Apaga Tudo só poderá ocorrer após confirmação do usuário
Antes de Carregar e Salvar Arquivo, verificar se o nome do arquivo foi fornecido na
Caixa de Edição Arquivo
A Caixa de Edição Total de Linhas deverá se alterar obviamente toda vez toda vez que
o conteúdo do memo for alterado e o seu valor não pode ser alterado pelo usuário
Propriedades
Lines Propriedade do tipo TStrings que contém as linhas de texto do componente.
MaxLength Define o limite máximo de caracteres no componente em sua propriedade Lines.
ReadOnly Define se o componente é do tipo somente leitura.
ScrollBars Define se o componente pode trabalhar com barras de rolagem.
WantReturns Define se a tecla ENTER será utiliza para ‘quebra de linha’.
WantTabs Define a tecla Tab como tabulação ou mudança de foco. Caso falso pode-
se utilizar CTRL+TAB para produzir o efeito desejado.
Métodos
LoadFromFile Permite ‘carregar’ um arquivo para a propriedade Lines.
SaveToFile Permite salvar o conteúdo da propriedade Lines em um arquivo especificado.
33
CEFET-UNED
Prof. Mário André
Paleta – Standart
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.
Exercício
Confeccionar uma aplicação conforme lay-out abaixo.
Defina o codigo inicialmente prevendo que os CheckBoxs tenham a prop. AllowGrayed = False
e execute. Depois defina o código com essa prop. = True
34
CEFET-UNED
Prof. Mário André
Paleta – Standart
Propriedades
Define se o componente está ligado ou desligado.
Checked
Exercício
Confeccionar uma aplicação conforme lay-out abaixo. Insira primeiro o GroupBox e
depois os botões de rádio. Observe que é interessante definir acessos mnemônicos para os
botões.
Funcionalidade: Para “Nada a Fazer”, tire a marca do botão assinaloado e para “O que
Fazer” exiba como mensagem o Caption do botão assinalado.
Paleta – Standart
35
CEFET-UNED
Prof. Mário André
Propriedades
Define uma lista de Strings que aparece no componente.
Items
MultiSelect Permite selecionar vários itens (Strings) no componente.
Sorted Define se a lista de Strings será ordenada ou não.
Métodos
Clear Permite limpar o conteúdo da propriedade Items.
LoadFromFile Permite ‘carregar’ um arquvo para a propriedade Items.
SaveToFile Permite salvar o conteúdo da propriedade Items para um arquivo.
Paleta – Standart
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 Permite limpar o conteúdo da propriedade Items.
LoadFromFile Permite ‘carregar’ um arquvo para a propriedade Items.
SaveToFile Permite salvar o conteúdo da propriedade Items para um arquivo.
Exemplo:
Insira uma ComboBox num formulário limpo e defina as propriedades:
Sorted = True, Style = csSimple (redimensione a caixa para poder ver parte dela)
No evento OnKeyPress, defina
If key = # 13 then // Se teclou <Enter>
Begin
if (ComboBox1.Text <> ‘’) and (ComboBox1.Items.IndexOf(Combox1.Text) < 0) then // não duplic.
ComboBox1.Items.Add(ComboBox1.Text);
ComboBox1.Text := ‘’;
Key := #0;
End;
Assim, toda vez que o <Enter> for teclado, a digitação realizada será inserida na ComboBox.
36
CEFET-UNED
Prof. Mário André
Exercício:
pressionamento do botão Nova, habilita o botão Adicionar, seta o foco da aplicação na Caixa
de texto, desabilita o botão Nova e Excluir.
Paleta – Standart
37
CEFET-UNED
Prof. Mário André
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 Permite limpar o conteúdo da propriedade Items.
LoadFromFile Permite ‘carregar’ um arquvo para a propriedade Items.
SaveToFile Permite salvar o conteúdo da propriedade Items para um arquivo.
Paleta – Standart
Propriedades
Align Pemite definir um alinhamento no objeto proprietário.
Caption Define o texto informativo na parte superior do componente.
Paleta – Standart
Propriedades
Items Define os itens disponíveis ao usuário.
ItemIndex Define qual dos itens está selecionado.
Columns Define o número de colunas para organização dos componentes.
38
CEFET-UNED
Prof. Mário André
Exercício 1:
Utilizando-se da interface mostrada na figura abaixo, produzir uma aplicação que apresente a
seguinte funcionalidade:
O Clique no botão OK deverá incrementar a quantidade de votos de cada equipe e a
quantidade de entrevistados dos dois sexos.
Sexo é um RadioGroup e as demais caixas GroupBox
Exercício –2:
39
CEFET-UNED
Prof. Mário André
Paleta – Standart
Propriedades
Align Define o alinhamento do componente em relação ao seu proprietário.
Bevel... Define a característica das bordas (interna e externa) bem como sua
espessura.
BorderStyle Define o tipo da borda.
Exercício
Utilizando uma Panel como Barra de Status para exibição de Dicas Flutuantes
40
CEFET-UNED
Prof. Mário André
Paleta – Standart
Propriedades
Items Define um novo item de Menu.
Images Define um objeto do tipo ‘ImageList’.
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
41
CEFET-UNED
Prof. Mário André
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.
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.
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.
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.
42
CEFET-UNED
Prof. Mário André
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.
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.
Exercício -1
2. Insira um MainMenu com 1 Menu suspenso e este com 3 itens de menu quaisquer.
3. Construa o código para que cada vez que selecionarmos um item de menu, a legenda do label
receba a sua descrição
Exercício –2:
Confeccione a estrutura de Menu conforme layouts abaixo, observando os nomes dos menus
suspensos e dos itens de menu.
Para obtermos uma janela com melhor aparência altere a prop Color do formulário para
clBtnShadow
43
CEFET-UNED
Prof. Mário André
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...
44
CEFET-UNED
Prof. Mário André
ScrollBar (Standard)
Paleta – Standart
O usuário pode modificar o valor representado pelo scrollbar de duas formas: clicando
nas setas de incremento/decremento ou diretamente na barra. A primeira ação faz com que o
valor representado sofra uma modificação menor (SmallChange) enquanto a segunda gera uma
maior (LargeChange).
Os limites inferior e superior da faixa de valores válidos para a ScrollBar são dados por
Min e Max respectivamente. Estes limites representam o valor quando o cursor da barra estiver
em cima ou à esquerda (Min) ou em baixo ou à direita (Max).
O controle provê fácil e eficiente navegação por longa lista de itens ou grande
quantidade de informação que não podem ser totalmente visualizadas nas suas áreas de exibição.
Pode também ser usado como entrada de dados ou como mostrador de informações (valores
numéricos).
Principais Propriedades
Propriedade Descrição
Kind Define a direção da barra de rolagem
LargeChange Indica a variação da rolagem feita sem o uso das setas de movimentação
Max Maior valor do ScrollBar
Min Menor valor do ScrollBar
Position Indica a posição atual do srollbar
SmallChange Indica a variação da rolagem feita com o uso das setas de movimentação
Principais Eventos
Evento Descrição
OnChange Disparado quando o conteúdo da propriedade position é alterado pelo usuário, e ocorre
imediatamente após o OnScroll
OnScroll Ocorre quando é feita a rolagem do ScrollBar
Principais Métodos
Métodos Descrição
SetParams Modifica os valores das propriedades Position, Min e Max de uma só vez
45
CEFET-UNED
Prof. Mário André
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
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: Converte um dado TDateTime em String.
TDateTime)
StrToDate (const S: String) Converte um dado String em tipo TDateTime.
StrToDateTime(const S: Converte um dado String em tipo TDateTime
String)
FormatFloat(const Format: Permite formatar um tipo ponto flutuante retornando uma string.
string; Value: Extended):
Edit2.Text := FormatFloat('###,###.00',soma);
string
Sendo soma uma variável real.
46
CEFET-UNED
Prof. Mário André
EXEMPLOS:
Armazenar a data e hora atuais em uma variável Exibir a data e a hora na legenda de Labels
Var
InicioAtual : TDateTime; Label1.Caption := DateToStr(Atual);
Begin Label2.Caption := TimeToStr(Atual);
Atual := Now;
PROCEDURES E FUNÇÕES
Procedimentos e funções são blocos de código (rotinas) em Object Pascal que podem
ou não receber parâmetros (valores) para processamento. Uma vez definida a rotina pode-se
ativa-la de diversas partes do programa através de seu nome.
47
CEFET-UNED
Prof. Mário André
Observe que agora, depois dos parâmetros há um tipo de definição de retorno da função
(String).
A palavra reservada result é o recurso usado pela Object Pascal para estabelecer o
retorno da rotina. Não se deve declarar esta variável, ela é declarada no momento da
utilização da função.
Supondo a existência de dois componentes Edit, ‘um’ componente Button e um
componente Label, esta função pode ser ativada da seguinte forma:
Neste caso, o Label recebe o result de subtrai, ou seja, a subtração dos dados passados
nos parâmetros.
CAIXAS DE DIÁLOGO
Podemos utilizar alguns tipos de caixas de diálogo pré-definidas pelo Delphi facilitando
em muito o desenvolvimento pela ferramenta:
48
CEFET-UNED
Prof. Mário André
ShowMessage
MessageDlg
49
CEFET-UNED
Prof. Mário André
Application.MessageBox
Onde:
if Application.MessageBox('Texto','Título',MB_YESNOCANCEL +
MB_ICONINFORMATION + MB_DEFBUTTON2) = IdYes then
CAIXAS DE ENTRADA
InputBox
50
CEFET-UNED
Prof. Mário André
A função InputBox retorna um tipo String, que é dado digitado pelo usuário na sua utilização.
Sua definição interna é a seguinte:
Onde:
Exemplo:
InputQuery
A função InputQuery retorna um tipo Booleano, o dado digitado pelo usuário será colocado em
uma variável do tipo string previamente declarada.
Sua definição interna é a seguinte:
Exemplo:
Neste exemplo acima, a janela só retornará verdade se houver algum valor digitado e o usuário
clicar no botão OK, caso contrário o retorno será falso.
51
CEFET-UNED
Prof. Mário André
Exemplo
{$R *.DFM}
end.
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á
52
CEFET-UNED
Prof. Mário André
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.
COMPONENTES (VCL)
Objeto – BitBtn (Botão com figuras opcionais)
Paleta – Additional
Propriedades
Glyph Define um Bitmap para o componente. (Arquivo com extensão .BMP)
Define o tipo de Bitmap exibido pelo usuário.
Kind 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).
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.
53
CEFET-UNED
Prof. Mário André
bkAll
Botão All padrão, com uma marca de verificação dupla na cor verde e propriedade
default igual a True.
ModalResult Permite encerrar a execução de um formulário Modal quando o seu valor for diferente de
mrNone.
Paleta – Additional
Propriedades
CharCase Define o tipo dos caracteres.
EditMask Permite definir uma máscara para entrada de dados.
PasswordChar Define um caracter para ocultar a entrada de dados.
54
CEFET-UNED
Prof. Mário André
Paleta – Additional
Propriedades
Glyph Define um Bitmap para o componente.
GroupIndex Permite agrupar um conjunto de SpeedButtons quando ao serem selecionados, tiverem a
propriedade diferente de zero.
AllowAllUp Permite que o componente possa ter o relevo suspenso ao ser clicado. Só pode ser
utilizado junto ao conceito de agrupamento.
Flat Define um efeito visual interessante.
Down Permite determinar qual componente foi pressionado. Só pode ser utilizado junto ao
conceito de agrupamento.
Exemplo:
Paleta – Additional
55
CEFET-UNED
Prof. Mário André
Propriedades
AutoSize Permite alterar o tamanho do componente baseado no tamanho da figura.
Picture Define a figura a ser exibida.
Stretch Permite alterar o tamanho da figura baseado no tamanho do componente.
Métodos
LoadFromFile 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.
Propriedade Significado
Picture Definição da figura do tipo BMP, ICO, WMF ou EMF
Center Centraliza a figura em relação ao Quadro (objeto)
Strech Se True, adequa o tamanho da imagem com relação ao objeto
AutoSize Se True, adequa o tamanho do objeto com relação a imagem
Contrário da propriedade Strech
Exercício
56
CEFET-UNED
Prof. Mário André
Nosso exercício irá utilizar 3 formulários que serão exibidos na ordem acima:
1º Tela de Splash, 2º Formulário de Senha e 3º o Formulário Principal da Aplicação
2. Altere tamanho do formulário, seu nome para Frm_Princ e deverá ser exibido no centro da
tela.
1. Insira mais formulário, altere suas propriedades para que seja exibido maximizado, sem
borda e com o nome de Splash.
2. Insira um Image nesse formulário e altere as propriedades Picture, Strech = True e Align =
alClient
Application.Initialize;
Splash := Tsplash.Create(Application);
Splash.Show;
Splash.Refresh;
Application.CreateForm(TFrm_Princ, Frm_Princ);
Splash.Release; // Se nao desejar mais ele no fundo
Application.Run;
7. Observe que o Splash não fica na tela e logo o formulário principal é exibido.
Na prática teríamos a exibição do Splash, a execução de rotinas de inicialização da aplicação
que demandaria algum tempo e quando estas terminassem, o Splash deveria ser apagado e
exibido o formulário principal.
57
CEFET-UNED
Prof. Mário André
Como não temos rotinas de inicialização, vamos então, criar um freio, que no exercício seria a
exibição do formulário de Senha.
8. Para inserir o formulário de Senha: Menu File, opção New, Guia Dialog e escolha Password
Dialog
9. Altere os componentes deste formulário para que fique igual ao exibido acima, com o nome
de Frm_Senha e o defina como disponível em Project Options.
Frm_Senha := TFrm_Senha.Create(Application);
Frm_Senha.ShowModal;
Frm_Senha.Release;
StringGrid (Additional)
Utilizado para exibição e edição de uma tabela de strings. A sua apresentação é similar
a uma planilha. É organizada em linhas e colunas, tendo como elemento básico as células (cells).
Propriedade Descrição
Cells Célula que está selecionada
Col Número da coluna da célula selecionada
Row Número da linha da célula selecionada
ColCount Número de colunas (default = 5)
RowCount Número de linhas (default = 5)
FixedCols Número de colunas fixas
FixedRows Número de linhas fixas
DefaultColWidth Largura padrão das colunas
DefaultRowHeight Altura padrão das linhas
ColWidths Vetor que define a largura das colunas
RowHeight Vetor que define a altura das linhas
GridLineWidth Largura da linha da Grid
O StringGrid tem uma propriedade chamada Options, do tipo Set, que permite a
configuração de diversas opções, inclusive a permissão ou não de edição de células.
58
CEFET-UNED
Prof. Mário André
Valor Descrição
goFixedVerLine Exibe linhas verticais em colunas fixas
goFixedHorzLine Exibe linhas horizontais em colunas fixas
goVerLine Exibe linhas verticais
goHorzLine Exibe linhas horizontais
goDrawFocusSelected Exibe a célula selecionada em cor de seleção
goRowSizing Permite a mudança de tamanho da linha
goColSizing Permite a mudança de tamanho das colunas (arrastando as células das linhas fixas)
goRowMoving Permite a movimentação de linhas (arrastando as células das colunas fixas)
goColMoving Permite a movimentação de colunas (arrastando as células das linhas fixas)
goEditing Permite a edição do texto das células não fixas
goTabs Permite o uso da tecla TAB para a navegação entre as células
goRowSelect Seleciona uma linha inteira ao invés da célula corrente
goAlwaysShowEditor Sempre exibe o editor (somente válido se goEditing)
goThumbTracking Ao usar as scrollbars, o conteúdo é rolado em tempo real
Máscaras de Edição
É possível utilizarmos máscaras de edição para controlar a edição do texto de uma
célula. Para tal, precisamos associar código ao evento OnGetEditMask da seguinte forma:
2. No evento OnClick do botão inserir o texto do 3º Edit nas posições especificadas nos outros
dois edits
59
CEFET-UNED
Prof. Mário André
Objeto - PageControl
Paleta – Win32
Propriedades
ActivePage Permite determinar qual a guia foi selecionada pelo usuário.
Para criar novas páginas, clique com o botão direito no componente PageControl e
escolha New Page.
Paleta – Dialogs
60
CEFET-UNED
Prof. Mário André
Propriedades
DefaultExt Especifica a extensão a ser adicionada ao nome de um arquivo quando o usuário digita o
nome de um arquivo sem a sua extensão.
FileName Define o arquivo selecionado no componente.
Filter Permite definir as máscaras de filtro de arquivo a serem exibidas.
FilterIndex Define o filtro default a ser exibido na lista drop-down que define os tipos de arquivos
selecionáveis.
InitialDir Define o diretório default quando a caixa de diálogo é aberta.
Options Neste componente, options define uma série de valores booleanos.
Title Define o título da caixa de diálogo.
Paleta – Win32
Propriedades
Lines Define o texto exibido no componente.
WantReturns Define a tecla Enter como quebra de linha.
WantTabs Define a tecla Tab como tabulação ou mudança de foco. Caso falso pode-se utilizar
CTRL+TAB para produzir o efeito desejado.
WordWrap Define a quebra de linha automática de texto.
Métodos
Clear Permite limpar o conteúdo do componente.
LoadFromFile Permite ‘carregar’ um arquivo para a propriedade Lines.
SaveToFile Permite salvar o conteúdo da propriedade Lines em um arquivo.
61
CEFET-UNED
Prof. Mário André
Propriedades
Max Permite definir o valor máximo para a faixa de valores no componente.
Min Permite definir o valor mínimo para a faixa de valores no componente.
Orientation Define se o componente deverá ser vertical ou horizontal.
Position Define a posição corrente do controle no componente.
Step Define o incremento usado na variação do valor da propriedade position.
Paleta – Samples
Propriedades
Kind Permite definir aparências diferenciadas no componente.
Progress Define a posição corrente do controle no componente.
Paleta – Win32
Propriedades
CommonAVI Define o AVI a ser exibido.
Active Liga e desliga a exibição do AVI.
Repetitions Define um número inteiro correspondente ao número de repetições. Zero define
repetições indefinidas.
62
CEFET-UNED
Prof. Mário André
Propriedades
CalColors Define as cores do calendário.
Date Define a data selecionada no componente.
DateFormat Define o formato da apresentação da data.
DateMode Define o estilo da caixa de listagem.
Kind Define se o componente deve trabalhar com data ou hora.
MaxDate Define uma data máxima para uma faixa de valores.
MinDate Define uma data mínima para uma faixa de valores.
Paleta - Win32
Propriedades
Date Define a data selecionada no componente.
FirstDayOfWeek Define qual o primeiro dia da semana.
WeekNumbers Permite numerar as semanas.
Paleta – Win32
Propriedades
AutoHint Permite exibir o hint do componente automaticamente na barra de status. Se não houver
painéis, a barra deve ter a propriedade SimplePanel ligada.
SimplePanel Define que a barra de status será sem divisões.
SimpleText Define o texto a ser exibido pela barra de status.
Panels Permite a criação e edição de painéis na barra de status.
A propriedade SimplePanel deve estar desligada.
Pode-se também dar um duplo clique na barra de status.
Ao utilizar a propriedade AutoHint, pode-se definir o hint dos objetos com duas strings
separadas por pipe (‘|’).
63
CEFET-UNED
Prof. Mário André
A primeira string será utilizada como hint local, a segunda como hint na barra de status.
Praticando:
Data_Sys : TDate;
Data_Hora : TTime;
begin
{Recuperando a data e a hora do sistema}
Data_Hora := Now;
Data_Sys := Date;
Hora_Sys := Time;
64
CEFET-UNED
Prof. Mário André
StatusBar1.Panels[0].Text := DateToStr(Data_Hora);
StatusBar1.Panels[1].Text := TimeToStr(Data_Hora);
end;
Observação:
Se o intervalo for grande (p. ex. 60000 = 1 minuto) para aparecer logo a data e a hora
nos SubPaineis, ative o evento acima dentro do evento OnCreate do formulário ou, se possível,
compartilhe este evento com ele.
Dica:
Sempre que você usar um StatusBar, preencha o resto do formulário com uma caixa de
rolagem (ScrollBox da paleta Additional) e defina a sua prop. Align para alClient. Caso
contrário, se o usuário diminuir o formulário o bastante para que as barras de rolagem
apareção, estas se misturarão com o StatusBar.
Paleta – Win32
Propriedades
Flat Define um efeito visual com relevo através do mouse nos botões.
Images Permite definir um objeto do tipo ImageList.
HotImages Permite definir um objeto do tipo ImageList a ser usado no momento em que o mouse
passa (ou clica) sobre o componente.
ShowCaptions 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.
65
CEFET-UNED
Prof. Mário André
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.
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.
TRATAMENTO DE EXCEÇÕES
Quando criamos e executamos nossos programas, estamos sujeitos à situações de erros
em tempo de execução, a isto denominamos exceção.
As exceções devem ser tratadas de maneira a não permitir:
• Travar a aplicação
• Emitir mensagens ‘técnicas’ ao usuário leigo
• Deixar o SO instável
No Object Pascal, uma exceção é uma classe. A definição de exceções como classes
permite agrupar exceções correlatas. Esse agrupamento é feito através da própria hierarquia de
classes, de modo que podemos ter várias classes dependentes de uma única.
66
CEFET-UNED
Prof. Mário André
O COMANDO TRY-EXCEPT
try
<comandos a serem executados>
except
<bloco de exceção>
end; //finaliza o bloco
Os comandos a serem executados são tratados seqüencialmente na ordem em que foram criados,
caso não haja alguma exceção o bloco de exceção é ignorado. O programa prossegue
normalmente obedecendo aos eventos provocados pelo usuário.
Caso ocorra alguma exceção, o fluxo de controle é desviado para o bloco de exceção. É
importante lembrar que podemos inserir qualquer comando, inclusive fazer chamadas a
procedimentos e funções que por sua vez, podem chamar outros procedimentos e funções.
O bloco de exceção pode ser definido através de uma construção genérica, exemplo:
try
Abre(Arq);
while not Fim(Arq) do
processa(Arq);
except
Showmessage (‘Houve um erro inesperado.’);
end; //bloco try
No exemplo acima tratamos os erros com uma mensagem genérica dentro de um um bloco try-except.
67
CEFET-UNED
Prof. Mário André
A CONSTRUÇÃO ON-DO
try
Abre(Arq);
while not Fim(Arq) do
processa(Arq);
except
on EInOutError do //erro de entrada e saída
begin
Showmessage(‘Problemas...’);
Fecha(Arq);
end;
on EdivByZero do //erro de divisão de nº inteiro por zero
Showmessage(‘Erro ao dividir por zero’);
on EconvertError do //erro de conversão de tipos
Showmessage(‘Erro de conversão de tipos de dados’);
end; //bloco try
Podemos ainda definir utilizando a cláusula on-do com um handler genérico usando
else, da seguinte forma:
try
Processa;
except
on Exceção1 do Trata1;
on Exceção2 do Trata2;
else TrataOutras;
end;
Nome Descrição
EaccessViolation Ocorre quando se tenta acessar uma região de memória inválida (ex: tentar
atribuir valor a um ponteiro cujo conteúdo é nil).
EconvertError ocorre quando se tenta converter um string em um valor numérico (ex:
utilizar a função StrToInt em uma letra).
EdivByZero ocorre na divisão de um número inteiro por zero.
EinOutError ocorre numa operação incorreta de I/O (ex: abrir um arquivo que não
existe).
EintOverFlow ocorre quando o resultado de um cálculo excedeu a capacidade do
registrador alocado para ele (para variáveis inteiras).
EinvalidCast ocorre quando se tenta realizar uma operação inválida com o operador as
(ex: tentar usar um Sender com uma classe que não corresponde a seu tipo).
EinvalidOp ocorre quando se detecta uma operação incorreta de ponto flutuante.
EinvalidPointer ocorre quando se executa uma operação invalida com um ponteiro (ex:
tentar liberar um ponteiro duas vezes).
EoutOfMemory ocorre quando se tenta alocar memória mas já não existe mais espaço
suficiente.
EoverFlow ocorre quando o resultado de um cálculo excedeu a capacidade do
registrador alocado para ele (para variáveis de ponto flutuante).
ErangeError ocorre quando uma expressão excede os limites para a qual foi definida (ex:
tentar atribuir 11 ao índice de um vetor que pode ir no máximo até 10).
EstackOverflow ocorre quando o sistema não tem mais como alocar espaço de memória na
68
CEFET-UNED
Prof. Mário André
Stack.
Eunderflow ocorre quando o resultado de um cálculo é pequeno demais para ser
representado como ponto flutuante.
EzeroDivide ocorre quando se tenta dividir um valor de ponto flutuante por zero.
O COMANDO TRY-FINALLY
Há um outro comando cuja sintaxe começa com try. Este controle de finalização nos
permite lidar de forma estruturada com as situações em que alocamos algum tipo de recurso e,
haja o que houver, precisamos depois liberá-lo.
<aloca o recurso>
try
<usa o recurso>
finally
<libera o recurso com ou sem exceção>
end;
Em resumo: Os comandos do bloco finally sempre são executados, haja ou não alguma
exceção durante a execução dos comandos especificados após o try.
Exemplo:
1 2
Try abrir arquivo
abrir arquivo Try
algumas operações algumas operações
fechar arquivo finally
except fechar arquivo
...
Observamos que no quadro 1 se em “algumas operações” ocorrer uma exceção, o arquivo não
será fechado.
Logo, devemos utilizar a solução do quadro 2, pois nessa codificação, o arquivo será
fechado, independentemente da ocorrência da exceção.
Entretanto, se observarmos melhor, a solução do quadro 2 é que ela não trata a exceção.
Como regra temos que um bloco try pode ser seguido por uma instrução except ou
finally, mas não por ambas simultaneamente. A solução típica é utilizar os dois blocos try
aninhados. Dê ao interno uma instrução finally e dê ao externo uma instrução except, ou vice-
versa, conforme a situação exigir.
69
CEFET-UNED
Prof. Mário André
Outro Exemplo:
procedure TForm1.Button1Click(Sender: Tobject);
var i, aux:integer;
begin
aux := 500;
try {inicio do bloco try-finally.
Screen controla uma serie de recursos do sistema operacional
neste exemplo, muda-se a aparencia do cursor para ampulheta}
Screen.Cursor := crHourGlass;
try//inicio do bloco try-except
for i:=0 to aux do
begin
Edit1.Text := IntToStr(i);
Application.ProcessMessages;
{O método ProcessMessages é necessário para forçar que as
mensagens do windows sejam processadas, desenhando o numero
no Edit. Sem ele, apenas o valor final seria visto.}
end;
except
Showmessage('Ocorreu um erro.');
end;//fim do bloco try-except
finally
Screen.Cursor := crDefault;
end;//fim do bloco try-finally
end; //fim da procedure
CLASSE EXCEPTION
A classe Exception também possui o objeto E, que recebe o valor do objeto exceção
passado pela instrução raise
Begin
Try
Resultado := A div B;
Except
On EDivByZero do
70
CEFET-UNED
Prof. Mário André
Begin
Resulatdo := 0;
MessageDlg(‘Divisão por zero corrigida’, mtError, [mbok], 0);
End;
On E: Exception do
Begin
Resultado := 0;
MessageDlg(E.Message, mtError, [mbok], 0);
End;
End;
End;
Paleta – Additional
71
CEFET-UNED
Prof. Mário André
Podemos utilizar o comando Abort para gerar exceções silenciosas, ou seja, sem
nenhuma mensagem.
try
Form1.Caption :=
FloatToStr(StrToFloat(Edit1.Text) / StrToFloat(Edit2.Text));
except
on EZeroDivide do
begin
Beep;
ShowMessage('Divisão por zero');
end;
on EInvalidOp do ShowMessage('Operação inválida');
else
Abort;
end;
A Paleta Dialog
OpenDialog e SaveDialog
Os Componentes OpenDialog e SaveDialog exibe uma caixa de diálogo padrão do
Windows para selecionar, abrir e salvar arquivos. A caixa de diálogo não aparece até que seja
executado o método Execute. Quando o usuário clica para Abrir ou salvar o arquivo, a caixa de
diálogo fecha e são armazenados em uma lista, nas propriedades do componente, os nomes e
caminhos de arquivos selecionados.
Propriedade Descrição
DefaultExt Especifica uma extensão, padrão, de arquivo que é juntada automaticamente ao nome de
arquivo digitado na área do nome do arquivo na caixa de dialogo.
FileEditStyle Determina o estilo da caixa de diálogo de seleção do arquivo. (Obsoleto.)
FileEditStyle é mantido para compatibilidade com versões mais velhas de Delphi.
FileName Devolve o nome e o caminho do diretório completo do arquivo mais recentemente selecionado.
Files Vetor que contem o nome e o caminho completo de todos os arquivos selecionados.
Filter Fornece uma lista drop-down para preencher com extensões de arquivos que serviram de filtro
nas seleções do arquivos. Ex: OpenDialog1.Filter := 'Arquivos de Texto (*.txt)|*.TXT'
FilterIndex Determina qual o tipo de arquivo será o padrão na lista da propriedade Filter anterior.
HistoryList Mantém uma lista de arquivos previamente selecionados. (Obsoleto.)
HistoryList é mantido para compatibilidade com versões mais velhas de Delphi.
InitialDir Determina o diretório atual quando a caixa de diálogo abre. Se esta opção estiver vazia o
Opendialog sempre vai abrir no diretório do programa ou no último diretório utilizado.
Options Define características da caixa de diálogo. Na tabela abaixo estão discriminadas todas as
opções.
Title Texto que fica na barra de título da caixa de diálogo.
72
CEFET-UNED
Prof. Mário André
Opções
Valor Significado
ofAllowMultiSelect Permite que o usuário selecione mais de um arquivo na caixa de diálogo.
ofCreatePrompt Gera uma mensagem de advertência se o usuário tentar selecionar um arquivo
inexistente e pergunta se quer criar um arquivo novo com o nome especificado.
ofExtensionDifferent Esta tag muda em tempo de execução sempre que o nome do arquivo selecionado
tem uma extensão que difere de DefaultExt.
ofFileMustExist Gera uma mensagem de erro se o usuário tenta selecionar um arquivo inexistente.
ofHideReadOnly Remove o checkbox de confirmação para somente leitura
ofNoChangeDir Depois que o usuário clica OK, reajusta o diretório corrente para o que estava antes
da caixa de diálogo ser aberta.
ofNoDereferenceLinks Opção para reconhecer um arquivo de atalho de Windows, como um atalho ou
como um arquivo qualquer.
ofNoLongNames Mostra apenas arquivos com 8.3 caracteres.
ofNoNetworkButton Remove o botão de Rede da caixa de diálogo.
ofNoReadOnlyReturn Gera uma mensagem de erro se o usuário tenta selecionar um arquivo somente de
leitura.
ofNoTestFileCreate Desabilita o teste de proteção de arquivo em rede e disco inacessíveis. Só se aplica
quando o usuário tenta salvar um arquivo em um diretório de rede compartilhado.
ofNoValidate Permite seleção de nomes de arquivo com caracteres inválidos.
ofOldStyleDialog Cria o estilo do Windows 3.1 para caixa de diálogo.
ofOverWritePrompt Gera uma mensagem de advertência se o usuário tentar selecionar um nome de
arquivo que já está em uso e pergunta se quer sobrescrever o arquivo existente.
(Use com TsaveDialog e TSavePictureDialog.)
ofPathMustExist Gera uma mensagem de erro se o usuário tentar selecionar um nome de rquivo que
inexistente.
ofReadOnly Seleciona como padrão o ComboBox habilitado pela opção ofHideReadOnly.
ofShareAware Ignora erros compartilhados e permite selecionar arquivos até mesmo quando
acontecem violações de compartilhando.
ofShowHelp Exibições um botão de Ajuda na caixa de diálogo.
Principais Eventos
Evento Descrição
OnClose Ocorre quando a caixa de diálogo é encerrada.
OnShow Ocorre quando a caixa de diálogo é iniciada.
OnFolderChange Ocorre quando um diretório é aberto ou é fechado na caixa de diálogo.
OnSelectionChange Ocorre quando nomes de arquivo exibidos no diálogo é mudado, isto é, o evento de
OnSelectionChange acontece quando o usuário faz algo que mude a lista exibida no diálogo.
Isto pode incluir: selecionando um filtro novo, selecionando um diretório novo, ou criando
uma pasta nova.
OnTypeChange Ocorre acontece quando o usuário seleciona um filtro novo de arquivo no ComboBox de Tipo
na caixa de diálogo.
73
CEFET-UNED
Prof. Mário André
Principais Métodos
Métodos Descrição
Execute Abre a caixa de diálogo do OpenDialog e devolve true quando o usuário seleciona um arquivo dar um
Clique para abrir o arquivo. Se o usuário clicar Cancele retorna False.
ColorDialog
Principais Propriedades
Propriedade Descrição
Color Retorna a cor selecionada. A cor padrão é clBlack. Quando o usuário seleciona uma cor na
caixa de diálogo e clica o OK, a cor selecionada se torna o valor da propriedade de Cor.
CustomColors Determina quais cores personalizada iniciam na caixa de diálogo. Cada cor personalizada é
representada com uma string na forma ColorX=HexValue. Por exemplo, a seguinte string
determina a primeira cor personalizada: ColorA=808022
Pode personalizar até 16 cores (ColorA até ColorP).
Options Define características da caixa de diálogo. Na tabela abaixo estão discriminadas todas as
opções.
Opções
Valor Significado
cdFullOpen Exibe as opções de personalizar cores quando a caixa de diálogo e aberta.
cdPreventFullOpen Desabilita o botão que Define a personalização de cores na caixa de diálogo, de forma
que o usuário não pode definir cores novas.
cdShowHelp Adiciona um botão de Ajuda na caixa de diálogo.
cdSolidColor Direciona o Windows a usar a cor sólida mais próxima da cor escolhido.
cdAnyColor Permite que o usuário selecione cores não-sólidas.
Principais Eventos
Evento Descrição
OnClose Ocorre quando a caixa de diálogo é encerrada.
OnShow Ocorre quando a caixa de diálogo é iniciada.
74
CEFET-UNED
Prof. Mário André
Principais Métodos
Métodos Descrição
Execute Abre a caixa de diálogo do OpenDialog e devolve true quando o usuário seleciona um arquivo dar
um Clique para abrir o arquivo. Se o usuário clicar Cancele retorna False.
PrintDialog
Principais Propriedades
Propriedade Descrição
Collate Indica se o Checkbox Collate na caixa de dialogo está selecionada.
Copies Indica as cópias de número selecionadas na caixa diálogo de Impressão.
FromPage Indica a página na qual o trabalho de impressão vai começar.
MaxPage Determina o maior número de páginas que usuário pode imprimir. Se o usuário tenta entrar
com um número maior que MaxPage, uma mensagem de erro aparece.
OBS: O usuário só pode especificar o número de página se a opção poPageNums estiver em
True.
MinPage Determina o menor número de páginas que usuário pode imprimir. Inverso do anterior.
Options Define características da caixa de diálogo. Na tabela abaixo estão discriminadas todas as
opções.
PrintRange Define qual o intervalo de impressão ficará selecionado como padrão na caixa de diálogo.
Podem assumir três valores: prAllPages ( O RadioButton “Todos” fica selecionado),
prSelection (O RadioButton “Seleção” fica selecionado), prPageNums (O RadioButton
“Páginas” fica selecionado).
PrintToFile Seleciona o CheckBox ‘impressão para arquivo’ na caixa de diálogo como padrão.
ToPage Indica a página na qual o trabalho de impressão termina.
Opções
Valor Significado
PoDisablePrintToFile Desabilita (fica cinzento) o CheckBox “Imp. em arquivo”. (Aplicável somente a opção
poPrintToFile for verdadeira).
PoHelp Exibe um botão de Ajuda na caixa de diálogo. Pode não aparecer em algumas versões do
Windows 95.
PoPageNums Habilita o RadioButtom que permite que usuário especifique um intervalo de páginas.
PoPrintToFile Exibe o CheckBox “Imp em arquivo” na caixa no diálogo.
PoSelection Habilita o RadioButtom que permite que usuário especifique imprimir uma seleção.
PoWarning Gera uma mensagem de advertência se o usuário tentar enviar um trabalho a uma
impressora desinstalada.
75
CEFET-UNED
Prof. Mário André
Principais Eventos
Evento Descrição
OnClose Ocorre quando a caixa de diálogo é encerrada.
OnShow Ocorre quando a caixa de diálogo é iniciada.
Principais Métodos
Métodos Descrição
Execute Abre a caixa de diálogo do OpenDialog e devolve true quando o usuário seleciona um arquivo dar um
Clique para abrir o arquivo. Se o usuário clicar Cancele retorna False.
Paleta – System
Propriedades
Enabled Permite ‘ligar’ o timer, ou seja, ele entra em um loop executando o evento OnTimer até
que seja atribuído falso ou terminada a aplicação.
Interval Define em milisegundos o intevalo de repetição do evento OnTimer.
Propriedades
76
CEFET-UNED
Prof. Mário André
FileEdit Define uma caixa de edição (TEdit) que exibirá o arquivo atualmente selecionado.
FileName Define o nome do arquivo selecionado. Válido em tempo de execução.
Mask Define máscaras de filtro (separadas por ponto e vírgula) para a exibição dos arquivos.
Propriedades
DirLabel Permite exibir o diretório corrente com a propriedade Caption de um componente do tipo
TLabel.
FileList Permite a conexão com um componente TFileListBox.
Propriedades
DirList Permite a conexão com um componente TDirectoryListBox.
Propriedades
FileList Permite a conexão com um componente TFileListBox.
Filter Permite definir as máscaras de filtro de arquivo a serem exibidas.
77
CEFET-UNED
Prof. Mário André
Gauge
Paleta: Samples
Propriedades Significado
MinValue Valor mínimo
MaxValue Valor máximo
Progress Valor atual
BackColor Cor da área não preenchida
ForeColor Cor da área preenchida
Kind Tipo da figura (barra horizontal ou vertical, círculo, etc)
ShowText Define se o valor em percentagem será exibido
TrackBar
Paleta: Win32
Propriedades Significado
Orientation Orientação vertical ou horizontal
Min Valor mínimo
Max Valor máximo
Position Posição corrente
TickStyle Estilo de exibição das marcações
TickMarks Aparência do indicador
78
CEFET-UNED
Prof. Mário André
PageSize Determina o incremento que deve ser dado quando as teclas PgUp e PGDn forem pressionadas
LineSize Determina o incremento que deve ser dado quando as setas forem pressionadas
SelStart Posição de início do preenchimento
SelEnd Posição de término do preenchimento
CheckListBox
Paleta: Additional
Propriedades Significado
Checked[n] Retorna true se o item n estiver selecionado
State[n] Retorna o estado do item n : [cvUnchecked, cbChecked, cbGrayed]
AllowGrayed Permite ou não a existência de itens com estado indeterminado. Default = False
Eventos Descrição
OnClickChecked Quando um item é marcado ou desmarcado
ListView (Win32)
Paleta: Additional
Propriedades Significado
ViewStyle Determina se os itens devem ser apresentados em colunas com cabeçalhos e sub-itens,
verticalmente ou horizontalmente, com ícones grandes ou pequenos
LargeImages Lista de Imagens (TImagesList) contendo a bitmap’s a serem exibidos e somente é usada
quando a propriedade ViewStyle é vsIcon
SmallImages Lista de Imagens (TImagesList) contendo a bitmap’s a serem exibidos e somente é usada
quando a propriedade ViewStyle é vsSmallIcon
Items Items a serem exibidos
79
CEFET-UNED
Prof. Mário André
ImageList
Paleta: Win32
Ele é extremamente útil, mas quase todo a sua operação depende de outros
componentes. Por exemplo, as diversas imagens que aparecem em componentes de visualização
em lista ou em árvore ou numa ToolBar estão em listas de imagens.
80
CEFET-UNED
Prof. Mário André
Se você definir a propriedade bkColor de uma lista com uma cor específica, você
desativa o recurso de desenho transparente.
Como exemplo do TreeView, visualização de dados em árvores, temos o Explorer que
exibe a estrutura hierárquica dos diretórios de um disco, com um pequeno ícone à esquerda para
diferenciar discos rígidos de diretórios, estes de drive e CD e assim por diante.
O componente de visualização em árvore pode representar qualquer tipo de dados que
possua um arranjo hierárquico, como um organograma de uma empresa.
Propriedades Significado
81
CEFET-UNED
Prof. Mário André
Images Lista de Imagens que contém os bitmaps que representam os próprios ícones, como as
imagens dos discos no Explorer
StateImages Lista de Imagens especiais que indicam que um item encontra-se num estado específico.
Estado este que o programador define. Geralmente através de um ImageList e Caixa de
Edição StateIndex do TreeView Items Editor.
Items Permite a edição dos nós da árvore. Possui um conjunto de métodos como Add, AddChild,
AddFirst que também permite a inclusão de nós na árvore. Cada nó é considerado um
objeto do tipo TTreeNode.
As principais propriedades dos nós são:
ImageIndex – informa qual imagem da lista de imagens representa o nó.
SelectIndex – qual imagem da lista será exibida se o nó for selecionado.
StateIndex – da mesma forma, é um índice da StateImages. Se for <> -1, a
imagem será exibida à esquerda da imagem normal.
Eventos Significado
OnEditing Se ReadOnly = False, ocorre quando o usuário edita o ramo da árvore
OnEdited Ocorre quando o usuário termina a edição
Animate
Paleta: Win32
Propriedades Significado
Active Indica se a animação esta sendo exibida ou não
AutoSize Ajusta automaticamente o tamanho do componente ao tamanho da imagem
Center Centraliza a animação
FileName Nome do arquivo AVi
FrameCount Número de Frames da animação
Repetitions Número de repetições quando a animação for executada.
O valor zero indica repetições indefinidas
DateTimePicket
82
CEFET-UNED
Prof. Mário André
Paleta: Win32
Propriedades Significado
Time Hora selecionada
Date Data Selecionada
DateMode A forma como a data poderá ser selecionada [dmComboBox, dmUpDown]
DateFormat Formato da Data [dfShort, dfLong]
Kind Seleciona o componente para Data ou Hora [dtkDate, dtkTime]
ShowCheckbox Exibe um CheckBox
Check Indica se o CheckBox esta selecionado
83
CEFET-UNED
Prof. Mário André
Características
Object Pascal é uma linguagem orientada a objetos não pura, mas híbrida, por possuir
características de programação não só visual mas também escrita. Para os programadores que já
conhecem técnicas de estruturas de programação como o C, Basic, Pascal entre outras
linguagens, a Object Pascal providência uma migração de forma natural oferecendo um produto
de maior complexidade.
Ela força a você executar passos lógicos, isto torna mais fácil o desenvolvimento no
ambiente Windows de aplicações livres ou que utilizam banco de dados cliente/servidor e possui
todo o poder de um código totalmente compilável. Além disso possibilita a criação e a
reutilização (vantagem de re-uso tão sonhado com a OO) de objetos e bibliotecas dinâmicas
(DLL - Dymanic Link Libraries).
Object Pascal contém todo o conceito da OO, incluindo encapsulamento, herança e
polimorfismo. Algumas extensões foram incluídas para facilitar o uso de conceitos como
propriedades particulares e públicas, e tipos de informações em modo run-time, manuseamento
de exceções, e referências de classes.
EXPRESSÕES LÓGICAS
COMANDO IF
O comando condicional if pode ser composto de uma ou mais condições de processamento, por
exemplo:
• if (A > B) then
B := B + 1; // ou INC(B);
• if (A > B) then
B := B + 1
else
A := A - 1; // ou DEC(A);
84
CEFET-UNED
Prof. Mário André
• if (A > B) then
begin
B := B + 1;
X := B + A;
end
else
begin
A := A - 1;
Y := Y + B;
end;
COMANDO CASE
case Key of
‘A’..‘z’: Label1.Caption := ‘Letras’;
‘0’..‘9’: Label1.Caption := ‘Números’;
‘+’, ‘-’, ‘*’, ‘/’: Label1.Caption := ‘Operador’
else
Label1.Caption := ‘Caracter especial’;
end; //fim do case
COMANDO REPEAT
repeat
X := X + 1;
INC(Z,3); //equivale a Z := Z + 3;
DEC(AUX,2);
until X >= 200;
COMANDO WHILE
85
CEFET-UNED
Prof. Mário André
end;
COMANDO FOR
COMANDO BREAK
COMANDO WITH
//Equivalente à:
begin with Form1 do
Form1.Caption := ‘Senac’; begin
Form1.Color := ClBlue; Caption := ‘Senac’;
Form1.Top := 95; Color := ClBlue;
end; Top := 95;
end;
86
CEFET-UNED
Prof. Mário André
Apêndice B - DICAS
CRIAR UM HOTLINK
Podemos criar um link para a Internet dentro do Delphi através da função ShellExecute.
Supondo que a propriedade Caption de um label seja um endereço web válido
(http://www.fulanodetal.com.br) podemos inserir em seu evento OnClick o seguinte código:
ENVIAR UM MAIL
Caso queira colocar um subject padrão na construção do e-mail utilize a palavra subject
da seguinte forma:
ShellExecute(Handle, ‘open’, ‘mailto:fulano@provedor.com.br
?subject=Pergunta’, nil, ‘’,SW_SHOWNORMAL);
87
CEFET-UNED
Prof. Mário André
DATAS
var
DataIni, DataFim : TDateTime;
Dif : Single;
begin
Dif := DataFim – DataIni; //diferença em dias entre as datas
DataIni := DataIni+10; //acrescenta + 10 dias na data
end;
Para saber a hora de determinada data, multiplica-se a parte fracionária por 24:
Frac(DataIni) * 24;
Podemos ainda comparar as datas com os operadores ‘<’ e ‘>’. Caso não seja necessário
a comparação com a hora, basta converter a data para um inteiro e efetuar a comparação:
O Delphi fornece diferentes métodos para sair de uma aplicação. O ideal é utilizar o
método
Close. Porém, há casos em que Close não atenderia à necessidade do desenvolvedor,
nestes casos pode-se chamar Halt ou Application.Terminate.
Halt é um procedimento do Pascal e provoca o término da aplicação, não se
importando com arquivos abertos. Já o método Terminate do objeto Application obriga o
fechamento de todos os arquivos abertos e a destruição de todas a forms criadas.
REDUZINDO TESTES IF
A expressão:
if A = 10 then
B := True
else
88
CEFET-UNED
Prof. Mário André
B := False;
B := A = 10;
A object inspector permite Hint com apenas uma linha. Para gerar Hints com mais
linhas pode-se em tempo de execução configurar a propriedade Hint da seguinte forma:
Pode-se também em tempo de projeto clicar na form com o botão direito e escolher a
opção ‘View as Text’, procurar o objeto e a hint desejada e alterá-la:
Hint := ‘Primeira linha do hint’#13‘segunda linha do hint’;
Para voltar ao Form clique com o botão direito e escolha ‘View as Form’.
ÍCONES
O Delphi possui um conjunto de ícones e imagens em uma pasta padrão:
C:\Arquivos de programas\Arquivos comuns\Borland Shared\Images
89
CEFET-UNED
Prof. Mário André
EXECUTAR UM PROGRAMA
WinExec(‘calc.exe’, SW_SHOWNORMAL);
LINKS
Nacionais
http://www.clubedelphi.com.br/
http://www.delphibrasil.eti.br/
http://clubedodelphi.com.br
http://www.inprise.com.br/
PlaySound(pChar('SYSTEMSTART'),0,SND_ASYNC);
Outros sons:
SYSTEMSTART
SYSTEMEXIT
SYSTEMHAND
SYSTEMASTERISK
SYSTEMQUESTION
SYSTEMEXCLAMATION
SYSTEMWELCOME
SYSTEMDEFAULT
Para que seu aplicativo não seja executado várias vezes, utilize o seguinte código no
arquivo de projeto (DPR). A função FindWindow procura se há outra tela da classe passada
como parâmetro, se houver, traz para frente e não cria a aplicação novamente.
program Project1;
uses
Forms,Windows,
90
CEFET-UNED
Prof. Mário André
{$R *.RES}
begin
if FindWindow('TForm1','Form1') <> 0 then
SetForegroundWindow(FindWindow('TForm1','Form1'))
else
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
end.
91
CEFET-UNED
Prof. Mário André
92
CEFET-UNED
Prof. Mário André
Edileumar,Jorgina : TSerHumano;
Cachorro : TAnimais;
begin
Edileumar.Tamanho := 1.70;
Edileumar.Forma := ‘Magro’;
Edileumar.Sexo := ‘M’;
Jorgina.Tamanho := 1.60;
Jorgina.Sexo := ‘F’;
Jorgina.CorCabelo := ‘Castanhos’;
Edileumar.Falar;
Jorgina.Caminhar;
Cachorro.Tamanho := 0.60;
Cachorro.Cauda := True;
Cachorro.Alimentar;
end;
O que acontece no Delphi é que existe uma gigantesca estrutura de classes onde TObject é a
classe base das demais classes. Apesar de não ser necessário manipular este recurso diretamente,
é importante saber seu funcionamento básico.
Você verá as declarações de classe dentro do Delphi como abaixo, um formulário com dois
componentes (objetos) button e um componente edit será declarado assim:
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
private
{ Private declarations }
public
{ Public declarations }
end;
Essa introdução vem apenas ilustrar os principais conceitos: Propriedades, eventos e métodos,
sendo amplamente utilizados durante o curso.
93
CEFET-UNED
Prof. Mário André
REFERÊNCIA BIBLIOGRÁFICA
94