CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE SERGIPE COORDENADORIA DE INFORMÁTICA

PROGRAMAÇÃO INICIAL - DELPHI Prof. Mário André
SERGIPE – BRASIL

CEFET-UNED Prof. Mário André

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...............................................................................................................................20 COMPONENTES.........................................................................................................................................................30 Propriedades..............................................................................................................................................................31 Métodos.....................................................................................................................................................................32 Métodos.....................................................................................................................................................................33 Propriedades..............................................................................................................................................................33 Propriedades..............................................................................................................................................................34 Crie um formulário conforme lay-out abaixo...........................................................................................................35 A opção Apaga Tudo só poderá ocorrer após confirmação do usuário....................................................................35 Propriedades..............................................................................................................................................................38 Métodos.....................................................................................................................................................................38 Propriedades..............................................................................................................................................................39 Propriedades..............................................................................................................................................................40 Métodos.....................................................................................................................................................................40 Propriedades..............................................................................................................................................................41 Métodos.....................................................................................................................................................................41 Propriedades..............................................................................................................................................................42 Métodos.....................................................................................................................................................................42 Propriedades..............................................................................................................................................................43 CHAMADA DE FORMS.............................................................................................................................................57 COMPONENTES (VCL).............................................................................................................................................58 TRATAMENTO DE EXCEÇÕES...............................................................................................................................73 UM POUCO MAIS SOBRE COMPONENTES (VCL)..............................................................................................79 Opções...................................................................................................................................................................80 Valor.....................................................................................................................................................................80 Significado............................................................................................................................................................80 Principais Eventos.................................................................................................................................................80 Evento...................................................................................................................................................................80 Descrição...............................................................................................................................................................80 Principais Métodos................................................................................................................................................80 Métodos.................................................................................................................................................................80 Descrição...............................................................................................................................................................80 Principais Propriedades.........................................................................................................................................81 Propriedade...........................................................................................................................................................81 Descrição...............................................................................................................................................................81 Opções...................................................................................................................................................................81 Valor.....................................................................................................................................................................81 Significado............................................................................................................................................................81 Principais Eventos.................................................................................................................................................81 Evento...................................................................................................................................................................81 Descrição...............................................................................................................................................................81 Principais Métodos................................................................................................................................................81 Métodos.................................................................................................................................................................81 Descrição...............................................................................................................................................................81 Principais Propriedades.........................................................................................................................................82 Propriedade...........................................................................................................................................................82 Descrição...............................................................................................................................................................82 Opções...................................................................................................................................................................82

2

CEFET-UNED Prof. Mário André

Valor.....................................................................................................................................................................82 Significado............................................................................................................................................................82 Principais Eventos.................................................................................................................................................82 Evento...................................................................................................................................................................82 Descrição...............................................................................................................................................................82 Principais Métodos................................................................................................................................................83 Métodos.................................................................................................................................................................83 Descrição...............................................................................................................................................................83 UM POUCO MAIS SOBRE COMPONENTES (VCL)..............................................................................................83 Images.......................................................................................................................................................................89 StateImages...............................................................................................................................................................89 Items..........................................................................................................................................................................89 ShowButtons.............................................................................................................................................................89 ShowLines.................................................................................................................................................................89 ShowRoot..................................................................................................................................................................89 ReadOnly..................................................................................................................................................................89 Eventos......................................................................................................................................................................89 OnEditing..................................................................................................................................................................89 OnEdited...................................................................................................................................................................89 Apêndice A - A Linguagem Object Pascal..................................................................................................................91 Apêndice B - DICAS...................................................................................................................................................94 Apêndice C - INTRODUÇÃO À ORIENTAÇÃO A OBJETOS.................................................................................99 REFERÊNCIA BIBLIOGRÁFICA ...........................................................................................................................101

3

uma aplicação passará a maior parte de seu ciclo de vida na fase de manutenção. A mudança de paradigma é uma oportunidade de encontrar novas interpretações para antigas questões. Devemos também destacar a ergonomia. Tipicamente. confiabilidade e inteligibilidade. Programação Procedimental A maior parte dos programadores está acostumada a escrever código que é executado de forma sequencial. vamos. e tem clientes ou chefes esperando que seu sw: Saia funcionando da caixa. o ciclo de vida e a engenharia de sw porque apenas talento artístico indisciplinado (intuição) não resolve. Seja livre de erros e Seja barato. Tais programas possuem inicio. é importante termos um conjunto de objetivos que transceda a mudança. Então. Se você pode está pensando: "Ora. Seja feito a tempo. dividir isso em algo mais tratável. meio e fim bem definidos. comentando sobre problemas como a crise de sw. se você pretende desenvolver sw por dinheiro ou para manter-se num emprego. estes programas possuem telas de entradas de dados de algum tipo de processamento com estes 4 . eficiência. vamos ter que começar por aqui mesmo. Algum grupo menor ou mais preciso de objetivos que sejam mais alcançáveis e fáceis de lembrar. Introdução Antes de começarmos seria interessante ressaltar que aprender a ser um bom desenvolvedor envolve mais do que aprender a sintaxe de uma linguagem de programação em particular. deveria também pensar que a questão aqui é que. Entre outros.CEFET-UNED Prof. bem como. Precisamos portanto. para rever soluções tidas como definitivas. isto porque existem muitos outros aspectos do campo do sw. Devemos nos lembrar que o objetivo mais direto do desenvolvimento de sw é fazer o produto final satisfazer a especificação dos requisitos. Conforme sabemos. que têm pouca conexão com o ato em si de escrever código. os quatro objetivos geralmente excluídos da engenharia de software são a capacidade de modificação. Então. Lembre-se de que se tem algo que é sempre permanente é a mudança. eu só quero aprender Delphi". 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".

Begin Write ('Digite um nome: '). Consequentemente. O custo da CPU era nitidamente superior ao de qualquer periférico e até mesmo ao custo do trabalho de quem lidava com estes computadores. Estes sistemas eram compostos por uma CPU responsável pelo processamento (mestre) e uma série de periféricos (escravos). responsáveis pela entrada e saída de dados. Mário André dados de forma sequencial. Readln (Nome). Um exemplo não baseado em eventos Program Verif_Nome. em relação à entrada e saída de dados. que naturalmente requisitavam mais recursos de CPU do que de entrada e saída de dados. A popularização dos computadores modificou este quadro: as aplicações comerciais típicas dos dias de hoje exigem uma atenção maior dos programadores (e dos sistemas computacionais) para a entrada e saída de dados. If Nome = 'Ze Silva' then 5 . A hierarquia rígida imposta pela estrutura de menus e a sequencialidade com que os formulários são preenchidos pelo usuário impõem limitações sérias na qualidade da interação do usuário com o computador na programação procedimental. Esta forma de se programar é dita procedimental. A figura 1 ilustra a sequencialidade encontrada em programas que seguem tal paradigma. Início Entrada de Dados Processamento Fim Esta forma de programar é uma conseqüência direta dos sistemas computacionais disponíveis no passado. todos os sistemas davam prioridade máxima ao processamento. Os programas desenvolvidos visavam normalmente a solução de problemas de natureza científica.CEFET-UNED Prof. Var Nome : String.

