Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Delphi 7 - Programação inicial, Notas de estudo de Matemática

Uma introdução a programação com Borland Delphi, ideal para quem esta começando.

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 02/08/2009

Abelardo15
Abelardo15 🇧🇷

4.6

(65)

132 documentos

Pré-visualização parcial do texto

Baixe Delphi 7 - Programação inicial e outras Notas de estudo em PDF para Matemática, somente na Docsity! 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.............................................................................................................................19 COMPONENTES.......................................................................................................................................................27 Propriedades..............................................................................................................................................................29 Métodos....................................................................................................................................................................30 Métodos....................................................................................................................................................................30 Propriedades..............................................................................................................................................................31 Propriedades..............................................................................................................................................................32 Crie um formulário conforme lay-out abaixo...........................................................................................................33 A opção Apaga Tudo só poderá ocorrer após confirmação do usuário....................................................................33 Propriedades..............................................................................................................................................................33 Métodos....................................................................................................................................................................33 Propriedades..............................................................................................................................................................34 Propriedades..............................................................................................................................................................35 Métodos....................................................................................................................................................................36 Propriedades..............................................................................................................................................................36 Métodos....................................................................................................................................................................36 Propriedades..............................................................................................................................................................38 Métodos....................................................................................................................................................................38 Propriedades..............................................................................................................................................................38 CHAMADA DE FORMS...........................................................................................................................................52 COMPONENTES (VCL)...........................................................................................................................................53 TRATAMENTO DE EXCEÇÕES.............................................................................................................................66 UM POUCO MAIS SOBRE COMPONENTES (VCL)..........................................................................................72 Opções..................................................................................................................................................................73 Valor.....................................................................................................................................................................73 Significado............................................................................................................................................................73 Principais Eventos.................................................................................................................................................73 Evento...................................................................................................................................................................73 Descrição..............................................................................................................................................................73 Principais Métodos...............................................................................................................................................74 Métodos................................................................................................................................................................74 Descrição..............................................................................................................................................................74 Principais Propriedades.........................................................................................................................................74 Propriedade...........................................................................................................................................................74 Descrição..............................................................................................................................................................74 Opções..................................................................................................................................................................74 Valor.....................................................................................................................................................................74 Significado............................................................................................................................................................74 Principais Eventos.................................................................................................................................................74 Evento...................................................................................................................................................................74 Descrição..............................................................................................................................................................74 Principais Métodos...............................................................................................................................................75 Métodos................................................................................................................................................................75 Descrição..............................................................................................................................................................75 Principais Propriedades.........................................................................................................................................75 Propriedade...........................................................................................................................................................75 Descrição..............................................................................................................................................................75 Opções..................................................................................................................................................................75 2 CEFET-UNED Prof. Mário André dados de forma sequencial. Esta forma de se programar é dita procedimental. A figura 1 ilustra a sequencialidade encontrada em programas que seguem tal paradigma. 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. 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 5 Início Entrada de Dados Processamento Fim CEFET-UNED Prof. Mário André 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. 6 CEFET-UNED Prof. Mário André Ações Sistema 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. 7 Loop de Tratamento dos Eventos CEFET-UNED Prof. Mário André 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. Events – Define quais os eventos serão manipulados pelo desenvolvedor. 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. 1 Componente ComboBox. 10 CEFET-UNED Prof. Mário André Tipo Set Algumas propriedades podem conter múltiplos valores. Um exemplo é a propriedade BorderIcons com o sinal + indicando subpropriedades. 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 Ocorrência OnClick Quando o usuário clicar uma vez com o botão esquerdo do mouse sobre o componente. OnDblClick Quando o usuário dá um duplo clique no componente com o botão esquerdo do mouse. OnEnter Quando o componente recebe o foco. OnExit Quando o componente perde o foco. OnKeyPress Quando pressiona uma única tecla de caractere. Observe a construção do procedimento criado pelo próprio Delphi: 2 Manipulador de evento 11 CEFET-UNED Prof. Mário André 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 handlers3 criados pelo desenvolvedor. E no ambiente Code Editor que implementamos o algoritmo na linguagem Object Pascal. 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. 12 Code Explorer Code Editor Name do form que define uma nova classe 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 Criação Necessário para compilar? .PAS Arquivo Pascal: o código-fonte de uma unidade Pascal, ou uma unidade relacionada a um formulário ou uma unidade independente. Desenvolvimento Sim. .DPR Arquivo Delphi Project. (Contém código-fonte em Pascal.) Desenvolvimento Sim. .DFM 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. Desenvolvimento Sim. Todo formulário é armazenado em um arquivo PAS e em um arquivo DFM. .DCU Delphi Compiled Unit: o resultado da compilação de um arquivo Pascal. 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. .BMP, .ICO, .CUR Arquivos de bitmap, ícone e cursor: arquivos padrão do Windows usados para armazenar imagens de bitmap. Desenvolvimento: Image Editor Normalmente não, mas eles podem ser necessários em tempo de execução e para edição adicional. .CFG Arquivo de configuração com opções de projeto. Semelhante aos arquivos DOF. Desenvolvimento Necessário apenas se opções de compilação especiais foram 15 CEFET-UNED Prof. Mário André configuradas. .DOF Delphi Option File: um arquivo de texto com as configurações atuais para as opções de projeto. Desenvolvimento Exigido apenas se opções de compilação especiais foram configuradas. .DSK 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. Desenvolvimento Não. Você deve excluí-lo se copiar o projeto em um novo diretório. .EXE Aquivo executável: o aplicativo Windows que você produziu. Compilação: Ligação (linking) Não. Esse é o arquivo que você vai distribuir. Ele inclui todas as unidades compiladas, formulários e recursos. .~PA Backup do arquivo Pascal Pode ser ativado ou desativado através do Menu Tools – Editor Options - guia display – Item: Create backup file. Desenvolvimento Não. Esse arquivo é gerado automaticamente pelo Delphi, quando você salva uma nova versão do código-fonte. .TODO Arquivo da lista to-do, contendo os itens relacionados ao projeto inteiro. Desenvolvimento Não. Esse arquivo contém notas para os programadores. 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: Unit Unit1; Interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; Type 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. 17 CEFET-UNED Prof. Mário André 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. Exemplo: Nome gerado pelo Delphi Objetivo Convenção Button1 Sair da aplicação BtnSair Edit1 Receber nome do usuário EdtNome Label1 Indicar componente Edit 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 20 CEFET-UNED Prof. Mário André 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. A lista de forms pode ser ativada através do menu View, opção Forms..., ou através do segundo ícone inferior da SpeedBar ou através da combinação das teclas <Alt> <F12>. A Lista de Janelas A 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>. Prática 2 - Exercício de Gerenciamento de Projetos 1. Finalidade: Demonstração das diversas forma de Gerenciamento de Projetos 2. Roteiro: a. Crie uma pasta Aulas Delphi e dentro desta outra Gerencia de Projeto 21 CEFET-UNED Prof. Mário André b. Inicialize o Delphi c. Insira um Label com Caption 'Formulário 1' d. Salve o projeto com Projeto_1 e a unidade com Unit_1. 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. Observe o código de Unit_1 f. 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 a unidade com Unit_2 h. Insira novo formulário ao Projeto utilizando opção diferente da 1ª. i. Salve a unidade com Unit_3 Observe que as unidades podem ser selecionadas pelas guias, 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.. j. Salve todo o Projeto k. Remova a Unit_2 do Projeto Botão Remove da Opção Project Manager do Menu View No Project Manager, botão direito sobre o nome do projeto ou unit, opção Remove File ... Opção Remove from Project do Menu Project 7º ícone superior do SB l. Adicione a Unit_2 ao Projeto No Project Manager, clicar com botão direito sobre o nome do projeto, opção Add ... Opção Add to Project do Menu Project 6º ícone superior do SB m. Observando o código do Projeto Opção View Source do Menu Project - Observe seu nome na Guia de Units (para fechar utilize botão direito do mouse - Opção Close Page) n. Atente para a cláusula uses e seu código (begin ... end.) Qual o formulário que será criado quando a aplicação for executada? p. Execute a aplicação e vamos conferir qual o formulário criado. q. Feche a aplicação 22 CEFET-UNED Prof. Mário André SomaNum; end; end. Agora, execute o programa, introduza dois números pequenos, pressione o botão Ok e observe que o resultado está incorreto. Para descobrir por que, vamos usar o depurador para percorrer o código e ver o que aconteceu. Definindo um Ponto de Quebra (BreakPoint) Um ponto de quebra permitirá que o programa seja executado normalmente, até encontrá-lo, e então o depurador parará na linha em esse ponto foi definido, sem executá-la. Para definir um ponto de quebra, 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, ou então tecle <F5> na desejada. Na realidade, esses procedimentos ativam e desativam pontos de quebra. O editor de código mostrando a mediatriz com um ponto de quebra assinalado Execute o programa. digite 4 e 5 e depois pressione o botão Ok. O editor deve aparecer, mostrando a posição em que o ponto de quebra foi definido, conforme figura 27. Agora o ponto de quebra tem uma marca verde na mediamiz, mostrando que você parou neste ponto, e uma seta verde apontando para a direita aparece na mediamiz, mostrando sua posiçao no código. Esta linha ainda não foi executada, ou seja, a seta verde aponta para a próxima linha de execução. 25 CEFET-UNED Prof. Mário André O editor de código no modo debug, 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. Isto pode ser muito útil, se seu código falha somente em certas condições ou no meio de um loop muito grande. Para definir condições ou contagem de passagem, você usa a opção de menu Run | Add Breakpoint para acessar a caixa de diálogo Edit Breakpoint. Opções de Depuração O menu Run do Delphi contém algumas opções de depuração adicionais, que têm toques de tecla de atalho correspondentes: Opção Significado Run (F9) Compila e executa iu, no modo depurador, continua a executar a partir desse ponto. Step Over (F8) Executa cada linha do código, mas não entra nas chamadas de funções e procedures. Trace Into (F7) Permite que o depurador siga o código de uma chamada de função ou procedure. Trace to Next Source Line (Shift F7) Segue até a próxima linha executável. Runt to Cursor (F4) Executa até a posição corrente do cursor, na janela do editor Show Execution Point Coloca o cursor no ponto de execução corrente. Program Reset (Ctrk F2) Finaliza a execução do programa 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). Uma sentinela permite que você especifique nomes de variável que deseja monitorar e apresentar seus valores numa pequena janela. Para inserir uma sentinela, você pode pressionar <Ctrl> <F5> ou selecionar Run | Add Watch para acessar a caixa de diálogo Watch Properties, conforme a figura. Em uma sentinela, você pode especificar nomes de variável e expressões como Valor1 + Valor2 ou StrToInt(Valor1). 26 CEFET-UNED Prof. Mário André A caixa de diálogo Watch Properties A janela Watch List Na caixa de diálogo Watch Properties, digite Value1 na caixa de texto Expression. Isto cria a janela Watch List, onde as variáveis controladas e seus valores correntes serão apresentados, como na figura. Se a variável ainda não foi criada ou atribuída, várias mensagens serão apresentadas, indicando o status da variável em que o valor normalmente estaria. A mensagem pode indicar Process not accessible, o que significa que o código que cria essas variáveis não foi iniciado ou que ele terminou e as variáveis foram retiradas da memória. Você também poderia ver a mensagem Inaccessible here due to optimation, que normalmente significa que a variável ainda não foi atribuída. Quando as linhas de código que tratam da variável que você atribuiu uma sentinela são executadas, o valor é apresentado na janela Watch List. COMENTÁRIOS Os comentários no código fonte são importantes e podem ser feitos através dos seguintes símbolos: //Comentário de linha { Comentário de bloco } (*Comentário de bloco *) 27 CEFET-UNED Prof. Mário André fsMDIChild – O formulário será uma janela-filha de uma aplicação MDI. fsMDIForm – O formulário será o formulário-pai de uma aplicação MDI. fsStayOnTop – O formulário permanece sobre todos os outros formulários do projeto, exceto aqueles que também têm a propriedade FormStyle igual a fsStayOnTop. Height Define a altura do objeto. HelpContext Define o tópico do arquivo help que será exibido ao pressionar a tecla F1. HelpFile Define um arquivo de help específico. Hint Permite exibir um texto de auxílio no momento em que o ponteiro do mouse permanece sobre o controle. HorzScrollBar Define o comportamento de uma barra de rolagem horizontal. Icon Define o ícone que será usado pelo formulário. KeyPreview Define se o formulário deve ou não responder a um pressionamento de tecla, através do evento OnKeyPress, por exemplo. Left Define a coordenada da extremidade esquerda de um componente. Menu Permite escolher entre mais de um componente MainMenu. Name Define o nome interno que identifica o componente dentro da aplicação. PopupMenu Define o componente PopupMenu a ser utilizado pelo objeto. Position Permite definir o tamanho e posição de um formulário no momento em que ele aparece na sua aplicação. ShowHint Define se a string de auxílio deve ou não ser exibida quando o usuário mantém o ponteiro do mouse sobre um controle. Tag A propriedade Tag é uma variável do tipo Longint que o Delphi coloca à disposição do usuário, que pode atribuir o significado mais conveniente. Top Define a coordenada da extremidade superior de um componente. VertScrollBar Define o comportamento de uma barra de rolagem vertical. Visible Define se o componente aparece ou não na tela. Width Define a largura do objeto. WindowMenu Permite definir qual o menu responsável por manipular as janelas-filhas de uma aplicação MDI. WindowState Define o estado de exibição de um formulário. Métodos Show Exibe o formulário de manipulação não-modal. ShowModal Exibe o formulário de manipulação modal. Close Permite fechar o formulário. Objeto – Button1 (Botão) Paleta – Standart Importância: É um dos objetos mais utilizados para confirmar e disparar rotinas associadas. Propriedades Action Referencia uma ação definida em um objeto TActionList. Anchors Permite manter a posição relativa do objeto ao objeto ‘parente’ quando este é redimencionado. 30 CEFET-UNED Prof. Mário André Cancel Associa o evento OnClick do objeto ao pressionamento da tecla Esc. Default Associa ao evento OnClick do objeto ao pressionamento da tecla Enter. ModalResult Propriedade utilizada para encerrar a execução de um formulário Modal quando selecionado um valor diferente de mrNone. Parent... As propriedades Parent permitem que o componente receba a mesma formatação do objeto proprietário. TabOrder Define a ordem na passagem de foco no momento de pressionamento da tecla TAB. TabStop Define se o foco pára no componente. Métodos SetFocus Envia o foco do windows para o componente. 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 Define se o texto exibido pelo controle será selecionado quando este receber o foco da aplicação. AutoSize Para componentes TEdit a propriedade determina se a altura do controle será redimensionada quando o tamanho da fonte for alterado. BorderStyle Determina o tipo da borda do componente. CharCase Determina o se tipo da fonte será maiúscula, minúscula ou normal. HideSelection Define se o texto perde a seleção ao perder o foco. Maxlength Define um limite para a inserção de caracteres. PasswordChar Define qual caractere será usado para ocultar o texto inserido no componente. Text Permite manipular os caracteres inseridos no componente pelo usuário. Métodos Clear Limpa o conteúdo da propriedade text. SetFocus Envia o foco do windows para o componente. Exercício Confeccione um formulário conforme esquema abaixo: 31 CEFET-UNED Prof. Mário André Funcionalidade: 1. As caixas de edição e os rótulos só ficarão habilitados se ‘Delphi’ for digitado na 1ª caixa 2. O botão Ok só ficará habilitado se o texto das últimas caixas forem iguais e diferentes de branco. Altere as seguintes props do formulário: Ctl3D = False, BorderStyle = bsDialog, Height = 225, Width = 280 e Position = poCenter Faça com que as teclas <Enter> ou <Esc> finalize a aplicação. Faça as três caixas de edição ficarem sem texto e que para cada caractere digitado um @ seja exibido. Faça com o acesso mnemônico aos rótulos ative a caixa de edição correspondente. Defina o evento para fechamento do formulário através do clique nos botões Desabilite o botão Ok, os dois últimos rótulos e as duas últimas caixas de edição. 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 Define o alinhamento da string na área do componente. AutoSize Para componentes TDBText e TLabel, esta propriedade define se o controle será automaticamente redimensionado para acomodar o texto. FocusControl Define qual o componente receberá foco quando o usuário selecionar a combinação de teclas aceleradoras (atalho) se existir. Layout Define o alinhamento vertical do texto na área do componente. ShowAccelChar Define se o caracter ‘&’ será um literal ou tecla de aceleradora (atalho). Transparent Define se o fundo do componente será ‘transparente’ ou não. 32 CEFET-UNED Prof. Mário André WantReturns Define se a tecla ENTER será utiliza para ‘quebra de linha’. WantTabs Define a tecla Tab como tabulação ou mudança de foco. Caso falso pode- se utilizar CTRL+TAB para produzir o efeito desejado. Métodos LoadFromFile Permite ‘carregar’ um arquivo para a propriedade Lines. SaveToFile Permite salvar o conteúdo da propriedade Lines em um arquivo especificado. 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). Checked Define se o componente está ligado ou não, caso tenha apenas dois estados. State Permite definir três estados se AllowGrayed for verdadeiro. Exercício Confeccionar uma aplicação conforme lay-out abaixo. Defina o codigo inicialmente prevendo que os CheckBoxs tenham a prop. AllowGrayed = False e execute. Depois defina o código com essa prop. = True Funcionalidade: Ao se marcar um item, adicionar 1 na Caixa de Edição Total de Itens assinalados. E ao se desmarcar um, decrementar o valor desta Caixa. 35 CEFET-UNED Prof. Mário André Objeto – RadioButton (Botão de ‘radio’) Paleta – Standart Importância: Permite escolher entre um grupo, pelo menos uma opção. Propriedades Checked Define se o componente está ligado ou desligado. Exercício Confeccionar uma aplicação conforme lay-out abaixo. Insira primeiro o GroupBox e depois os botões de rádio. Observe que é interessante definir acessos mnemônicos para os botões. Funcionalidade: Para “Nada a Fazer”, tire a marca do botão assinaloado e para “O que Fazer” exiba como mensagem o Caption do botão assinalado. 36 CEFET-UNED Prof. Mário André Objeto – ListBox (Caixa de listagem) Paleta – Standart Importância: Permite o usuário entrar ou manipular uma lista de dados. Propriedades Items Define uma lista de Strings que aparece no componente. MultiSelect Permite selecionar vários itens (Strings) no componente. Sorted Define se a lista de Strings será ordenada ou não. Métodos Clear Permite limpar o conteúdo da propriedade Items. LoadFromFile Permite ‘carregar’ um arquvo para a propriedade Items. SaveToFile Permite salvar o conteúdo da propriedade Items para um arquivo. 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 Items Define uma lista de Strings que aparece no componente. Sorted Define se os dados serão ordenados. Text Define o texto atual da Combobox. Métodos Clear Permite limpar o conteúdo da propriedade Items. LoadFromFile Permite ‘carregar’ um arquvo para a propriedade Items. SaveToFile Permite salvar o conteúdo da propriedade Items para um arquivo. 37 CEFET-UNED Prof. Mário André Paleta – Standart Importância: Permite estabelecer um grupo de botões de radio e manipula-los pela propriedade ItemIndex. Propriedades Items Define os itens disponíveis ao usuário. ItemIndex Define qual dos itens está selecionado. Columns Define o número de colunas para organização dos componentes. Exercício 1: Utilizando-se da interface mostrada na figura abaixo, produzir uma aplicação que apresente a seguinte funcionalidade:  O Clique no botão OK deverá incrementar a quantidade de votos de cada equipe e a quantidade de entrevistados dos dois sexos.  Sexo é um RadioGroup e as demais caixas GroupBox Exercício –2: 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 40 CEFET-UNED Prof. Mário André Alterar o conteúdo da Caixa de Edição Frase quando qualquer uma das Caixas for alterada. Objeto – Panel (Painel) Paleta – Standart Importância: Permite agrupar outros objetos e estabelecer um efeito visual nas aplicações. Propriedades Align Define o alinhamento do componente em relação ao seu proprietário. Bevel... Define a característica das bordas (interna e externa) bem como sua espessura. BorderStyle Define o tipo da borda. Exercício Utilizando uma Panel como Barra de Status para exibição de Dicas Flutuantes Insira um Panel no formulário limpo e defina as propriedades: Align = alBottom Alignment = ta LeftJustify BevelInner = bvLowered Caption = (nenhum) 41 CEFET-UNED Prof. Mário André Manipulador para o evento OnClick do Panel digite: Panel1.Caption := Application.Hint Vá no Object Inspector e exclua a conexão do Panel com esse manipulador. Através do menu Search | Replace, troque as ocorrências Panel1Click para DoShowHint. No manipulador de evento OnCreate do formulário, digite: Application.OnHint := DoShowHint; Insira alguns componentes no formulário e defina dicas através da prop. Hint. Seja criativo. Execute Observe que sempre que o cursor estiver sobre um dos componentes, a dica aparecerá na Barra de status. 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), que geralmente é curta. Para resolver isso, selecione um componente e na prop. Hint defina “dica instantânea” | “dica flutuante”. Assim, quando o cursor passar sobre o componente, o texto da dica instantânea será exibida próximo ao mesmo e o texto da dica flutuante, na linha de status. 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 Items Define um novo item de Menu. Images Define um objeto do tipo ‘ImageList’. 42 CEFET-UNED Prof. Mário André 1. Insira um Label no formulário e limpe sua legenda 2. Insira um MainMenu com 1 Menu suspenso e este com 3 itens de menu quaisquer. 3. Construa o código para que cada vez que selecionarmos um item de menu, a legenda do label receba a sua descrição 4. Execute a aplicação e depois remova os compoentes inseridos no formulário Exercício –2: Confeccione a estrutura de Menu conforme layouts abaixo, observando os nomes dos menus suspensos e dos itens de menu. Para obtermos uma janela com melhor aparência altere a prop Color do formulário para clBtnShadow Viajar Namorar Comer Estudar Bye Bye Praias Ctrl P Cinema Aquilo Cobol Sobre Montanhas Boite - Assuntos Espec. Florestas  Sofá E Mais Aquilo - - - Religião Casa da Vovó Junto com Sogra - - Regressar No .. 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. 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. 45 CEFET-UNED Prof. Mário André 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... 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. O usuário pode modificar o valor representado pelo scrollbar de duas formas: clicando nas setas de incremento/decremento ou diretamente na barra. A primeira ação faz com que o valor representado sofra uma modificação menor (SmallChange) enquanto a segunda gera uma maior (LargeChange). Os limites inferior e superior da faixa de valores válidos para a ScrollBar são dados por Min e Max respectivamente. Estes limites representam o valor quando o cursor da barra estiver em cima ou à esquerda (Min) ou em baixo ou à direita (Max). O controle provê fácil e eficiente navegação por longa lista de itens ou grande quantidade de informação que não podem ser totalmente visualizadas nas suas áreas de exibição. Pode também ser usado como entrada de dados ou como mostrador de informações (valores numéricos). Principais Propriedades Propriedade Descrição Kind Define a direção da barra de rolagem LargeChange Indica a variação da rolagem feita sem o uso das setas de movimentação Max Maior valor do ScrollBar Min Menor valor do ScrollBar 46 CEFET-UNED Prof. Mário André Position Indica a posição atual do srollbar SmallChange Indica a variação da rolagem feita com o uso das setas de movimentação Principais Eventos Evento Descrição OnChange Disparado quando o conteúdo da propriedade position é alterado pelo usuário, e ocorre imediatamente após o OnScroll OnScroll Ocorre quando é feita a rolagem do ScrollBar Principais Métodos Métodos Descrição SetParams Modifica os valores das propriedades Position, Min e Max de uma só vez 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 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 47 CEFET-UNED Prof. Mário André DECLARAÇÕES CRIADAS AUTOMATICAMENTE PELO DELPHI Se você é um bom observador, percebeu que o Delphi também gera as declarações e seus respectivos procedimentos quando você deseja manipular um determinado evento. 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.’); 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 É uma constante string ou propriedade deste tipo. DlgType: TmsgDlgType 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. Buttons: TMsgDlgButtons mbYes mbNo mbOK mbCancel mbAbort mbRetry mbIgnore mbAll mbNoToAll mbYesToAll mbHelp 50 CEFET-UNED Prof. Mário André HelpCtx: Longint 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 É uma constante string ou propriedade deste tipo. Caption: PChar Define uma string para o título da janela. Flags Define os botões, ícones e a possibilidade de focar um determinado botão. Os valores para botões são: MB_ABORTRETRYIGNORE, 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: 51 CEFET-UNED Prof. Mário André if Application.MessageBox('Texto','Título',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. InputBox A função InputBox retorna um tipo String, que é dado digitado pelo usuário na sua utilização. Sua definição interna é a seguinte: function InputBox(const ACaption, APrompt, ADefault: string): string; Onde: const ACaption Define o título da janela APrompt Define um rótulo para orientação dentro da caixa. ADefault Define um valor default para a caixa. Exemplo: InputBox('Título da janela','Descrição','Valor Padrão') InputQuery A função InputQuery retorna um tipo Booleano, o dado digitado pelo usuário será colocado em uma variável do tipo string previamente declarada. Sua definição interna é a seguinte: function InputQuery(const ACaption, APrompt: string; var Value: string): Boolean; Exemplo: if InputQuery('Título', 'Descrição', aux) and (aux <> '') then 52 CEFET-UNED Prof. Mário André Botão Yes padrão, com uma marca de verificação na cor verde e propriedade Default igual a True. bkNo Botão No padrão, com uma marca vermelha representando um círculo cortado e propriedade Cancel igual a True. bkHelp Botão de auxílio padrão, com uma interrogação na cor cyan. Quando o usuário clica sobre o botão, uma tela de auxílio deve ser exibida (baseada no código do desenvolvedor). bkClose Botão Close padrão, com o desenho de uma porta. Quando o usuário clica sobre o botão, o formulário a que ele pertence se fecha. bkAbort Botão Abort padrão, com um “x” na cor vermelha e propriedade Cancel igual a True. bkRetry Botão Retry padrão, com uma seta circular verde. bkIgnore Botão ignore padrão, com o desenho de um homem verde se afastando. bkAll Botão All padrão, com uma marca de verificação dupla na cor verde e propriedade default igual a True. ModalResult Permite encerrar a execução de um formulário Modal quando o seu valor for diferente de mrNone. 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. Pode ser considerado literalmente um componente ‘Edit com máscara’. Propriedades CharCase Define o tipo dos caracteres. EditMask Permite definir uma máscara para entrada de dados. PasswordChar Define um caracter para ocultar a entrada de dados. 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 Significado na Máscara 55 CEFET-UNED Prof. Mário André ! 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 espera- se o caractere < < Marca o início do bloco que deve ser convertido em letras minúsculas, para fechar esse bloco espera- se 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. L Requer a entrada de caractere alfabético (A-Z, a-z) nesta posição l Permite a entrada de caractere alfabético (A-Z, a-z) nesta posição, mas não requer A Requer a entrada de caractere alfanumérico (A-Z, a-z, 0-9) nesta posição a Permite entrada caractere alfanumérico (A-Z, a-z, 0-9) nesta posição, não requer C Requer um caractere qualquer nesta posição c Permite um caractere qualquer nesta posição, mas não requer 0 Requer um caractere numérico (0-9) nesta posição 9 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 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 Define um Bitmap para o componente. GroupIndex Permite agrupar um conjunto de SpeedButtons quando ao serem selecionados, tiverem a propriedade diferente de zero. AllowAllUp Permite que o componente possa ter o relevo suspenso ao ser clicado. Só pode ser utilizado junto ao conceito de agrupamento. Flat Define um efeito visual interessante. Down Permite determinar qual componente foi pressionado. Só pode ser utilizado junto ao conceito de agrupamento. Exemplo: 56 CEFET-UNED Prof. Mário André Objeto – Image (Imagem) Paleta – Additional Importância: Permite inserir uma figura para uso geral na aplicação. Propriedades AutoSize Permite alterar o tamanho do componente baseado no tamanho da figura. Picture Define a figura a ser exibida. Stretch Permite alterar o tamanho da figura baseado no tamanho do componente. Métodos LoadFromFile Permite ‘carregar’ um arquivo de figura na propriedade Picture. Para trabalhar com imagens jpg, é necessário acrescentar na cláusula uses da interface a biblioteca jpeg. Possibilita a exibição de uma figura (Bmp) Propriedade Significado Picture Definição da figura do tipo BMP, ICO, WMF ou EMF Center Centraliza a figura em relação ao Quadro (objeto) Strech Se True, adequa o tamanho da imagem com relação ao objeto AutoSize Se True, adequa o tamanho do objeto com relação a imagem Contrário da propriedade Strech 57 CEFET-UNED Prof. Mário André Utilizado para exibição e edição de uma tabela de strings. A sua apresentação é similar a uma planilha. É organizada em linhas e colunas, tendo como elemento básico as células (cells). Propriedade Descrição Cells Célula que está selecionada Col Número da coluna da célula selecionada Row Número da linha da célula selecionada ColCount Número de colunas (default = 5) RowCount Número de linhas (default = 5) FixedCols Número de colunas fixas FixedRows Número de linhas fixas DefaultColWidth Largura padrão das colunas DefaultRowHeight Altura padrão das linhas ColWidths Vetor que define a largura das colunas RowHeight Vetor que define a altura das linhas GridLineWidth Largura da linha da Grid Referência a uma célula: nome da grid.Cells[número da coluna, 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: ColWidths[0] := valor (1ª col)  Pode-se alterar a altura das linhas, também com: RowHeights[0] := valor (1ª linha) O StringGrid tem uma propriedade chamada Options, do tipo Set, que permite a configuração de diversas opções, inclusive a permissão ou não de edição de células. Valor Descrição goFixedVerLine Exibe linhas verticais em colunas fixas goFixedHorzLine Exibe linhas horizontais em colunas fixas goVerLine Exibe linhas verticais goHorzLine Exibe linhas horizontais goDrawFocusSelected Exibe a célula selecionada em cor de seleção goRowSizing Permite a mudança de tamanho da linha goColSizing Permite a mudança de tamanho das colunas (arrastando as células das linhas fixas) goRowMoving Permite a movimentação de linhas (arrastando as células das colunas fixas) goColMoving Permite a movimentação de colunas (arrastando as células das linhas fixas) goEditing Permite a edição do texto das células não fixas goTabs Permite o uso da tecla TAB para a navegação entre as células goRowSelect Seleciona uma linha inteira ao invés da célula corrente goAlwaysShowEditor Sempre exibe o editor (somente válido se goEditing) goThumbTracking Ao usar as scrollbars, o conteúdo é rolado em tempo real Máscaras de Edição É possível utilizarmos máscaras de edição para controlar a edição do texto de uma célula. Para tal, precisamos associar código ao evento OnGetEditMask da seguinte forma: 60 CEFET-UNED Prof. Mário André procedure TForm1.StringGrid1GetEditMask(Sender: TObject; ACol, ARow: Integer; var Value: String); begin if Acol = 1 then Value := '##/##/##'; end; Os caracteres usados para definir as máscaras de edição são os mesmos do componente TMaskEdit. Exercício 1 - Inserindo valores na Grid: 1. Insira no formulário: um StringGrid, 3 Edits, 3 Labels e um botão "Inserir" 2. No evento OnClick do botão inserir o texto do 3º Edit nas posições especificadas nos outros dois edits 3. Criticar os valores informados da linha e coluna Exercício 2 - Inserindo Títulos na Coluna e na Linha Fixa: 1. Insira os títulos para colunas: Seg, Ter, Qua, Qui 2. Insira os títulos para as linhas: 8:00, 9:00, 10:00, 11:00 Exercício 3 - Recuperando um valor da Grid 1. Insira um Edit e um botão "Recuperar" 2. No evento OnClick do botão fazer o Edit receber o valor da célula selecionada Exercício 4 - Uma pequena Aplicação: 1. Insira um StringGrid com 3 colunas e 2 linhas, 3 edits, 3 Labels e um botão "Inserir" 2. Defina "Nome", "Telefone" e "E-mail" para os Labels e Colunas 3. No Evento OnClick do botão inserir os conteúdos dos edits no StringGrid 4. Realizar as devidas críticas e controles para perfeita funcionalidade. Objeto - PageControl 61 CEFET-UNED Prof. Mário André Paleta – Win32 Importância: Permite definir guias para agrupar os demais componentes. Cada guia representa um componente TabSheet do tipo TTabSheet, uma espécie de ‘sub-objeto’ do PageControl. Propriedades ActivePage Permite determinar qual a guia foi selecionada pelo usuário. Para criar novas páginas, clique com o botão direito no componente PageControl e escolha New Page. 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. Propriedades DefaultExt Especifica a extensão a ser adicionada ao nome de um arquivo quando o usuário digita o nome de um arquivo sem a sua extensão. FileName Define o arquivo selecionado no componente. Filter Permite definir as máscaras de filtro de arquivo a serem exibidas. FilterIndex Define o filtro default a ser exibido na lista drop-down que define os tipos de arquivos selecionáveis. InitialDir Define o diretório default quando a caixa de diálogo é aberta. Options Neste componente, options define uma série de valores booleanos. Title Define o título da caixa de diálogo. Os componentes da paleta dialogs são executados através do método execute. Este método é uma função que retorna um valor booleano, assim para exibir uma caixa de diálogo, podemos escrever: if OpenDialog1.Execute then Se o usuário escolher algum arquivo e confirmar a caixa, execute retorna verdadeiro, caso contrário, falso. Objeto – RichEdit (Texto com formatação) 62 CEFET-UNED Prof. Mário André Propriedades CalColors Define as cores do calendário. Date Define a data selecionada no componente. DateFormat Define o formato da apresentação da data. DateMode Define o estilo da caixa de listagem. Kind Define se o componente deve trabalhar com data ou hora. MaxDate Define uma data máxima para uma faixa de valores. MinDate Define uma data mínima para uma faixa de valores. Objeto – MonthCalendar (Calendário mensal) 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. Propriedades Date Define a data selecionada no componente. FirstDayOfWeek Define qual o primeiro dia da semana. WeekNumbers Permite numerar as semanas. Objeto – StatusBar (Barra de status) Paleta – Win32 Importância: Um dos principais componentes de informações sobre operações gerais no sistema. Propriedades AutoHint Permite exibir o hint do componente automaticamente na barra de status. Se não houver painéis, a barra deve ter a propriedade SimplePanel ligada. SimplePanel Define que a barra de status será sem divisões. SimpleText Define o texto a ser exibido pela barra de status. Panels Permite a criação e edição de painéis na barra de status. A propriedade SimplePanel deve estar desligada. Pode-se também dar um duplo clique na barra de status. Ao utilizar a propriedade AutoHint, pode-se definir o hint dos objetos com duas strings separadas por pipe (‘|’). 65 CEFET-UNED Prof. Mário André A primeira string será utilizada como hint local, a segunda como hint na barra de status. Inserindo dicas no StatusBar Para obter esse efeito, são necessárias duas etapas: 1. Inserir componentes no formulário e definir uma ou duas dicas através da propriedade Hint. 2. Escrever o código para evento OnHint do componente ApplicationEvents Praticando: 1. Insira alguns componentes no formulário e defina a prop. Hint dos mesmos. Já vimos que a dica instantânea do componente pode ser = ou <> do StatusBar. 2. Insira o componente ApplicationEvents 3. Defina o código abaixo no seu evento OnHint: procedure Tform1.ApplicationEvents1Hint (Sender : TObject); begin Statusbar1.Panels[0].Text := Application.Hint; end; Inserindo Data e Hora no StatusBar Você utilizar as funções que manipulam data e hora no Object Pascal. Mesmo utilizando essas funções devemos nos planejar como e quando a data e a hora serão atualizadas para serem exibidas. A forma mais fácil para realizar tal controle é inserir no formulário um componente Timer (paleta System) e configurar sua prop. Interval (Default = 1000 milissegundos = 1 segundo) que é a frequência do intervalo de tempo das ocorrências do evento OnTimer do comp. Timer. Logo, o código desse evento deve recuperar a data e/ou a hora do sistema e depois exibí-las no StatusBar. procedure TForm1.Timer1Timer (Sender : TObject); { variáveis que receberão Data e hora do Sistema } var Data_Hora : TDateTime; // Tipo float que armazenará a data + a hora Data_Sys : TDate; Data_Hora : TTime; begin {Recuperando a data e a hora do sistema} Data_Hora := Now; Data_Sys := Date; Hora_Sys := Time; {Exibindo Data e Hora } 66 CEFET-UNED Prof. Mário André StatusBar1.Panels[0].Text := DateToStr(Data_Hora); StatusBar1.Panels[1].Text := TimeToStr(Data_Hora); {Outra forma de exibição StatusBar1.Panels[0].Text := DateToStr(Data_Sys); StatusBar1.Panels[1].Text := TimeToStr(Hora_Sys); } {Outra forma de exibição StatusBar1.Panels[0].Text := DateToStr(Date); // Não necessário criar variáveis StatusBar1.Panels[1].Text := TimeToStr(Time); end; Observação: Se o intervalo for grande (p. ex. 60000 = 1 minuto) para aparecer logo a data e a hora nos SubPaineis, ative o evento acima dentro do evento OnCreate do formulário ou, se possível, compartilhe este evento com ele. Se configurarmos a prop. Enabled do componente Time em False, o seu evento OnTimer não ocorrerá. Dica: Sempre que você usar um StatusBar, preencha o resto do formulário com uma caixa de rolagem (ScrollBox da paleta Additional) e defina a sua prop. Align para alClient. Caso contrário, se o usuário diminuir o formulário o bastante para que as barras de rolagem apareção, estas se misturarão com o StatusBar. Objeto – ToolBar (Barra de ícones) Paleta – Win32 Importância: Permite criar barras de ícones de maneira rápida e simples. Propriedades Flat Define um efeito visual com relevo através do mouse nos botões. Images Permite definir um objeto do tipo ImageList. HotImages Permite definir um objeto do tipo ImageList a ser usado no momento em que o mouse passa (ou clica) sobre o componente. ShowCaptions Permite exibir a propriedade caption dos botões. Para adicionar botões ou separadores na ToolBar, clique com o botão direito sobre o componente e escolha New Button ou New Separator. 67 CEFET-UNED Prof. Mário André A CONSTRUÇÃO ON-DO try Abre(Arq); while not Fim(Arq) do processa(Arq); except on EInOutError do //erro de entrada e saída begin Showmessage(‘Problemas...’); Fecha(Arq); end; on EdivByZero do //erro de divisão de nº inteiro por zero Showmessage(‘Erro ao dividir por zero’); on EconvertError do //erro de conversão de tipos Showmessage(‘Erro de conversão de tipos de dados’); end; //bloco try Podemos ainda definir utilizando a cláusula on-do com um handler genérico usando else, da seguinte forma: try Processa; except on Exceção1 do Trata1; on Exceção2 do Trata2; else TrataOutras; end; Os principais tipos de exceção da RTL (RunTime Library) do DELPHI, a serem tratadas nos blocos on ... do são: Nome Descrição EaccessViolation Ocorre quando se tenta acessar uma região de memória inválida (ex: tentar atribuir valor a um ponteiro cujo conteúdo é nil). EconvertError ocorre quando se tenta converter um string em um valor numérico (ex: utilizar a função StrToInt em uma letra). EdivByZero ocorre na divisão de um número inteiro por zero. EinOutError ocorre numa operação incorreta de I/O (ex: abrir um arquivo que não existe). EintOverFlow ocorre quando o resultado de um cálculo excedeu a capacidade do registrador alocado para ele (para variáveis inteiras). EinvalidCast ocorre quando se tenta realizar uma operação inválida com o operador as (ex: tentar usar um Sender com uma classe que não corresponde a seu tipo). EinvalidOp ocorre quando se detecta uma operação incorreta de ponto flutuante. EinvalidPointer ocorre quando se executa uma operação invalida com um ponteiro (ex: tentar liberar um ponteiro duas vezes). EoutOfMemory ocorre quando se tenta alocar memória mas já não existe mais espaço suficiente. EoverFlow ocorre quando o resultado de um cálculo excedeu a capacidade do registrador alocado para ele (para variáveis de ponto flutuante). ErangeError ocorre quando uma expressão excede os limites para a qual foi definida (ex: 70 CEFET-UNED Prof. Mário André tentar atribuir 11 ao índice de um vetor que pode ir no máximo até 10). EstackOverflow ocorre quando o sistema não tem mais como alocar espaço de memória na Stack. Eunderflow ocorre quando o resultado de um cálculo é pequeno demais para ser representado como ponto flutuante. EzeroDivide ocorre quando se tenta dividir um valor de ponto flutuante por zero. O COMANDO TRY-FINALLY Há um outro comando cuja sintaxe começa com try. Este controle de finalização nos permite lidar de forma estruturada com as situações em que alocamos algum tipo de recurso e, haja o que houver, precisamos depois liberá-lo. <aloca o recurso> try <usa o recurso> finally <libera o recurso com ou sem exceção> end; O comando funciona da seguinte forma: os comandos especificados após o Try são executados seqüencialmente. Se não ocorrer nenhuma exceção, os comandos especificados após finally são executados, e o programa prossegue com a execução normal, com o comando seguinte ao try-finally. Porém, se houver alguma exceção – qualquer uma – durante a execução da lista de comandos do try, o trecho após o finally é executado e, no final, a exceção é reativada. Em resumo: Os comandos do bloco finally sempre são executados, haja ou não alguma exceção durante a execução dos comandos especificados após o try. BLOCOS TRY ANINHADOS Exemplo: 1 2 Try abrir arquivo algumas operações fechar arquivo except ... abrir arquivo Try algumas operações finally fechar arquivo Observamos que no quadro 1 se em “algumas operações” ocorrer uma exceção, o arquivo não será fechado. Logo, devemos utilizar a solução do quadro 2, pois nessa codificação, o arquivo será fechado, independentemente da ocorrência da exceção. Entretanto, se observarmos melhor, a solução do quadro 2 é que ela não trata a exceção. Como regra temos que um bloco try pode ser seguido por uma instrução except ou finally, mas não por ambas simultaneamente. A solução típica é utilizar os dois blocos try 71 CEFET-UNED Prof. Mário André aninhados. Dê ao interno uma instrução finally e dê ao externo uma instrução except, ou vice- versa, conforme a situação exigir. Podemos mesclar as duas maneiras, conforme o código abaixo: var i,j : real; begin try try i := strtofloat(edit1.text); j := strtofloat(edit2.text); edit3.text := floattostr(i/j); except on exception do showmessage('Ocorreu uma exceção'); end; finally showmessage('alguma instrucao'); end; end; Outro Exemplo: procedure TForm1.Button1Click(Sender: Tobject); var i, aux:integer; begin aux := 500; try {inicio do bloco try-finally. Screen controla uma serie de recursos do sistema operacional neste exemplo, muda-se a aparencia do cursor para ampulheta} Screen.Cursor := crHourGlass; try//inicio do bloco try-except for i:=0 to aux do begin Edit1.Text := IntToStr(i); Application.ProcessMessages; {O método ProcessMessages é necessário para forçar que as mensagens do windows sejam processadas, desenhando o numero no Edit. Sem ele, apenas o valor final seria visto.} end; except Showmessage('Ocorreu um erro.'); end;//fim do bloco try-except finally Screen.Cursor := crDefault; end;//fim do bloco try-finally end; //fim da procedure CLASSE EXCEPTION A classe Exception também possui o objeto E, que recebe o valor do objeto exceção passado pela instrução raise Observe o código abaixo: Begin Try 72 CEFET-UNED Prof. Mário André Opções Valor Significado ofAllowMultiSelect Permite que o usuário selecione mais de um arquivo na caixa de diálogo. ofCreatePrompt Gera uma mensagem de advertência se o usuário tentar selecionar um arquivo inexistente e pergunta se quer criar um arquivo novo com o nome especificado. ofExtensionDifferent Esta tag muda em tempo de execução sempre que o nome do arquivo selecionado tem uma extensão que difere de DefaultExt. ofFileMustExist Gera uma mensagem de erro se o usuário tenta selecionar um arquivo inexistente. ofHideReadOnly Remove o checkbox de confirmação para somente leitura ofNoChangeDir Depois que o usuário clica OK, reajusta o diretório corrente para o que estava antes da caixa de diálogo ser aberta. ofNoDereferenceLinks Opção para reconhecer um arquivo de atalho de Windows, como um atalho ou como um arquivo qualquer. ofNoLongNames Mostra apenas arquivos com 8.3 caracteres. ofNoNetworkButton Remove o botão de Rede da caixa de diálogo. ofNoReadOnlyReturn Gera uma mensagem de erro se o usuário tenta selecionar um arquivo somente de leitura. ofNoTestFileCreate Desabilita o teste de proteção de arquivo em rede e disco inacessíveis. Só se aplica quando o usuário tenta salvar um arquivo em um diretório de rede compartilhado. ofNoValidate Permite seleção de nomes de arquivo com caracteres inválidos. ofOldStyleDialog Cria o estilo do Windows 3.1 para caixa de diálogo. ofOverWritePrompt Gera uma mensagem de advertência se o usuário tentar selecionar um nome de arquivo que já está em uso e pergunta se quer sobrescrever o arquivo existente. (Use com TsaveDialog e TSavePictureDialog.) ofPathMustExist Gera uma mensagem de erro se o usuário tentar selecionar um nome de rquivo que inexistente. ofReadOnly Seleciona como padrão o ComboBox habilitado pela opção ofHideReadOnly. ofShareAware Ignora erros compartilhados e permite selecionar arquivos até mesmo quando acontecem violações de compartilhando. ofShowHelp Exibições um botão de Ajuda na caixa de diálogo. OBS: Todas as opções são marcadas como falso. Principais Eventos Evento Descrição OnClose Ocorre quando a caixa de diálogo é encerrada. OnShow Ocorre quando a caixa de diálogo é iniciada. OnFolderChange Ocorre quando um diretório é aberto ou é fechado na caixa de diálogo. OnSelectionChange Ocorre quando nomes de arquivo exibidos no diálogo é mudado, isto é, o evento de OnSelectionChange acontece quando o usuário faz algo que mude a lista exibida no diálogo. Isto pode incluir: selecionando um filtro novo, selecionando um diretório novo, ou criando uma pasta nova. OnTypeChange Ocorre acontece quando o usuário seleciona um filtro novo de arquivo no ComboBox de Tipo na caixa de diálogo. 75 CEFET-UNED Prof. Mário André Principais Métodos Métodos Descrição Execute Abre a caixa de diálogo do OpenDialog e devolve true quando o usuário seleciona um arquivo dar um Clique para abrir o arquivo. Se o usuário clicar Cancele retorna False. ColorDialog O Componente TColorDialog exibe uma caixa de diálogo padrão do Windows para selecionar cores. A caixa de diálogo não aparece até que seja executado o método Execute. Quando o usuário seleciona uma cor e clica o OK, a caixa de diálogo fecha e a cor selecionada é armazenada na propriedade de Cor. Principais Propriedades Propriedade Descrição Color Retorna a cor selecionada. A cor padrão é clBlack. Quando o usuário seleciona uma cor na caixa de diálogo e clica o OK, a cor selecionada se torna o valor da propriedade de Cor. CustomColors Determina quais cores personalizada iniciam na caixa de diálogo. Cada cor personalizada é representada com uma string na forma ColorX=HexValue. Por exemplo, a seguinte string determina a primeira cor personalizada: ColorA=808022 Pode personalizar até 16 cores (ColorA até ColorP). Options Define características da caixa de diálogo. Na tabela abaixo estão discriminadas todas as opções. Opções Valor Significado cdFullOpen Exibe as opções de personalizar cores quando a caixa de diálogo e aberta. cdPreventFullOpen Desabilita o botão que Define a personalização de cores na caixa de diálogo, de forma que o usuário não pode definir cores novas. cdShowHelp Adiciona um botão de Ajuda na caixa de diálogo. cdSolidColor Direciona o Windows a usar a cor sólida mais próxima da cor escolhido. cdAnyColor Permite que o usuário selecione cores não-sólidas. OBS: Todas as opções são marcadas como falso. Principais Eventos Evento Descrição OnClose Ocorre quando a caixa de diálogo é encerrada. OnShow Ocorre quando a caixa de diálogo é iniciada. 76 CEFET-UNED Prof. Mário André Principais Métodos Métodos Descrição Execute Abre a caixa de diálogo do OpenDialog e devolve true quando o usuário seleciona um arquivo dar um Clique para abrir o arquivo. Se o usuário clicar Cancele retorna False. PrintDialog O Componente TPrintDialog exibe uma caixa de diálogo padrão do Windows para enviar trabalhos para uma impressora. O caixa de diálogo de impressão é modal e não aparece até que seja chamada pelo método Execute. Principais Propriedades Propriedade Descrição Collate Indica se o Checkbox Collate na caixa de dialogo está selecionada. Copies Indica as cópias de número selecionadas na caixa diálogo de Impressão. FromPage Indica a página na qual o trabalho de impressão vai começar. MaxPage Determina o maior número de páginas que usuário pode imprimir. Se o usuário tenta entrar com um número maior que MaxPage, uma mensagem de erro aparece. OBS: O usuário só pode especificar o número de página se a opção poPageNums estiver em True. MinPage Determina o menor número de páginas que usuário pode imprimir. Inverso do anterior. Options Define características da caixa de diálogo. Na tabela abaixo estão discriminadas todas as opções. PrintRange Define qual o intervalo de impressão ficará selecionado como padrão na caixa de diálogo. Podem assumir três valores: prAllPages ( O RadioButton “Todos” fica selecionado), prSelection (O RadioButton “Seleção” fica selecionado), prPageNums (O RadioButton “Páginas” fica selecionado). PrintToFile Seleciona o CheckBox ‘impressão para arquivo’ na caixa de diálogo como padrão. ToPage Indica a página na qual o trabalho de impressão termina. Opções Valor Significado PoDisablePrintToFile Desabilita (fica cinzento) o CheckBox “Imp. em arquivo”. (Aplicável somente a opção poPrintToFile for verdadeira). PoHelp Exibe um botão de Ajuda na caixa de diálogo. Pode não aparecer em algumas versões do Windows 95. PoPageNums Habilita o RadioButtom que permite que usuário especifique um intervalo de páginas. PoPrintToFile Exibe o CheckBox “Imp em arquivo” na caixa no diálogo. PoSelection Habilita o RadioButtom que permite que usuário especifique imprimir uma seleção. PoWarning Gera uma mensagem de advertência se o usuário tentar enviar um trabalho a uma impressora desinstalada. OBS: Todas as opções são marcadas como falso. 77 CEFET-UNED Prof. Mário André Gauge Paleta: Samples Importância: Utilizado para dar idéia do progresso na execução de uma tarefa. Propriedades Significado MinValue Valor mínimo MaxValue Valor máximo Progress Valor atual BackColor Cor da área não preenchida ForeColor Cor da área preenchida Kind Tipo da figura (barra horizontal ou vertical, círculo, etc) ShowText Define se o valor em percentagem será exibido TrackBar Paleta: Win32 Importância: Componente utilizado para a seleção de valores inteiros dentro de uma faixa Propriedades Significado Orientation Orientação vertical ou horizontal Min Valor mínimo Max Valor máximo Position Posição corrente TickStyle Estilo de exibição das marcações 80 CEFET-UNED Prof. Mário André TickMarks Aparência do indicador PageSize Determina o incremento que deve ser dado quando as teclas PgUp e PGDn forem pressionadas LineSize Determina o incremento que deve ser dado quando as setas forem pressionadas SelStart Posição de início do preenchimento SelEnd Posição de término do preenchimento CheckListBox Paleta: Additional 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 Significado Checked[n] Retorna true se o item n estiver selecionado State[n] Retorna o estado do item n : [cvUnchecked, cbChecked, cbGrayed] AllowGrayed Permite ou não a existência de itens com estado indeterminado. Default = False Eventos Descrição OnClickChecked Quando um item é marcado ou desmarcado ListView (Win32) Paleta: Additional Importância: Componente que permite exibir de várias maneiras uma lista de itens. Propriedades Significado ViewStyle Determina se os itens devem ser apresentados em colunas com cabeçalhos e sub-itens, verticalmente ou horizontalmente, com ícones grandes ou pequenos LargeImages Lista de Imagens (TImagesList) contendo a bitmap’s a serem exibidos e somente é usada quando a propriedade ViewStyle é vsIcon SmallImages Lista de Imagens (TImagesList) contendo a bitmap’s a serem exibidos e somente é usada quando a propriedade ViewStyle é vsSmallIcon 81 CEFET-UNED Prof. Mário André Items Items a serem exibidos Columns Cabeçalhos das colunas da Lista ShowColumnHeaders Exibe os cabeçalhos das colunas ColumnClick Indica se os cabeçalhos das colunas terão a aparência de botões IconOptions 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 SortedType 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 Selected 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 82 CEFET-UNED Prof. Mário André Paleta: Win32 Importância: Componente que permite a seleção visual de datas ou horas Propriedades Significado Time Hora selecionada Date Data Selecionada DateMode A forma como a data poderá ser selecionada [dmComboBox, dmUpDown] DateFormat Formato da Data [dfShort, dfLong] Kind Seleciona o componente para Data ou Hora [dtkDate, dtkTime] ShowCheckbox Exibe um CheckBox Check Indica se o CheckBox esta selecionado 85 CEFET-UNED Prof. Mário André Apêndice A - A Linguagem Object Pascal Características Object Pascal é uma linguagem orientada a objetos não pura, mas híbrida, por possuir características de programação não só visual mas também escrita. Para os programadores que já conhecem técnicas de estruturas de programação como o C, Basic, Pascal entre outras linguagens, a Object Pascal providência uma migração de forma natural oferecendo um produto de maior complexidade. Ela força a você executar passos lógicos, isto torna mais fácil o desenvolvimento no ambiente Windows de aplicações livres ou que utilizam banco de dados cliente/servidor e possui todo o poder de um código totalmente compilável. Além disso possibilita a criação e a reutilização (vantagem de re-uso tão sonhado com a OO) de objetos e bibliotecas dinâmicas (DLL - Dymanic Link Libraries). Object Pascal contém todo o conceito da OO, incluindo encapsulamento, herança e polimorfismo. Algumas extensões foram incluídas para facilitar o uso de conceitos como propriedades particulares e públicas, e tipos de informações em modo run-time, manuseamento de exceções, e referências de classes. EXPRESSÕES LÓGICAS São expressões que retornam valor booleano (falso ou verdadeiro). Operador Operação not Negação and E lógico or OU lógico xor OU EXCLUSIVO lógico O operador not é unário, por exemplo: if not (X > Z) then Devemos usar parênteses ao compararmos expressões lógicas, 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, por exemplo:  if (A > B) then B := B + 1; // ou INC(B);  if (A > B) then B := B + 1 else A := A - 1; // ou DEC(A); 86 CEFET-UNED Prof. Mário André  if (A > B) then begin B := B + 1; X := B + A; end else begin A := A - 1; Y := Y + B; end; No último exemplo para representar um bloco de comandos em caso verdadeiro ou falso, utiliza-se dos delimitadores begin e end. O comando if-then-else é considerado como único, portanto, não há ponto e vírgula (‘;’)antes da palavra reservada else. COMANDO CASE O comando case..of oferece uma alternativa para comandos if-then-else com um ‘grande’ número de testes. Por exemplo: case Key of ‘A’..‘z’: Label1.Caption := ‘Letras’; ‘0’..‘9’: Label1.Caption := ‘Números’; ‘+’, ‘-’, ‘*’, ‘/’: Label1.Caption := ‘Operador’ else Label1.Caption := ‘Caracter especial’; end; //fim do case COMANDO REPEAT O comando repeat..until é uma opção para estruturas de repetição. A grande diferença com o comando while é o fato do comando repeat ser executado pelo menos uma vez. repeat X := X + 1; INC(Z,3); //equivale a Z := Z + 3; DEC(AUX,2); until X >= 200; COMANDO WHILE O comando while..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. while X <= 200 do begin X := X + 1; INC(Z,3); DEC(AUX,2); end; 87 CEFET-UNED Prof. Mário André DATAS As datas são um tipo de dados TDateTime, internamente são armazenadas como números de ponto flutuante (Double). A parte inteira indica a data, em número de dias, contados a partir de 30/12/1899 e a fracionária, as horas. Pelo fato de serem armazenadas como Double, pode-se subtrair, somar e estabelecer comparações. Por exemplo: var DataIni, DataFim : TDateTime; Dif : Single; begin Dif := DataFim – DataIni; //diferença em dias entre as datas DataIni := DataIni+10; //acrescenta + 10 dias na data end; Para saber a hora de determinada data, multiplica-se a parte fracionária por 24: Frac(DataIni) * 24; Podemos ainda comparar as datas com os operadores ‘<’ e ‘>’. Caso não seja necessário a comparação com a hora, basta converter a data para um inteiro e efetuar a comparação: if Trunc(Data1) < Trunc(Data2) then A formatação de data pode ser feita através da função FormatDateTime. function FormatDateTime(const Format: string; DateTime: TDateTime): string; Exemplo: Label1.Caption := FormatDateTime('dddd, d "de" mmmm "de" yyyy', date); SAIR DE UMA APLICAÇÃO O Delphi fornece diferentes métodos para sair de uma aplicação. O ideal é utilizar o método Close. Porém, há casos em que Close não atenderia à necessidade do desenvolvedor, nestes casos pode-se chamar Halt ou Application.Terminate. Halt é um procedimento do Pascal e provoca o término da aplicação, não se importando com arquivos abertos. Já o método Terminate do objeto Application obriga o fechamento de todos os arquivos abertos e a destruição de todas a forms criadas. REDUZINDO TESTES IF A expressão: if A = 10 then B := True else B := False; 90 CEFET-UNED Prof. Mário André Pode ser reduzida a apenas uma linha: B := A = 10; A = 10 é uma operação boleana, que retorna True se A é igual a 10 e False caso contrário. Neste caso estamos atribuindo à variável B o resultado da comparação, TRUE ou FALSE. HINTS COM DUAS OU MAIS LINHAS A object inspector permite Hint com apenas uma linha. Para gerar Hints com mais linhas pode-se em tempo de execução configurar a propriedade Hint da seguinte forma: Edit1.Hint := ‘Primeira linha do hint’#13‘segunda linha do hint’; Pode-se também em tempo de projeto clicar na form com o botão direito e escolher a opção ‘View as Text’, procurar o objeto e a hint desejada e alterá-la: Hint := ‘Primeira linha do hint’#13‘segunda linha do hint’; Para voltar ao Form clique com o botão direito e escolha ‘View as Form’. 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.FormKeyPress(Sender: TObject; var Key: Char); begin if (Key = #13) and not (Activecontrol is TMemo) then begin //desabilita o processamento posterior da tecla key := #0; //simula o envio da tecla tab Perform(WM_NEXTDLGCTL,0,0); end; end; ÍCONES O Delphi possui um conjunto de ícones e imagens em uma pasta padrão: C:\Arquivos de programas\Arquivos comuns\Borland Shared\Images EXECUTAR UM PROGRAMA 91 CEFET-UNED Prof. Mário André Para executar um programa use a API WinExec. WinExec(‘calc.exe’, SW_SHOWNORMAL); LINKS Alguns links interessantes: Nacionais http://www.clubedelphi.com.br/ http://www.delphibrasil.eti.br/ http://clubedodelphi.com.br http://www.inprise.com.br/ DISPARANDO SONS DO SISTEMA (MULTIMÍDIA) Para utilizar os sons do sistema, utilize a função PlaySound. PlaySound(pChar('SYSTEMSTART'),0,SND_ASYNC); 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, utilize o seguinte código no arquivo de projeto (DPR). A função FindWindow procura se há outra tela da classe passada como parâmetro, se houver, traz para frente e não cria a aplicação novamente. program Project1; uses Forms,Windows, Unit1 in 'Unit1.pas' {Form1}; {$R *.RES} 92 CEFET-UNED Prof. Mário André Os objetos são variáveis do tipo classe, onde as características são consideradas propriedades, 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. Eles são de extrema importância pois definem quando um conjunto de comandos será executado. Ainda exemplificando, 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. Edileumar,Jorgina : TSerHumano; Cachorro : TAnimais; begin Edileumar.Tamanho := 1.70; Edileumar.Forma := ‘Magro’; Edileumar.Sexo := ‘M’; Jorgina.Tamanho := 1.60; Jorgina.Sexo := ‘F’; Jorgina.CorCabelo := ‘Castanhos’; Edileumar.Falar; Jorgina.Caminhar; Cachorro.Tamanho := 0.60; Cachorro.Cauda := True; Cachorro.Alimentar; end; Observe que as propriedades recebem valores e os métodos executam rotinas (procedimentos ou funções) sobre o objeto que o invocou. Alguns métodos podem receber parâmetros. O que acontece no Delphi é que existe uma gigantesca estrutura de classes onde TObject é a classe base das demais classes. Apesar de não ser necessário manipular este recurso diretamente, é importante saber seu funcionamento básico. Você verá as declarações de classe dentro do Delphi como abaixo, um formulário com dois componentes (objetos) button e um componente edit será declarado assim: type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Edit1: TEdit; private { Private declarations } public { Public declarations } end; Essa introdução vem apenas ilustrar os principais conceitos: Propriedades, eventos e métodos, sendo amplamente utilizados durante o curso. A herança é um recurso importante implementado na OO, não sendo o único, obviamente. Polimorfismo, encapsulamento entre outros, são conceitos que a principio você não precisa saber para manipular a ferramenta (Delphi), mas em um futuro próximo será muito importante. 95 CEFET-UNED Prof. Mário André REFERÊNCIA BIBLIOGRÁFICA Dominando o Delphi 7 “A Bíblia” – Marco Cantù Makron Books, 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 96
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved