75
INTRODUÇÃO Delphi é um Ambiente Integrado de Desenvolvimento (IDE Integrated Development Enviroment) que permite a edição, compilação, depuração e execução de aplicativos para plataforma Windows. O ambiente do Delphi inclui um compilador que está entre os mais rápidos do mercado, um depurador, que corrige os problemas e erros nos programas, ajuda on-line, e outras ferramentas que facilitam o desenvolvimento de projetos. Capaz de gerar arquivos executáveis (.EXE) e bibliotecas de código que podem ser usadas por outros aplicativos, essa linguagem também permite criar componentes novos e adicioná-los a seu ambiente. Essa ferramenta trabalha com os mais populares SGBD’s, por exemplo o ORACLE, SQL SERVER, DB2, ACCESS, SYBASE e outros. Além disso trabalha com banco de dados nativo, como Paradox, que substitui banco de dados complexos principalmente em aplicações que rodem em poucos computadores. CARACTERÍSTICAS IMPORTANTES Compilador Pascal Escrito em Assembler e em Delphi Gera código .EXE e DLL’s Ambiente Visual (VCL – Visual Componente Library) Editor de texto próprio (Code Editor) configurável de acordo com a sintaxe Codificação em Linguagem Object Pascal Suporte a Programação Orientada a Eventos (POE) e a Programação Orientada Objetos (POO); Suporte a Multimídia Acesso a API’s do Windows Acesso nativo a tabelas Paradox, Dbase, e LocalInterbase Acesso a banco de dados: Informix, Oracle, Sybase, MSSQL Server, Interbase através de drivers fornecidos na versão Enterprise. O O

Apostila Delphi

Embed Size (px)

Citation preview

INTRODUÇÃO

Delphi é um Ambiente Integrado de Desenvolvimento (IDE – Integrated Development Enviroment) que permite a edição, compilação, depuração e execução de

aplicativos para plataforma Windows. O ambiente do Delphi inclui um compilador que está entre os mais rápidos do mercado, um depurador, que corrige os problemas e erros nos programas, ajuda on-line, e outras ferramentas que facilitam o desenvolvimento de projetos.

Capaz de gerar arquivos executáveis (.EXE) e bibliotecas de código que podem ser usadas por outros aplicativos, essa linguagem também permite criar componentes novos e adicioná-los a seu ambiente.

Essa ferramenta trabalha com os mais populares

SGBD’s, por exemplo o ORACLE, SQL SERVER, DB2, ACCESS, SYBASE e outros. Além disso trabalha com banco de dados nativo, como Paradox, que substitui banco de dados complexos principalmente em aplicações que rodem em poucos computadores.

CARACTERÍSTICAS IMPORTANTES

Compilador Pascal Escrito em Assembler e em Delphi Gera código .EXE e DLL’s Ambiente Visual (VCL – Visual Componente Library) Editor de texto próprio (Code Editor) configurável de acordo com a sintaxe Codificação em Linguagem Object Pascal Suporte a Programação Orientada a Eventos (POE) e a Programação Orientada

Objetos (POO); Suporte a Multimídia Acesso a API’s do Windows Acesso nativo a tabelas Paradox, Dbase, e LocalInterbase Acesso a banco de dados: Informix, Oracle, Sybase, MSSQL Server, Interbase

através de drivers fornecidos na versão Enterprise.

OO

VERSÕES DO DELPHI 7

1. Desktop (básica): Possui ferramentas para criação de aplicativos para

Windows95/98 ... 2. Professional : Versão própria para o desenvolvedor profissional com

suporte a banco de dados. 3. Enterprise : É a mais completa das versões. Permite a criação de

aplicações cliente/servidor e possui ferramentas relacionadas com SQL.

EXTENSÕES GERADAS PELO DELPHI

.DPR Projeto Delphi escrito em código fonte Pascal. .PAS Código Fonte da Unit (Pascal) .DFM Arquivo de Formulário Gráfico. Nele está a descrição das

propriedades do formulário e dos controles. .DCU Unidade Compilada do Delphi. É o resultado da compilação de um

arquivo .PAS. .DOF Arquivo de texto com as configurações correntes para as opções de

projeto. .RES Arquivo de recursos que contém ícones. Outros arquivos desse tipo

podem ser acrescentados ao projeto. .DSK Configuração de Desktop. Contém informações sobre as disposições das

janelas, arquivos abertos no editor e outras opções de ambiente. .DFN Arquivo de Suporte para o Integrated Translation Environment. .RPS Translation Repository (parte do Integrated Translation Environment). .DTI Design Time Information, usado pelo novo DataModule Designer. .TODO Arquivo da lista to-do. .UDL Usado pelo ADO para fazer referência a um provedor de dados. .EXE Executável Compilado com todas as Unit’s, Form’s e recursos. .DLL Dynamic Link Library. .OCX OLE Control Extension. É uma versão especial de uma DLL contendo

controles ou formulários ActiveX. .HTM Ou HTML, Hyper Text Markup Language; O arquivo usado pelas

páginas Web da Internet. .~?? Backup

SUMÁRIO

Unidade 1:

Programação orientada a objetos, 01

Unidade 2: IDE Delphi 5,

Unidade 3: Linguagem Object Pascal,

Unidade 4: Componentes Padrão,

Unidade 5: Tratando Exceções, 50

Unidade 6: Banco de Dados

Unidade 7: Acesso a Banco de Dados,

Unidade 8: Noções de SQL,

Unidade 9:

Relatórios no Delphi,

Referências Bibliográficas,

Linguagem de Programação Delphi 1

UNIDADE 1

PROGRAMAÇÃO ORIENTADA a OBJETOS Apresenta três conceitos fundamentais: Linguagens baseadas em objetos sustentam objetos, ou seja, elementos

com uma definição e um estado. Linguagens baseadas em classes têm objetos e classes. Linguagens orientadas a objetos também têm herança e polimorfismo, dois

elementos que freqüentemente são usados.

Linguagem Tradicional (procedural) Não há distinção sobre qual procedure pode agir sobre tal dado. Os dados são estruturados de forma a poderem ser processados por um conjunto mutável de procedures.

Orientado ao Objeto Nesse sistema, primeiro os programas são coleções de uma única entidade

básica, o objeto, que combina dados e procedures que agem sobre ambos (métodos). Segundo, diferentemente de programas tradicionais que usam procedures para executar ações em um lote determinado de dados passivos, os objetos recebem solicitações e interagem passando mensagens uns para os outros. Finalmente, a organização hierárquica dos objetos em classes permite que dados e métodos de uma classe ancestral sejam herdeiros dos seus descendentes.

Objeto Objeto Objeto Objeto

Procedure 1

Procedure 2

Procedure 3

Dados

Métodos

Métodos

Métodos

Métodos

Dados Dados

Dados Dados

Linguagem de Programação Delphi 2

CONCEITOS BÁSICOS OBJETO É qualquer módulo que faz parte de um produto. É a instância de

uma classe. Apresenta propriedades e eventos associados a ele. CLASSES Grupo de objetos, cada um com um estado específico, mas todos

capazes de executar as mesmas operações. HERANÇA Artifício que permite montar um novo objeto a partir de um já

existente. Com esse conceito é possível construir uma nova classe, definido-a em termos de uma outra já existente, em vez de construir a classe a partir do zero.

O que deu Origem: Objeto “Pai” acontece o mesmo com as classes O que herdou: Objeto “Filho”. POLIMORFISMO Permite fazer referências a objetos de classe, diferentes

por meio da mesma variável de programa. Também permite realizar operações nessa variável de várias formas, de acordo com a classe do objeto atualmente associada à variável no momento.

Linguagem de Programação Delphi 3

UNIDADE 2

IDE DO DELPHI 5 Vamos conhecer agora o IDE (Ambiente de Desenvolvimento Integrado) do

Delphi 5. Para executar o Delphi basta seguir o caminho abaixo:

Programas\Borland Delphi 5\Delphi 5 Logo após a inicialização e carga do Delphi, a sua Interface nos aparece

composta por várias janelas independentes que podem ser sobrepostas e reorganizadas a seu critério na tela.

Object

Inspector

Code Editor

Formulário

Paleta de Componentes

Barra de Menu Barra de Ferramentas(SpeedBar)

Linguagem de Programação Delphi 4

JANELA PRINCIPAL Localizada na parte de cima da tela, contém a Barra de Menu, a Barra de

Ferramentas (SPEEDBAR), a Paleta de Componentes (Component Palette) e Barra de Ferramentas Desktop.

BARRA DE FERRAMENTAS

Fornece atalhos para os comandos mais comuns como compilar e executar projetos, abrir ferramentas, salvar alterações, entre outros. Posicionando o cursor do mouse sobre a speedbar e clicando o botão direito, o usuário poderá personalizá-la através da opção properties (propriedades) do menu popup.

Opção para novo item(Aplicação, Unit, DataModule...) Abrir ou Reabrir geral Salva unit corrente Salva tudo Abrir projetos Adicionar uma unit ao projeto Remover unit do projeto Lista de units do projeto Lista de Forms do Projeto Alterna entre o Form e o unit(Code Editor) Acrescenta um novo Form ao Projeto Compila e executa o Projeto(F9) Pausa Depurar o Projeto(F7) Pular a Depuração(F8)

Paleta de Componentes

Barra de Ferramenta Desktop

Barra de Ferramentas

Barra de Menu

Novidade O recurso Desktop permite organizar as janelas do Delphi da maneira ideal para o seu trabalho. Você posiciona as janelas de acordo com sua necessidade e pode gravar esta configuração como um Desktop. Os únicos itens que não sofrem alteração com a mudança de desktop são o formulário e a paleta de componentes.

Linguagem de Programação Delphi 5

PALETA DE COMPONENTES

Nessa paleta são escolhidos os componentes que vão fazer parte do projeto.

Ela está dividida em várias páginas (abas de seleção) e cada uma delas contém seus objetos. Esses objetos estão dispostos nas abas de acordo com sua funcionalidade.

A paleta apresenta, também, espaços em branco para que, posteriormente,

sejam incluídos novos objetos, seja de versões anteriores do Delphi (.OCX) ou do Visual Basic (.VBX), como objetos adquiridos no mercado em forma de pacotes prontos para serem integrados ao sistema (vantagem da POO).

No nosso curso iremos conhecer componentes básicos importantes!!!

FORMULÁRIOS/UNIDADES

É, juntamente com a UNIT, o ponto central do desenvolvimento Delphi. Nele será construído a interface com o usuário. O formulário é um objeto que contém outros objetos. Sem que haja um só movimento para implementá-lo, ele já contém um controle de menu, botões (maximizar, minimizar, fechar), barra de títulos e bordas redimensionáveis.

Linguagem de Programação Delphi 6

Cada formulário está associado a um código de programa (Unit) e nele serão escritas todas as ações do objeto (eventos). As Unit’s são exibidas no Code Editor (Editor de códigos do Delphi).

O Code Editor acessa o código gerado pelo projeto e pode mostrar várias units

ao mesmo tempo. Para mudar de uma para outra unit basta clicar na ‘aba’ correspondente.

A Unit é unidade de código fonte codificada em Object Pascal e uma grande

parte desse código é escrito e alterado pelo próprio Delphi à medida em que o desenvolvedor inclui objetos ou os altera.Na Unit também codificamos nossos procedimentos.

Toda vez que uma aplicação é inicializada, é criado um formulário (Form1), uma unidade (Unit1) e um arquivo de projeto (Project1); esse último é um arquivo texto que contém a “receita” do projeto. Nele constam os formulários units e os demais objetos que serão compilados para a geração do aplicativo.

Code Explorer

Nota A janela Code Explorer, contém informações estrturadas sobre a unit. Para deixar de exibir a janela basta clicar no botão fechar da mesma.

Estrutura de Um Projeto

.DPR

.DFM ..PAS

Linguagem de Programação Delphi 7

Quando um projeto novo é aberto a Unit principal (definida no Project Manager) é a primeira a aparecer no Code Editor. Seu nome aparece na ‘aba’, no topo da página. Para abrir outras Units basta ir ao View|Project Manager, selecionar um novo arquivo e clicar em Unit. Uma página no editor será aberta para mostrar o código fonte dele. Use o mouse sobre a “aba” para navegar entre as Units ou CTRL+TAB para posicionar na próxima Unit ou CTRL+SHIFT+TAB para voltar à anterior. Para visualizar o Form associado à Unit ou se estiver no Form e quiser ver a Unit pressione a tecla F12. O Editor de códigos permite ao usuário configurá-lo para que melhor se adapte à sua maneira. Para acessar a configuração basta posicionar o mouse dentro do editor e pressionar o botão direito do mouse que aparecerá um menu suspenso. Na opção Properties|Environments Options aparecerá três ‘abas’. A primeira, Editor, não é muito usada por conter configurações avançadas; a página Display define a aparência e a organização da tela, como a geração de backup da Unit quando o arquivo é salvo e as fontes usadas , entre outras. A terceira e última página, Colors, define as cores usadas para o efeito de Syntax Highlighting. O usuário pode configurar as cores dos elementos (comentários, palavras-chaves, constante, variáveis...) mudando o estilo na hora da digitação do código-fonte.

Nota RECURSO CODE INSIGHT Além do Code Explorer, o Delphi possui desde a versão 3 o Code Insight. O Code Insight é um conjuto de recursos técnicos que por exemplo lhe exibe uma lista de propriedades,métodos,procedimentos... que lhe serve de apoio na codificação. Ele é ativado quando pressionadas as teclas CTRL+Barra Espaço. Code Completion: na digitação do código é aberta uma lista de propriedades, procedimentos e funções relacionadas ao termo digitado. Code Parameter: exibe, em uma janela de dica, o tipo de dado de uma função ou parâmetros de método quando o usuário estiver digitando o código. Code Templates: permite a inserção de um modelo de código (‘esqueleto’) predefinido, como uma declaração complexa com um bloco begin-end interno. Para inserir no código uma template basta digitar o nome dela e pressionar CTRL+J.

Nota EDITOR PROPERTIES Clicando com botão direito do mouse no Editor Code, você configura o “Visual” do Editor e o Code Insight

Linguagem de Programação Delphi 8

ALIGNMENT PALETTE

Seguindo a seqüência da esquerda para direita, fileira de cima. Align left edges: alinha os componentes selecionados pelo canto esquerdo do primeiro componente selecionado. Align horizontal centers: alinha os componentes selecionados pelo centro do componente primeiro selecionado. Center horizontally in window: alinha o(s) componente(s) selecionado(s) no centro do formulário ao longo de uma linha horizontal. Space equally, horizontally: alinha os componentes selecionados espaçando-os igualmente na horizontal. Align right edges: alinha os componentes selecionados pelo canto direito do primeiro componente selecionado. Align tops: alinha os componentes selecionados pelo canto superior do primeiro componente selecionado. Align vertical centers: alinha os componentes selecionados, verticalmente, até que os centros fiquem alinhados com o componente que foi primeiro selecionado. Center vertically in window: alinha o(s) componente(s) selecionado(s) no centro do formulário ao longo de uma linha vertical. Space equally, vertically: alinha os componentes selecionados espaçando-os igualmente na vertical. Align bottoms: alinha os componentes selecionados pelo canto inferior do primeiro componente selecionado. Da mesma forma, selecionando os objetos a serem alinhados e clicando com botão direito do mouse você vai encontrar outras opções de alinhamento como mostra a imagem abaixo:

Nota Exceto pelos botões CENTER HORIZONTALLY IN WINDOW E CENTER VERTICALLY IN WINDOWS, que podem ser aplicados a um único componente, todos os demais são aplicáveis a vários componentes selecionados.

Linguagem de Programação Delphi 9

INSPETOR DE OBJETOS

1 Propriedades : Propriedades são características básicas de um componente. Cada componente no Delphi possui uma série de Propriedades com um valor default. Note que na imagem acima(Object Inspector) aparecem algumas relativas a um compenente Button1(Botão) tais como: caption(descricão da face do botão), sua fonte, cor da fonte, etc., todas elas com um valor padrão definido pelo Delphi mas que você pode modificar. As Propriedades podem ser alteradas em tempo de projeto(design-time) ou em tempo de execução(run-time). Para fazer uma alteração em tempo de execução é preciso fazer uma atribuição de valor através do operador :=(sinal d atribuição do Object Pascal).

Nome-do-componente.Propriedade := ValorPropriedade ; Exemplo: Button1.Caption := ‘Novo Nome’ ;

2 Eventos : Eventos são acontecimentos, normalmente provocados por ações

do usuário ao programa em tempo de execução. Nós podemos programar respostas a estes estímulos. Existem eventos como: Clicar em um componente, entrar em um componente, sair de um componente, etc.

Todo Componente incluído tem Propriedades e Métodos a ele associado. O Object Inspector permite alterar as Propriedades(características) dos objetos, inclusive do próprio From em tempo de projeto e programar seus Eventos.

Composto por duas páginas: Properties1 (propriedades) e Events2 (eventos).

As propriedades e eventos variam de acordo com o objeto que foi selecionado.

O seletor de Objetos do Object Inspector permite ao usuário localizar facilmente qualquer objeto do formulário, nele é mostrado qual o objeto atualmente selecionado, descriminando seu Name(nome) e sua Classe.

Button1 : Name do componente selecionado TButton : Classe do componente selecionado

Nota

Caso o Objet Inspector não esteja sendo visualizado, basta ir ao menu View\Objet Inspect ou teclar (F11)

Linguagem de Programação Delphi 10

* Método : Existe também em um componente o que chamamos de Método. Método é tipo especial de função que está relacionado a uma classe de objeto.Os diversos componenetes disponíveis no Delphi são objetos que, em geral, possuem uma quantidade de Métodos que podemos invocá-lo em tempo de execução.

Exemplo de Métodos : Close, Setfocus, Clear. Ao decorrer do curso entraremos mais em detalhes no que diz respeito a Propriedades, Eventos, Métodos.

PROJECT MANAGER ( GERENCIANDO PROJETOS) No Project Manager você tem a visão global de todo seu projeto. Considere

também que você tenha 2 ou mais projetos independentes um do outro. A partir da versão 4 do Delphi é possível mantê-los dentro de uma estrutura de Grupo de Projetos. Cada projeto é tratado de forma independente. No entanto, do ponto de vista de organização, eles podem ficar agrupados, de forma a auxiliar você nas tarefas de desenvolvimento e manutenção.

Adiciona Projeto ao Grupo de Progetos

Nota Para chamar o Project Manager siga o caminho: Menu View\Project manager ou CTRL+Alt+F11

Linguagem de Programação Delphi 11

TO-DO LIST (LISTA DE TAREFAS) Esta ferramenta é de grande valia para auxiliá-lo no desenvolvimento de seus projetos. Com ela é possível criar uma listagem de tarefas que precisam ser implementadas no sistema. Sua utilização é bem simples, basta clicar com o botão direito do mouse sobre a janela Code Editor e selecionar a opção Add To-Do Item... ou Shift+Ctrl+T, para que a janela Add TO-DO seja exibida: Preencha corretamente as informações nos campos e, em seguida, você verá uma linha de comentário de lembrete, com uma codificação especial, adicionada a sua Unit: { TODO 1 -oAlexander -cRotinas de Exceções : Fazer Rotina de

Tratamento de Chaves Primárias } A janela To-Do List pode ser exibida clicando no menu Menu View\To-Do

List.

Ao excluir os itens contidos nesta janela, automaticamente a linha de código será removida. Marcando Done para o item, o comentário na Unit sofrerá a seguinte alteração:

{ DONE 1 -oAlexander -cRotinas de Exceções : Fazer Rotina de Tratamento de Chaves Primárias }

Mensagem a ser acrescentada a lista TO-DO

Sua prioridade Até 5(cinco)

Quem ficará responsável

Sua categoria

Tarefa Relizada

Nota Você pode selecionar o ítem da TO-DO list e deletá-lo. Fazendo isto o Delphi remove o comentário da Unit ao invés de colocar a cláusula DONE.

Linguagem de Programação Delphi 12

O OBJECT REPOSITORY

O Delphi possui vários comandos de menu que você pode usar para criar um

novo formulário, uma nova aplicação, um novo módulo de dados, etc. Estes comandos estão localizados no Menu File e em outros menus suspensos que iremos observar ao decorrer do nosso curso.Quando você clica no Menu File\New abre o Object Repository, que é para criar novos elementos de qualquer tipo : Formulários, aplicativos, módulos de dados, componentes,etc.

MEU PRIMEIRO PROGRAMINHA Que tal matarmos um pouco a ansiedade ! Vamos fazer um programinha simples e executá-lo. Iremos aproveitar a ocasião e observar os arquivos criados pelo Delphi 5. Mãos à obra !! Passos : 1. Crie uma Pasta de Trabalho na raíz da unidade C: de nome “Numero1”

(C:\Numero1); 3. Crie no Delphi uma nova aplicação (Menu File| New Application); 4. Click no Form1 do projeto; 5. Click na tecla (F11) para chamar o Object Inspector ; 6. Click agora na guia(ou aba) Events(Eventos) do Object Inspector; 7. Localize nos vários eventos o de nome : OnClick (este evento é acionado quando

o usuário clicar no form !!), dê um duplo-click neste evento;

Linguagem de Programação Delphi 13

8. No seu Editor de Código aparecerá:

procedure TForm1.FormClick(Sender: TObject); begin

end;

end.

9. Em seguida click no botão Run na SpeedBar; 10. Click no Form para ver a mensagem que você programou no

evento OnClick do mesmo.Pronto, não foi fácil!!?? Parabéns!!

Entre o begin e o end; você irá digitar o seguinte código :

Showmessage(‘Você clicou em mim no seu Primeiro Programinha’) ;

Linguagem de Programação Delphi 14

UNIDADE 3

LINGUAGEM OBJECT PASCAL

Antes de começarmos a estudar a Linguagem Object Pascal, veremos as estruturas do arquivo de Projeto(.DPR) e do arquivo de fonte Unit(.PAS). CÓDIGO FONTE DO ARQUIVO PROJECT(.DPR) Neste arquivo está escrito o código de criação da aplicação e seus formulários.

O arquivo Project tem apenas uma seção. Esta seção é formada pelo seguinte código: program Definição do nome do Projeto; uses Cláusula que inicia uma lista das unidades(Units) do Projeto.

Observe que o nome Form correspondente a unit aparece entre chaves.

Forms É a unidade do Delphi que define a forma e os componentes do aplicativo

in A cláusula indica ao compilador onde encontrar o arquivo Unit. unit1 A unidade que você criou {$R *.RES} Diretiva compiladora que inclui o arquivo de recursos. Begin \ end. Constitui o roteiro principal do projeto. Na primeira linha estão as

tarefas de inicialização do projeto, seguido da criação do formulário na memória e execução do aplicativo com o comando Run.

Abaixo veja como fica o Project quando você abre um projeto novo( Menu File| New Application): CÓDIGO FONTE DO ARQUIVO UNIT (.PAS) Nesta divisória serão escritos os códigos dos seus respectivos forms (Unit1 = Form1). Aqui serão definidos os códigos de cada procedimento dos componentes que você colocar no form.

program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.RES} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end.

Linguagem de Programação Delphi 15

Seção Unit Declara o nome do arquivo salvo unit. Seção Uses Contém as units acessadas por este arquivo. Seção Interface

Nesta seção estão as declarações de constantes, tipos de variáveis, funções e procedures gerais da Unit/Form. As declarações desta seção são visíveis por qualquer Unit. Esta seção é formada pelo seguinte código:

interface Palavra que inicia a seção; uses Cláusula que inicia uma lista de outras unidades compiladas (units)

em que se baseia: SysUtils utilitários do sistema (strings, data/hora, gerar arquivos) Wintypes tipos de dados e valores constantes Messages constantes com os números das mensagens do Windows

e tipos de dados das Mensagens Classes elementos de baixo nível do sistema de componentes Graphics elementos gráficos Controls elementos de nível médio do sistema de componentes Forms componentes de forma e componentes invisíveis de

aplicativos Dialogs componentes de diálogo comuns

Seção Type Declara os tipos definidos pelo usuário. Subseções: Private, declarações

privativas da Unit. Public declarações publicas da Unit. Seção Var

Declara as variáveis privadas utilizadas. Seção Implementation

