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