já que normalmente um programa ignora eventos nos quais não tem interesse). Como a explanação acima demonstra.CEFET-UNED Prof. Agora. entretanto. Depois que o nome é informado. cada evento é manipulado somente após o anterior ter sido completado.a não ser que ocorra um evento. 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. Não há meios de saber se o usuário digitará uma frase. A aplicação intercepta a mensagem e chama o método associado ao evento correspondente. Independentemente da ação que o usuário executa. uma instrução if define o que o programa deve fazer em seguida e o programa termina. End. não faz nada . É enviada uma mensagem descrevendo esse evento para a janela que está sob o cursor do mouse no momento. Mário André writeln ('Nome bem original cara') else writeln ('O que poderia dizer'). No exemplo anterior. Primeiramente ele pergunta o nome do usuário.digitar um nome. na barra de atalho. Contudo. Note que o fluxo do programa é bem definido. A lógica deste programa linear é direta e sequencial. ele não tem um início ou final lógico. pense em aplicativo processador de textos baseado no Windows. ocorre um evento. O modelo baseado em eventos não pode utilizar controle de fluxo do início até o fim. quando o usuário dá um clique em um dos botões do mouse. o aplicativo precisa ser consistente o suficiente para responder ao evento. 6 . escolherá uma opção no menu ou dará um clique em um botão. você sabia exatamente que ações o usuário executaria . Um programa gasta a maior parte de seu tempo aguardando eventos e tem código que responde a diversos deles (nem todos. você precisa pensar sobre seu modelo de programação de modo diferente. o programa retorna a um estado de espera. Ele simplesmente precisa saber como responde aos diferentes tipos de eventos. É isso mesmo. outros eventos para essa aplicação devem aguardar em uma fila reservada de multitarefa gerenciada através de um manipulador de eventos. você pode esperar que o usuário introduza seu nome. Quando o metodo termina. pois o aplicativo deve manipular todas as ações ou eventos possíveis Programação Orientada a Eventos Um aplicativo baseado em eventos. Quando uma aplicação está executando código de resposta ao evento (ou seja. não está aguardando um evento). Por exemplo. e não precisa se preocupar com nenhuma outra entrada ou ação que ocorra no ambiente. A idéia básica por trás da programação dirigida a eventos é que alguns eventos determinam o fluxo do aplicativo. eventos são serializados. na verdade.

o paradigma da orientação a objetos consegui esconder do programador a maior parte da complexidade da programação nestes ambientes. 7 . uma aplicação constitui-se de um loop para tratamento de eventos e de procedimentos associados a eventos específicos. A cada ação do usuário corresponde um ou mais eventos “enviados” para a aplicação. introduziram uma complexidade enorme do ponto de vista de programação. setar o foco para um determinado controle. Se acrescentarmos a isto o fato de que 80% do código escrito para uma aplicação é consumido na elaboraçào de interface. o seu procedimento equivalente é executado. permite que o usuário decida a seqüência mais apropriada de interação. As interfaces gráficas introduziram assim uma forma completamente nova de se programar. etc. pressionar uma tecla. Nesta abordagem. Mário André Ações Sistema Eventos Loop de Tratamento dos Eventos O avanço da tecnologia barateou o custo dos sistemas computacionais e introduziu recursos gráficos para a interação com os usuários (GUI. gerados pelo sistema operacional ou ainda gerados na própria aplicação. 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.CEFET-UNED Prof. Felizmente. Eventos acontecem em decorrência da interação do usuário com o sistema. fica difícil de massificar a programação em ambientes de interface gráfica. o código em linguagem C no windows para escreve na tela “Alô mundo” possui cerca de 100 linhas. Para se ter uma idéia. Estes eventos devem ser identificados e tratados de maneira adequada pelo programa. Esta abordagem muda completamente a forma de se construir programas. Toda vez que ocorre um determinado evento. Uma aplicação que se utiliza de interface gráfica.Graphic User Interface). selecionar um ítem de menu. Exemplos de eventos: mover o mouse.

e não simplesmente em seu título. 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. maximizar. As características iniciais do form como tamanho. 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. botões (minimizar. fechar. 8 . Vamos abordar cada uma separadamente: O FORM DESIGN Form é o termo utilizado para representar as janelas do Windows que compõem uma aplicação.CEFET-UNED Prof. Os forms servem como base para o posicionamento dos componentes. controle) e ícone podem (e serão) ser modificadas através de recursos que veremos adiante.

há uma janela onde estão situados os menus da aplicação. A PALETA DE COMPONENTES Aplicativos orientados a objetos trabalham com elementos que denominamos componentes. utilizamos a janela object inspector para realizar esta tarefa. Mário André A BARRA DE MENU PRINCIPAL Como todo programa padrão Windows. No Delphi. OBJECT INSPECTOR Uma das ‘partes’ mais importantes da orientação a objeto é a possibilidade de definir características personalizadas aos componentes.CEFET-UNED Prof. 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. os componentes encontram-se em uma paleta com várias guias. a barra que contem os menus também agrupa outras partes. No Delphi. Objeto atual selecionado Propriedade Valor atual desta propriedade 9 .

Caption. 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. 1 Componente ComboBox. não simplesmente definidas pelo usuário. As propriedades são definidas através de tipos. Events – Define quais os eventos serão manipulados pelo desenvolvedor. Duas guias (Properties e Events) separam as listas de propriedades e eventos. Duas guias: Properties – Define as propriedades e valores do Objeto selecionado. Height e Width entre outros. Deve-se clicar no sinal de + para expandir e no sinal de – para ocultar. Exemplo: Cursor. BorderStyle e WindowState entre outros. Algumas propriedades trazem opções diferenciadas para alteração. BorderIcons – Toda propriedade que possui o sinal de + tem a característica de mostrar subpropriedades. 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. Mário André Há uma caixa de listagem1 que permite a escolha de qual componente deverá ser selecionado. Tipos Enumerados São tipos definidos por uma quantidade limitada de opções que devem ser previamente selecionadas. Icon – Exibe um botão de reticências (. Exemplo: Name.. Color – Permite a inserção de um dos valores pré-definidos na caixa de listagem.CEFET-UNED Prof..) que dará origem a uma caixa de diálogo. Por exemplo: Caption – Permite a inserção de uma string de caracteres. 10 .

Podemos citar as ocorrências dos principais eventos que são disponibilizados na maioria dos componentes em Delphi: Evento OnClick OnDblClick OnEnter OnExit OnKeyPress Ocorrência Quando o usuário clicar uma vez com o botão esquerdo do mouse sobre o componente. Quando o usuário dá um duplo clique no componente com o botão esquerdo do mouse. Observe a construção do procedimento criado pelo próprio Delphi: 2 Manipulador de evento 11 . 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. Quando pressiona uma única tecla de caractere.) indicam que uma janela de diálogo irá auxiliar na escolha de seu(s) valor(es). Mário André Tipo Set Algumas propriedades podem conter múltiplos valores.. Quando o componente perde o foco. Exemplo: Icon.. Um exemplo é a propriedade BorderIcons com o sinal + indicando subpropriedades.CEFET-UNED Prof. Um evento é uma ação disparada dentro de uma aplicação orientada a Objeto. Tipos com Editor de Propriedades As propriedades que são acompanhadas de um ícone de reticências (. Quando o componente recebe o foco.

Para desligar o code explorer clique no pequeno X ao lado da guia do code editor.CEFET-UNED Prof. procedimentos. CODE EDITOR O editor de código é responsável por receber todas as declarações criadas pelo Delphi e handlers criados pelo desenvolvedor. 3 Name do form que define uma nova classe Code Editor Code Explorer Na janela do editor pode haver uma outra janela denominada Code Explorer. begin end. Mário André procedure TForm1. a sua declaração é feita pelo Delphi de maneira automática. 3 Manipulador de eventos. onde podemos ter uma orientação sobre os objetos. É a parte esquerda da janela.Button1Click(Sender: TObject). para visualiza-lo clique com o botão direito dentro do editor e escolha View Explorer ou pelo teclado Ctrl+Shift+E. funções e classes utilizadas na aplicação. Uma característica muito importante do Code Explorer é que quando inserirmos componentes no form. E no ambiente Code Editor que implementamos o algoritmo na linguagem Object Pascal. 12 .

Mário André Podemos considerar também o seguinte fato: ‘Tudo o que o Delphi escrever. ele se encarrega de atualizar. Ele atua como um ajudante de complemento junto ao código do desenvolvedor. clicando com o botão direito dentro da listagem. é problema dele’.. Por exemplo.) abre-se uma listagem de métodos e propriedades que podem ser utilizadas neste objeto. o que o Delphi declarou. deve-se utilizar o mesmo nome nas rotinas implementadas. Quando alteramos o nome do objeto. CODE INSIGHT Um recurso que vai facilitar nossa vida no momento de desenvolvimento de código é o Code Insight do Code Editor do Delphi. ‘Tudo o que você escrever é problema seu’. Agora. ao digitar o nome de um objeto seguido de ponto (. Problema no sentido de atualização de código. 13 . Esta lista pode ser ordenada por nome. Pode-se personalizar o Editor através do menu Tools | Editor Options. como veremos adiante.CEFET-UNED Prof. Agora.

Defina para o Formulário no Object Inspector: Caption: Pô. Prática 1 . Mário André No momento de chamada de procedimentos ou métodos: Para forçar o code insight em determinada situação. seus métodos e propriedades. Dê um click duplo no botão e aparecerá no editor de código: 14 . Insira um botão no formulário (Ver Guia Standard na Barra de Ferramentas) 3.Vamos realizar um pequeno exemplo no Delphi para resultar na execução abaixo: Siga os seguintes passos: 1. Defina para o Botao no Object Inspector: Caption: Olá Pessoal Name: Btn_Ola 4.Para complemento de objetos. que emoção cara Name: Form1 2. • Ctrl + Shift + Barra de Espaço – Para complemento de parâmetros.CEFET-UNED Prof. utiliza-se: • Ctrl + Barra de Espaço .

CEFET-UNED Prof. Mário André

procedure TForm1.Btn_OlaClick(Sender: TObject); begin end; 5. Digite o seguinte comando entre o begin / end; MessageDlg('Olá Pessoal', mtInformation, [mbok], 0);

6. Execute a aplicação (Run). 7. Observe o código gerado Responda: O que ocorrerá se clicarmos no formulário?

PROJETO EM DELPHI
O conceito de projeto em Delphi é baseado em um conjunto de arquivos necessários para gerar uma aplicação. Vamos destacar os principais arquivos:
Extensão Tipo e descrição Arquivo Pascal: o código-fonte de uma unidade Pascal, ou uma unidade relacionada a um formulário ou uma unidade independente. Arquivo Delphi Project. (Contém código-fonte em Pascal.) Delphi Form File: um arquivo binário (na versão 5 pode ser convertido para texto) com a descrição das propriedades de um formulário e dos componentes que ele contém. Delphi Compiled Unit: o resultado da compilação de um arquivo Pascal. Criação Desenvolvimento Sim. Necessário para compilar?

.PAS
.DPR

Desenvolvimento Desenvolvimento

Sim. Sim. Todo formulário é armazenado em um arquivo PAS e em um arquivo DFM. Apenas se o código-fonte não estiver disponível. Os arquivos DCU para as unidades que você escreve são um passo intermediário; portanto, eles tornam a compilação mais rápida. Normalmente não, mas eles podem ser necessários em tempo de execução e para edição adicional. Necessário apenas se opções de compilação especiais foram configuradas. Exigido apenas se opções

.DFM

Compilação

.DCU

.BMP, .ICO, .CUR

Arquivos de bitmap, ícone e cursor: arquivos padrão do Windows usados para armazenar imagens de bitmap.

Desenvolvimento: Image Editor

.CFG .DOF

Arquivo de configuração com opções de Desenvolvimento projeto. Semelhante aos arquivos DOF. Delphi Option File: um arquivo de texto Desenvolvimento

15

CEFET-UNED Prof. Mário André

.DSK

com as configurações atuais para as opções de projeto. Arquivo de Desktop: contém informações sobre a posição das janelas do Delphi, os arquivos abertos no editor e outros ajustes da área de trabalho. Aquivo executável: o aplicativo Windows que você produziu.

Desenvolvimento

de compilação especiais foram configuradas. Não. Você deve excluí-lo se copiar o projeto em um novo diretório. Não. Esse é o arquivo que você vai distribuir. Ele inclui todas as unidades compiladas, formulários e recursos. Não. Esse arquivo é gerado automaticamente pelo Delphi, quando você salva uma nova versão do código-fonte. Não. Esse arquivo contém notas para os programadores.

Compilação: Ligação (linking)

.EXE Backup do arquivo Pascal Desenvolvimento Pode ser ativado ou desativado através do Menu Tools – Editor Options - guia display – Item: Create backup file. Arquivo da lista to-do, contendo os itens Desenvolvimento relacionados ao projeto inteiro.

.~PA

.TODO

O Delphi possui um mecanismo de gerência de arquivos de projeto informando os principais arquivos e seu path. Clique em View – Project Manager

A figura acima é um exemplo de um projeto inicial, ainda não salvo. O diretório padrão para criação dos arquivos é projects, obviamente devemos definir na gravação pasta e nomes de arquivos mais específicos.

.PAS E .DPR
Para visualizarmos o código fonte da unidade (.PAS) em Delphi basta selecionarmos o code editor (F12). Para visualizarmos o código fonte no arquivo de projeto (.DPR) basta selecionarmos o menu Project – View Source. O arquivo de projeto é exibido em uma guia no code editor. Para fechar a guia basta clicar com o botão direito e escolher close page.

Unidades

16

CEFET-UNED Prof. Mário André

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:

17

na sua forma mais simples.DFM} procedure TForm1. Type Tform1 = class(Tform)   procedure FormCreate(Sender: Tobject). 18 . junto com o código de arquivo de projeto. Graphics. begin end. Forms.CEFET-UNED Prof. Controls. Mário André Unit Unit1. Interface uses  Windows. implementation {$R *. Classes. O código acima. mas é um programa Windows funcional. é tudo de que precisa no Delphi para criar um executável que abre uma janela.     Dialogs. Messages. var    Form1: Tform1. SysUtils. Ele não fará muita coisa nesse ponto.FormCreate(Sender: Tobject). end. private   {Declarações privativas} public   {Declarações públicas} end.

etc no lugar correto.Marca o início da parte unit interface. ser usados para definir variáveis. A parte interface termina com o início da parte implementation.A cláusula uses informa ao compilador quais bibliotecas de funções e procedures precisam ser compiladas no executável final. O Delphi insere essa entrada para você.A seção de declaração type é usada para a criação de tipos definidos pelo usuário.DFM) . do código acima. Todas as declarações feitas aqui são privativas da unidade (não disponíveis para as outras unidades). A parte interface determina o que nessa unidade está disponível para outras unidades e partes do programa. pois ele cria a unidade e o código à medida que são feitas alterações no formulário. var é usado na parte de interface (o Delphi coloca essa declaração para você) para declarar o formulário como uma instância do objeto Tform. que é usada para declarar variáveis.É onde todas as funções e procedures que foram declaradas na parte interface serão realmente colocadas. Ela liga o formulário ao seu arquivo. {$R *. Para criar essa procedure. as cláusulas. É importante manter os cabeçalhos. Você deve colocar aqui. colocar todo seu trabalho útil nela e compilá-la para uso futuro. automaticamente. O Delphi cuida muito bem disso para você.Em uma unidade de formulário.É o end final. Var também é usado para declarar variáveis na parte de implementação. End. Se você decidisse escrever várias funções e procedures úteis. assim como em procedures e funções. Interface . etc.Um cabeçalho de unidade identifica o código como uma unit e é seguido pelo nome.As declarações nessa seção são visíveis e acessíveis fora da unidade. Implementation . Especificadores de visibilidade vêm após a cláusula type na parte da interface. Os seguintes especificadores são usados para controlar como os objetos aparecem para outros programas e objetos: Private . Public . 19 . Type . várias delas lá para você. conforme for necessário. então. Não remova isso de seu programa. tipos.dfm. O bloco de código a seguir é executado quando seu formulário é criado. O Delphi coloca.As declarações nessa seção são tratadas como públicas dentro do módulo. Você simplesmente insere seu código na seção correta. significa o final de sua unidade.Usado para declara varáveis e variáveis de objeto. procedures. ou você terá problemas.CEFET-UNED Prof. todo o código de inicialização que precise ser executado quando o formulário começar a ser carregado. Vamos ver as partes que constitui a unidade: Cabeçalho da unidade . poderia criar sua unidade. Var . OPÇÕES DE PROJETO O Delphi permite a configuração de vários itens do sistema através do menu Project – Options. Em uma unidade de formulário. depois. dê um click duplo no evento OnCreate. use o Object Inspector para ver o menu Events do formulário e. Mário André Veja os nomes na cláusula uses. mas serão desconhecidas e não acessíveis fora da unidade. Uses . Trata-se dos nomes de outras unidades. Esses tipos pode. .

20 . Title . Estas opções incluem informações para a depuração. Packages • CONVENÇÃO DE NOMEAÇÃO A propriedade mais importante de um componente é a propriedade Name.DPR).EXE) Estas opções permitem especificar uma compilação personalizada.Define um nome para a sua aplicação diferente do nome do arquivo de projeto (. (. Nesta guia pode-se configurar o diretório de saída para os arquivos gerados pela aplicação.Nesta guia permite a escolha do formulário principal da aplicação. ou seja. Available form .Os formulários available (disponíveis) em caso de criação em tempo de execução. Application • • • • Compiler Linker • • Directories/Conditionals Version Info • Estas informações podem ser visualizadas no Windows através do menu rápido do mouse no arquivo executável. Icon – Define o ícone utilizado no arquivo executável. É ela que define o nome interno com relação ao código escrito em Object Pascal.CEFET-UNED Prof. Help file – Define o nome do arquivo de Help (. grande parte dos desenvolvedores adota uma nomenclatura para tornar o código mais legível possível.HLP) associado à aplicação. Para organizar e facilitar o processo de desenvolvimento/manutenção do sistema. cada projeto pode ser compilado com uma característica. Os packages permitem um controle de distribuição através de DLL’s básicas externas ao executável entre outros recursos. Mário André Forms • • Main form .

Mário André O Delphi adota como nomenclatura padrão o nome da classe da qual o componente é instanciado e um número crescente de acordo com o número de ocorrência deste componente no form. Figura 31 – A Lista de Units A lista de units pode ser ativada através do menu View.. Button2... mas é muito importante fazer uso de uma convenção mais clara possível. ou através do primeiro ícone inferior da SpeedBar ou através da combinação das teclas <Ctrl> <F12>. Caso você selecione uma unit que não esteja aberta. sem que elas tenham de estar todas abertas no editor de código. A Lista de Forms 21 . são componentes instanciados da classe TButton .. etc. o Delphi a abrirá e mostrará no Code Editor.. Não é obrigatória a utilização da convenção de nomes utilizados nesta apostila. Exemplo: Button1. opção Units.CEFET-UNED Prof. Exemplo: Nome gerado pelo Delphi Button1 Edit1 Label1 Objetivo Sair da aplicação Receber nome do usuário Indicar componente Edit Convenção BtnSair EdtNome LblNome A Lista de Units A janela de lista de units permite que você alterne entre as units que fazem parte do projeto ativo.

Roteiro: a.CEFET-UNED Prof. Prática 2 . A lista de forms pode ser ativada através do menu View. que esteja escondida atrás de muitas outras. embora menos utilizada do que as de lista de units e forms. de forma análoga à de lista de units. sem que eles tenham de estar todos abertos. A Lista de Janelas A janela de lista de janelas do ambiente. Mário André A janela de lista de forms permite. que você alterne entre os forms que fazem parte do projeto ativo. Finalidade: Demonstração das diversas forma de Gerenciamento de Projetos 2. ou através do segundo ícone inferior da SpeedBar ou através da combinação das teclas <Alt> <F12>... opção Window List. ou através da combinação das teclas <Alt> <0>... opção Forms.. o Delphi o abrirá e mostrará para edição no Form Designer. Crie uma pasta Aulas Delphi e dentro desta outra Gerencia de Projeto 22 . Caso você selecione um form que não esteja aberto.Exercício de Gerenciamento de Projetos 1. A lista de janelas pode ser ativada através do menu View.. apresenta uma forma rápida de encontrar-se uma janela.

Observando o código do Projeto Opção View Source do Menu Project . end.) Qual o formulário que será criado quando a aplicação for executada? p...Opção Close Page) n. Observe o código de Unit_1 f. Opção Add to Project do Menu Project 6º ícone superior do SB m. Atente para a cláusula uses e seu código (begin . clicar com botão direito sobre o nome do projeto.. Insira novo formulário ao Projeto Opção New do Menu File Opção New Form do Menu File 4º ícone inferior do SB g. Salve o projeto com Projeto_1 e a unidade com Unit_1.. Adicione a Unit_2 ao Projeto No Project Manager. Inicialize o Delphi c. opção Add . botão direito sobre o nome do projeto ou unit. Execute a aplicação e vamos conferir qual o formulário criado. Através de: Opção File Save All do Menu File Opção File Project AS do Menu File 4º ícone superior do Speed Bar (SB) (Projeto) 3º ícone superior do Speed Bar (SB) (Unidade) e... Mário André b. que <F12> ou o clique no 3º ícone inferior do SB alterna entre unidade e formulário ou utilizando o 1º ou 2º ícone inferior do SB. Opção Remove from Project do Menu Project 7º ícone superior do SB l. i. q. Remova a Unit_2 do Projeto Botão Remove da Opção Project Manager do Menu View No Project Manager. j.. Insira um Label com Caption 'Formulário 1' d.CEFET-UNED Prof.Observe seu nome na Guia de Units (para fechar utilize botão direito do mouse . Salve a unidade com Unit_3 Observe que as unidades podem ser selecionadas pelas guias. Salve a unidade com Unit_2 h. opção Remove File . Feche a aplicação 23 . Salve todo o Projeto k. Insira novo formulário ao Projeto utilizando opção diferente da 1ª.

utilize o 2º ícone inferior do SB ou View Project Manager. Você pode nomear esta unit com qualquer nome. Exemplo: C:\Sistema C:\Sistema\Doc C:\Sistema\Dados C:\Sistema\Dll C:\Sistema\Icones 24 .CEFET-UNED Prof. esta identificação passa a ser um problema. Altere o nome do formulário principal para Unit_2 t. Feche a Aplicação x. Isto aumenta o trabalho quando for necessário alterar determinado valor. Abra novamente a aplicação e observe quantos forms são trazidos para você inicialmente Para ativar os forms que deseja trabalhar. Alterando o formulário principal do Projeto Opção Options do Menu Project. Como assim? Você não deve colocar strings nem valores constantes diretamente no código. Mas não defina estas constantes em qualquer unit. Mário André r. selecione o form. o mesmo valor que a que estamos procurando. Torne a Unit_2 disponível v. 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). Modularização É muito indicado que você modularize o seu projeto. Observe o código do Projeto e execute-o u.Pas. observando o nome do formulário da ListBox Main Form s. Diretórios Via de regra. Observe o código do projeto O que ele nos informa? w. E cuidado para não confundir com uma mesma constante que possua. por coincidência. exceto Const. Teremos que procurar em todos os módulos para saber onde fazemos referência àquele valor. Isto implica também em não misturar funcionalidades diferentes na mesma unit. é aconselhado utilizar um diretório para cada projeto Delphi. Quando temos mais de uma aplicação por diretório. porque const é uma palavra reservada. clique com botão direito e escolha a opção Open. Para resolver este problema. você deve criar constantes e atribuir valores a estas constantes. Crie uma unit que irá abrigar somente a definição das constantes do projeto.

Button1Click(Sender: TObject). implementation {$R *. type TForm1 = class(TForm) Button1: TButton.text).CEFET-UNED Prof. SysUtils. Classes. Mário André Não perca este objetivo de vista: projeto e organização são os requisitos mais importantes para um bom desenvolvimento. interface uses Windows. Value1 := StrToInt (Edit2. procedure TForm1. defina uma aplicação conforme o form e código abaixo: unit Unit1. public { Public declarations } end.DFM} procedure TForm1. Controls. private { Private declarations } procedure SomaNum. begin 25 . Edit2: TEdit. procedure Button1Click(Sender: TObject). Value2. Dialogs.text). begin Value1 := StrToInt (Edit1. var Form1: TForm1. StdCtrls. Graphics. Para aprendermos a depurar um programa. Forms. var Value1. Total : integer.Caption := IntToStr(Value1 + Value2). Label1: TLabel. Edit1: TEdit. Messages. end.SomaNum. Label1.

ou então tecle <F5> na desejada.CEFET-UNED Prof. mostrando que você parou neste ponto. Agora o ponto de quebra tem uma marca verde na mediamiz. a seta verde aponta para a próxima linha de execução. O editor de código mostrando a mediatriz com um ponto de quebra assinalado Execute o programa. O editor deve aparecer. Agora. mostrando a posição em que o ponto de quebra foi definido. mostrando sua posiçao no código. Na realidade. até encontrá-lo. 26 . introduza dois números pequenos. e então o depurador parará na linha em esse ponto foi definido. Mário André end. dê um duplo clique na mediamiz (a área cinza à esquerda do código no editor) ao lado da linha para a qual você quer definir o ponto de quebra. sem executá-la. end. pressione o botão Ok e observe que o resultado está incorreto. e uma seta verde apontando para a direita aparece na mediamiz. Para definir um ponto de quebra. Definindo um Ponto de Quebra (BreakPoint) Um ponto de quebra permitirá que o programa seja executado normalmente. conforme figura 27. SomaNum. Para descobrir por que. digite 4 e 5 e depois pressione o botão Ok. Esta linha ainda não foi executada. execute o programa. vamos usar o depurador para percorrer o código e ver o que aconteceu. ou seja. esses procedimentos ativam e desativam pontos de quebra.

CEFET-UNED Prof. Finaliza a execução do programa Como examinar valores variáveis com Sentinelas Existem duas maneiras de examinar o valor armazenado em variáveis: usando sentinelas e usando o novo recurso ToolTip Expression Evaluation (que já foi discutido anteriormente). Opções de Depuração O menu Run do Delphi contém algumas opções de depuração adicionais. Executa até a posição corrente do cursor. se seu código falha somente em certas condições ou no meio de um loop muito grande. Uma sentinela permite que você especifique nomes de variável que deseja monitorar e apresentar seus valores numa pequena janela. você usa a opção de menu Run | Add Breakpoint para acessar a caixa de diálogo Edit Breakpoint. Isto pode ser muito útil. Executa cada linha do código. continua a executar a partir desse ponto. Em uma sentinela. Permite que o depurador siga o código de uma chamada de função ou procedure. conforme a figura. Mário André O editor de código no modo debug. mas não entra nas chamadas de funções e procedures. na janela do editor Coloca o cursor no ponto de execução corrente. você pode pressionar <Ctrl> <F5> ou selecionar Run | Add Watch para acessar a caixa de diálogo Watch Properties. que têm toques de tecla de atalho correspondentes: Opção Run (F9) Step Over (F8) Trace Into (F7) Trace to Next Source Line (Shift F7) Runt to Cursor (F4) Show Execution Point Program Reset (Ctrk F2) Significado Compila e executa iu. no modo depurador. mostrando o programa interrompido em um ponto de quebra 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. Para definir condições ou contagem de passagem. Para inserir uma sentinela. você pode especificar nomes de variável e expressões como Valor1 + Valor2 ou StrToInt(Valor1). 27 . Segue até a próxima linha executável.

CEFET-UNED Prof. Mário André 28 .

onde as variáveis controladas e seus valores correntes serão apresentados. várias mensagens serão apresentadas. Quando as linhas de código que tratam da variável que você atribuiu uma sentinela são executadas. Você também poderia ver a mensagem Inaccessible here due to optimation. A mensagem pode indicar Process not accessible. digite Value1 na caixa de texto Expression. Se a variável ainda não foi criada ou atribuída. 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 *) 29 . o valor é apresentado na janela Watch List. Isto cria a janela Watch List. como na figura. Mário André A caixa de diálogo Watch Properties A janela Watch List Na caixa de diálogo Watch Properties. que normalmente significa que a variável ainda não foi atribuída. 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.CEFET-UNED Prof. indicando o status da variável em que o valor normalmente estaria.