Contém os corpos das funções e procedures declaradas nas seções Interface e Type. Nesta seção também estão definidos todos os procedimentos dos componentes que estão incluídos no Form que são codificados pelo programador. Existe também uma cláusula uses1 que é adcionada pelo programador que diz respeito as outras unidades do projeto que esta unit irá precisar ou se comunicar. As declarações desta seção são visíveis apenas por ela mesma. Esta seção é formada pelo seguinte código:

{$R*.DFM} Diretiva compiladora que inclui toda a interface, propriedades da forma e componentes do arquivo *.DFM

1Seção uses adicional Serve para declarar Units que a ativa. Inicialization

Nesta seção, que é opcional, pode ser definido um código para proceder as tarefas de inicialização da Unit quando o programa começa. Ela consiste na palavra reservada inicialization seguida por uma ou mais declarações para serem executadas em ordem.

Linguagem de Programação Delphi 16

Veja abaixo a estrutura de uma UNIT: OBJECT PASCAL

Inicialmente desenvolvida por Niklaus Wirth, o Pascal (nome herdado do filósofo Blaise Pascal) tornou-se, rapidamente, uma linguagem popular graças a sua facilidade de aprendizado e sua forma estruturada. A série Turbo Pascal da Borland difundiu mundialmente essa ferramenta.

A linguagem utilizada para escrita do código-fonte no Delphi é o Object Pascal

ou Pascal Objeto que está baseada no paradigma de Programação Orientada a Objetos.

Para se familiarizar com o Object Pascal devemos estudar conceitos antigos,

mas válidos ainda, do Pascal e novos conceitos e implementações da nova linguagem.

Observações: O compilador Delphi é indiferente à caixa, ou seja, não diferencia maiúscula e

minúscula.

unit Unit1; interface uses Windows,Messages, SysUtils, Classes,Graphics,Controls, Forms, Dialogs; type TForm1 = class(TForm) private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} end.

Linguagem de Programação Delphi 17

As linhas estão limitadas em 126 caracteres. Podem ser usadas diversas linhas para a composição de um comando.

Os comandos são terminados com o símbolo ‘;’ (ponto e vírgula). Com exceção dos caracteres entre apóstrofos, os espaços em branco e as

linhas vazias são ignoradas pelo compilador Delphi. O tamanho máximo para identificadores é de 63 caracteres. O caracter inicial do identificador deverá ser alfabético ou um caracter de

sublinhado “_” (UnderLine). O identificador deverá possuir apenas caracteres alfanuméricos e sublinhados. É proibida a utilização de palavras reservadas como identificadores. Os comentários são delimitados pelos seguintes caracteres: { } ou (* *) blocos de comentários. // linha de comentário.

ATRIBUIÇÕES: Os comandos de atribuição são constituídos de duas partes separadas pelo operador “:=”. O lado esquerdo do comando é a variável ou propriedade a receber um determinado valor e o lado direito é o novo valor a ser atribuído à variável ou propriedade. Ex: Form1.Color:=clTeal; TIPO DE VARIÁVEIS:

Os mais comuns são: Integer: Números inteiros que podem variar entre –2147483647 a

2147483647. Currency: Números reais de alta precisão. Destina-se a trabalhar com valores

monetários muito precisos, com quatro casas decimais. Double: Números reais com até 16 dígitos significativos. Variam de 5.0x10-

324 até 1.7x10308. Real Números flutuantes(com decimais) 2.9 x 10-39 .. 1.7 x 1038 Boolean: Contém valores lógicos, True (verdadeiro) ou False (falso). Char: Um caracter padrão. String: Uma cadeia de caracteres que pode ter um tamanho ilimitado. Variant: Um tipo que pode armazenar valores de vários tipos e que pode

ter o seu valor convertido para outros tipos, quando necessário.

Linguagem de Programação Delphi 18

CONSTANTES: As constantes têm tipos que não precisam ser definidos; eles são deduzidos pelo Delphi de acordo com o conteúdo definido para ela na sua declaração. DECLARANDO VARIÁVEIS E CONSTANTES

VARIÁVEIS : Para se declarar uma variável usa-se o comando Var, em seguida o nome do identificador, acompanhado de “:” (dois pontos) e nome do tipo da variável. Exemplo: Var Salario, Fgts : Currency ; NomeFunc : String[50]; Endereco : String; NumFilhos : Integer; Ativo : Boolean; CONSTANTES : Para se declarar uma variável usa-se o comando Const, em seguida o nome do identificador, acompanhado de “=” (igual) e valor da constante. Exemplo: const

Cor = “vermelho”; // constante string Idade = 20; // constante inteira

TIPOS ESTRUTURADOS:

Tipos Enumerados: lista todos os valores que o tipo pode assumir.

Exemplo:

Type DiasSemana = (Segunda, Terça, Quarta, Quinta, Sexta,

Sábado, Domingo); Triângulo = (Equilátero, Escaleno, Isósceles);

Sub-Regiões: lista todos os valores de uma faixa, intervalo de valores dos tipos Integer, Boolean, Char, Enumerados.

Exemplo:

Type Horas = 1..24; Minutos=0..59;

Nota não esqueça : Não comece nomes de variáveis com números, não use “ç” ou acentos e o tamanho máximo é de 63 caracteres.

Linguagem de Programação Delphi 19

Tipo Composto: coleção de elementos de tipos diferentes que podem ser referenciados como um grupo. Exemplo:

Type Pessoa = Record Idade : integer; Nome : String[60]; End;

Arrays: coleção ordenada de elementos de um mesmo tipo. Cada elemento é especificado por sua posição no array. Podem existir arrays unidimensionais e multidimensionais.

Exemplo:

Var Ano : array[1..4] of integer;

Nome : String[80]; PROCEDURE/FUNCTION Nesta área são definidos os procedimentos e as funções, personalizadas, usadas pelo programador. Estão locadas na parte implementation de uma Unit. O desenvolvedor pode configurar sua aplicação de modo que funções e procedimentos em outras units possam ser acessados por uma unit específica.

Sintaxe: Function <nome> (<lista de parâmetros>) : <tipo de retorno>; Procedure <nome> (<lista de parâmetros>);

Exemplo: Function Salario (ValorHora, CargaHorária: Double) : Double; Procedure AjustaRaio (r : Real);

Linguagem de Programação Delphi 20

OPERADORES DO OBJECT PASCAL

Unários:

@ Endereço da variável ou função (retorna o Ponteiro)

not “NÃO” boleano ou negação bit-a-bit

Multiplicativos e de Direção de bit

* Multiplicação aritmética ou interseção de conjuntos

/ Divisão em tipo de ponto flutuante

div Divisão de tipo inteiro

mod Módulo (o resto de uma divisão de números inteiros)

and “E” boleano ou “E” bit-a-bot

shl Deslocamento de bits à esquerda

shr Deslocamento de bits à direita

as “Cast” seguro quanto ao tipo (RTTI)

Aditivos

+ Adição aritmética, união de conjuntos, concatenação de strings, valor positivo ou soma de deslocamento de ponteiro

- Subtração, diferença de conjuntos, valor negativo ou subtração de deslocamento de ponteiros (offset)

or “Ou” boleano ou “Ou” bit-a-bit

xor “Ou” exclusivo boleano ou “Ou”exclusivo bit-a-bit

Relacionais e de Comparação

= Igual

<> Diferente

< Menor que

> Maior que

<= Menor ou igual ou um subconjunto de um conjunto

>= Maior ou igual ou um subconjunto de um conjunto

in Testa se o item é membro de um conjunto

is Testa se o objeto é compatível com o tipo (um outro operador RTTI) RTTI (Informações de Tipo em Tempo de Execução).

Linguagem de Programação Delphi 21

INSTRUÇÕES CONDICIONAIS DO OBJECT PASCAL Usada para executar uma ou nenhuma das instruções que a compõem.

IF-THEN-ELSE

É usado para executar uma instrução somente se certa condição for satisfeita, ou para escolher entre duas instruções diferentes.

Observações importantes: o comando precedendo a instrução Else não pode vir seguido de ponto-e-vírgula; podem existir IF’S aninhados; no lugar da condição, pode-se utilizar funções que retornem valores boleanos, sem ser necessária a sua atribuição à variáveis.

Sintaxe(Comando Simples): If <expressão> then Bloco de comando Else Bloco de comando; Sintaxe(Comando Composto): If <expressão> then Begin Bloco de comando 1; Bloco de comando 2; Bloco de comando n; end Else Bloco de comando 1; Bloco de comando 2; Bloco de comando n;

End;

Exemplo 1 If Senha = Edit1.Text then ShowMessage (‘Senha Confirmada !’) Else ShowMessage (‘Senha Inválida’);

Exemplo 1 If Edit1.Text = ‘F’ then Begin Label1.caption := ‘Feminino’; ContFem := ContFem + 1; Dbedit1.setfocus; end Else ShowMessage (‘Sexo não é Feminino’);

Linguagem de Programação Delphi 22

CASE

É usado quando existir em opções múltiplas na aplicação. Consiste em uma expressão usada para selecionar um valor em uma lista de possíveis valores ou intervalos de valores. Pode haver uma instrução else que será executada se nenhum dos rótulos corresponder ao valor do seletor. Sintaxe: Case <expressão> of Valor1: bloco de comandos; Valor2: bloco de comandos;

Valorn: bloco de comandos; Else Bloco de comandos; End;

INSTRUÇÕES DE REPETIÇÃO DO OBJECT PASCAL

While É responsável pela realização de um loop com verificação inicial.

Sintaxe:

While <condição> do Bloco de comandos;

Repeat Faz com que o bloco de código seja executado diversas vezes até que uma

dada condição seja verdade. É executado pelo menos uma vez independente da sua condição inicial ser verdadeira ou não.

Sintaxe: Repeat

<bloco de comandos> Until <condição>

Exemplo Case RadioGroup1.ItemIndex of

1: ShowMessage (‘Soma’); 2: ShowMessage(‘Subtração’); 3: ShowMessage(‘Multiplicação’); Else

ShowMessage(‘Não foi escolhido nada’)’;

Exemplo I := 0; While I < 10 Do I := I+1;

Exemplo Repeat I: = I+1; Until I <10;

Linguagem de Programação Delphi 23

FOR Faz com que um bloco de comados seja executado um número específico de

vezes.

Sintaxe: For variável :=valor-inicial To/Downto valor-final do <Bloco de comando>; Blocos:

É um conjunto de comandos delimitados pela palavras begin e end. Pode

haver blocos dentro de outros blocos. Toda vez que o usuário tiver mais de um comando a ser declarado será necessário usar o conceito de bloco. Sintaxe: Begin <comandos>; End; Exemplo : Begin Form1.Color := clTeal; Form1.Caption:= ’Estou mudando a cor’; End;

COMANDOS DE DESVIO DE FLUXO Existem comandos que lhe auxiliam a desviar ou não o caminho normal de uma estrutura de repetição ou procedimento. São eles: BREAK: Colocando este comando em qualquer estrutura de repetição,

forçará a saída da mesma independente da sua condição CONTINUE : Oposto ao BREAK, este comando retorna o fluxo de uma

estrutura de repetição a seu início continuando normalmente o laço.

EXIT : Força a saída de um procedimento ou função

Exemplos For I:=1 To 10 do ShowMessage (‘estou incrementando’); For I:=10 DownTo 1 do ShowMessage (‘estou decrementado’);

Linguagem de Programação Delphi 24

FUNÇÕES DE CONVERSÕES DO OBJECT PASCAL

Algumas Funções Função Ação

IntToStr ( ) Converte um valor inteiro para uma string StrToInt ( ) Converte uma string para um valor inteiro StrToDate( ) Converte uma string para o formato date DateToStr( ) Converte do formato data para o formato string StrToTime ( ) Converte uma string para o formato time TimeToStr ( ) Converte o formato time para string. Ex.: Edit1.text := TimeToStr(Time); FloatToStr ( ) Converte um valor flutuante para string StrToFloat ( ) Converte de string para um valor flutuante Length ( ) Retorna quantidade(valor inteiro) de caracteres de uma string Copy ( ) Retorna uma substring de uma string. Ex.: copy ( ‘Amanda’,1,3 ) = ‘Ama’ UpperCase ( ) Converte caracteres Minúsculos para Maiúsculos LowerCase ( ) Converte caracteres Maiúsculos para Minúsculos Date Retorna a data Corrente Now Retorna a data e hora corrente Time Retorna a hora corrente FormatFloat () Formata um valor flutuante em string usando máscara de apresentação

Ex.: Edit1.text := FormatFloat(‘###,##0.00’ , 456958.45) = 456.958,45

Linguagem de Programação Delphi 25

UNIDADE 4

COMPONENTES PADRÃO

Componentes são objetos visuais ou não visuais de programa que você manipula em tempo de projeto ou execução. Os componentes são encontrados na Paleta de Componentes que está dividida em guias de acordo com a utilidade de cada componente.Não iremos ver todos os componenetes do Delphi, mas os mais usados em algumas guias da paleta de componentes. Após inserir um componente no form, você pode movê-lo, edita-lo e reajustá-lo de acordo com suas necessidades. Nesta unidade veremos vários componentes padrões do Delphi, suas principais propriedades, eventos e métodos. Algumas propriedades e eventos que são comuns em alguns componentes não serão repetidas em outro componente. Bom, chega de blá-blá-blá e vamos conhecer os componenetes!!

Form (TForm) - Formulário Barra de Ferramentas SpeedBar ou Menu : File|New Form Propriedades do Form mais comuns ActiveControl Indicar qual o componente do formulário que ficará com o foco BorderIcons Botões da Barra de Título que serão apresentados BorderStyle Estilo da Borda do Form Caption Descrição do Form Color Cor do form FormStyle Estilo do formulário:

FsMDIForm (formulário pai para aplicação M D I ) Múltiplos Forms FsMDIChild ( formulário filho aplicação M D I ) Único Form fsNormal ( formulário normal para aplicação S D I ) fsStayOnTop( formulário que fica na frente de todos para aplicação S D I )

Position ScreenCenter é a mais indicada ( Form aparecerá no centro da tela) WindowState Estado de Inicialização do Form

Métodos Exibição Mais Comuns Show Exibi o Form, podendo alternar o foco para outro aplicativo ShowModal Exibi o Form não podendo alternar o foco para outro aplicativo Close Fecha o form

Eventos mais comuns OnCreate Ativado quando o form é criado OnShow Ativado quando o form é mostrado OnActivate Ativado após ser mostrado(Show)

Linguagem de Programação Delphi 26

OnCloseQuery Ativado antes do fechamento do Form OnClose Ativado quando o form é fechado OnKeyDown Ativado quando pressionada alguma tecla

Button (Tbutton) - Botão Padrão Paleta de Componentes: Standard Propriedades Mais Comuns Caption Título do objeto. Name Nome do objeto no Form(Unit). Default Auto Seleção . Enter atiávar o evento do botão. Hint Descrição da mensagem flutuante. ShowHint Ativa a mensagem flutuante do botão Visible Esconde ou não o botão Enabled Habilita \ Desabilita o botão TabOrder Ordem do bot Eventos mais comuns OnClick Ativado quando o botão é clicado – duplo click no ativa este evento OnEnter Ativado ao receber o foco OnExit Ativado quando perde o foco

MainMenu (TMainmenu) - Menu Principal Página de Componentes: Standard

Para editar seu Menu Principal , basta dá duplo click no objeto Mainmenu Propriedades mais usadas (Item) Caption Descrição do item do Menu Checked Marca e Desmarca ítem Default Negrito do item ShortCut Coloca uma Tecla de Atalho

Linguagem de Programação Delphi 27

Edit ( Tedit ) - Caixa de Texto Paleta de Componentes: Standard Propriedades mais comuns AutoSelect (True) Seleciona todo texto ao receber o foco AutoSize Tamanho de acordo com o texto CharCase Caracteres maiúsculos,minúsculos,normais Color Seleciona cor do objeto ReadOnly Somente leitura BorderStyle Estilo da borda Ctl3D Ativa formato 3D ou não MaxLength Quatidade máxima de caracteres do EDIT Text Texto de entrada do objeto Font Formata a fonte do EDIT PassWordChar Caracter de Senha Eventos mais comuns OnChange Ativado quando ocorre uma mudança no conteúdo do EDIT OnExit Ativado quando perde o foco

Label (Tlabel) - Rótulo Paleta de Componentes: Standard Propriedades mais comuns Caption Título do Label Alignment Alinhamento do texto Font Formata a fonte do Label GroupBox (TgroupBox) – Caixa de Grupo Paleta de Componentes: Standard Propriedade Caption Título do GroupBox Panel (Tpanel) – Painel de Componentes Página de Componentes: Standard Propriedades mais comuns AutoSize Tamanho de acordo com o espaço interno dos objetos do Painel BevelOuter Tipo do contorno da borda BevelWidth Largura da linha de contorno

Linguagem de Programação Delphi 28

Bevel(TBevel) – Objeto de Interface Página de Componentes: Additional Propriedades Comuns Shape Opções para as formas do Bevel Style Baixo ou alto relevo CheckBox(TCheckBox) - Caixa de Seleção Página de Componentes: Standard Propriedades Comuns Checked True(Marcado) ou False(Desmarcado) Alignment Alinha o Texto RadioButton( TRadioButton) - Botão de Rádio Página de Componentes: Standard Propriedades Comuns Checked True(Marcado) ou False(Desmarcado) Alignment Alinha o Texto SpeedButton(TSpeedButton) - Botão tipo Barra de Ferramenta Página de Componentes: Additional Propriedades Comuns Flat Efeito igual aos botões do Internet Explorer Glyph Seleciona a imagem do Botão GroupIndex Se for diferente de 0(Zero), significa dizer que pertence a um grupo de

botões. Down True — o botão entra no estado pressionado AllowAllUp True — para colocar apenas um botão no grupo no estado

pressionado. O GroupIndex tem que ser diferente de 0(Zero). LayOut Posiciona a imagem no botão

Linguagem de Programação Delphi 29

BitBtn(TbitBtn) - Botão com Imagem do tipo Bitmap Paleta de Componentes: Additional Propriedades mais comuns Caption Título do Botão Default Ativa /Desativa foco Glyph Seleciona a Imagem do Botão Kind Tipos padrões de Botão Bitbtn LayOut Posição da Imagem no Botão RadioGroup(TRadioGroup) - Grupo de Botões de Rádio Página de Componentes: Standard Propriedades importantes Columns Número de colunas do RadioGroup ItemIndex Retorna o Índice do Item Selecionado.Se o retorno for igual a -1 ,

significa dizer que não existe nenhum item selecionado. Items Insere os ítens do RadioGroup ComboBox(TCombobox) - Caixa de Combinação Página de Componentes: Standard Propriedades mais comuns Items Lista dos Itens Sorted Mostra itens ordenados ou não Style CsDropDown(Pode digitar), csDropDownList (Não pode digitar) Text Retorna à descrição do item selecionado Sorted Mostra itens ordenados ou não Métodos mais comuns Itemindex Retorna o número do índice do item selecionado Clear Limpa todos os itens do Componente

Ex.: Combobox1.clear; Add Adiciona itens ao combobox

ex.:Combobox1.Items.Add(‘Novo Item’); Count Retorna a qtd de itens no combo

ex.: Edit1.text:=InttoStr(ComboBox1.Items.Count); Delete Deleta um item. ex.: Combobox1.Items.delete(1);

Linguagem de Programação Delphi 30

ListBox(TListbox) - Caixa de Lista Página de Componentes: Standard Propriedades mais comuns Items Lista de Itens Sorted Ordena a lista Style Tipo de lista MultSelect Permite selecionar vários Itens. Métodos mais comuns Add ( ) Adiciona Item.

Ex.: ListBox1.Items.add(‘Novo Item’); Delete ( ) Apaga um Item.

Ex.: ListBox1.Items.Delete(1); Count Retorna à quantidade de itens no componente.

Ex.: VarInteira := Listbox1.Items.Count; Clear Limpa todos os itens do Componente Selected [ ] Verifica se um certo item está selecionado.

Ex.: If ListBox1.Selected[1] Then . . . ItemIndex Retorna o Índice do Item Selecionado.

Ex.: Label1.caption := InttoStr(ListBox1.ItemIndex); Memo(TMemo) – Edição de Textos Extensos Página de Componentes: Additional Propriedades Comuns Lines Inclui as linhas de texto do Memo HideSelection Permite ou não selecionar o texto MaxLength Número máximo de caracteres do Memo. O padrão 0(zero) é ilimitado Lines Chamar o editor de texto. ScrollBars Inclui Barras de rolagens WantTabs Ativa salto de 8 em 8 caracteres WantRetuns Ativa o Enter WordWrap Faz a quebra da linha quando a mesma chegar no limite do Memo Métodos Clear Limpa texto do Memo

Ex.: Memo1.Lines.Clear; Add ( ) Adiciona linha(s) no Memo

Ex.: Memo1.Lines.Add (‘Estou adicionando uma nova linha !!’);

Linguagem de Programação Delphi 31

Image(Timage) - Carrega uma Imagem Página de Componentes: Additional Propriedades Importantes AutoSize Ajusta o tamanho do Image de acordo com a imagem Picture Seleciona a imagem Stretch Ajusta a imagem de acordo com o espaço do Image Método Importante Ler a imagem LoadFromFile ( )

Ex.: Image1.Picture.LoadFromFile(‘c:\windows\nuvens.bmp’) PageControl(TpageControl) – Fichários de Páginas Página de Componentes: Win32 Propriedades ActivePage Qual a página que será mostrada quando for ativado o Form MultiLine Ajusta as linhas de guias de acordo com o tamanho do PageControl TabPosition Exibi guias no topo ou embaixo do PagControl HotTrack Muda a cor do caption da guia quando o ponteiro do mouse passa em

cima PageIndex Número do índice de ordenação da guia(TabSheet) ImageIndex Indica o número de ordem da imagem do ImageList associado

PageControl

Click com o botão direito do mouse em cima do PageControl para Inserir um TabSheet

Linguagem de Programação Delphi 32

ImageList(TImageList) – Lista de Imagens Página de Componentes: Win 32 Para incluir imagens no componente, basta dá duplo click no mesmo. Você chegará a esta janelinha abaixo: ToolBar(TToolBar) - Barra de Ferramentas Página de Componentes: Win32 Propriedades Importantes AutoSize Ajusta a Barra de acordo com botões contidos na mesma EdgeBorders Bordas EdgeInner Formato da borda interna EdgeOuter Formato da borda externa Images Associa a ToolBar a um componente ImageList DisableImages Associa a ToolBar a um componente ImageList que contém

imagens do tipo “desativadas” HotImages Associa a ToolBar a um componente ImageList que contém

imagens do tipo “ativadas” Flat Botões com o efeito tipo Internet Explorer ShowCaption Mostra o Caption do botão

Animate(TAnimate) – Modelos de Animações do Windows Página de Componentes: Win32 Propriedade Importantes Active Ativa a animação CommonAVI Seleciona a animação desejada

Adciona as Images

Lista de Images com seus índices

Linguagem de Programação Delphi 33

StatusBar(TStatusBar) - Barra de Status Página de Componentes: Win32 Propriedades Importantes SimplePanel Somente uma área de texto SimpleText Texto para uma área simples

Ex.: StatusBar1.SimpleText := ‘Olá Usuário !’; Panels Divide a Barra em vários Panels

Ex.: StatusBar1.Panels[0].Text := ‘Área 1’; StatusBar1.Panels[1].Text := ‘Área 2’;

DateTimePicker (TDateTimePicker) – Combo Calendário Página de Componentes: Win32 Propriedades Importantes Kind Calendário(dtkDate) ou controle de

atualização de horas(dtkTime) CalColors Altera as cores padrão do componente Date e Time Retorna à data e à hora atual DateFormat Exibi a data no formato longo(dia da

semana,data do dia, mês, ano) Ou formato curto(dia/mês/ano)

Linguagem de Programação Delphi 34

UNIDADE 5

TRATANDO EXCEÇÕES (ERROS) Durante a construção de um projeto, provavelmente você irá se deparar, algumas vezes, com mensagens como a apresentada abaixo:

Seguida desta outra janelinha:

A primeira janela apareceu porque a opção Stop on Delphi Exception da página Language Exception está assinalada. Se você quiser inibi-la, é só acessar a guia Debugger Options, a partir do menu Tools|Debugger Option e desmarcar a opção : Stop on Delphi Exceptions. Quando uma exceção acontece em um projeto Delphi, o mesmo protege a seqüência de execução, por meio de um tratamento de exceção padrão( a primeira janelinha !!). A segunda janelinha de erro é resultado do código feito no evento Onclick do botão Bt_RecebeVariavelInteira .

No código acima, o valor da propriedade Text do componente Edit1 está sendo convertido para um valor inteiro e atribuído à variável VarInteira . Até aí tudo bem. Mas, se o valor digitado no Edit1 for uma string como : “150O” ( o usuário trocou o último (0)zero pela vogal O ) significa dizer que, na hora da conversão da String da propriedade Edit1.Text, o Delphi não conhecerá a vogal como um valor inteiro válido lhe exibindo as duas janelinhas que vimos anteriormente.

procedure TForm1.Bt_RecebeVariavelInteiraClick(Sender: TObject); var VarInteira:Integer; begin VarInteira := StrToInt(Edit1.Text); end;

Linguagem de Programação Delphi 35

Como programador você deve estar atento a esses detalhes e o Delphi lhe dá apoio através de um comando super útil: TRY – EXCEPT – END; Try delimita o início de um bloco de código protegido

Except delimita o final do (Try) e introduz as instruções de tratamento de exceção, com a seguinte forma:

on tipo-de-exceção do instrução end;

Veja abaixo como ficaria o código do evento Onclik do botão Bt_RecebeVariavelInteira. Observe que, se houver uma exceção será, enviada uma mensagem ao usuário avisando que o valor digitado no componente Edit1 está incorreto. Legal não é ?

procedure TForm1.Bt_RecebeVariavelInteiraClick(Sender: TObject); var VarInteira:Integer; begin Try VarInteira := StrToInt(Edit1.Text); Except On Exception do Begin Showmessage('Digite um valor inteiro válido'); Edit1.Setfocus; end end; end;

Utilizamos no tipo-de-exceção uma opção genérica(Exception) . Você pode usar também: EConvertError (Erros de conversão) EdivByZero (Divisão por zero)

Linguagem de Programação Delphi 36

UNIDADE 6

BANCO DE DADOS Fundamental à estrutura de um banco de dados é o conceito de modelo de dados, uma coleção de ferramentas conceituais para descrição de dados, relacionamento de dados, semântica de dados e restrições de consistência. Entre os vários modelos de dados, podemos citar: Modelo Entidade-Relacionamento (MER) – é baseado numa percepção de

um mundo real que consiste em uma coleção de objetos básicos chamados entidades e em relacionamentos entre esses objetos. Uma entidade é um objeto distinguível de outro objeto por um conjunto específico de atributos, como os atributos (qualidades) de uma pessoa: nome, endereço, telefone, altura, cor, ...; Um relacionamento é uma associação entre várias entidades. Por exemplo, podemos ter uma entidade CONTA com os atributos número e saldo que descrevem uma conta particular em um banco, e um relacionamento, podemos citar CONTACLIENTE, que associa um cliente a cada conta que ele possui, sendo cliente uma outra entidade.

Modelo de Redes – os dados neste modelo são representados por uma coleção de registros e os relacionamentos entre os dados são representados por ligações que podem ser encaradas como ponteiros. Os registros no banco de dados são organizados como coleção de grafos arbitrados.

Modelo Hierárquico – este modelo é similar ao modelo de redes pois os dados e relacionamentos são representados por registros e ligações, respectivamente. Ele difere do modelo de redes no sentido em que os registros são organizados como coleções de árvores em vez de grafos arbitrários.

Modelo Relacional – representa dados e relacionamentos entre dados por um conjunto de tabelas, cada uma tendo um número de colunas com nomes únicos.

O nosso estudo vai girar em torno dos sistemas relacionais (modelo relacional). Nele os dados são percebidos pelos usuários como tabelas. As tabelas são ligadas definindo um relacionamento entre um campo de uma tabela, com um campo de uma outra tabela. A vantagem de uma base de dados relacional é que você pode facilmente extrair ou combinar dados de várias tabelas para obter exatamente a informação que você precisa, sem mudar a estrutura da base de dados.

Linguagem de Programação Delphi 37

VANTAGENS DO USO DE UM BANCO DE DADOS: (ENTRE OUTRAS)

Diminuição de redundância; Diminuição da inconsistência; Independência de dados (ou seja se o armazenamento e/ou a estratégia

de acesso for modificada a aplicação não precisará ser); Segurança das informações; Integridade das informações (informações mais corretas e confiáveis).

O Delphi oferece recursos poderosos para criação de aplicações com acesso a

banco de dados. Ele apresenta acesso nativo a banco de dados populares via BDE(Borland Database Engine) , como é o caso do Oracle, Sybase, Paradox, DB2, MSAccess e outros. Para os menos populares o Delphi oferece acesso via ODBC (Open Database Conectivity). Na figura abaixo, a Arquitetura de Acesso a Banco de Dados no Delphi.

Todo o acesso a bancos de dados, remotos ou não, é feito através do BDE (Borland Database Engine). Ele torna a comunicação entre o aplicativo e os bancos de dados mais uniformes.

Os sistemas de Banco de Dados são projetados para gerenciar grande grupo de informações. O gerenciamento envolve a definição de estruturas para armazenamento de informações e o fornecimento de mecanismos para manipulá-las.

Linguagem de Programação Delphi 38

TERMOS-CHAVE DE BANCO DE DADOS Termo Definição

Campo Item de dado(ou coluna) individual de uma tabela Registro Grupo de campos relacionados (ou linhas) de uma tabela Tabela Estrutura baseada em linhas e colunas de dados Ïndice Identificador vinculado a um ou mais campos em uma tabela que mantém uma

ordem lógica dentro de uma Tabela facilitando a localização de registros(linhas) rapidamente.

Chave Índice principal onde registros duplicado são proibidos. Chave Primária

Identifica unicamente o registro. Pode ser formada por um ou mais campos. Ex.: Um CNPF, RG, Matrícula de um Aluno, estes campos são únicos para cada cidadão.

Chave Primária

É a chave primária da tabela à qual está relacionada.

USANDO O DATABASE DESKTOP (DBD)

O Ambiente Delphi disponibiliza um utilitário que dá apoio ao projetista de forma prática, fácil e rápida de criar, reestruturar e consultar tabelas. Estamos falando do Database Desktop !! Para chamá-lo basta ir até o menu Tools|Database Desktop .

O primeiro passo para desenvolver um novo projeto é estruturando as tabelas do banco de dados que será utilizado. No menu File, do Database Desktop, selecionar os comandos New | Table. O aplicativo abrirá uma caixa de mensagem(Create Table) onde será selecionado o tipo de tabela (para nossos exemplos usaremos a tabela Paradox).

Após o Click no botão “OK”, a janelinha será mostrada:

Tipo de Tabela

“OK” para abrir a telinha de criação de

campos da tabela

caixa de diálogo de criação de tabelas

Linguagem de Programação Delphi 39

A janelinha Criação de Tabelas muda de acordo com a tabela, mas funciona

da mesma maneira.

FIELD ROSTER

1. FieldName: Nome do campo criado pelo desenvolvedor. Esse nome, para efeito de facilitar o entendimento do projeto, deve ser parecido com o tipo de informação que vai conter.

Ex: Alu_Matricula – Este campo irá conter a matrícula do aluno.

2. Type: corresponde ao tipo de dado do campo que está sendo criado. Pode ser:

Dica Para ver a lista de tipos pressione a

barra de espaços.

Tipo de Dado do Campo

Nome dos Campos(Colunas) da Tabela

Tamanho do Campo

Chave Primária Barra de Status

Tipo mais usados Alpha (A) Alfanumérico(string) de 255 caracteres Number (N) Ponto flutuante Money ($) Formato do tipo moeda Long Integer (I) Valores inteiros Date (D) Formato do tipo data (dd\mm\aaaa) Time (T) Formato do tipo hora (hh:mm:ss) Memo (M) Memorando (texto longo) Logical (L) Valor Booleano (True ou False) Autoincrement (+) Auto- incremento

Linguagem de Programação Delphi 40

3. Size: tamanho do campo. Para alguns tipos como o Long Integer, Date, Number, o tamanho não será solicitado.

4. Key: determina se o campo é chave. Para isso basta clicar duas vezes, ou pressionar a barra de espaços e aparecerá um ‘*’ (asterisco). Os campos chaves devem ser os primeiros campos criados no Field Roster.

TABLE PROPERTIES - PROPRIEDADES DA TABELA

1. Validity Checks: checa a validade do conteúdo de um campo.

a) Required Field – quando selecionado exige que todo registro tenha um valor nesse campo, ou seja, ele não pode estar em branco.