é enviado para o componente que originou a operação de arrasto. Uma tecla de caractere é pressionada. Idem Uma tecla é liberada. depois faça o mesmo no Label. nesta ordem. bem como as suas principais propriedades e eventos. 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. Idem O componente está sendo arrastado e é solto num local permitido O componente está sendo arrastado e passa sobre outro componente O componente está sendo arrastado e é solto num local permitido ou não Acontece quando o usuário começa a arrastar. Evento OnChange OnClick OnDblClick OnEnter OnExit OnMouseDown OnMouseMove OnMouseUp OnKeyDown OnKeyPress OnKeyUp OnDragDrop OnDragOver OnEndDrag OnStartDrag Descrição Acontece quando o objeto ou seus dados mudam Clique simples do mouse sobre o componente ou Enter no componente Duplo clique do mouse sobre o componente Ocorre quando o componente recebe foco Ocorre quando o componente perde foco O botão do mouse é pressionado sobre o componente O ponteiro do mouse passa sobre o componente O botão do mouse é liberado sobre o componente Uma tecla é pressionada. A maioria dos componentes possui um evento padrão. 30 . iremos nos ater à explicação de algumas peculiaridades das propriedades dos componentes. está no fato de que algumas propriedades só são acessíveis em tempo de execução. chamaremos atenção a esse respeito. O que se segue é uma referência dos componentes de interface mais utilizados. isto quando a propriedade é selecionada. mas sim visa introduzir o programador nos recursos disponíveis. ou de Sistema. um dos detalhes mais importantes que devem ser considerados é a interface com o usuário. Logicamente. métodos e eventos.Os três eventos padrão são OnChange. Vamos considerar alguns objetos e suas principais propriedades. Verificação: Dê um duplo clique na área do formulário e terá seu evento padrão. É enviado para o componente com o foco de entrada. aparece um botão com reticências no canto da coluna valor. É bom lembrar que ao criarmos uma aplicação.CEFET-UNED Prof. Para abrir o construtor de valores basta um clique neste botão. OnClick e OnCreate. Mário André COMPONENTES Agora definiremos resumidamente os principais componentes do Delphi. Antes de iniciarmos as discussões sobre os componentes. ou um duplo clique na propriedade. este material não se constitui num manual dos componentes do Delphi. Para estes casos. significa que ele não possui evento padrão. O primeiro ponto a ser observado. Principais Eventos Os eventos recaem em três categorias: de Mouse. Insira um Edit e dê um duplo clique. Se um componente não responder a nenhum deles. Para verificar isso dê um duplo clique sobre o componente no formulário. existem propriedades onde o Delphi incorpora um construtor de valores. Finalmente. do Object Inspector. de teclado. Quando acontecer tal fato.

comum em caixa de diálogo bsSingle – Borda simples e redimensionável. Define se o componente está habilitado ou não. bsDialog – Borda não redimensionável. Permite controlar os atributos do texto exibido em um componente. Permite habilitar as barras de rolagem. Associa o form a um monitor específico em uma aplicação que utiliza vários monitores. Mário André Principais Métodos Método BringToFront CanFocus Create Destroy Focused Free Hide SetFocus SendToBack Show Clear Descrição Coloca o componente na frente dos outros Determina se o controle pode receber o foco Cria uma instância do componente Destrói a instância. Define a cor de fundo de um componente. É literalmente a implementação do conceito de ‘janelas’ do sistema operacional Windows. Determina os ícones a serem exibidos na barra de título do formulário. Define o estilo da borda do formulário. Na verdade. não redimensionável. Propriedades ActiveControl Align AutoScroll AutoSize BorderIcons BorderStyle Permite definir qual o primeiro componente a receber foco assim que o formulário é criado. fsMDIChild – O formulário será uma janela-filha de uma aplicação MDI. sem botões de controle. Altera o alinhamento e preenchimento do objeto. fsNormal – Definição padrão do formulário. BorderWidth Caption ClientHeight / ClientWidth Color Cursor DefaultMonitor Enabled Font FormStyle 31 . Determina o estilo do formulário. Indica a imagem exibida pelo ponteiro do mouse quando este ficar sobre o objeto. deve-se utilizar o Free Retorna se o foco está sobre o componente Destrói a instância e desaloca a memória Torna o controle invisível Faz com que o controle receba o foco Coloca o componente atrás dos outros Torna o controle visível Limpa o conteúdo do componente Objeto – Form (Formulário) Paleta – Standart Importância: É o principal componente container pois permite posicionar os demais componentes em si mesmo. bsSizeable – Borda padrão redimensionável. Define a altura e largura da área cliente. Define a espessura da borda.CEFET-UNED Prof. bsNone – Borda invisível. Determina se o controle será automaticamente redimensionado. Indica o rótulo exibido para o componente.

Mário André Height HelpContext HelpFile Hint HorzScrollBar Icon KeyPreview Left Menu Name PopupMenu Position ShowHint Tag Top VertScrollBar Visible Width WindowMenu WindowState fsMDIForm – O formulário será o formulário-pai de uma aplicação MDI. Define se o componente aparece ou não na tela. através do evento OnKeyPress. Métodos Show ShowModal Close Exibe o formulário de manipulação não-modal. Permite escolher entre mais de um componente MainMenu. Define o ícone que será usado pelo formulário. Define o nome interno que identifica o componente dentro da aplicação. fsStayOnTop – O formulário permanece sobre todos os outros formulários do projeto. Define a coordenada da extremidade superior de um componente. Define um arquivo de help específico. 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. Define o estado de exibição de um formulário.CEFET-UNED Prof. por exemplo. Define o comportamento de uma barra de rolagem vertical. Objeto – Button1 (Botão) Paleta – Standart Importância: É um dos objetos mais utilizados para confirmar e disparar rotinas associadas. Permite fechar o formulário. Define a largura do objeto. Exibe o formulário de manipulação modal. Define a altura do objeto. Permite definir o tamanho e posição de um formulário no momento em que ele aparece na sua aplicação. Permite exibir um texto de auxílio no momento em que o ponteiro do mouse permanece sobre o controle. Define o comportamento de uma barra de rolagem horizontal. Permite manter a posição relativa do objeto ao objeto ‘parente’ quando este é redimencionado. Define se o formulário deve ou não responder a um pressionamento de tecla. Define o tópico do arquivo help que será exibido ao pressionar a tecla F1. Permite definir qual o menu responsável por manipular as janelas-filhas de uma aplicação MDI. que pode atribuir o significado mais conveniente. 32 . exceto aqueles que também têm a propriedade FormStyle igual a fsStayOnTop. Define o componente PopupMenu a ser utilizado pelo objeto. Define a coordenada da extremidade esquerda de um componente. A propriedade Tag é uma variável do tipo Longint que o Delphi coloca à disposição do usuário. Propriedades Action Anchors Referencia uma ação definida em um objeto TActionList.

Define qual caractere será usado para ocultar o texto inserido no componente. Define se o texto perde a seleção ao perder o foco.. Text Métodos Clear SetFocus Limpa o conteúdo da propriedade text.. Objeto – Edit (Caixa de edição) Paleta – Standart Importância: Um dos principais componentes para a entrada de dados do usuário do sistema. minúscula ou normal. Define um limite para a inserção de caracteres. Cancel Associa ao evento OnClick do objeto ao pressionamento da tecla Enter. Define a ordem na passagem de foco no momento de pressionamento da tecla TAB. Para componentes TEdit a propriedade determina se a altura do controle será redimensionada quando o tamanho da fonte for alterado. Determina o tipo da borda do componente. As propriedades Parent permitem que o componente receba a mesma formatação do objeto proprietário. TabOrder TabStop Propriedade utilizada para encerrar a execução de um formulário Modal quando selecionado um valor diferente de mrNone. Envia o foco do windows para o componente. Exercício Confeccione um formulário conforme esquema abaixo: 33 . Default ModalResult Parent. Permite manipular os caracteres inseridos no componente pelo usuário. Métodos SetFocus Envia o foco do windows para o componente.CEFET-UNED Prof. Define se o foco pára no componente. Mário André Associa o evento OnClick do objeto ao pressionamento da tecla Esc. Propriedades AutoSelect AutoSize BorderStyle CharCase HideSelection Maxlength PasswordChar Define se o texto exibido pelo controle será selecionado quando este receber o foco da aplicação. Determina o se tipo da fonte será maiúscula.

Define o alinhamento vertical do texto na área do componente. Propriedades Alignment AutoSize Define o alinhamento da string na área do componente. Height = 225. Objeto – Label (Rótulo de orientação) Paleta – Standart Importância: Orientar o usuário à escolha de componentes bem como sua utilização. O botão Ok só ficará habilitado se o texto das últimas caixas forem iguais e diferentes de branco. As caixas de edição e os rótulos só ficarão habilitados se ‘Delphi’ for digitado na 1ª caixa 2. os dois últimos rótulos e as duas últimas caixas de edição. Faça com o acesso mnemônico aos rótulos ative a caixa de edição correspondente. Width = 280 e Position = poCenter Faça com que as teclas <Enter> ou <Esc> finalize a aplicação. Define qual o componente receberá foco quando o usuário selecionar a combinação de teclas aceleradoras (atalho) se existir. esta propriedade define se o controle será automaticamente redimensionado para acomodar o texto. BorderStyle = bsDialog. Altere as seguintes props do formulário: Ctl3D = False. Define se o fundo do componente será ‘transparente’ ou não. FocusControl Layout ShowAccelChar Transparent 34 . Para componentes TDBText e TLabel.CEFET-UNED Prof. Defina o evento para fechamento do formulário através do clique nos botões Desabilite o botão Ok. Mário André Funcionalidade: 1. Faça as três caixas de edição ficarem sem texto e que para cada caractere digitado um @ seja exibido. Define se o caracter ‘&’ será um literal ou tecla de aceleradora (atalho).

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 35 .CEFET-UNED Prof. Exercício: Crie um formulário conforme lay-out abaixo Para as opções de Adiciona na Posição e Apaga Linha. Objeto – Memo (Memorando) Paleta – Standart Importância: Permite o usuário entrar com dados do tipo TStrings. a Caixa de Edição Linha. compara-se à funcionalidade do software bloco de notas. 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. Mário André 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.

Mário André 36 .CEFET-UNED Prof.

Mário André 37 .CEFET-UNED Prof.

Permite ‘carregar’ um arquivo para a propriedade Lines. Métodos LoadFromFile SaveToFile Objeto – CheckBox (Caixa de verificação) Paleta – Standart Importância: Permite verificar opções boolenas pré-definidas ou re-definidas pelo usuário. Define a tecla Tab como tabulação ou mudança de foco. Mário André Propriedades Lines MaxLength ReadOnly ScrollBars WantReturns WantTabs Propriedade do tipo TStrings que contém as linhas de texto do componente. Define se o componente é do tipo somente leitura.CEFET-UNED Prof. Permite salvar o conteúdo da propriedade Lines em um arquivo especificado. Caso falso podese utilizar CTRL+TAB para produzir o efeito desejado. Define o limite máximo de caracteres no componente em sua propriedade Lines. Define se a tecla ENTER será utiliza para ‘quebra de linha’. Define se o componente pode trabalhar com barras de rolagem. 38 .

Defina o codigo inicialmente prevendo que os CheckBoxs tenham a prop. decrementar o valor desta Caixa. AllowGrayed = False e execute. Checked State Exercício Confeccionar uma aplicação conforme lay-out abaixo. 39 . = True Funcionalidade: Ao se marcar um item. três estados possíveis para o checkbox: checked (ligado). adicionar 1 na Caixa de Edição Total de Itens assinalados. unchecked (desligado) e grayed (parcial). caso tenha apenas dois estados. Depois defina o código com essa prop. dois estados: checked (ligado) e unchecked (desligado). pelo menos uma opção. E ao se desmarcar um. Define se o componente está ligado ou não. Caso falso. Objeto – RadioButton (Botão de ‘radio’) Paleta – Standart Importância: Permite escolher entre um grupo. Permite definir três estados se AllowGrayed for verdadeiro. Mário André Propriedades AllowGrayed Define caso verdadeiro.CEFET-UNED Prof.

Funcionalidade: Para “Nada a Fazer”. Observe que é interessante definir acessos mnemônicos para os botões. tire a marca do botão assinaloado e para “O que Fazer” exiba como mensagem o Caption do botão assinalado.CEFET-UNED Prof. Propriedades Define uma lista de Strings que aparece no componente. Objeto – ListBox (Caixa de listagem) Paleta – Standart Importância: Permite o usuário entrar ou manipular uma lista de dados. Checked Exercício Confeccionar uma aplicação conforme lay-out abaixo. Define se a lista de Strings será ordenada ou não. Insira primeiro o GroupBox e depois os botões de rádio. Items MultiSelect Sorted Permite selecionar vários itens (Strings) no componente. Permite ‘carregar’ um arquvo para a propriedade Items. Permite salvar o conteúdo da propriedade Items para um arquivo. Mário André Propriedades Define se o componente está ligado ou desligado. Métodos Clear LoadFromFile SaveToFile Permite limpar o conteúdo da propriedade Items. Objeto – ComboBox1 (Caixa de listagem em formato de cortina) 40 .