b) Mínimum Value – determina o valor mínimo do campo. Ou seja, no momento da digitação do campo do registro será testado seu valor com o que estiver especificado aqui.

c) Maximum Value - determina o valor máximo. Os valores digitados no campo do registro deverão ser menores ou iguais ao valor estipulado aqui.

d) Default – no momento da execução o valor especificado aqui virá no aplicativo com padrão, podendo ser alterado a critério do usuário.

e) Picture – permite ao usuário criar a formatação padrão de um campo do registro.

Alguns símbolos para a formatação dos campos

# Dígito numérico ? Qualquer letra (maiúscula ou minúscula) & Qualquer letra (converte para maiúscula) ~ Qualquer letra (converte para minúscula) @ Qualquer caracter ! Qualquer caracter (converte para maiúscula) ; (ponto e vírgula) Interpreta o próximo caracter como literal * Permite repetir em ‘n’ vezes o que for digitado no formato.

O ‘n’ é o número digitado após o asterisco [abc] Caracteres opcionais {a,b,c} Caracteres opcionais

2. Table Lookup: essa propriedade ajuda a inserir dados em uma tabela

Paradox que já existe no primeiro campo de uma outra tabela Paradox. Para isso a Table Lookup exige que os valores que você insere em um campo exista no primeiro campo de uma outra tabela.

3. Secondary Indexes: define o acesso à tabela através de um índice

secundário. 4. Referential Integrity: assegura que as ligações entre dados em tabelas

separadas não podem ser quebradas. A integridade referencial significa que um campo ou grupo de campos em uma tabela (tabela “filho”) deve

Linguagem de Programação Delphi 41

se referir a uma chave em uma outra tabela (tabela “pai”). A tabela filho é, então, a tabela onde está a chave estrangeira, e a tabela pai é onde está a chave primária. A integridade referencial checa a validade de um valor antes de aceitá-lo na tabela, porque você só pode entrar com um valor na tabela filho, se antes este valor estiver determinado no campo chave da tabela pai.

5. Password Security: protege o banco de dados do acesso de pessoas

não autorizadas.

OUTRAS OPÇÕES DO DATABASE DESKTOP:

Caixa de Status: fornece mensagens para ajudar o desenvolvedor na criação das tabelas.

ALTERANDO A ESTRUTURA DE UMA TABELA

Selecione opção Tools | Utilities | Restructure. A caixa de seleção de arquivos do windows é então aberta, a tabela selecionada e a sua estrutura exibida para alteração. Quando as alterações forem salvas, uma caixa de aviso aparece para alertar o desenvolvedor sobre provável perda de dados. Se a tabela estiver em uso(sendo utilizada em tempo de projeto ou execução) você não poderá reestruturá-la.

VISUALIZANDO AS TABELAS

Para visualizar o conteúdo de uma tabela clique em File|Open|Table

ou no botão de abrir na barra de ferramentas( ); selecione a tabela que quer manusear. A tabela será aberta e aparecerá uma barra de ferramentas de manipulação de tabelas no exemplo a seguir:

Para inserir dados na tabela escolha o modo Edit (editar), posicione no último registro da tabela, tecle em seta para baixo para abrir um novo registro.

Linguagem de Programação Delphi 42

CRIAÇÃO DE UM ALIAS (APELIDO) O Alias identifica o local (pasta) onde as tabelas de um banco de dados serão armazenadas. O Borland DataBase Engine (BDE), usa um Alias para se referir a um arquivo ou diretório de banco de dados. Você pode definir novos alias e para bancos de dados usando o Data Base Desktop (DBD), ou o BDE.

CRIANDO UM ALIAS NO DATABASE DESKTOP Para criar um Alias no DBD selecione o menu Tools| Alias Manager.

O aplicativo mostrará a seguinte janelinha:

Escolha o botão New e digite um novo nome para o Alias, na caixa de edição Database Alias. Em driver types, escolha o tipo de driver que seu banco de dados utiliza (para o Paradox e o DBase é usado o STANDARD). Em Path, digite o caminho para o Alias ou clique em Browse, selecione o caminho onde serão guardadas as tabelas e confirme (o aplicativo voltará ao Alias Manager). Quando a operação estiver concluída e for dado OK, aparecerá uma mensagem perguntando se o usuário confirma a inclusão do novo alias no arquivo de configuração - IDAPI32.CFG. Agora, para facilitar o trabalho do desenvolvedor, pode ser definido o diretório de trabalho (Working Directory1). Este diretório será o padrão (default), ou seja tudo que for feito (gravação de tabelas, abertura...) será apontado para ele. A apresentação da caixa de diálogo é a que segue:

Dica

1 Para definir o diretório de trabalho padrão no Database

Desktop selecione: Menu File|Working Directory

Linguagem de Programação Delphi 43

CRIANDO UM ALIAS NO DATABASE NO BDE

O prcesso de criação de um Alias no BDE é bem simples, é só seguir os passos abaixo:

1. Você encontra o BDE no Grupo de Programas Borland Delphi 5 | DBE Administrator .

2. Clik agora no menu Object|New, para escolher o tipo Alias(Standard) e em seguida será pedido o nome do Alias na Árvore de Alias existente atualmente no BDE.

3. Será aberta uma caixinha1 de texto onde você digitará o nome do Alias do seu projeto.

4. Na guia Definition coloque o PATH (Caminho do Dados) do seu projeto. Por último click na seta azul voltada para a direita atualizando o arquivo IDAPI32.CFG. Pronto!! Super fácil não é??!!

1Digite aqui o nome do Alias

2Caminho onde se encontra(m) o(s)

arquivo(s) de Banco de Dados

Linguagem de Programação Delphi 44

DatasetBDE

DBGrid

DBEdit DBLokupComboBox

DBRadioGroup

DBNavigatorDBCheckBox

UNIDADE 7

ACESSO AO BANCO DE DADOS

O acesso a partir de um formulário pode ser feito através dos componentes da página Data Access como o Table, Datasource e Query. Eles são chamados componentes não-visuais pois não aparecem para o usuário no momento de execução. Estes componentes controlam a conexão com o banco de dados e o processo de informações, ou seja, são eles que ligam o componente de exibição dos campos de um registro com a tabela ou a query que se quer usar. Para exibição de campos de banco de dados será necessário utilizar os componentes da paleta Data Controls. Veja na figura abaixo a Arquitetura de Acesso ao Banco de Dados.

Os componentes Table e Query são chamados de Datasets. DataSets são

conjuntos de dados armazenados em forma de linha e colunas. As colunas são campos e as linhas, registros. Observe que para trabalhar com banco de dados no Delphi iremos usar componentes não visuais em tempo de execução (componentes da paleta Data Access) e visuais (componentes da paleta Data Controls). Bom, então, que tal começarmos a conhecer os componentes padrão de acesso e controle de dados !! .

Linguagem de Programação Delphi 45

COMPONENTES PADRÃO DE BANCO DE DADOS Nos componentes de acesso a dados existe duas propriedades comuns que são:

Propriedades Comuns aos Controles de Dados DataSource Nome do componente DataSource da Table ou Query DataField Nome do Campo da Table ou Query na qual será associado

ao componente Algumas propriedades e eventos já são conhecidas por nós, não havendo então a necessidade de repetirmos. Bom, vamos agora conhecer alguns componentes de acesso à BD. Table(TTable) – Conexão com uma tabela física Página de Componentes: DataAccess

Um componenente Table simplesmente se refere a uma tabela de banco de dados. Ao usar um componente Table , você precisa setar algumas propriedades. Você utiliza via código métodos associados ao Table. Propriedades mais usadas Active True abre a tabela, False Fecha a tabela DataBaseName Nome do Alias ou Banco de Dados Name Nome do componente no projeto TableName Nome da Tabela física da base de dados MasterSouce Nome do Datasource “Pai” da Tabela MasterField Campo(s) de relacionamento da tabela “Pai” ReadOnly Tabela apenas para leitura

Métodos Mais Usados( Sintaxe: Nome-da-Table.Método ) Open Abre o Dataset Close Fecha o Dataset Edit Coloca o registro corrente da tabela em estado de Edição(Alteração) Delete Apaga o "registro" corrente do DataSet Cancel Cancela uma Alteração (Edit) ou uma Inserção(Insert) Insert Insere um novo registro Post Grava o registro corrente na Tabela Refresh Atualiza a Tabela física First Desloca o ponteiro da tabela no primeiro registro Last Desloca o ponteiro da tabela no último registro Next Avança um registro na tabela Prior Volta um registro na tabela RecordCount Retorna o valor(inteiro) da quantidade total de registros da tabela

Ex.: Edit1.text := IntToStr(Table1.RecordCount); Métodos de Procura de Registros FindKey Procura indexada exata (Sintaxe.: Name-da-Table.FindKey([Chave]);

Ex.: Table1.FindKey([Edit1.text]); FindNearest Procura indexada aproximada (Sintaxe.: Name-da-Table.FindKey([Chave]);

Linguagem de Programação Delphi 46

Ex.: Table1.FindNearest([Edit1.text]); Método de Acesso a dados da Tabela FieldByName Acessa o conteúdo dos campos da tabela

Sintaxe: Nome-da-tabela.FieldByName(‘Nome-do-Campo’).Tipo-de-Dado; Onde Tipo-de-Dado : Asstring,AsFloat,AsInteger,AsBoolean,Asdate,Value. Ex.:Edit1.text:=TabAluno.FieldByName(‘Alu_Nome’).Asstring;

DataSource(TDataSource) – Fonte de Dados Página de Componentes: DataAccess

Faz a ligação dos campos de uma tabela aos componentes de controle de dados. Propriedades Dataset Nome do componente Table que será associado Name Nome do Componente no Projeto AutoEdit Torna o Dataset auto editável

DBEdit(TDbEdit) - Caixa de Edicão de Texto via DB Página de Componentes: DataControls Propriedades Importantes DataSource Nome do DataSource que está vinculado a uma Table ou Query DataField Nome do campo daTable que será exibido o conteúdo

DBText(TDBTEXT) - Texto via DB Página de Componentes: DataControls DBRadioGroup (TDBRadioGroup ) – Grupo de Botões de Rádio Página de Componentes: DataControls Propriedades Importantes Items Itens do DBRadioGroup Values Valor que está associado ao item e que será transferido para

campo correspondente da tabela Evento Onclik Ativado com o clik do mouse

Linguagem de Programação Delphi 47

DBGrid(TDBGrid) - Grade de Dados Página de Componentes: DataControls

Propriedades Importantes DataSource Nome do DataSource que está vinculado a uma Table ou Query Columns Faz a manutenção das colunas.Duplo clik no Grid também ativa esta

propriedade DBNavigator(TdbNavigator) - Navegador de Dados na Tabela Página de Componentes: DataControls

O Dbnavigator possibilita a navegação e manutenção dos registros na Tabela. Propriedades Importantes DataSource Nome do DatSource da Tabela ou Query ConfirmDelete Ativa / Desativa a mensagem(Inglês) de confirmação de

deleção do reg. corrente VisibleButtons Lista os botões que irão aparecer no DbNavigator Hints Descrição dos botões Flat Botões tipo Internet Explorer

Evento OnClick Dica.: Podemos criticar qual botão do Dbnavigatorfoi clicado:

If Button = nbInsert, nbEdit, nbPost,... then

Linguagem de Programação Delphi 48

DBMemo(TdbMemo) - Texto Memo via campo Memo(M) no DB Página de Componentes: DataControls

DBImage(TDBImage) - Imagem via campo(Grafico ou Binário) no DB Página de Componentes: DataControls DBCheckBox(TDBCheckBox) – Caixa Seleção via campo(Lógico) do DB Página de Componentes: DataControls DBLookUpComboBox (TDbLookUpComboBox) - (Seleção Fechada) Página de Componentes: DataControls Este componente pode ser conectado a duas fontes de dados simultaneamente, uma contendo os dados em si (tabela mestre Ex.:CadAluno.db) e a outra (tabela secundária Ex.: CadEstado.db ) contendo ao dados de exibição. Imagine se você quisesse armazenar no cadastro do Aluno a sigla do seu estado de origem, mas, ao invés de mostrar a sigla do estado como opção de escolha(Ex.: PE), você mostraria a descrição do estado de uma outra tabela(CadEstado.db) só que armazenaria a sigla(PE) na tabela(CadAluno.db). Legal não é?

Propriedades Importantes DataSource Nome do DataSource que está vinculado à Table Mestre DataField Nome do Campo da Tabela Mestre que armazenará a informação

da Tabela Secundária KeyField Nome do campo da Tabela Secundária que é

comum(tipo\tamanho) as duas Tabelas(Mestre e Secundária) ListSource Nome do DataSource da Tabela Secundária ListField Nome do Campo da Tabela Secundária que será listado do

DBLookupComboBox. DBCombBox(T DBCombBox) – Caixa de Combo via DB Página de Componentes: DataControls

Permite que o usuário selecione um valor(item) de uma lista especificada.Este valor será guardado no campo da tabela associado ao componente. Propriedade Importante Items Lista dos itens do Combo

Linguagem de Programação Delphi 49

TRABALHANDO COM MASTERSOURCE E MASTERFIELD(OU MESTRE \ DETALHE)

Um relacionamento Mestre/Detalhe(Pai/Filho) entre duas tabelas é feito da seguinte forma : a propriedade MasterSource da Tabela Detalhe(Filho) aponta para DataSource da Tabela Mestre(Pai) e a propriedade MasterFields da Tabela Detalhe(Filho) aponta para o campo comum (de relacionamento) entre as duas tabelas. Note que não há obrigatoriedade de os campos terem o mesmo nome nas duas tabelas, mas os campos precisam ser chaves nas duas tabela. Imagine que você precise fazer uma relação Mestr\Detalhe entre duas tabelas:Pedido.db(Mestre\Pai) e MovPedido.db(Detalhe\Filho). Um registro da tabela “Pai” dará origem a um ou mais registros em uma tabela “Filho”. Ex.: Um Pedido na tabela Pedido.db, poderá ter um ou mais produtos na MovPedido.db relacionado ao número do pedido atual da Pedido.db. Para isso ocorrer as duas tabelas terão que ter campo(s) comum(s) que farão a relação entre “Pai”x “Filho”.

Olha que legal!! Se você estiver no registro do Pedido (PED1608) da tabela Pedido.db(PAI) , automaticamente só será exibido na MovPedido.db(FILHO) os registros relacionados ao número do pedido selecionado. Isto porque o campo Ped_NumPedido (Pedido.db) relaciona-se com o campo MovPed_NumPed (MovPedido.bd).

A Pedido.db se relaciona com a MovPedido.db através de campos

comuns às duas (Ped_NumPedido x MovPed_NumPed)

Pedido.db

MovPedido.db Visualizando o relacionamento em tempo de execução

Linguagem de Programação Delphi 50

FAZENDO UM RELACIONAMENTO MESTRE\DETALHE(“PAI/FILHO”)

1. Selecione o componete Table da tabela Detalhe(MovPedido.db), indique na propriedade MasterSource o DataSource da tabela Mestrer(Pedido.db);

2. Ainda na tabela Detalhe(MovPedido.db), click na propriedade MasterField para indicar qual o campo ou campos que servirão de ligação entre as 2 tabelas. Obs.: Este(s) campo(s) têm que ser índices(Primários ou Secundários) nas tabelas;

3. Relacione os campos das 2 tabelas() e click no botão ADD para concretizar a ligação(Figura 2).

ASSISTENTE DE CRIAÇÃO DE TABELAS (DATABASE FORM WIZARD) O que faz esse assistente: Cria as ligações entre o formulário e os componentes Table e/ou Query; Automatiza a escrita de comandos SQL para o componente Query; Posiciona os componentes de exibição de banco de dados de maneira organizada; Define a ordem de tabulação para os controles; Faz a conexão de componentes DataSource com os componentes visuais e a

Table/Query.

CRIAÇÃO DE FORMULÁRIO COM ACESSO A BANCO DE DADOS USANDO O DATABASE FORM WIZARD

1. Feche qualquer aplicação que você esteja fazendo. Não esqueça de salvá-

la, caso deseje;

Figura 1 Figura 2

Linguagem de Programação Delphi 51

2. Há duas maneiras de chamar o Database Form Wizard:

a) Indo ao menu Database|Form Wizard, ou b) Selecionando no menu de barras a opção New, e na página