ComboBox1. Permite ‘carregar’ um arquvo para a propriedade Items. Define o texto atual da Combobox.Text). End.Add(ComboBox1.Text := ‘’. 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. Text Métodos Clear LoadFromFile SaveToFile Permite limpar o conteúdo da propriedade Items. toda vez que o <Enter> for teclado. pressionamento do botão Nova. ComboBox1. seta o foco da aplicação na Caixa de texto. Mário André Paleta – Standart Importância: Permite o usuário entrar ou manipular uma lista de dados.IndexOf(Combox1.Text <> ‘’) and (ComboBox1. // Se teclou <Enter> Exercício: Utilizando a figura abaixo. Propriedades Define uma lista de Strings que aparece no componente. Key := #0. defina If key = # 13 then Begin if (ComboBox1. Items Sorted Define se os dados serão ordenados. produzir um aplicação que apresente a seguinte funcionalidade:   pressionamento do botão Adicionar. Permite salvar o conteúdo da propriedade Items para um arquivo. habilita o botão Adicionar.CEFET-UNED Prof.Items. aciona o nome escrito na caixa de texto na ComboBox. 41 .Text) < 0) then // não duplic. desabilita o botão Nova e Excluir. a digitação realizada será inserida na ComboBox.Items. Assim.

Permite ‘carregar’ um arquvo para a propriedade Items.CEFET-UNED Prof. Propriedades Define uma lista de Strings que aparece no componente.   Objeto – ComboBox1 (Caixa de listagem em formato de cortina) Paleta – Standart Importância: Permite o usuário entrar ou manipular uma lista de dados. Permite salvar o conteúdo da propriedade Items para um arquivo. Mário André  pressionamento do botão Limpar. Define o texto atual da Combobox. pressionamento do botão Fechar encerra a aplicação. 42 . No evento click da ComboBox os botões Nova e Excluir ficam habilitados e Adicionar desabilitado. Text Métodos Clear LoadFromFile SaveToFile Permite limpar o conteúdo da propriedade Items. Items Sorted Define se os dados serão ordenados. limpa o conteúdo da Caixa de Texto e todos os elementos da ComboBox.

Propriedades Items ItemIndex Columns Define os itens disponíveis ao usuário. 43 . Mário André Objeto – GroupBox (Caixa de agrupamento) Paleta – Standart Importância: Permite agrupar componentes e estabelecer um título na propriedade Caption. Objeto RadioGroup (Grupo de botões ‘radio’) Paleta – Standart Importância: Permite estabelecer um grupo de botões de radio e manipula-los pela propriedade ItemIndex. Exercício 1: Utilizando-se da interface mostrada na figura abaixo. Define o número de colunas para organização dos componentes. Define o texto informativo na parte superior do componente. Propriedades Align Caption Pemite definir um alinhamento no objeto proprietário. 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. Define qual dos itens está selecionado.CEFET-UNED Prof.

Mário André  Sexo é um RadioGroup e as demais caixas GroupBox Exercício –2: Defina uma aplicação para conforme o lay-out abaixo. Linguagem e Verbo são GroupBox Adjetivo é um RadioGroup Em tempo de projeto ative um botão de cada agrupamento Alterar o conteúdo da Caixa de Edição Frase quando qualquer uma das Caixas for alterada. Objeto – Panel (Painel) 44 .CEFET-UNED Prof.

CEFET-UNED Prof. Execute Observe que sempre que o cursor estiver sobre um dos componentes. quando o cursor passar sobre o componente. Insira alguns componentes no formulário e defina dicas através da prop.OnHint := DoShowHint. Através do menu Search | Replace. selecione um componente e na prop. o texto da dica instantânea será exibida próximo ao mesmo e o texto da dica flutuante. na linha de status. No manipulador de evento OnCreate do formulário. Assim.Caption := Application.. Define o tipo da borda. Para resolver isso. a dica aparecerá na Barra de status. Hint defina “dica instantânea” | “dica flutuante”.. BorderStyle Define o alinhamento do componente em relação ao seu proprietário. Seja criativo. Hint. troque as ocorrências Panel1Click para DoShowHint. Mário André Paleta – Standart Importância: Permite agrupar outros objetos e estabelecer um efeito visual nas aplicações. Exercício Utilizando uma Panel como Barra de Status para exibição de Dicas Flutuantes Insira um Panel no formulário limpo e defina as propriedades: Align = alBottom Alignment = ta LeftJustify BevelInner = bvLowered Caption = (nenhum) Manipulador para o evento OnClick do Panel digite: Panel1. digite: Application. que geralmente é curta. Define a característica das bordas (interna e externa) bem como sua espessura. Propriedades Align Bevel.Hint Vá no Object Inspector e exclua a conexão do Panel com esse manipulador. Poderá ocorrer algum problema se a dica da Barra de status for muito grande e o componente também utiliza dica instantânea (showHint = True). 45 .

Eles não oferecem nenhuma pista visual. estes 46 . há três tipos fundamentais de itens de menu: Comandos: São itens de menu usado para dar um comando. Definidores de Estado: São itens de menu usados para alternar uma opção entre ligado e desligado. Mário André Objetos – MainMenu e PopupMenu (Menu principal e Menu rápido) Paleta – Standart Importância: Define os Menus utilizados pelo usuário pelo botão esquerdo (MainMenu) ou pelo botão direito (PopupMenu) do Mouse. Pode-se também excluir ou incluir items aleatoriamente através do botão direito no item desejado. utilize o operador de subtração (‘-‘) e confirme com a tecla Enter. O objeto MainMenu permite a construção de sub-menus através de seu construtor clicando no item com o botão direito e escolhendo a opção Create submenu. para executar uma ação. Propriedades Items Images Define um novo item de Menu. Define um objeto do tipo ‘ImageList’. Diferentes pápeis dos itens de menu Independentemente da posição deles na estrutura dos menus. Quando há dois estados. para mudar o estado de um elemento em particular.CEFET-UNED Prof. Para criar um separador de menus.

Itens de Diálogo: São itens de menu que fazem com que uma caixa de diálogo apareça. Isto não é obrigatório do ponto de vista técnico. 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. sendo que o separador não responde ao evento OnClick. mas as mais importantes se aplicam a itens individuais. Para criar o seu menu dentro do Menu Designer basta escrever o texto dos comandos. o menu é colocado apropriadamente abaixo da Barra de Título do formulário. Neste caso o usuário não tem a chance de usar esse comando. Esses comandos devem ter uma pista visual. Outra mudança visual é o uso da marca de verificação (Prop. Caption) para os dois estados do item. 47 . o formulário exibe. Editando um menu com o Menu Designer (MD) O Delphi possui em editor especial de menus. que consiste em três pontos após o texto.CEFET-UNED Prof. como por exemplo: Exibir Lista e Ocultar Lista. uma vez que isso não afetará o resultado. Se o formulário tiver mais de um componente de menu principal. mas é tão comum que você não deve ignorar esta diretriz. Mário André comandos usualmente têm uma marca de verificação à esquerda se estiverem ativos. Para invocar esta ferramenta. Como por exemplo. Mudando itens de menu em tempo de execução A estrutura de um menu pode mudar numa série de maneiras. a qual é definida por padrão tão logo você insira o primeiro componente de menu principal do formulário. Não se preocupe demasiadamente com a posição do componente de menu do formulário. abaixo de sua legenda. que pode ser substituída por duas legendas diferente (Prop. 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> <→>. Para adicionar um separador ao menu suspenso. esta propriedade deve ser definida manualmente e pode ser mudada tanto em tempo de projeto como em tempo de execução. quando um comando de menu não pode ou não deve ser selecionado (Prop. Neste caso. Checked). Enabled). o menu indicado em sua propriedade Menu. usualmente ele assume a cor cinza. Observação: Para ser mais preciso. 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. o Menu Designer. simplesmente insira um hífen como texto do comando. selecionar o comando produz a ação oposta. 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.

Usamos a propriedade Checked para adicionar ou remover uma marca de verificação dentro do item de menu. O mesmo é verdadeiro para os itens de menu de um menu suspenso específico. Obviamente. a legenda do label receba a sua descrição 4. Associando Eventos a Itens de Menu A associação de um evento a um item de menu é fita semelhante à associação de um evento a qualquer componente. Mudando Itens de Menu Três propriedades são usadas para modificar um item de menu. observando os nomes dos menus suspensos e dos itens de menu. pode ser a 1ª ou uma letra do meio. Uma quarta operação com item de menu seria a sua remoção ou torná-lo invisível. cada elemento da barra de menus deve ter uma letra sublinhado diferente. Os itens de menu podem ter também teclas de atalho (p. Construa o código para que cada vez que selecionarmos um item de menu. A última é a Caption. 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 única diferença é que ele não é visto como um componente. Execute a aplicação e depois remova os compoentes inseridos no formulário Exercício –2: Confeccione a estrutura de Menu conforme layouts abaixo. o texto do item de menu. ativa menu suspenso correspondente. Insira um Label no formulário e limpe sua legenda 2. Visible para False. Para determinar a letra sublinhada. logo devemos selecioná-lo utilizando caixa de seleção do Obj Inspector ou utilizarmos o MD. Sugere-se que você evite esta operação. Para obtermos uma janela com melhor aparência altere a prop Color do formulário para clBtnShadow Viajar Namorar Comer Estudar Bye Bye 48 .e. 3. 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. pois o usuário pode confundir-se. Exercício -1 1. É preferível desabilitá-lo temporariamente. Isso é facilmente realizado mudando-se o valor da prop. simples coloque & antes dela na definição do item.CEFET-UNED Prof. <Ctrl> <C>). Insira um MainMenu com 1 Menu suspenso e este com 3 itens de menu quaisquer. E ao pressionar <Alt> + letra. Mário André Atalhos de Menu Uma característica comum dos itens de menu é que eles contêm uma letra sublinhada.

CEFET-UNED Prof. Cobol Sobre Assuntos Espec.um menu pop-up em termos do Windows . mas o alinhamento poderá ser à esquerda ou à direita ou no no centro do componente. Associe o componente à propriedade PopUpMenu do componente desejado 4.. dependendo do valor definido nesta propriedade. Podem ter tecla de atalho (propriedade ShortCut). como desativar. Adicione alguns itens de menu ao componente 3.. eles devem ser rápidos e não possuem teclas de acesso mnemômico (Alt + letra). 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. Mário André Praias Ctrl P Montanhas Florestas  Casa da Vovó Regressar Cinema Aquilo Boite Sofá E Mais Aquilo Junto com Sogra No . para não acessar um item com este recurso. uma vez que agrupam somente os poucos comandos relacionados ao elemento que está atualmente selecionado. as teclas de atalho estarão disponíveis. pois por conveniência. Para adicionar menus pop-up na sua aplicação. devemos desabilitálo. A parte superior do menu será a da posição do cursor do mouse. O menu que é exibido . A propriedade Alignment determina onde o menu se abrirá. Neste caso.usualmente depende da posição do clique do mouse. Mas atenção: Mesmo que menu não esteja associado a nenhum componente e também não esteja exibido. 49 . execute algumas operações simples: 1. O PopUp Menu não deve ter submenus. Insira um componente PopUpMenu no formulário 2. etc. E obviamente. Religião Menus Pop-Up ou SpeedMenus ( com o botão direito do mouse) (Standard) No Windows é comum ver aplicações que possuem menus locais especiais que você ativa dando um clique com o botão direito do mouse. ajustar marcas de verificação.. 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. Estes menus tendem a ser fáceis de usar.

Min e Max de uma só vez 50 . Pode também ser usado como entrada de dados ou como mostrador de informações (valores numéricos).CEFET-UNED Prof. 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. e ocorre imediatamente após o OnScroll Ocorre quando é feita a rolagem do ScrollBar Principais Métodos Métodos SetParams Descrição Modifica os valores das propriedades Position. O usuário pode modificar o valor representado pelo scrollbar de duas formas: clicando nas setas de incremento/decremento ou diretamente na barra. Principais Propriedades Propriedade Kind LargeChange Max Min Position SmallChange Descrição Define a direção da barra de rolagem Indica a variação da rolagem feita sem o uso das setas de movimentação Maior valor do ScrollBar Menor valor do ScrollBar Indica a posição atual do srollbar Indica a variação da rolagem feita com o uso das setas de movimentação Principais Eventos Evento OnChange OnScroll Descrição Disparado quando o conteúdo da propriedade position é alterado pelo usuário. Mário André ScrollBar (Standard) Paleta – Standart O componente ScrollBar serve como barra de rolamento vertical ou horizontal para seleção e/ou variação de um parâmetro. 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). A primeira ação faz com que o valor representado sofra uma modificação menor (SmallChange) enquanto a segunda gera uma maior (LargeChange).

Mário André FUNÇÕES DE CONVERSÃO E MANIPULAÇÃO Vamos quebrar nosso estudo sobre os componentes do delphi para falarmos sobre Casting e Conversões de tipos .CEFET-UNED Prof. truncando seu valor Retorna a parte inteira do argumento de valor de ponto flutuante Converte um número em uma string Converte um número em uma string com sua representação em hexadec. Edit2. 51 . Converte um dado TDateTime em String.soma). pois estas funções serão importantes para futuras esplicações e atividades. sinal) Converte um valor de ponto flutuante para sua representação string usando representação padrão Converte um valor de ponto flutuante para sua representação string usando a formatação especificada Converte uma string Pascal em um valor de ponto flutuante Converte uma string terminada em nulo em um valor de ponto flutuante Converte um dado TDateTime em String. Como já sabemos. A primeira é casting e a segunda é utilizar uma função de conversão de tipos.00'. dígito. há duas opções. Converte um dado String em tipo TDateTime. Converte uma string em um número.###. levando uma execeção se a string não representa um número inteiro válido Copia uma string estilo Pascal em uma string terminada em nulo Converte um valor de ponto flutuante em registro incluindo sua representação decimal (expoente. Converte um dado String em tipo TDateTime Permite formatar um tipo ponto flutuante retornando uma string. não podemos atribuir uma variável à outra de um tipo diferente. arrendondando seu valor Converte um valor real em um valor inteiro.Text := FormatFloat('###. Sendo soma uma variável real. Caso precise fazer isso. Value: Extended): string Objetivo Converte um número ordinal em um caractere ANSI Converte um valor do tipo ordinal em um número que indica sua ordem Converte um valor real em um valor inteiro. Função Chr Ord Round Trunc Int IntToStr IntToHex StrToInt StrCopy FloatToDecimal FloatToStr FloatToStrF StrToFloat TextToFloat DateToStr(Date: TdateTime) DateTimeToStr(DateTime: TDateTime) StrToDate (const S: String) StrToDateTime(const S: String) FormatFloat(const Format: string.

Begin Atual := Now.Button1Click(Sender: TObject). Label2. defina a declaração do procedimento: procedure Soma(X. Uma vez definida a rotina pode-se ativa-la de diversas partes do programa através de seu nome. Nossa tarefa é apenas definir o código a ser realizado pelo procedimento.Caption := TimeToStr(Atual). um componente Button e um componente Label. Com o cursor posicionado na mesma linha. Y: String). end. O tipo TDateTime é internamente manipulado como tipo Ponto Flutuante. Edit2.CEFET-UNED Prof. begin Label1. A grande diferença entre as formas de definição destas rotinas (se procedimentos ou funções) está no fato de que: • Procedimento – NÃO retorna valor. Esse recurso é chamado Class Completion.Soma(X. 52 . Y: String). 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. Exibir a data e a hora na legenda de Labels Label1. • Função – Retorna valor.Caption := FloatToStr(StrToFloat(X)+StrToFloat(Y)). begin Soma(Edit1. pressione: CTRL+SHIFT+C e perceba que o próprio Delphi realiza a construção do procedimento dentro da cláusula implementation.Caption := DateToStr(Atual). Mário André EXEMPLOS: Armazenar a data e hora atuais em uma variável Var InicioAtual : TDateTime.Text). Supondo a existência de dois componentes Edit. este código pode ser ativado da seguinte forma: procedure TForm1.Text. DECLARAÇÃO E ATIVAÇÃO DE PROCEDIMENTO Podemos declarar um procedimento da seguinte maneira maneira: Dentro da cláusula private ou public. end. procedure TForm1.