Business o Database Form Wizard. A escolha fica a seu critério.

3. A primeira caixa de diálogo que será exibida é para que o usuário escolha o tipo de formulário que quer criar: se um simples formulário (com acesso a uma única tabela) ou um mestre-detalhe (master/detail), que utiliza mais de uma tabela; e se quer usar Table ou Query;

Escolha create a simple form | create a form using Ttable objects e clique no botão NEXT.

4. Agora será solicitado o nome da tabela que quer usar. Primeiro selecione

o alias que você definiu e logo aparecerão as tabelas existentes nele;

Linguagem de Programação Delphi 52

Escolha o alias DBDEMOS e a tabela COUNTRY.DB e clique no botão NEXT.

5. Após isso serão exibidos os campos que fazem parte da tabela selecionada

(Available Fields). Você pode escolher todos ou apenas alguns. As setas simples (>) e (<) só transferem o campo que estava marcado; as setas duplas (>>) e (<<) ao serem clicadas passam tudo de um lado para o outro. As setas para cima () e para baixo () definem a ordem dos campos. Para tanto selecione o campo que deseja mudar a ordem e clique em () ou () colocando na posição que quer;

Para o nosso exemplo selecione tudo para a caixa da direita (Ordered selected fileds) e deixe na mesma ordem.

Linguagem de Programação Delphi 53

6. O próximo passo se refere à aparência dos campos no formulário, se: horizontalmente, verticalmente ou dentro de um DBGRID;

A escolha fica a seu critério.

7. Caso você selecione a opção “vertically”, a próxima pergunta permitirá

escolher a posição dos Labels (rótulos), se acima ou à esquerda;

A escolha fica a critério. 8. A próxima caixa de diálogo será a última. Nela você define se o formulário

criado será ou não o principal (Generate a main form) e se vai gerar, ao final, apenas o formulário (Form only) ou um formulário e um módulo de dados (Form and DataModule).

Linguagem de Programação Delphi 54

Form Wizard Final

Escolha apenas o formulário e clique Finish.

É criado automaticamente DataSource, Table, DBNavigator e, dependendo de sua escolha no item 6, o componente de exibição de banco de dados (DBEdit’s ou DBGrid). O formulário é comum e você pode alterá-lo diretamente, conforme queira. Moleza não é !!

Linguagem de Programação Delphi 55

UNIDADE 8

NOÇÕES DE SQL SQL - STRUCTURED QUERY LANGUAGE

Quando os Bancos de Dados Relacionais estavam sendo desenvolvidos, foram criadas linguagens destinadas à sua manipulação. O Departamento de Pesquisas da IBM desenvolveu a SQL como forma de interface para o sistema de BD relacional denominado SYSTEM R, início dos anos 70. Em 1986 o American National Standard Institute ( ANSI ), publicou um padrão SQL.

A Linguagem SQL tem como grandes virtudes sua capacidade de gerenciar

índices, sem a necessidade de controle individualizado de índice corrente, algo muito comum nas linguagens de manipulação de dados do tipo registro a registro. Outra característica muito importante disponível em SQL é sua capacidade de construção de visões, que são formas de visualizarmos os dados como listagens independentes das tabelas e organização lógica dos dados.

Devemos notar que a linguagem SQL consegue implementar estas soluções,

somente pelo fato de estar baseada em Banco de Dados, que garantem por si mesmo a integridade das relações existentes entre as tabelas e seus índices. Vamos conhecer o componente Query , que é adequado para a realização de consultas. Vamos conhecer um pouco da Linguagem SQL e ver como usar filtros em um Dataset. Query(TQuery) – Compenente de Montagem de Comandos SQL Página de Componentes: DataAccess

Seu uso está baseado na montagem de comandos de linguagem SQL(Structure Query Language-Linguagem Estruturada de Pesquisa) , que se tornou a linguagem padrão para acesso a BD. Você pode executar qualquer tipo de operação sobre as tabelas, utililizando um Query , mas, em geral, esse componente é utilizado para tarefas de consultas. Propriedades Importantes Databasename Nome do Alias onde se encontram as tabelas. Active Ativa a pesquisa SQL Defini a string(código) SQL em tempo de projeto que estará

disponível em tempo de execução. O código será armazenado na propriedade Text do SQL sendo interpretado pelo BDE no momento de su execução.

Params Define o tipo de dado para o(s) parâmetro(s) da Query caso exista parâmetro(s).

Linguagem de Programação Delphi 56

SQL-String da QUERY Select * from Alunos Where Alu_Sexo=’F’ Order by Alu_Nome

Código do Evento OnClik do BitBtn1 procedure TForm1.BitBtn1Click(Sender: TObject); begin QPesqAlunosF.close; QPesqAlunosF.open; // funcionaria usando PesqAlunosF.Active := True; end;

RecordCount Retorna em RunTime o valor inteiro da quantidade de registro da Query.

USANDO O SELECT

O comando Select é o comando básico da SQL que tem uma sintaxe bastante abrangente. Para fins de operações usuais mostraremos a sintaxe mais básica do comando:

Sintaxe: Select campo(s)1 from nome-físico-da-tabela Where condição Order by campo 1,campo 2...campo n Imagine que você precise seleciona na tabela Alunos.db, todos os

alunos do sexo feminino(F). Se você não dispusesse do SQL, poderia fazer esta rotina com um While enquanto não fosse o fim da tabela pequisaria os alunos do sexo feminino. Mas, onde guardar o resultado desta pesquisa? Teria que ter uma tabela auxiliar. A pesquisa é sequencial, e se a tabela for enorme(muitos registro)? Com a SQL fica mais prático, veja como ficaria a instrução SQL!!

Detalhe

1Se for especificado *(asterisco) para os campos, significa que todos os campos serão

selecionados.

Linguagem de Programação Delphi 57

MONTANDO UMA INSTRUÇÃO SQL EM RUNTIME

Você pode montar uma instrução SQL em tempo de execução sem precisar ter que adcionar em tempo de projeto uma instrução na propriedade SQL da Query. Para fazer isso precisaremos do método ADD.

Com ADD você pode fazer uma sequência de linhas de instrução SQL e inseri-las uma a uma na propriedade SQL ou Text da Query. Veja como ficaria o código para dois botões. O primeiro botão(BitBtn1) ao ser pressionado (Onclick) montará uma instrução usando o método ADD para selecionar os alunos femininos e o segundo botão(BitBtn2) selecionará os alunos do sexo masculino.

Observe que a pesquisa ficou dinâmica. O código SQL é modificado em tempo de execução e o resultado da consulta é apresentado de acordo com a escolha do usuário.

Podemos também usar a propriedade Text da SQL. Observe como ficaria a instrução no exemplo acima usando a propriedade Text, o exemplo serve para os eventos dos dois botões.

Código do Evento OnClik do BitBtn1 procedure TForm1.BitBtn1Click(Sender: TObject); begin QPesqAlunos.close; // Fecha a query QPesqAlunos.Sql.Clear; // Limpa a string SQL atual QPesqAlunos.Sql.Add(‘ Select * from Alunos ’); // Linhas novas da SQL QPesqAlunos.Sql.Add(‘ Where Alu_Sexo=”F” ’); // Sexo feminino QPesqAlunos.Sql.Add(‘ Order by Alu_Nome ’); QPesqAlunos.open; // Ativa a consulta

end;

Código do Evento OnClik do BitBtn2 procedure TForm1.BitBtn2Click(Sender: TObject); begin QPesqAlunos.close; // Fecha a query QPesqAlunos.Sql.Clear; // Limpa a string SQL atual QPesqAlunos.Sql.Add(‘ Select * from Alunos ’); // linhas novas da SQL QPesqAlunos.Sql.Add(‘ Where Alu_Sexo=”M” ’); // Sexo masculino QPesqAlunos.Sql.Add(‘ Order by Alu_Nome ’); QPesqAlunos.open; // Ativa a consulta

end;

Usando a propriedade Text procedure TForm1.BitBtn2Click(Sender: TObject); begin QPesqAlunos.close; // Fecha a query QPesqAlunos.Sql.Clear; // Limpa a string SQL atual QPesqAlunos.Sql.Text:=‘Select * from Alunos Where Alu_Sexo=”M” Order by Alu_Nome ’); QPesqAlunos.open; // Ativa a consulta

end;

Linguagem de Programação Delphi 58

PASSANDO PARÂMETROS PARA A QUERY EM RUNTIME Suponha que você precise fazer uma pesquisa a partir de uma informação

passada pelo usuário em tempo de execução. Por exemplo, se ao invés de montarmos uma consulta com 2(dois) botões que contém uma instrução diferente em cada um, que tal, montarmos uma instrução e deixar o usuário passar para nós a parâmetro chave da pesquisa que é sexo do aluno. Para avisar a Query que em sua SQL-String tem um ou mais parâmetros, precisaremos dá um nome ao parâmetro e antes deste nome usar “:” (dois pontos). Ex.: :Psexo (Obs.: a escolha do nome fica por conta do programador). Precisaremos também usar a propriedade Params. Veja o exemplo abaixo :

O índice da propriedade Params segue a ordem dos parâmetros inserido na string SQL e sempre o índice começando em zero.Você pode inserir em uma condição com vários parâmetros e usar operadores relacionais(And \ Or). Por exemplo, para selecionar todo os nomes de alunos e datas de nascimentos que sejam de um determinado sexo e um determinado estado, onde estas informações(sexo\estado) serão passadas como parâmetros pelo usuário, a instrução SQL ficaria desta forma:

Instrução SQL com Parâmetro (evento Onclick do RadioGroup) procedure TForm1.RadioGroup1Click(Sender: TObject); var Sexo:String[1]; begin if RadioGroup1.ItemIndex = 0 then // critica a opção selecionada Sexo := 'F' else Sexo := 'M'; QPesqAlunos.close; // Fecha a query QPesqAlunos.Sql.Clear; // Limpa a string SQL atual QPesqAlunos.Sql.Text:='Select * from Alunos Where Alu_Sexo=:Psexo Order by Alu_Nome '; QPesqAlunos.Params[0].Asstring := Sexo; // Passando o conteúdo da variável como o parâmentro QPesqAlunos.open; // Ativa a consulta end;

Linguagem de Programação Delphi 59

Instrução SQL com 2 Parâmetros procedure TForm1.BitBtn3Click(Sender: TObject); var Sexo:String[1]; begin if RadioGroup1.ItemIndex = 0 then // critica a opção selecionada Sexo := 'F' else Sexo := 'M'; QPesqAlunos.close; // Fecha a query QPesqAlunos.Sql.Clear; // Limpa a string SQL atual QPesqAlunos.Sql.Add('Select Alu_Nome,Alu_DtNasc,Alu_Estado from Alunos’); QPesqAlunos.Sql.Add('Where Alu_Sexo=:Psexo And Alu_Estado=:Puf’); QPesqAlunos.Sql.Add('Order by Alu_Nome'); QPesqAlunos.Params[0].Asstring := Sexo; // Passando o conteúdo da variável como o parâmentro QPesqAlunos.Params[1].Asstring := Edit1.Text; // edit com a sigla do estado passada pelo usuário QPesqAlunos.open; // Ativa a consulta end;

Linguagem de Programação Delphi 60

UNIDADE 9

RELATÓRIOS COM QUICKREPORT

O QuickReport é um conjunto de componentes nativos para Delphi que executam toda a tarefa de visualização e impressão de relatório. Um relatório é criado à semelhança do formulário. É usado o componente Quick Rep que transforma um formulário comum em um relatório. Os controles de impressão estão na paleta Qreport. Basicamente um relatório é composto por: cabeçalho, cabeçalho de colunas, área de informações(linhas detalhes) e o sumário.

O QuickReport é um gerador de relatórios por banda. Seu relatório é construído em cima de vários tipos de banda, onde são colocados componentes visíveis como campos de banco de dados, rótulos, imagens e outros componentes imprimíveis.

COMPONENTES PADRÃO DO QUICKREPORT QUICKREP (TQUICKREPORT) (FORMULÁRIO BÁSICO DE RELATÓRIO) Página de Componentes: QReport Propriedades DataSet Nome da Table ou Query que será usada no relatório ShowProgress Deseja apresentar a progressão do processo ?

Métodos Print Imprimir relatório.

Sintaxe: nome-do-QuickRep.Print; Preview Ativa apenas a visualização do relatório

Sintaxe: nome-do-form.nome-do-QuickRep.Preview; QRBAND(TQRBAND) – CRIAÇÃO DE BANDAS\FAIXAS Página de Componentes: QReport Propriedade BandType Tipo de Banda assumida ForceNewPage Força quebra de página automática

QRLABEL(TQRLABEL) – RÓTULO PARA RELATÓRIOS Página de Componentes: QReport

Linguagem de Programação Delphi 61

QRShape(TQRShape) – Ferramenta de criação de Formas Página de Componentes: QReport

Propriedade Shape Tipo de Forma Pen Configura a linha

QRMemo(TQRMemo) –Texto Longo para Relatório Página de Componentes: QReport

QRIMAGE(TQRIMAGE) – Imagem para Relatório Página de Componentes: QReport QRSysData(TQRSysData) - Exibi informações de apoio PÁGINA DE COMPONENTES: QREPORT

Propriedade Data Tipo de Informção

QRExpr(TQRExpr) – Criador de Expressões Página de Componentes: QReport Propriedade Expression Criação de sua expressão

Ex.: SUM(TbFuncionario.Func_salario) Mask Configura sua apresentação ResetAfterPrint Zera a expressão após sua impressão

COMPONENTES PADRÃO DO QUICKREPORT PARA ACESSO A BANCO DE DADOS Os componentes de acesso a Banco de Dados no QuickReport são super parecidos com os que vimos para Formulários(Forms). A diferença principal está na propriedade Datasource que agora vamos nos referir ao Dataset . Duas propriedades são comuns a estes componentes : Dataset(Nome da Tabela ou Query do Relatório) e DataField(Campo da Tabela ou Query). QRDBText(TQRDBText) - Texto via DB Página de Componentes: QReport QRDBImage(TQRDBImage) – Imagem via DB Página de Componentes: QReport

Linguagem de Programação Delphi 62

PASSOS PARA CRIAÇÃO DE UM RELATÓRIO: 1. Abra uma nova aplicação; 2. Selecione o componente QuickRep e coloque no formulário; este componente

fará aparecer uma espécie de “papel milimetrado” onde você disporá os demais controles que precisar;

3. Adicione um componente Table e DataSource (paleta Data Access), faça as

ligações padrões que foram vistas em acesso a banco de dados; 4. Selecione as bandas (Objeto QRBand). Este novo componente é responsável pelo

“corpo” do relatório. Ao ser inserido só aparecerá uma linha demarcando a banda. Na propriedade BandType você define se este bloco será tratado como:

RbTitle faixa de título que será impressa uma única vez no início

do relatório. RbColumnHeader faixa de cabeçalho de coluna, sendo impressa no topo de

cada coluna em um formulário de múltiplas colunas. rbDetail faixa de detalhes, usada para imprimir todos os registros

mestres de um banco de dados. rbGroupFooter serve como finalizador para a banda GroupHeader. rbGroupHeader usada para agrupar valores em um par de arquivos

relacionados. rbPageHeader banda de cabeçalho. Será impressa no início de cada

página. rbPageFooter rodapé. Será impressa no final de cada página. rbSummary faixa de sumário de um relatório. Será impressa após

todas as bandas detalhes. rbSubDetail faixa usada para imprimir os registros de detalhes num

par de arquivos relacionados. rbChild define a banda filha de outra banda.

5. Supondo selecionada a banda de cabeçalho, para você colocar um título nesse cabeçalho, ou melhor dizendo, para colocar textos no relatório, selecione o componente QRLabel da paleta. Altere a propriedade Caption desse controle e pronto, você já tem um texto.

6. Caso queira colocar dados no relatório como data ou hora ou mesmo ambos

insira o controle QRSysData e selecione na propriedade Data a opção que deseja.

7. Para ‘imprimir’ os dados da tabela use o controle QRDBText fazendo as devidas

ligações nas propriedades DataSet e DataField;

Linguagem de Programação Delphi 63

8. Vejamos como ficaria o formulário de impressão:

9. Para visualizar o relatório final na fase de desenvolvimento selecione o componente QuickRep e pressione o botão direito do mouse. Aparecerá um menu suspenso. Escolha a opção “Preview”. Automaticamente aparecerá, em tela, um zoom do relatório.

10. Caso você queira mostrar esse “Preview” em tempo de execução digite o seguinte

comando: Sintaxe: <nome do form.>.<nome do quickrep>.Preview EX.: Form1.QuickRep1.Preview;

11. Para imprimir, realmente, o comando será:

Sintaxe: <nome do form>.<nome do quickrep>.Print Ex.: Form1.QuickRep1.Print;

QRLabel

QRDBText

Linguagem de Programação Delphi 64

12. Configuração das páginas:

Você acessa essa configuração quando clica, dentro

do QuickRep, com o botão direito do mouse seleciona opção Report Settings; ou na propriedade Page do QuickRep.

Linguagem de Programação Delphi 65

1 2 3

APÊNDICE 1

MENSAGENS NO DELPHI Para dar mensagens ao usuário, você pode usar a função ShowMessage, que já conhecemos logo no início do curso. O Delphi possui outras funções que permitem sofisticar essa comunicação. Existem em livros uma função chamada MessageDlg, no entanto, esta função exibe o título da mensagem e dos botões em inglês. Abaixo é mostrada uma caixinha de diálogo com a função MessageDlg :

Para contornar essa “chatice”, usaremos uma função parecida com a MessageDlg, só que, mais flexível. Ela se chama MessageBox. Sintaxe: Application.MessageBox(' mensagem ', 'titúlo da janelinha', ícone da face da janelinha + botão (es) da face da janelinha) = retorno Onde: Mensagem : Mensagem que aparecerá na face da Janela ; Título da Janelinha : Mensagem que aparecerá na barra de título da janelinha ;

Parâmetro do ícone da face da janelinha Exibição MB_ICONEXCLAMATION, MB_ICONWARNING Sinal exclamação MB_ICONINFORMATION Sinal “i” MB_ICONQUESTION Sinal interrogação MB_ICONSTOP, MB_ICONERROR Sinal “X”

Parâmetro dos botões da face da janelinha Exibição MB_YES Botão “Sim” MB_NO Botão “Não” MB_CANCEL Botão “Cancelar” MB_OK Botão “OK” MB_ABORTRETRYIGNORE Botões “Anular”,”Repetir”,”Ignorar” MB_YESNO, MB_YESNOCANCEL... Vários Botões

1

2

Detalhe Observe que o título e os botões aparecem para o

usuário em inglês. Outro detalhe, é que não podemos alterar a

mensagem da Barra de Título. Chato, não é ?

Linguagem de Programação Delphi 66

Retorno Teste

IDYES Clicou no botão “Sim” IDNO Clicou no botão “Não” IDCANCEL Clicou no botão “Cancelar” IDOK Clicou no botão “Ok” IDABORT Clicou no botão “Anular” IDRETRY Clicou no botão “Repetir” IDIGNORE Clicou no botão “Ignorar”

3

Exemplo com o MessageBox If Application.MessageBox('Confirma Exclusão?', 'Atenção', MB_ICONEXCLAMATION + MB_YESNO) = IDYES then Dm.Ta_Alunos.Delete; // se pressionado o botão "Sim" Deleto o registro corrente

Linguagem de Programação Delphi 67

APÊNDICE 2 PROPRIEDADES, EVENTOS, MÉTODOS COMUNS E MAIS USADOS

PROPRIEDADES

Name: É comum a todos os componentes da paleta. O Delphi nomeia automaticamente todos os componentes que são incluídos no form (inclusive o proprio form). Usa o nome da classe do componente mais um número seqüencial. O nome atribuído pelo Delphi pode ser mantido, mas é aconselhável renomear os componentes que serão referidos no programa.

Caption: Todos os componentes que podem apresentar um rótulo têm esta propriedade. Armazena a string que será mostrada quando o componente for desenhado.

Left e Top: Esquerda e Topo. Armazenam a posição do componente em relação ao form ou painel que o contém. Movendo o componente, estas propriedades se atualizam automaticamente, e alterando estas propriedades, o componente é movido.

Height e Width: Altura e comprimento do componente. Idem acima.

Font: Permite selecionar tamanho e tipo da fonte que será usada para escrever o texto no componente.

Color: Cor do componente. Existe uma lista de cores padrão usadas pelo Windows e pelo Delphi, mas é possível definir qualquer cor através de seus componentes RGB.

TabOrder: Ordem do componente no Form ou painel. Quando há vários componentes selecionáveis no Form ou painel, a tecla Tab permite navegar entre os componentes. Esta propriedade define a ordem em que os componentes são selecionados quando o usuário tecla Tab.

Hint: Este é um recurso muito útil e fácil de usar. Permite que apareça um texto de ajuda quando o usuário posiciona o cursor do mouse sobre um componente. Todos os componentes podem ter Hint. Na propriedade Hint, voce deve digitar a frase que deve aparecer. Veja a propriedade abaixo.

ShowHint: Ativa o hint para o componente. Se estiver desligado, o hint não é mostrado.

EVENTOS

OnClick: É gerado cada vez que o botão esquerdo do mouse é pressionado e solto. O evento só ocorre quando o usuário libera o botão. O Delphi já direciona o evento para o componente que está debaixo do cursor do mouse.

OnDblClick: Gerado quando é feito um duplo clique no botão esquerdo.

Linguagem de Programação Delphi 68

OnKeyPress: Gerado quando o usuário pressiona (e libera) uma tecla no teclado.

OnEnter: Gerado quando o foco de atenção do Windows “cai” sobre o componente. Exemplo: Suponha uma tela de entrada de dados, onde vários campos devem ser digitados. Quando a tela é apresentada, o foco ou o cursor de texto, está sobre o primeiro campo. Depois de digitar o campo, o usuário pressiona Tab para passar para o campo seguinte. Veja que o que passa para o campo seguinte é a atenção da aplicação e do Windows. Essa atenção é chamada de foco, ou focus em inglês. Este evento é gerado assim que o componente recebe o foco, antes de executar qualquer código do componente.

OnExit: Gerado imediatamente antes de o foco deixar o componente.

OnResize: Gerado quando o tamanho do componente é alterado. É usado principalmente em forms e painéis.

OnChange: Gerado quando o valor do componente muda. Só é aplicado em componentes que permitem edição de seu conteúdo.

MÉTODOS

Show: Desenha o componente. Se for uma janela (form) ela é desenhada e ativada.

Close: Fechar. Aplicado geralmente em forms e arquivos. Quando utilizado no form principal, encerra a aplicação.

Create: Aloca memória para criar um componente ou form, dinamicamente.

Free: Libera a memória alocada com o Create.

Linguagem de Programação Delphi 69

APÊNDICE 3

OBJETO TFRAME

O objeto TFrame é semelhante ao componente TPanel. O propósito deste componente é criar uma classe incorporada de vários outros componentes. O mais interessante é que este novo Frame pode também ser adicionado a sua paleta de componentes, sendo assim instanciado futuramente em suas outras aplicações de forma independente da original. As alterações feitas em objetos TFrame são automaticamente refletidas nas instâncias que a referenciam. O código é mantido na Unit do Frame. A utilização de Frames é muito simples, basta clicar em 'File | New Frame...'.

Um novo Frame será criado em forma de um formulário. Inclua os objetos que deseja utilizar, e adicione ao Form principal um objeto TFrame da paleta de componentes Standard.

Linguagem de Programação Delphi 70

Selecione o Frame criado na janela exibida, e clique em Ok. Será adicionado um objeto parecido com o TPanel no Form contendo os objetos incluídos no Frame.

O objeto TFrame inserido dentro de um formulário.

Linguagem de Programação Delphi 71

REFERÊNCIAS Biográficas : CANTU, Marco Dominando o Delphi Vol.4 e 5 (“A Bíblia”) EUGO, Frank Como Programar em Delphi 3.0 LOYOLA, Afonso Delphi vol.1 e 2 GENERINE, Adelize SQL para Delphi PERROTTI,Arthur Curso de Delphi Cibernética: Borland Site www.borland.com