‘um’ componente Button e um componente Label. esta função pode ser ativada da seguinte forma: function TForm1. Mário André DECLARAÇÃO E ATIVAÇÃO DE FUNÇÕES A construção de funções tem o mesmo raciocínio diferindo na característica de retorno da função. Y: String): String. Y: String): String. CAIXAS DE DIÁLOGO Podemos utilizar alguns tipos de caixas de diálogo pré-definidas pelo Delphi facilitando em muito o desenvolvimento pela ferramenta: 53 .Subtrai(X.Text.Caption := Subtrai(Edit1. A palavra reservada result é o recurso usado pela Object Pascal para estabelecer o retorno da rotina. Podemos declarar um procedimento da seguinte maneira maneira: Dentro da cláusula private ou public.CEFET-UNED Prof. end. a subtração dos dados passados nos parâmetros. DECLARAÇÕES CRIADAS AUTOMATICAMENTE PELO DELPHI Se você é um bom observador. Supondo a existência de dois componentes Edit. end.Text). Observe que agora. depois dos parâmetros há um tipo de definição de retorno da função (String).Button2Click(Sender: TObject). Pode-se utilizar a mesma dica de construção do procedimento. ou seja. Não se deve declarar esta variável. ela é declarada no momento da utilização da função. Nossa tarefa é apenas definir o código a ser realizado pela função. o Label recebe o result de subtrai. na linha da declaração tecle CTRL+SHIFT+C (Class Completion) e perceba que o próprio Delphi realiza a construção da função dentro da cláusula implementation. Neste caso. defina a declaração da função: function Subtrai(X. begin result := FloatToStr(StrToFloat(X)-StrToFloat(Y)). begin Label1. Edit2. function TForm1. percebeu que o Delphi também gera as declarações e seus respectivos procedimentos quando você deseja manipular um determinado evento.

Mário André ShowMessage A caixa de diálogo ShowMessage é declarada internamente pelo Delphi desta forma: procedure ShowMessage(const Msg: string). DlgType: TMsgDlgType. mtConfirmation. Por padrão.’). HelpCtx: Longint): Word. 0)=mrYes then 54 . mtWarning Contém um ícone exclamação amarelo. mbNo]. zero ‘0’. mtError Contém um ícone vermelho de ‘parada’. Exemplo: ShowMessage(‘Um texto ou propriedade string será exibida. mbYes mbNo mbOK mbCancel mbAbort mbRetry mbIgnore mbAll mbNoToAll mbYesToAll mbHelp Define um número para o help de contexto. [mbYes. Onde: const Msg: string É uma constante string ou propriedade deste tipo. Onde o parâmetro Msg é um dado String. MessageDlg A caixa de diálogo MessageDlg é declarada internamente pelo Delphi desta forma: function MessageDlg(const Msg: string. mtConfirmation Contém uma interrogação verde. DlgType: TmsgDlgType Buttons: TMsgDlgButtons HelpCtx: Longint O retorno da função é o tipo do botão como mr Desta maneira pode-se fazer testes lógicos como no exemplo: if MessageDlg(‘Deseja sair?’.CEFET-UNED Prof. Buttons: TMsgDlgButtons. mtInformation Contém um ícone ‘i’ azul. mtCustom Não contém BitMap.

MB_DEFBUTTON4 Flags O retorno da função é o tipo do botão como id (IDABORT IDCANCEL IDIGNORE IDNO IDOK IDRETRY IDYES) Desta maneira pode-se fazer testes lógicos como no exemplo: if Application. Caption: PChar. MB_OK. MB_DEFBUTTON2.MessageBox Uma outra caixa de diálogo é o método MessageBox do objeto Application. Define uma string para o título da janela.'Título'.MessageBox('Texto'. MB_ICONERROR. Define os botões. MB_ICONQUESTION. MB_ICONWARNING. Os valores para botões são: MB_ABORTRETRYIGNORE. MB_DEFBUTTON3. MB_ICONSTOP. MB_ICONASTERISK. MB_YESNOCANCEL Os valores para os ícones são: MB_ICONEXCLAMATION.CEFET-UNED Prof.MB_YESNOCANCEL + MB_ICONINFORMATION + MB_DEFBUTTON2) = IdYes then CAIXAS DE ENTRADA Podemos obter dados do usuário através de caixas de diálogo pré-defindas. MB_YESNO. Onde: const Text Caption: PChar É uma constante string ou propriedade deste tipo. ícones e a possibilidade de focar um determinado botão. MB_ICONHAND Os valores para a definição do botão default pode ser: MB_DEFBUTTON1. MB_ICONINFORMATION. InputBox 55 . Flags: Longint): Integer. Mário André Application. MB_OKCANCEL. MB_RETRYCANCEL. Esta função está definida da seguinte maneira: function MessageBox(const Text.

Sua definição interna é a seguinte: function InputBox(const ACaption. APrompt. 56 .CEFET-UNED Prof. InputQuery A função InputQuery retorna um tipo Booleano. que é dado digitado pelo usuário na sua utilização. o dado digitado pelo usuário será colocado em uma variável do tipo string previamente declarada. Sua definição interna é a seguinte: function InputQuery(const ACaption. Mário André A função InputBox retorna um tipo String. var Value: string): Boolean. aux) and (aux <> '') then Neste exemplo acima. 'Descrição'.'Valor Padrão') Define o título da janela Define um rótulo para orientação dentro da caixa. APrompt: string. caso contrário o retorno será falso.'Descrição'. Exemplo: if InputQuery('Título'. Onde: const ACaption APrompt ADefault Exemplo: InputBox('Título da janela'. Define um valor default para a caixa. a janela só retornará verdade se houver algum valor digitado e o usuário clicar no botão OK. ADefault: string): string.

Text). Edit2: TEdit. begin if (Edit1. end. procedure Button1Click(Sender: TObject). CHAMADA DE FORMS Uma característica importante da apresentação dos formulários em uma aplicação. Edit1: TEdit. mas antes vamos entender como isso funciona.Text. implementation {$R *.CEFET-UNED Prof. Label1: TLabel. function Soma(X.Soma(X. function TForm1. end. Há dois métodos para executar a visualização.aux o retorno da função soma aux := Soma(Edit1. var titulo: String. //atribui à variavel public Form1. é o fato de ser apresentado como MODAL ou NÃO-MODAL.Edit2.Text <> '') then //atribui à variavel private . //variavel local i: Integer.Caption := IntToStr(i). //variável pública end. var Form1: TForm1. titulo := 'Curso de Delphi'. //definição de constante procedure TForm1. end.Caption := frase.Button1Click(Sender: TObject). • MODAL – O foco fica preso no formulário e não é liberado para outro form até que ele seja fechado. begin result := StrToInt(X)+StrToInt(Y). Mário André Exemplo Vamos examinar uma unit e exemplicar os principais conceitos: type TForm1 = class(TForm) Button1: TButton. Y: String): Integer. //atribui à propriedade Caption do form ShowMessage('A soma dos valores é: '+IntToStr(Aux)). //definida pelo desenvolvedor private { Private declarations } aux: Integer.Text <> '') and (Edit2. Y: String): Integer. for i:=0 to MAX do Label1.DFM} const MAX = 50. //variável privada public { Public declarations } frase: String. //atribui à variàvel local frase := titulo+' – Versão 5'. mas não poderá 57 . O usuário pode ativar outra aplicação do Windows.

bkNo Botão No padrão. COMPONENTES (VCL) Objeto – BitBtn (Botão com figuras opcionais) Paleta – Additional Importância: Permite inserir figuras para uma melhor orientação do usuário. Quando o usuário clica sobre o botão. bkRetry Botão Retry padrão. os métodos que o Delphi utiliza para apresentar os forms são: Show para apresentar forms NÃO-MODAIS. com um “x” na cor vermelha e propriedade Cancel igual a True. ou ShowModal para apresentar forms MODAIS. bkHelp Botão de auxílio padrão. bkCustom Bitmap definido pelo usuário. com o desenho de uma porta. Mário André • trabalhar em outra janela daquele programa cuja janela foi aberta como modal (até que seja fechada). além de funções pré-definidas. Propriedades Glyph Kind Define um Bitmap para o componente. (Arquivo com extensão .BMP) Define o tipo de Bitmap exibido pelo usuário. Entendido este conceito. com uma marca de verificação na cor verde e propriedade Default igual a True. bkClose Botão Close padrão.CEFET-UNED Prof. Quando o usuário clica sobre o botão. NÃO MODAL – O foco pode ser transferido para outra janela sem que esta precise ser fechada. bkYes Botão Yes padrão. bkOk Botão OK padrão. 58 . com uma seta circular verde. uma tela de auxílio deve ser exibida (baseada no código do desenvolvedor). com uma interrogação na cor cyan. bkIgnore Botão ignore padrão. bkAbort Botão Abort padrão. o formulário a que ele pertence se fecha. com um “x” na cor vermelha e propriedade Cancel igual a True. com uma marca de verificação na cor verde e propriedade Default igual a True. bkCancel Botão Cancel padrão. com uma marca vermelha representando um círculo cortado e propriedade Cancel igual a True. com o desenho de um homem verde se afastando.

um símbolo + ou -. Mário André ModalResult bkAll Botão All padrão. caracteres em branco não são armazenados como dados Marca o início do bloco que deve ser convertido em letras maiúsculas. mas não requer Requer um caractere numérico (0-9) nesta posição Permite um caractere numérico (0-9) nesta posição. Requer a entrada de caractere alfabético (A-Z. Permite definir uma máscara para entrada de dados. a 2ª consiste num caractere que define se os caracteres ou a máscara devem ser salvos como parte dos dados._ A máscara é formada por três partes: a 1ª é a máscara propriamente dita.CEFET-UNED Prof. Permite encerrar a execução de um formulário Modal quando o seu valor for diferente de mrNone. que pode ser salvo como parte integrante do valor ou não. 0-9) nesta posição. Propriedades CharCase EditMask PasswordChar Define o tipo dos caracteres. a-z) nesta posição Permite a entrada de caractere alfabético (A-Z. mas não requer Usado como separador em dados horários. ou seja. Se outro caractere separador é definido nos atributos internacionais do Painel de Controle do seu Sistema. mas não requer Requer a entrada de caractere alfanumérico (A-Z. fixo. a 3ª define o caractere usado para representar espaços em branco na máscara. a-z. 0-9) nesta posição Permite entrada caractere alfanumérico (A-Z. o caractere que segue a barra invertida \ é utilizado como caractere especial. Pode ser considerado literalmente um componente ‘Edit com máscara’. a-z. para fechar esse bloco esperase o caractere < Marca o início do bloco que deve ser convertido em letras minúsculas. com uma marca de verificação dupla na cor verde e propriedade default igual a True. não requer Requer um caractere qualquer nesta posição Permite um caractere qualquer nesta posição. mas não requer Permite um caractere numérico. a-z) nesta posição. para fechar esse bloco esperase o caractere > Define um caractere literal. Lista dos caracteres utilizados numa máscara Caractere ! > < \ L l A a C c 0 9 # : Significado na Máscara Se um ! aparecer na máscara. Objeto MaskEdit – (Caixa de edição com máscara) Paleta – Additional Importância: Permite estabelecer uma máscara para a entrada de dados no componente. A máscara definida na propriedade EditMask irá restringir os caracteres que o usuário pode entrar numa caixa de edição.1. Máscara de Telefone: !\(9999\)999-9999. este caractere será usado ao invés dos dois 59 . Define um caracter para ocultar a entrada de dados. isto evita que os usuários entrem com caracteres inválidos ou com formatos de dados indesejados para um determinado valor.

CEFET-UNED Prof. Idem com relação Painel de Controle Usado para separar as três partes que formam a máscara Insere espaço em branco automaticamente no texto Define que as letras maiúsculas e minúsculas serão armazenadas como digitadas Objeto – SpeedButton (Botão para barra de ícones) Paleta – Additional Importância: Permite ao usuário manipular os botões individuais ou através do conceito de grupo. mês e ano. Permite agrupar um conjunto de SpeedButtons quando ao serem selecionados. _ <> pontos Separador de dia. Só pode ser utilizado junto ao conceito de agrupamento. Propriedades Glyph GroupIndex AllowAllUp Flat Down Define um Bitmap para o componente. Permite que o componente possa ter o relevo suspenso ao ser clicado. Define um efeito visual interessante. Só pode ser utilizado junto ao conceito de agrupamento. Exemplo: 60 . Permite determinar qual componente foi pressionado. Mário André / . tiverem a propriedade diferente de zero.

CEFET-UNED Prof. Mário André 61 .

ICO. Propriedades AutoSize Picture Stretch Permite alterar o tamanho do componente baseado no tamanho da figura. Permite alterar o tamanho da figura baseado no tamanho do componente. Define a figura a ser exibida. Para trabalhar com imagens jpg.CEFET-UNED Prof. Possibilita a exibição de uma figura (Bmp) Propriedade Picture Center Strech AutoSize Significado Definição da figura do tipo BMP. adequa o tamanho da imagem com relação ao objeto Se True. adequa o tamanho do objeto com relação a imagem Contrário da propriedade Strech 62 . Mário André Objeto – Image (Imagem) Paleta – Additional Importância: Permite inserir uma figura para uso geral na aplicação. é necessário acrescentar na cláusula uses da interface a biblioteca jpeg. Métodos LoadFromFile Permite ‘carregar’ um arquivo de figura na propriedade Picture. WMF ou EMF Centraliza a figura em relação ao Quadro (objeto) Se True.

2º Formulário de Senha e 3º o Formulário Principal da Aplicação 63 . Mário André Exercício Nosso exercício irá utilizar 3 formulários que serão exibidos na ordem acima: 1º Tela de Splash.CEFET-UNED Prof.

Frm_Princ). Frm_Senha. com o nome de Frm_Senha e o defina como disponível em Project Options. Em Project Options defina o Splash como disponível. 1. seu nome para Frm_Princ e deverá ser exibido no centro da tela. 11.Show. Altere o arquivo .Create(Application). altere suas propriedades para que seja exibido maximizado. sem borda e com o nome de Splash.DPR conforme codificação em negrito abaixo e execute Application. a execução de rotinas de inicialização da aplicação que demandaria algum tempo e quando estas terminassem. vamos então. Application. opção New. Altere tamanho do formulário. 8. Insira mais formulário.CEFET-UNED Prof. Splash. Splash. Grave e execute a aplicação StringGrid (Additional) 64 .Release. // Se nao desejar mais ele no fundo Application. o Splash deveria ser apagado e exibido o formulário principal.Refresh: Frm_Senha := TFrm_Senha. Para inserir o formulário de Senha: Menu File.Create(Application). 10.CreateForm(TFrm_Princ. Insira um Image nesse formulário e altere as propriedades Picture. 2. Altere os componentes deste formulário para que fique igual ao exibido acima. Guia Dialog e escolha Password Dialog 9. Splash. Insira o código abaixo no arquivo .Refresh. 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. 6. que no exercício seria a exibição do formulário de Senha. Strech = True e Align = alClient 5.DPR depois do comando Splash.ShowModal.Release. Comece uma nova aplicação 2.Initialize.Run. Mário André 1. Frm_Senha. 7. Splash := Tsplash. Como não temos rotinas de inicialização. criar um freio.

precisamos associar código ao evento OnGetEditMask da seguinte forma: procedure TForm1.CEFET-UNED Prof. número da linha]     StringGrid não permite ordenação Não permite centralizar os conteúdos nas células Pode-se alterar a largura das colunas. também com: RowHeights[0] := valor (1ª linha) O StringGrid tem uma propriedade chamada Options.Cells[número da coluna. Valor goFixedVerLine goFixedHorzLine goVerLine goHorzLine goDrawFocusSelected goRowSizing goColSizing goRowMoving goColMoving goEditing goTabs goRowSelect goAlwaysShowEditor goThumbTracking Descrição Exibe linhas verticais em colunas fixas Exibe linhas horizontais em colunas fixas Exibe linhas verticais Exibe linhas horizontais Exibe a célula selecionada em cor de seleção Permite a mudança de tamanho da linha Permite a mudança de tamanho das colunas (arrastando as células das linhas fixas) Permite a movimentação de linhas (arrastando as células das colunas fixas) Permite a movimentação de colunas (arrastando as células das linhas fixas) Permite a edição do texto das células não fixas Permite o uso da tecla TAB para a navegação entre as células Seleciona uma linha inteira ao invés da célula corrente Sempre exibe o editor (somente válido se goEditing) Ao usar as scrollbars. Propriedade Cells Col Row ColCount RowCount FixedCols FixedRows DefaultColWidth DefaultRowHeight ColWidths RowHeight GridLineWidth Descrição Célula que está selecionada Número da coluna da célula selecionada Número da linha da célula selecionada Número de colunas (default = 5) Número de linhas (default = 5) Número de colunas fixas Número de linhas fixas Largura padrão das colunas Altura padrão das linhas Vetor que define a largura das colunas Vetor que define a altura das linhas Largura da linha da Grid Referência a uma célula: nome da grid. inclusive a permissão ou não de edição de células. Mário André Utilizado para exibição e edição de uma tabela de strings. também com: ColWidths[0] := valor (1ª col) Pode-se alterar a altura das linhas. que permite a configuração de diversas opções. 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. tendo como elemento básico as células (cells). É organizada em linhas e colunas. 65 . do tipo Set.StringGrid1GetEditMask(Sender: TObject. ACol. A sua apresentação é similar a uma planilha. Para tal.

Criticar os valores informados da linha e coluna Exercício 2 . 3 Labels e um botão "Inserir" 2. 11:00 Exercício 3 . No evento OnClick do botão fazer o Edit receber o valor da célula selecionada Exercício 4 . Os caracteres usados para definir as máscaras de edição são os mesmos do componente TMaskEdit. Qua. Insira os títulos para colunas: Seg. Qui 2.Uma pequena Aplicação: 1. No Evento OnClick do botão inserir os conteúdos dos edits no StringGrid 4. No evento OnClick do botão inserir o texto do 3º Edit nas posições especificadas nos outros dois edits 3. Insira no formulário: um StringGrid. 3 Edits.Recuperando um valor da Grid 1. Insira os títulos para as linhas: 8:00. Insira um StringGrid com 3 colunas e 2 linhas. var Value: String). 3 Labels e um botão "Inserir" 2.PageControl 66 . "Telefone" e "E-mail" para os Labels e Colunas 3. Objeto . Exercício 1 .CEFET-UNED Prof. 3 edits. Insira um Edit e um botão "Recuperar" 2.Inserindo Títulos na Coluna e na Linha Fixa: 1. begin if Acol = 1 then Value := '##/##/##'. Realizar as devidas críticas e controles para perfeita funcionalidade. Mário André ARow: Integer. end. Defina "Nome". 9:00.Inserindo valores na Grid: 1. 10:00. Ter.

Neste componente. execute retorna verdadeiro. Define o filtro default a ser exibido na lista drop-down que define os tipos de arquivos selecionáveis. Propriedades ActivePage Permite determinar qual a guia foi selecionada pelo usuário. caso contrário. uma espécie de ‘sub-objeto’ do PageControl. Objeto – OpenDialog (Caixa de diálogo para abertura de arquivos) Paleta – Dialogs Importância: Permite utilizar uma caixa de diálogo pronta com recursos padronizados pelo sistema operacional. Define o diretório default quando a caixa de diálogo é aberta. Define o arquivo selecionado no componente. Para criar novas páginas. podemos escrever: if OpenDialog1.Execute then Se o usuário escolher algum arquivo e confirmar a caixa. assim para exibir uma caixa de diálogo. Define o título da caixa de diálogo. clique com o botão direito no componente PageControl e escolha New Page. Permite definir as máscaras de filtro de arquivo a serem exibidas. Este método é uma função que retorna um valor booleano. Os componentes da paleta dialogs são executados através do método execute. options define uma série de valores booleanos.CEFET-UNED Prof. Propriedades DefaultExt FileName Filter FilterIndex InitialDir Options Title 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. falso. Objeto – RichEdit (Texto com formatação) 67 . Cada guia representa um componente TabSheet do tipo TTabSheet. Mário André Paleta – Win32 Importância: Permite definir guias para agrupar os demais componentes.

Define a tecla Enter como quebra de linha. 68 . Define a tecla Tab como tabulação ou mudança de foco. Objeto – ProgressBar (Barra de progresso) Paleta – Win32 Importância: Permitir ao usuário ter um acompanhamento de uma rotina demorada.. Permite salvar o conteúdo da propriedade Lines em um arquivo. Permite ‘carregar’ um arquivo para a propriedade Lines.. Sublinhado. Mário André Paleta – Win32 Importância: Permite formatar o texto (Negrito. Define a quebra de linha automática de texto.) para a leitura de outros editores compatíveis com o padrão RTF. Itálico. Fontes.CEFET-UNED Prof. etc. Caso falso pode-se utilizar CTRL+TAB para produzir o efeito desejado. Propriedades Lines WantReturns WantTabs WordWrap Define o texto exibido no componente. Métodos Clear LoadFromFile SaveToFile Permite limpar o conteúdo do componente.

Define a posição corrente do controle no componente. Mário André Propriedades Max Min Orientation Position Step Permite definir o valor máximo para a faixa de valores no componente. Define um número inteiro correspondente ao número de repetições.CEFET-UNED Prof. Objeto – Animate (Animações) Paleta – Win32 Importância: Permite exibir um ‘filme’ . Define a posição corrente do controle no componente. Liga e desliga a exibição do AVI. 69 . Propriedades CommonAVI Active Repetitions Define o AVI a ser exibido. Define se o componente deverá ser vertical ou horizontal. Objeto – DateTimePicker (Data e hora através de uma Combobox) Paleta – Win32 Importância: Permite ao usuário escolher uma data através de um componente que possui um importante impacto visual e facilidade operacional. Define o incremento usado na variação do valor da propriedade position. Zero define repetições indefinidas. Objeto – Gauge (Barra de progresso) Paleta – Samples Importância: Permitir ao usuário ter um acompanhamento de uma rotina demorada. Propriedades Kind Progress Permite definir aparências diferenciadas no componente.AVI para ilustrar tarefas (rotinas) em andamento. Permite definir o valor mínimo para a faixa de valores no componente.

Pode-se também dar um duplo clique na barra de status.Win32 Importância: Permite ao usuário escolher uma data através de um componente que possui um importante impacto visual e facilidade operacional. Define uma data máxima para uma faixa de valores. a barra deve ter a propriedade SimplePanel ligada. Define o estilo da caixa de listagem. Define o formato da apresentação da data. Define uma data mínima para uma faixa de valores. Se não houver painéis. Objeto – StatusBar (Barra de status) Paleta – Win32 Importância: Um dos principais componentes de informações sobre operações gerais no sistema. Propriedades AutoHint SimplePanel SimpleText Panels Permite exibir o hint do componente automaticamente na barra de status. Permite numerar as semanas. Define a data selecionada no componente. pode-se definir o hint dos objetos com duas strings separadas por pipe (‘|’). 70 . Define o texto a ser exibido pela barra de status. Mário André Propriedades CalColors Date DateFormat DateMode Kind MaxDate MinDate Define as cores do calendário. Objeto – MonthCalendar (Calendário mensal) Paleta . Define que a barra de status será sem divisões.CEFET-UNED Prof. Ao utilizar a propriedade AutoHint. Propriedades Date FirstDayOfWeek WeekNumbers Define a data selecionada no componente. A propriedade SimplePanel deve estar desligada. Define se o componente deve trabalhar com data ou hora. Permite a criação e edição de painéis na barra de status. Define qual o primeiro dia da semana.

Mesmo utilizando essas funções devemos nos planejar como e quando a data e a hora serão atualizadas para serem exibidas.Timer1Timer (Sender : TObject). // Tipo float que armazenará a data + a hora Data_Sys : TDate. Hint dos mesmos. Data_Sys := Date. begin {Recuperando a data e a hora do sistema} Data_Hora := Now. Interval (Default = 1000 milissegundos = 1 segundo) que é a frequência do intervalo de tempo das ocorrências do evento OnTimer do comp.CEFET-UNED Prof. Timer. Data_Hora : TTime. end. Inserindo dicas no StatusBar Para obter esse efeito. 2. Mário André A primeira string será utilizada como hint local. Já vimos que a dica instantânea do componente pode ser = ou <> do StatusBar. a segunda como hint na barra de status. Inserindo Data e Hora no StatusBar Você utilizar as funções que manipulam data e hora no Object Pascal. Defina o código abaixo no seu evento OnHint: procedure Tform1. o código desse evento deve recuperar a data e/ou a hora do sistema e depois exibí-las no StatusBar. Inserir componentes no formulário e definir uma ou duas dicas através da propriedade Hint. Logo. A forma mais fácil para realizar tal controle é inserir no formulário um componente Timer (paleta System) e configurar sua prop.Hint.Panels[0]. Hora_Sys := Time. são necessárias duas etapas: 1. {Exibindo Data e Hora } 71 . { variáveis que receberão Data e hora do Sistema } var Data_Hora : TDateTime. procedure TForm1. Escrever o código para evento OnHint do componente ApplicationEvents Praticando: 1. Insira alguns componentes no formulário e defina a prop.ApplicationEvents1Hint (Sender : TObject). Insira o componente ApplicationEvents 3. begin Statusbar1. 2.Text := Application.

StatusBar1.Text := TimeToStr(Hora_Sys).Panels[0].CEFET-UNED Prof.Text := DateToStr(Date). Align para alClient. Propriedades Flat Images HotImages ShowCaptions Define um efeito visual com relevo através do mouse nos botões. ative o evento acima dentro do evento OnCreate do formulário ou. {Outra forma de exibição StatusBar1. preencha o resto do formulário com uma caixa de rolagem (ScrollBox da paleta Additional) e defina a sua prop. ex. se possível.Text := DateToStr(Data_Sys). Caso contrário. // Não necessário criar variáveis StatusBar1. end.Text := DateToStr(Data_Hora).Panels[1]. StatusBar1.Panels[0]. Se configurarmos a prop. compartilhe este evento com ele.Panels[1]. o seu evento OnTimer não ocorrerá. 72 . Dica: Sempre que você usar um StatusBar. Observação: Se o intervalo for grande (p. Permite definir um objeto do tipo ImageList a ser usado no momento em que o mouse passa (ou clica) sobre o componente. 60000 = 1 minuto) para aparecer logo a data e a hora nos SubPaineis. Enabled do componente Time em False. Permite definir um objeto do tipo ImageList.Text := TimeToStr(Data_Hora).Text := TimeToStr(Time). } {Outra forma de exibição StatusBar1. Permite exibir a propriedade caption dos botões. Mário André StatusBar1. Para adicionar botões ou separadores na ToolBar. Objeto – ToolBar (Barra de ícones) Paleta – Win32 Importância: Permite criar barras de ícones de maneira rápida e simples. se o usuário diminuir o formulário o bastante para que as barras de rolagem apareção.Panels[0].Panels[1]. estas se misturarão com o StatusBar. clique com o botão direito sobre o componente e escolha New Button ou New Separator.

fazendo também os botões terem aparência plana. Acrescentar no formulário um ou mais componentes ImageList 2. configurando a prop. mas você pode mudar isso facilmente. a isto denominamos exceção. Obviamente carregar os bitmaps no ImageList 3. Para que as imagens vivas sejam exibidas quando da passagem do cursor do mouse sobre os botões. estamos sujeitos à situações de erros em tempo de execução. ou seja. O primeiro grupo é usado para os botões desabilitados. a propriedade ShowHint dos botões também será ajustada para True. Não se esqueça de definir dicas instantâneas para os botões. uma exceção é uma classe. Associar o ImageList com a prop. as imagens serão atribuídas aos botões na ordem em que elas aparecem. Por padrão. A definição de exceções como classes permite agrupar exceções correlatas. TRATAMENTO DE EXCEÇÕES Quando criamos e executamos nossos programas. Mário André Inserindo BitMaps nos botões 1.CEFET-UNED Prof. Esse último grupo de imagens usualmente é mais vivo. o segundo para o botões quando pressionados. Se você definir a propriedade ShowHint = True (Default = False) daToolBar. deve possuir as imagens mais vivas que o seu correspondente desabilitado. definidos através de comandos específicos do Object Pascal. Esse agrupamento é feito através da própria hierarquia de classes. 73 . ImageIndex para cada botão do ToolBar. No Object Pascal. Obviamente. de modo que podemos ter várias classes dependentes de uma única. defina a propriedade Flat = True. o fluxo de controle é automaticamente transferido para blocos de código denominados handlers(Manipulador de evento). e atribuir a elas as propriedades (DisabledImages ou Images) e HotImages para cada botão do ToolBar. Images do ToolBar. Pode-se preparar mais componentes ImageList para condições especiais dos botões. de exceções. associe uma ImageList à propriedade HotImages. 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 Quando uma exceção ocorre.

’). caso contrário. Mário André O que ativa o mecanismo de tratamento de erros através de exceções é o uso da unit SysUtils. o Delphi tratará dela. //finaliza o bloco Os comandos a serem executados são tratados seqüencialmente na ordem em que foram criados. A idéia das exceções é tornar os programas mais consistentes ao adicionar a capacidade de tratar erros durante a execução (runtime). podem chamar outros procedimentos e funções. Eventualmente. se nenhuma parte de seu código tratar da exceção. É importante lembrar que podemos inserir qualquer comando. //bloco try No exemplo acima tratamos os erros com uma mensagem genérica dentro de um um bloco try-except. e assim por diante. O programa prossegue normalmente obedecendo aos eventos provocados pelo usuário. a exceção será passada para o código chamador. Se seu código for escrito corretamente. exemplo: try Abre(Arq).que são largamente utilizadas pela VCL. o fluxo de controle é desviado para o bloco de exceção. permitindo que o usuário salve dados antes de sair.CEFET-UNED Prof. except Showmessage (‘Houve um erro inesperado. O Delphi traz um grande número de exceções predefinidas – pertencentes a RTL (RunTime Library) . end. O bloco de exceção pode ser definido através de uma construção genérica. Ela permite detectar os erros e convertê-los em exceções. Em tempo de execução. Caso ocorra alguma exceção. Sua sintaxe: try <comandos a serem executados> except <bloco de exceção> end. Um programa pode sobreviver a tais erros ou terminar de forma suave. poderá reconhecer o problema e tentar resolvê-lo. while not Fim(Arq) do processa(Arq). o Delphi lança exceções quando algo estiver errado. inclusive fazer chamadas a procedimentos e funções que por sua vez. caso não haja alguma exceção o bloco de exceção é ignorado. exibindo uma mensagem de erro padrão e tentanto continuar o programa. As exceções pertencem a classe Exception do Delphi O COMANDO TRY-EXCEPT Podemos tratar as exceções através do comando try-except. 74 .

while not Fim(Arq) do processa(Arq). do são: Nome EaccessViolation EconvertError EdivByZero EinOutError EintOverFlow EinvalidCast EinvalidOp EinvalidPointer EoutOfMemory EoverFlow ErangeError EstackOverflow Descrição Ocorre quando se tenta acessar uma região de memória inválida (ex: tentar atribuir valor a um ponteiro cujo conteúdo é nil). except on EInOutError do //erro de entrada e saída begin Showmessage(‘Problemas. ocorre quando o resultado de um cálculo excedeu a capacidade do registrador alocado para ele (para variáveis inteiras). on Exceção2 do Trata2.. ocorre quando se executa uma operação invalida com um ponteiro (ex: tentar liberar um ponteiro duas vezes). Os principais tipos de exceção da RTL (RunTime Library) do DELPHI.. 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). ocorre numa operação incorreta de I/O (ex: abrir um arquivo que não existe). da seguinte forma: try Processa. Fecha(Arq). ocorre quando o resultado de um cálculo excedeu a capacidade do registrador alocado para ele (para variáveis de ponto flutuante). ocorre na divisão de um número inteiro por zero. ocorre quando se tenta alocar memória mas já não existe mais espaço suficiente. ocorre quando o sistema não tem mais como alocar espaço de memória na 75 . else TrataOutras. ocorre quando se tenta converter um string em um valor numérico (ex: utilizar a função StrToInt em uma letra).CEFET-UNED Prof. end. on EdivByZero do //erro de divisão de nº inteiro por zero Showmessage(‘Erro ao dividir por zero’). end. a serem tratadas nos blocos on . 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). end.. except on Exceção1 do Trata1. //bloco try Podemos ainda definir utilizando a cláusula on-do com um handler genérico usando else. on EconvertError do //erro de conversão de tipos Showmessage(‘Erro de conversão de tipos de dados’). Mário André A CONSTRUÇÃO ON-DO try Abre(Arq). ocorre quando se detecta uma operação incorreta de ponto flutuante.’)..

ocorre quando se tenta dividir um valor de ponto flutuante por zero. o trecho após o finally é executado e. BLOCOS TRY ANINHADOS Exemplo: 1 Try abrir arquivo algumas operações fechar arquivo except . e o programa prossegue com a execução normal. <aloca o recurso> try <usa o recurso> finally <libera o recurso com ou sem exceção> end. O comando funciona da seguinte forma: os comandos especificados após o Try são executados seqüencialmente. no final. Porém. o arquivo será fechado. o arquivo não será fechado. Este controle de finalização nos permite lidar de forma estruturada com as situações em que alocamos algum tipo de recurso e. ou viceversa.CEFET-UNED Prof. Se não ocorrer nenhuma exceção. pois nessa codificação. precisamos depois liberá-lo. independentemente da ocorrência da exceção. Eunderflow EzeroDivide ocorre quando o resultado de um cálculo é pequeno demais para ser representado como ponto flutuante. se houver alguma exceção – qualquer uma – durante a execução da lista de comandos do try. Mário André Stack. mas não por ambas simultaneamente. Entretanto. Como regra temos que um bloco try pode ser seguido por uma instrução except ou finally.. haja o que houver. Dê ao interno uma instrução finally e dê ao externo uma instrução except.. Em resumo: Os comandos do bloco finally sempre são executados. os comandos especificados após finally são executados. conforme a situação exigir. com o comando seguinte ao try-finally. 76 . O COMANDO TRY-FINALLY Há um outro comando cuja sintaxe começa com try. Logo. a exceção é reativada. se observarmos melhor. A solução típica é utilizar os dois blocos try aninhados. 2 abrir arquivo Try algumas operações finally fechar arquivo Observamos que no quadro 1 se em “algumas operações” ocorrer uma exceção. devemos utilizar a solução do quadro 2. haja ou não alguma exceção durante a execução dos comandos especificados após o try. a solução do quadro 2 é que ela não trata a exceção.

Outro Exemplo: procedure TForm1. que recebe o valor do objeto exceção passado pela instrução raise Observe o código abaixo: Begin Try Resultado := A div B. begin try try i := strtofloat(edit1. aux:integer. Screen controla uma serie de recursos do sistema operacional neste exemplo. finally showmessage('alguma instrucao'). conforme o código abaixo: var i. end. end. Mário André Podemos mesclar as duas maneiras.j : real. j := strtofloat(edit2. desenhando o numero no Edit.Button1Click(Sender: Tobject). end.//fim do bloco try-except finally Screen. Except On EDivByZero do 77 . {O método ProcessMessages é necessário para forçar que as mensagens do windows sejam processadas. begin aux := 500. //fim da procedure CLASSE EXCEPTION A classe Exception também possui o objeto E. except on exception do showmessage('Ocorreu uma exceção').//fim do bloco try-finally end. try//inicio do bloco try-except for i:=0 to aux do begin Edit1. end. apenas o valor final seria visto.').text).Text := IntToStr(i).ProcessMessages. Application. Sem ele.Cursor := crDefault.text := floattostr(i/j). except Showmessage('Ocorreu um erro.text). var i.Cursor := crHourGlass. end.} end. edit3. muda-se a aparencia do cursor para ampulheta} Screen. try {inicio do bloco try-finally.CEFET-UNED Prof.

os eventos deste objeto estão disponível na paleta Additional. Este evento permite manipular as exceções em um nível global. Mário André Begin Resulatdo := 0. End. [mbok]. begin if E is EConvertError then ShowMessage('Erro de conversão de dados. end. podemos afirmar que os tratamentos de erro através do comando try são tratamento locais. MessageDlg(E. MessageDlg(‘Divisão por zero corrigida’. On E: Exception do Begin Resultado := 0. E: Exception). utilização um if na variável E (que recebe o erro atual) tomando uma decisão na condição verdadeira: procedure TForm1.CEFET-UNED Prof.'). Paleta – Additional Importância: Permite a manipulação de exceções em um nível global para toda a aplicação. nas versões anteriores este objeto era manipulado apenas no Code Editor tendo o desenvolvedor o trabalho de declarar os procedimentos desejados. mtError. TRATAMENTO DE EXCEÇÕES DE FORMA GLOBAL Há no Delphi um objeto chamado Application criado sem a decisão do desenvolvedor em todo o projeto. Este objeto representa a applicação como um todo e possui um evento muito importante: OnException. 0).ApplicationEvents1Exception(Sender: TObject. A partir da versão 7 do Delphi.Message. 0). em qualquer lugar do programa (e não apenas em uma determinada rotina) que venha a levantar um erro do tipo EConvertError. Este objeto deve estar inserido ou no formulário principal ou no formulário especial denominado Data Module como veremos adiante. End. mtError. Neste exemplo acima. End. 78 . [mbok]. Como o objeto tem como finalidade generalizar e centralizar tratamentos. A utilização do evento OnException pode ser criado da seguinte forma. End. deve haver um único objeto na aplicação. uma mensagem genérica será exibida.

except on EZeroDivide do begin Beep. ShowMessage('Divisão por zero'). Mantém uma lista de arquivos previamente selecionados. try Form1. Determina o diretório atual quando a caixa de diálogo abre. end.TXT' Determina qual o tipo de arquivo será o padrão na lista da propriedade Filter anterior. else Abort. Vetor que contem o nome e o caminho completo de todos os arquivos selecionados. nas propriedades do componente. (Obsoleto.Text) / StrToFloat(Edit2.) HistoryList é mantido para compatibilidade com versões mais velhas de Delphi.Text)).CEFET-UNED Prof. end. Fornece uma lista drop-down para preencher com extensões de arquivos que serviram de filtro nas seleções do arquivos. Ex: OpenDialog1. Na tabela abaixo estão discriminadas todas as opções. A caixa de diálogo não aparece até que seja executado o método Execute.Filter := 'Arquivos de Texto (*. os nomes e caminhos de arquivos selecionados. 79 . a caixa de diálogo fecha e são armazenados em uma lista.) FileEditStyle é mantido para compatibilidade com versões mais velhas de Delphi. Determina o estilo da caixa de diálogo de seleção do arquivo. (Obsoleto. Se esta opção estiver vazia o Opendialog sempre vai abrir no diretório do programa ou no último diretório utilizado. Mário André TRATAMENTO DE EXCEÇÕES SILENCIOSAS Podemos utilizar o comando Abort para gerar exceções silenciosas. Define características da caixa de diálogo.Caption := FloatToStr(StrToFloat(Edit1. Quando o usuário clica para Abrir ou salvar o arquivo.txt)|*. Texto que fica na barra de título da caixa de diálogo. abrir e salvar arquivos. de arquivo que é juntada automaticamente ao nome de arquivo digitado na área do nome do arquivo na caixa de dialogo. padrão. Propriedade DefaultExt FileEditStyle FileName Files Filter FilterIndex HistoryList InitialDir Options Title Descrição Especifica uma extensão. on EInvalidOp do ShowMessage('Operação inválida'). Devolve o nome e o caminho do diretório completo do arquivo mais recentemente selecionado. ou seja. UM POUCO MAIS SOBRE COMPONENTES (VCL) A Paleta Dialog OpenDialog e SaveDialog Os Componentes OpenDialog e SaveDialog exibe uma caixa de diálogo padrão do Windows para selecionar. sem nenhuma mensagem.

(Use com TsaveDialog e TSavePictureDialog. Mostra apenas arquivos com 8. como um atalho ou como um arquivo qualquer.CEFET-UNED Prof. Remove o checkbox de confirmação para somente leitura Depois que o usuário clica OK. Gera uma mensagem de erro se o usuário tenta selecionar um arquivo inexistente. Cria o estilo do Windows 3. o evento de OnSelectionChange acontece quando o usuário faz algo que mude a lista exibida no diálogo. Ocorre quando um diretório é aberto ou é fechado na caixa de diálogo. Desabilita o teste de proteção de arquivo em rede e disco inacessíveis. Exibições um botão de Ajuda na caixa de diálogo. Só se aplica quando o usuário tenta salvar um arquivo em um diretório de rede compartilhado. Ignora erros compartilhados e permite selecionar arquivos até mesmo quando acontecem violações de compartilhando. OBS: Todas as opções são marcadas como falso. Gera uma mensagem de erro se o usuário tenta selecionar um arquivo somente de leitura. isto é.1 para caixa de diálogo. selecionando um diretório novo. Remove o botão de Rede da caixa de diálogo. OnTypeChange Principais Métodos Métodos Execute Descrição Abre a caixa de diálogo do OpenDialog e devolve true quando o usuário seleciona um arquivo dar um 80 . Ocorre quando a caixa de diálogo é iniciada. Ocorre quando nomes de arquivo exibidos no diálogo é mudado. Permite seleção de nomes de arquivo com caracteres inválidos. Seleciona como padrão o ComboBox habilitado pela opção ofHideReadOnly. Ocorre acontece quando o usuário seleciona um filtro novo de arquivo no ComboBox de Tipo na caixa de diálogo.) Gera uma mensagem de erro se o usuário tentar selecionar um nome de rquivo que inexistente. 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. Opção para reconhecer um arquivo de atalho de Windows. Esta tag muda em tempo de execução sempre que o nome do arquivo selecionado tem uma extensão que difere de DefaultExt. reajusta o diretório corrente para o que estava antes da caixa de diálogo ser aberta. Isto pode incluir: selecionando um filtro novo.3 caracteres. Mário André Opções Valor ofAllowMultiSelect ofCreatePrompt ofExtensionDifferent ofFileMustExist ofHideReadOnly ofNoChangeDir ofNoDereferenceLinks ofNoLongNames ofNoNetworkButton ofNoReadOnlyReturn ofNoTestFileCreate ofNoValidate ofOldStyleDialog ofOverWritePrompt ofPathMustExist ofReadOnly ofShareAware ofShowHelp Significado Permite que o usuário selecione mais de um arquivo na caixa de diálogo. 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. Principais Eventos Evento OnClose OnShow OnFolderChange OnSelectionChange Descrição Ocorre quando a caixa de diálogo é encerrada. ou criando uma pasta nova.

a caixa de diálogo fecha e a cor selecionada é armazenada na propriedade de Cor. Principais Propriedades Propriedade Color CustomColors Descrição Retorna a cor selecionada. Quando o usuário seleciona uma cor e clica o OK. Permite que o usuário selecione cores não-sólidas. A cor padrão é clBlack. de forma que o usuário não pode definir cores novas. Na tabela abaixo estão discriminadas todas as opções. Principais Eventos Evento OnClose OnShow Descrição Ocorre quando a caixa de diálogo é encerrada. Direciona o Windows a usar a cor sólida mais próxima da cor escolhido. a seguinte string determina a primeira cor personalizada: ColorA=808022 Pode personalizar até 16 cores (ColorA até ColorP). Quando o usuário seleciona uma cor na caixa de diálogo e clica o OK. Adiciona um botão de Ajuda na caixa de diálogo. Determina quais cores personalizada iniciam na caixa de diálogo. 81 . Cada cor personalizada é representada com uma string na forma ColorX=HexValue. Options Opções Valor cdFullOpen cdPreventFullOpen cdShowHelp cdSolidColor cdAnyColor Significado Exibe as opções de personalizar cores quando a caixa de diálogo e aberta. Principais Métodos Métodos Execute Descrição 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. A caixa de diálogo não aparece até que seja executado o método Execute. ColorDialog O Componente TColorDialog exibe uma caixa de diálogo padrão do Windows para selecionar cores. Mário André Clique para abrir o arquivo. Ocorre quando a caixa de diálogo é iniciada. Por exemplo. a cor selecionada se torna o valor da propriedade de Cor. Desabilita o botão que Define a personalização de cores na caixa de diálogo. Se o usuário clicar Cancele retorna False. Se o usuário clicar Cancele retorna False.CEFET-UNED Prof. OBS: Todas as opções são marcadas como falso. Define características da caixa de diálogo.

Pode não aparecer em algumas versões do Windows 95. OBS: O usuário só pode especificar o número de página se a opção poPageNums estiver em True. Mário André PrintDialog O Componente TPrintDialog exibe uma caixa de diálogo padrão do Windows para enviar trabalhos para uma impressora. MinPage Options PrintRange PrintToFile ToPage Opções Valor PoDisablePrintToFile PoHelp PoPageNums PoPrintToFile PoSelection PoWarning Significado Desabilita (fica cinzento) o CheckBox “Imp. Define características da caixa de diálogo. Exibe um botão de Ajuda na caixa de diálogo. Indica as cópias de número selecionadas na caixa diálogo de Impressão. Habilita o RadioButtom que permite que usuário especifique um intervalo de páginas. Na tabela abaixo estão discriminadas todas as opções. Indica a página na qual o trabalho de impressão termina. Define qual o intervalo de impressão ficará selecionado como padrão na caixa de diálogo. O caixa de diálogo de impressão é modal e não aparece até que seja chamada pelo método Execute. Determina o menor número de páginas que usuário pode imprimir. Gera uma mensagem de advertência se o usuário tentar enviar um trabalho a uma impressora desinstalada. Seleciona o CheckBox ‘impressão para arquivo’ na caixa de diálogo como padrão. prPageNums (O RadioButton “Páginas” fica selecionado). Ocorre quando a caixa de diálogo é iniciada. Exibe o CheckBox “Imp em arquivo” na caixa no diálogo. Inverso do anterior. (Aplicável somente a opção poPrintToFile for verdadeira). Se o usuário tenta entrar com um número maior que MaxPage. OBS: Todas as opções são marcadas como falso. Habilita o RadioButtom que permite que usuário especifique imprimir uma seleção. Podem assumir três valores: prAllPages ( O RadioButton “Todos” fica selecionado). Determina o maior número de páginas que usuário pode imprimir. Principais Eventos Evento OnClose OnShow Descrição Ocorre quando a caixa de diálogo é encerrada. em arquivo”. Indica a página na qual o trabalho de impressão vai começar. uma mensagem de erro aparece. Principais Propriedades Propriedade Collate Copies FromPage MaxPage Descrição Indica se o Checkbox Collate na caixa de dialogo está selecionada.CEFET-UNED Prof. 82 . prSelection (O RadioButton “Seleção” fica selecionado).

Objeto – DirectoryListBox (Caixa de listagem de diretórios) 83 . Define o nome do arquivo selecionado.1 Importância: Permite determinado diretório. Define máscaras de filtro (separadas por ponto e vírgula) para a exibição dos arquivos.CEFET-UNED Prof. Válido em tempo de execução. ou seja. Objeto – FileListBox (Caixa de listagem de arquivos) Paleta – Win 3. Se o usuário clicar Cancele retorna False. Define em milisegundos o intevalo de repetição do evento OnTimer. listar arquivos de Propriedades FileEdit FileName Mask Define uma caixa de edição (TEdit) que exibirá o arquivo atualmente selecionado. Mário André Principais Métodos Métodos Execute Descrição 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. ele entra em um loop executando o evento OnTimer até que seja atribuído falso ou terminada a aplicação. UM POUCO MAIS SOBRE COMPONENTES (VCL) Objeto – Timer (Temporizador) Paleta – System Importância: Permite a execução de rotinas em loop. em um intervalo pré-definido. Propriedades Enabled Interval Permite ‘ligar’ o timer.

Propriedades DirLabel FileList Permite exibir o diretório corrente com a propriedade Caption de um componente do tipo TLabel. Permite definir as máscaras de filtro de arquivo a serem exibidas.1 Importância: Permite listar os diretórios do drive desejado. Objeto – FilterComboBox (Caixa de listagem de filtros) Paleta: Win 3.DriveComboBox (Caixa de listagem de drives) Paleta: Win 3. Propriedades FileList Filter Permite a conexão com um componente TFileListBox.CEFET-UNED Prof. os drives Propriedades DirList Permite a conexão com um componente TDirectoryListBox. Gauge 84 .1 Importância: Permite estabelecer filtros para visualização de arquivos. Mário André Paleta: Win 3.1 Importância: Permite listar disponíveis no computador. Permite a conexão com um componente TFileListBox. Objeto .

CEFET-UNED Prof. Mário André

Paleta: Samples Utilizado para dar idéia progresso na execução de uma tarefa.
Importância:

do

Propriedades
MinValue MaxValue Progress BackColor ForeColor Kind ShowText

Significado
Valor mínimo Valor máximo Valor atual Cor da área não preenchida Cor da área preenchida Tipo da figura (barra horizontal ou vertical, círculo, etc) Define se o valor em percentagem será exibido

TrackBar
Paleta: Win32 Importância: Componente utilizado para a seleção de valores inteiros dentro de uma faixa

Propriedades
Orientation Min Max Position TickStyle TickMarks PageSize LineSize SelStart

Significado
Orientação vertical ou horizontal Valor mínimo Valor máximo Posição corrente Estilo de exibição das marcações Aparência do indicador Determina o incremento que deve ser dado quando as teclas PgUp e PGDn forem pressionadas Determina o incremento que deve ser dado quando as setas forem pressionadas Posição de início do preenchimento

85

CEFET-UNED Prof. Mário André

SelEnd

Posição de término do preenchimento

CheckListBox Paleta: Additional
Importância: Possui toda a funcionalidade do ListBox exibindo ao lado do item uma CheckBox. Este componente é bastante útil quando queremos exibir uma lista extensa de CheckBoxs e o espaço para fazê-lo é escasso. Muito encontrado em programas de SetUp.

Propriedades
Checked[n] State[n] AllowGrayed

Significado
Retorna true se o item n estiver selecionado Retorna o estado do item n : [cvUnchecked, cbChecked, cbGrayed] Permite ou não a existência de itens com estado indeterminado. Default = False

Eventos
OnClickChecked

Descrição
Quando um item é marcado ou desmarcado

ListView (Win32) Paleta: Additional
Importância: Componente que permite exibir de várias maneiras uma lista de itens.

Propriedades
ViewStyle LargeImages SmallImages Items Columns ShowColumnHeaders ColumnClick

Significado
Determina se os itens devem ser apresentados em colunas com cabeçalhos e sub-itens, verticalmente ou horizontalmente, com ícones grandes ou pequenos Lista de Imagens (TImagesList) contendo a bitmap’s a serem exibidos e somente é usada quando a propriedade ViewStyle é vsIcon Lista de Imagens (TImagesList) contendo a bitmap’s a serem exibidos e somente é usada quando a propriedade ViewStyle é vsSmallIcon Items a serem exibidos Cabeçalhos das colunas da Lista Exibe os cabeçalhos das colunas Indica se os cabeçalhos das colunas terão a aparência de botões

86

CEFET-UNED Prof. Mário André

IconOptions

SortedType

Selected

Opções de exibição dos ícones quando ViewStyle for vsIcon ou vsSmallIcons Arrangement alinhado no topo ou esquerda do ListView AutoArrange os ícones são alinhados automaticamente WrapText a propriedade caption será quebrada nsNone não é ordenado nsData os iten são ordenados dados são alterados nsText os itens são ordenados quando o Caption é alterada. nsBoth a ordenação e feita em ambos os casos Item selecionado. Podemos acessar o conteúdo selecionado através de Select.Captiont;

Pode ser utilizado com o Imagelist

ImageList
Paleta: Win32 Importância: O componente ImageList permite que trabalhemos com listas de imagens em bitmap e a apresenta quando solicitado, sendo um componente não visual.

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.

Para se definir a lista de imagens devemos selecionar o componente e emitirmos um duplo clique para que seja exibido o Editor da lista de imagens ou usarmos o botão direito e selecionarmos a opção ImageList editor, que apresenta o seguinte diáologo: A opção Add é utilizada para acrescentar uma imagem na lista A opção Delete remove a imagem selecionada da lista A opção Clear limpa toda a lista Se a imagem estiver armazenada, uma figura habilitada e outra desabilitada quando da inclusão na lista, o Editor pergunta, caixa abaixo, se deseja a separação. Observe que a imagem de índice 0 e 1, foram seperadas e a de índice 2 não.
87

você desativa o recurso de desenho transparente. com um pequeno ícone à esquerda para diferenciar discos rígidos de diretórios. visualização de dados em árvores. temos o Explorer que exibe a estrutura hierárquica dos diretórios de um disco.CEFET-UNED Prof. 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. mesmo que contenham imagens em formas irregulares. Os bitmaps da lista são sempre retangulares. A lista de imagem tem o recurso de tratar o fundo como se fosse transparente. Mário André A opção Crop faz com a imagem Habilitada/Desabilitada fique junta quando se responde Não na caixa acima. A opção Strech faz com a imagem Habilitada/Desabilitada fique separada quando se responde Não na caixa acima. Como exemplo do TreeView. Propriedades Significado 88 . como um organograma de uma empresa. Se você definir a propriedade bkColor de uma lista com uma cor específica.

CEFET-UNED Prof. SelectIndex – qual imagem da lista será exibida se o nó for selecionado. Permite a edição dos nós da árvore. O valor zero indica repetições indefinidas DateTimePicket 89 . AddFirst que também permite a inclusão de nós na árvore. ocorre quando o usuário edita o ramo da árvore Ocorre quando o usuário termina a edição Animate Paleta: Win32 Importância: Componente capaz de exibir um AVI. Default = True. ShowButtons ShowLines ShowRoot ReadOnly Eventos OnEditing OnEdited Default = True. Possui um conjunto de métodos como Add. Estado este que o programador define. Cada nó é considerado um objeto do tipo TTreeNode. possibilita a edição dos ramos da árvore Significado Se ReadOnly = False. é um índice da StateImages. Se for <> -1. exibe as linhas conectando os nós. Mário André Images StateImages Items Lista de Imagens que contém os bitmaps que representam os próprios ícones. mas este componente apenas exibe as imagens. StateIndex – da mesma forma. AddChild. As principais propriedades dos nós são: ImageIndex – informa qual imagem da lista de imagens representa o nó. a imagem será exibida à esquerda da imagem normal. Geralmente através de um ImageList e Caixa de Edição StateIndex do TreeView Items Editor. Propriedades Active AutoSize Center FileName FrameCount Repetitions Significado Indica se a animação esta sendo exibida ou não Ajusta automaticamente o tamanho do componente ao tamanho da imagem Centraliza a animação Nome do arquivo AVi Número de Frames da animação Número de repetições quando a animação for executada. exibe os botões + ou – para expandir/fechar ramos Default = True. o qual representa um formato de arquivo multimídia com imagens e sons. exibe o nó da raiz Default = False. como as imagens dos discos no Explorer Lista de Imagens especiais que indicam que um item encontra-se num estado específico.

Mário André Paleta: Win32 Importância: Componente que permite a seleção visual de datas ou horas Propriedades Time Date DateMode DateFormat Kind ShowCheckbox Check Significado Hora selecionada Data Selecionada A forma como a data poderá ser selecionada [dmComboBox.CEFET-UNED Prof. dtkTime] Exibe um CheckBox Indica se o CheckBox esta selecionado 90 . dfLong] Seleciona o componente para Data ou Hora [dtkDate. dmUpDown] Formato da Data [dfShort.

91 . por exemplo: • if (A > B) then B := B + 1. EXPRESSÕES LÓGICAS São expressões que retornam valor booleano (falso ou verdadeiro). por exemplo: if not (X > Z) then Devemos usar parênteses ao compararmos expressões lógicas. // ou DEC(A).Dymanic Link Libraries). Basic. 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 . Para os programadores que já conhecem técnicas de estruturas de programação como o C. Algumas extensões foram incluídas para facilitar o uso de conceitos como propriedades particulares e públicas. manuseamento de exceções. Mário André Apêndice A . a Object Pascal providência uma migração de forma natural oferecendo um produto de maior complexidade. por possuir características de programação não só visual mas também escrita. e referências de classes. • if (A > B) then B := B + 1 else A := A . incluindo encapsulamento. Operador not and or xor Operação Negação E lógico OU lógico OU EXCLUSIVO lógico O operador not é unário. Pascal entre outras linguagens.A Linguagem Object Pascal Características Object Pascal é uma linguagem orientada a objetos não pura. 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. herança e polimorfismo.1. Object Pascal contém todo o conceito da OO. // ou INC(B). Ela força a você executar passos lógicos. por exemplo: if (X > Z) or (W > Y) then COMANDO IF O comando condicional if pode ser composto de uma ou mais condições de processamento.CEFET-UNED Prof. e tipos de informações em modo run-time. mas híbrida.

Caption := ‘Operador’ else Label1. INC(Z. A . B + A. ‘0’.1. B + 1. COMANDO WHILE O comando while. O comando if-then-else é considerado como único. while X <= 200 do begin X := X + 1.’)antes da palavra reservada else. portanto.Caption := ‘Letras’.‘z’: Label1.2). ‘*’. A grande diferença com o comando while é o fato do comando repeat ser executado pelo menos uma vez..until é uma opção para estruturas de repetição.Caption := ‘Números’. //fim do case COMANDO REPEAT O comando repeat.do também permite a construção de estruturas de repetição. com diferença de não executar o laço no início do teste lógico. end. ‘-’. Mário André • if (A > B) then begin B := X := end else begin A := Y := end.Caption := ‘Caracter especial’. Por exemplo: case Key of ‘A’. não há ponto e vírgula (‘.. INC(Z.of oferece uma alternativa para comandos if-then-else com um ‘grande’ número de testes. Y + B. 92 . ‘/’: Label1.‘9’: Label1. ‘+’.. //equivale a Z := Z + 3. repeat X := X + 1.. DEC(AUX.3).. until X >= 200.2). No último exemplo para representar um bloco de comandos em caso verdadeiro ou falso.CEFET-UNED Prof.3). utiliza-se dos delimitadores begin e end. COMANDO CASE O comando case. DEC(AUX.

e propriedades de um objeto.CEFET-UNED Prof.. Top := 95. end. o controle é desviado para o comando seguinte ao comando repetitivo. end. Mário André end. //Equivalente à: with Form1 do begin Caption := ‘Senac’. 93 . Edit1. Label1. end. frase := Edit1. for i:=0 to 500 do Label1. COMANDO BREAK O comando break é usado para alterar o fluxo normal de comandos de repetição.Text.Color := ClBlue. //Label1 recebe o conteudo de frase até a letra ‘A’ COMANDO WITH O comando with.. Form1.Top := 95.Caption := IntToStr(i). COMANDO FOR O comando for. Color := ClBlue. aux := aux + frase[I].Caption := IntToStr(i). for i:=500 downto 100 do begin Label1.do é usado para abreviar a referência a campos de registro.Caption := IntToStr(i). for i:=1 to length(frase) do begin if frase[I] = 'A' then break. Pode ser construído de maneira crescente ou decrescente. ou a métodos.caption := aux.Caption := ‘Senac’. end. begin Form1.do estabelece uma estrutura de repetição considerando um controle inicial e final. Form1.

pchar(Label1.  Diretório inicial. vamos utilizá-la novamente para chamar um programa através da extensão do arquivo passado como parâmetro. ‘mailto:fulano@provedor. ‘open’. nil. ‘open’.com. para abrir. Supondo que a propriedade Caption de um label seja um endereço web válido (http://www.DICAS CRIAR UM HOTLINK Podemos criar um link para a Internet dentro do Delphi através da função ShellExecute. que é o pai do processo disparado. ‘exemplo. “print”. ''. ShellExecute(Handle. nil. É necessário incluir a biblioteca ShellAPI na cláusula uses da Inteface. ENVIAR UM MAIL Podemos utilizar a função ShellExecute para abrir o programa de mail do usuário e preparar seu envio.fulanodetal.br) podemos inserir em seu evento OnClick o seguinte código: ShellExecute(Handle. para abrir uma janela do Explorer no diretório desejado. Caso queira colocar um subject padrão na construção do e-mail utilize a palavra subject da seguinte forma: ShellExecute(Handle.com.br subject=Pergunta’. nil. SW_SHOWNORMAL). ‘mailto:fulano@provedor. É necessário incluir a biblioteca ShellAPI na cláusula uses da Inteface.doc’. 94 . ‘’. ? É necessário incluir a biblioteca ShellAPI na cláusula uses da Inteface.  Parâmetros para a aplicação.SW_SHOWNORMAL). ‘’. Mário André Apêndice B . para imprimir.CEFET-UNED Prof. Os parâmetros de ShellExecute são 6:  Um manipulador de janela. nil.  Modo de abertura do programa Exemplo: ShellExecute(Handle. ou “explore”.Caption).  Uma ação a executar. EXECUTANDO UM PROGRAMA DE ACORDO COM A EXTENSÃO DE UM ARQUIVO ShellExecute é um função API comparada a um ‘canivete suiço’.  Um ponteiro (tipo Pchar em Delphi) para o nome do programa ou diretório.SW_SHOWNORMAL). 'open'. que pode ser “open”.com.br’.SW_SHOWNORMAL). ‘open’. nil.

Para saber a hora de determinada data. multiplica-se a parte fracionária por 24: Frac(DataIni) * 24. Pelo fato de serem armazenadas como Double. begin Dif := DataFim – DataIni. date). FormatDateTime(const Format: string. //diferença em dias entre as datas DataIni := DataIni+10.CEFET-UNED Prof. as horas. function string. Halt é um procedimento do Pascal e provoca o término da aplicação. somar e estabelecer comparações. há casos em que Close não atenderia à necessidade do desenvolvedor. A parte inteira indica a data. Podemos ainda comparar as datas com os operadores ‘<’ e ‘>’. //acrescenta + 10 dias na data end. DateTime: TDateTime): Exemplo: Label1. d "de" mmmm "de" yyyy'. DataFim : TDateTime. 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. SAIR DE UMA APLICAÇÃO O Delphi fornece diferentes métodos para sair de uma aplicação. pode-se subtrair. não se importando com arquivos abertos. Dif : Single. Mário André DATAS As datas são um tipo de dados TDateTime.Terminate. em número de dias.Caption := FormatDateTime('dddd. contados a partir de 30/12/1899 e a fracionária. REDUZINDO TESTES IF A expressão: if A = 10 then B := True else 95 . Por exemplo: var DataIni. Close. nestes casos pode-se chamar Halt ou Application. O ideal é utilizar o método Porém. Caso não seja necessário a comparação com a hora. basta converter a data para um inteiro e efetuar a comparação: if Trunc(Data1) < Trunc(Data2) then A formatação de data pode ser feita através da função FormatDateTime. internamente são armazenadas como números de ponto flutuante (Double).

var Key: Char). TRUE ou FALSE.FormKeyPress(Sender: TObject. que retorna True se A é igual a 10 e False caso contrário.Hint := ‘Primeira linha do hint’#13‘segunda linha do hint’. Pode ser reduzida a apenas uma linha: B := A = 10. Para voltar ao Form clique com o botão direito e escolha ‘View as Form’. end. begin if (Key = #13) and not (Activecontrol is TMemo) then begin //desabilita o processamento posterior da tecla key := #0. 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’. Neste caso estamos atribuindo à variável B o resultado da comparação.0).CEFET-UNED Prof. Mário André B := False. Para gerar Hints com mais linhas pode-se em tempo de execução configurar a propriedade Hint da seguinte forma: Edit1. //simula o envio da tecla tab Perform(WM_NEXTDLGCTL. SUBSTITUIR A TECLA TAB POR ENTER NA MUDANÇA DE FOCO    Setar a propriedade KeyPreview da Form para True Setar a propriedade Default de todos os botões da Form para False Criar um evento OnKeyPress para a Form como este: procedure TForm1.0. HINTS COM DUAS OU MAIS LINHAS A object inspector permite Hint com apenas uma linha. end. A = 10 é uma operação boleana. ÍCONES O Delphi possui um conjunto de ícones e imagens em uma pasta padrão: C:\Arquivos de programas\Arquivos comuns\Borland Shared\Images 96 .

delphibrasil. utilize a função PlaySound. se houver. SW_SHOWNORMAL).0.com. WinExec(‘calc.com. A função FindWindow procura se há outra tela da classe passada como parâmetro.br/ http://clubedodelphi. 97 .clubedelphi.SND_ASYNC). traz para frente e não cria a aplicação novamente.br/ http://www.Windows.exe’.br http://www. program Project1. PlaySound(pChar('SYSTEMSTART').com. utilize o seguinte código no arquivo de projeto (DPR). LINKS Alguns links interessantes: Nacionais http://www. Outros sons: SYSTEMSTART SYSTEMEXIT SYSTEMHAND SYSTEMASTERISK SYSTEMQUESTION SYSTEMEXCLAMATION SYSTEMWELCOME SYSTEMDEFAULT É necessário incluir as biblioteca mmsystem na cláusula uses da Inteface GARANTINDO UMA INSTÂNCIA DO APLICATIVO Para que seu aplicativo não seja executado várias vezes. Mário André EXECUTAR UM PROGRAMA Para executar um programa use a API WinExec.br/ DISPARANDO SONS DO SISTEMA (MULTIMÍDIA) Para utilizar os sons do sistema. uses Forms.CEFET-UNED Prof.eti.inprise.

RES} begin if FindWindow('TForm1'.Initialize. Application. {$R *.'9'] = False) and (Word(Key) <> VK_BACK)) then Key := #0.Edit1KeyPress(Sender: TObject.'Form1') <> 0 then SetForegroundWindow(FindWindow('TForm1'.Run..CreateForm(TForm1. É necessário incluir a biblioteca windows na cláusula uses do arquivo DPR.'Form1')) else begin Application. PERMITIR APENAS NÚMEROS EM UM TEDIT procedure TForm1.CEFET-UNED Prof. end.pas' {Form1}. Mário André Unit1 in 'Unit1. end. var Key: Char). end. Application. 98 . Form1). begin if ((Key in ['0'.

um novo tipo criado pelo ‘desenvolvedor’ que pode conter métodos e propriedades. PowerBuilder.CEFET-UNED Prof. Independente da ferramenta (Delphi. Uma referencia bibliográfica no final da apostila irá ajuda-lo(a) a encontrar mais informações a respeito. Mário André Apêndice C . a orientação a objetos é uma teoria da década de 70 que veio ser implementada com grande destaque nas ferramentas visuais. a orientação a objetos é uma metodologia que ganhou espaço no mercado. Considerando simplesmente a título de exemplo vamos criar a classe base TSerVivo com as seguintes características e tipos de dados: • Tamanho : Single • Cor : String • Forma(Obeso. não serão abordados. Com o tipo classe é possível implementar um conjunto de recursos OO 4. a classe descendente herda todas as características e ações criadas na classe ascendente podendo acrescentar particularidades à sua estrutura. Essa técnica é baseada no conceito de classes. É como compararmos um tipo classe com um tipo record. veio para ficar. C++Builder. Vamos abordar alguns conceitos importantes para o inicio do estudo da ferramenta Delphi. e ao que tudo indica. Classe é um ‘tipo abstrado de dados’. entre outras). Magro) : String e que pode possuir as seguintes ações: • Alimentar • Respirar Um exemplo de herança seria criar as classes TSerHumano e TAnimais como descendente de TSerVivo.INTRODUÇÃO À ORIENTAÇÃO A OBJETOS Mais do que popular. seria importante que na sua vida profissional você possa aprofundar-se mais nestes e outros conceitos que pelo enfoque. desta forma. exemplo: TSerHumano • Tamanho : Single • Cor : String • Forma : String • Vestimenta : String • CorCabelo: String • Sexo : Char  Alimentar  Respirar  Falar  Caminhar TAnimais • Tamanho : Single • Cor : String • Forma : String • NºPatas : Integer • Cauda : Boolean  Alimentar  Respirar  EmitirSom 4 99 . que é uma poderosa maneira de reaproveitamento de código. sendo um dos principais chamado herança. ou seja.

private { Private declarations } public { Public declarations } end. Polimorfismo.60. são conceitos que a principio você não precisa saber para manipular a ferramenta (Delphi).Cauda := True.CEFET-UNED Prof.70.Alimentar. Mário André Os objetos são variáveis do tipo classe.Tamanho := 1.Forma := ‘Magro’. Jorgina. O que acontece no Delphi é que existe uma gigantesca estrutura de classes onde TObject é a classe base das demais classes. Edileumar. Button2: TButton. Jorgina.Tamanho := 0. Edileumar. Cachorro. podemos utilizar as propriedades atribuindo valores de acordo com o tipo de dados definido (não estamos considerando a sintaxe completa em Object Pascal) e utilizar os métodos apenas chamando o nome da rotina. Alguns métodos podem receber parâmetros. um formulário com dois componentes (objetos) button e um componente edit será declarado assim: type TForm1 = class(TForm) Button1: TButton. Jorgina. Jorgina. Eles são de extrema importância pois definem quando um conjunto de comandos será executado.Sexo := ‘F’. não sendo o único. Edileumar.CorCabelo := ‘Castanhos’. e as rotinas chamadas pelos objetos são denominadas métodos. As ações disparadas pelo usuário ou pelo sistema no componente serão chamados eventos.60. é importante saber seu funcionamento básico. : TAnimais. 100 . begin Edileumar.Falar.Sexo := ‘M’. mas em um futuro próximo será muito importante. end. Essa introdução vem apenas ilustrar os principais conceitos: Propriedades.Caminhar. Edit1: TEdit. sendo amplamente utilizados durante o curso. Edileumar.Tamanho := 1. encapsulamento entre outros.Jorgina Cachorro : TSerHumano. eventos e métodos. A herança é um recurso importante implementado na OO. Observe que as propriedades recebem valores e os métodos executam rotinas (procedimentos ou funções) sobre o objeto que o invocou. Cachorro. Apesar de não ser necessário manipular este recurso diretamente. Você verá as declarações de classe dentro do Delphi como abaixo. Cachorro. onde as características são consideradas propriedades. obviamente. Ainda exemplificando.

2000 Programação Orientada a Objetos usando o Delphi 3 – Faiçal Farhat de Carvalho Editora Érika Delphi4 Curso Completo – Marcelo Leão Axcel Books do Brasil Delphi4 Senac – Adilson Resende Editora SENAC Belo Horizonte 365 Dicas de Delphi – Bruno Sonnino Makron Books 101 .CEFET-UNED Prof. Mário André REFERÊNCIA BIBLIOGRÁFICA Dominando o Delphi 7 “A Bíblia” – Marco Cantù Makron Books.

Sign up to vote on this title
UsefulNot useful