Você está na página 1de 63

Curso Tcnico de Programao Comercial

Introduo ao

Desenvolvimento de Aplicaes
Utilizando Delphi e Firebird

ROGER SANTOS FERREIRA

FORMIGA 2009

SUMRIO

1 INTRODUO ....................................................................................................3 2 A Histria do Delphi.............................................................................................4 3 Definies Prticas..............................................................................................6 4 Aplicabilidade ......................................................................................................8 5 Delphi e os Bancos de Dados .............................................................................8 6 Instalao do SGBD Firebird 1.5.........................................................................10 7 Instalao do IBExpert ........................................................................................12 8 Trabalhando com o IBExpert...............................................................................14 8.1 Criando Chaves Primrias..........................................................................16 8.2 Criando Chaves Estrangeiras.....................................................................17 8.3 Criando o Auto-incremento das Chaves Primrias.....................................17 9 Conhecendo um Pouco Mais do Ambiente Delphi ..............................................18 9.1 Explanao das Janelas do Delphi.............................................................19 9.1.1 Barra de Menus ..............................................................................19 9.1.2 Paleta de Componentes .................................................................19 9.1.3 Speedbar ........................................................................................20 9.1.4 Object Inspector .............................................................................21 9.1.5 Form ...............................................................................................22 9.1.6 Code Editor.....................................................................................22 10 Primeiros passos com o Delphi .........................................................................25 10.1 Antes de Comear..................................................................................25 10.1.1 Code Insight .............................................................................25 10.1.2 Configuraes do Ambiente .....................................................26 10.1.3 Teclas e Atalhos de Teclado Importantes.................................28 10.1.4 Projetos em Delphi ...................................................................28 10.2 Primeiro Programa .................................................................................29 10.3 Informaes Sobre os Principais Componentes.....................................32 10.3.1 Objeto Form..............................................................................32 10.3.2 Objeto Button............................................................................33 10.3.3 Objeto Edit................................................................................34 10.3.4 Objeto Label .............................................................................35 10.3.5 Objeto Memo ............................................................................35 10.3.6 Objeto Checkbox ......................................................................36 10.3.7 Objeto PageControl ..................................................................36 10.3.8 Objeto Panel.............................................................................37 10.3.9 Objeto StringGrid......................................................................37 11 Trabalhando com Arquivos no Delphi ...............................................................38 12 Trabalhando com Bancos de Dados no Delphi .................................................57

1 - INTRODUO

Antes do Delphi e de outras linguagens visuais, todas as linguagens de programao eram praticamente iguais, do ponto de vista conceitual. Havia diferenas de sintaxe, claro, bem como diferenas importantes de paradigmas, mas a metodologia da programao em C, por exemplo, era a mesma da programao em Pascal, Cobol ou Fortran. As linguagens visuais introduziram estratgias radicalmente novas de programao. O fato que, com o passar do tempo, escrever programas passou a ser cada vez mais difcil, especialmente programas que exigiam interface grfica. Entretanto, alguns programadores perceberam que muitas coisas que eram difceis de ser feitas, como construir janelas, menus ou botes, podiam ser feitas sempre da mesma forma. Estes programadores, que j tinham o hbito de colecionar subrotinas de utilizao geral, passaram a encapsular algumas destas rotinas em uma espcie de "objeto" pronto para ser usado. A idia final, que deu origem ao Delphi, foi a percepo de que vrios destes objetos podiam simplesmente ser desenhados na tela como se desenha um retngulo ou outra figura qualquer. O Delphi um pacote de ferramentas de programao concebido para programao em Windows. Os objetos so desenhados na tela de forma visual, com auxlio do mouse, e no por meio de programao. A programao em si orientada a eventos. Quando um evento ocorre, tal como uma tecla pressionada ou um clique de mouse, uma mensagem enviada para a fila de mensagens do Windows. A mensagem estar disponvel para todos os aplicativos que estiverem rodando, mas apenas aquele interessado no evento responder mensagem. Tudo que o usurio precisa fazer detectar o evento e mandar que um trecho de cdigo seja executado quando isto acontecer. O Delphi torna esta tarefa fantasticamente fcil!

2 - A HISTRIA DO DELPHI

Delphi (l-se "dl-fi" mas os americanos pronunciam "dl-fai") um compilador e uma IDE para o desenvolvimento de softwares. Ele produzido pela Borland Software Corporation (por algum tempo chamada Inprise). A linguagem utilizada pelo Delphi, o Object Pascal (Pascal com extenses orientadas a objetos) a partir da verso 7 passou a se chamar Delphi Language. O Delphi, originalmente direcionado para a plataforma Microsoft Windows, agora desenvolve aplicaes nativas para Linux com o Kylix, e para o Microsoft .NET framework em suas verses mais recentes. O nome Delphi inspirado na cidade de Delfos, o nico local na Grcia antiga em que era possvel consultar o Orculo de Delfos. Os desenvolvedores do compilador buscavam uma ferramenta capaz de acessar um banco de dados Oracle. Da veio o trocadilho "a nica maneira de acessar o orculo usando Delphi". Quando lanado em 1995 para a plataforma Windows 16 bits, foi o primeiro a ser descrito como ambiente RAD (em portugus, Desenvolvimento Rpido de Aplicaes). A sua segunda verso, lanada um ano depois com o Delphi 2 j produzia aplicativos para a plataforma Windows 32 bits, sendo que uma verso em C++, o C++ Builder surgiu alguns anos depois. Em 2001 uma verso para plataforma Linux, conhecida como Kylix foi disponibilizada. Em 2002 foi lanada nova verso compatvel com Linux (atravs do Kylix e a paleta CLX de componentes), sendo que em 2003 o Delphi 8 passou a incluir suporte para desenvolvimento de aplicaes .NET. No final de 2004 foi lanada a verso Delphi 2005 (correspondente a verso 9), com suporte, na mesma IDE, ao desenvolvimento para plataformas Windows 32 bits e Windows .NET, alm de integrar no mesmo ambiente de desenvolvimento a possibilidade de se desenvolver utilizando o ambiente do Delphi, C++ Builder ou C#. No final de 2005 foi lanada a verso Delphi 2006 (correspondente a verso 10) integrada no Borland Developer Studio 4.0 com destaque para a total integrao com o Borland Together, o preview do compilador do C++ Builder, atualizao dos drivers DBExpress, novos refactorings e recursos da IDE. Nessa verso o gerenciador de memria utilizado

pelo Delphi foi substitudo, tornando os aplicativos compilados em Delphi mais rpidos. Como a ferramenta compilada utilizando o prprio Delphi, esta nova verso tambm est muito rpida. O arquiteto por trs do Delphi e de seu predecessor Turbo Pascal foi Ander Hejlsberg, at a sua alterao para a Microsoft em 1996, onde se tornou o arquiteto responsvel pelo projeto do C# e foi pea chave na criao do ambiente Microsoft .NET, utilizado no Delphi 8. O Delphi teve o formato da IDE alterado pela primeira vez na verso 8, basicamente similar ao formato do Microsoft Visual Studio para .NET. As principais diferenas entre o Delphi/Kylix e outras ferramentas de desenvolvimento so: a Linguagem Delphi, as paletas VCL e CLX, forte nfase na conectividade com diversos bancos de dados e um grande nmero de componentes produzidos por terceiros, muitos deles disponveis na internet e grande parte deles com o cdigo fonte disponvel. Os defensores do Delphi sustentam que fornecer juntos a linguagem, a IDE e sua biblioteca de componentes (VCL/CLX) contribui para uma boa consistncia interna e um pacote mais reconhecvel. Alguns destacam como vantagens do Delphi: a existncia de uma grande quantidade de componentes prontos em sua biblioteca, facilidade de uso e aprendizado e desenvolvimento rpido. Atualmente a Borland em seu processo de reestruturao, est se focando em suas ferramentas ALM (Application Life-Cycle Management), devido as recentes aquisies de empresas. Deixando juntamente com um grupo de investidores a criao de uma empresa que cuide especialmente dos produtos IDEs (C#Builder, C++Builder, Delphi, JBuilder, Interbase). No dia 05 de setembro de 2006 a Borland juntamente com a Developer Tools Group, grupo responsvel pelo desensolvimento das ferramentas IDE, entrega ao pblico a linha Turbo, que praticamente o desmembramento da sute Borland Developer Studio (BDS 2006). Em duas verses, Explorer(download gratuito;

direcionado a estudantes, inciantes em programao e hobbistas) e a Professional (pago; direcionado s softwares-houses e profissionais autnomos). J no dia 14 de novembro de 2006, a Borland no encontrando um potencial comprador que atendesse os quesitos que se comprometam com a evoluo das ferramentas IDE, ela decidiu criar uma subsidiria colocando todos responsveis pela "DevCo" nessa nova empresa chamada CodeGear. Que, especialmente cuidar das IDEs.

3 - DEFINIES PRTICAS

Object Pascal: Linguagem Pascal orientada objetos. IDE (Integrated Development Environment ou Ambiente de

Desenvolvimento Integrado): O ambiente de desenvolvimento do Delphi composto de vrias partes compondo um conjunto integrado de janelas que interagem entre si. Form: o termo utilizado para representar as janelas do Windows que compem uma aplicao. Os forms servem como base para o

posicionamento dos componentes, que so responsveis pela interao entre usurio e mquina. As caractersticas iniciais do form como tamanho, botes (minimizar, maximizar, fechar, controle) e cone podem ser modificadas atravs do Object Inspector (explicado mais abaixo). Obs.: SHIFT+F12 possibilita a visualizao de outros formulrios da aplicao. Barra de Menu/Ferramentas: Como todo programa padro Windows, h uma janela onde esto situados os menus da aplicao, a barra que contem os menus tambm agrupa outras partes. Paleta de Componentes: Paleta onde o desenvolvedor encontra todos os componentes necessrios aplicao. Componentes podem ser adicionados. No Delphi, os componentes encontram-se em uma paleta com vrias guias. Speedbar: Est posicionada ao lado esquerdo da barra principal do Delphi. Possui diversos botes (cones) que representam comandos muito utilizados

durante o desenvolvimento como criar novo form, abrir projeto, salvar, adicionar algum arquivo ao projeto, executar a aplicao (Run), dentre outros. Object Inspector: Uma das partes mais importantes da orientao a objetos a possibilidade de definir caractersticas personalizadas aos componentes. O Object Inspector a paleta de propriedades que o programador pode atribuir aos componentes utilizados no desenvolvimento. Obs.: pressionandose F11, coloca-se o foco no Object Inspector e caso ele tenha sido fechado, mostra-o novamente na tela. Code Editor: O editor de cdigo responsvel por receber todas as declaraes criadas pelo Delphi e handlers (Manipulador de eventos) criados pelo desenvolvedor. no ambiente Code Editor que so implementados os algoritmo na linguagem Object Pascal. Obs.: Pressionando-se a tecla F12 a janela alterna entre Form e Code Editor e CTRL+F12 escolhe qual unit mostrar.
Speedbar Barra de Menu/Ferramentas Paleta de Componentes

Form

Object Inspector

Code Editor

4 - APLICABILIDADE

Sendo o mais conhecido dos programas do tipo RAD (Rapid Application Development) o Delphi no pode ser usado para desenvolvimento de software de base ou aplicativos de sistema. Entre os engenheiros de software o Delphi muitas vezes caracterizado como um "aplicativo programvel". O Delphi largamente utilizado no desenvolvimento de aplicaes desktop e aplicaes multicamadas (cliente/servidor), compatvel com os bancos de dados mais conhecidos no mercado. Como uma ferramenta de desenvolvimento genrica, o Delphi pode ser utilizado para diversos tipos de desenvolvimento de projetos, abrangendo desde Servios a Aplicaes Web, Aplicaes CTI (tecnologia que permite a integrao de computadores com telefones) e aplicaes para dispositivos mveis, tais como palmtops, pocketPC e outros.

5 - DELPHI E OS BANCOS DE DADOS

Como j citado, o Delphi compatvel com os bancos de dados mais conhecidos do mercado como: Oracle, Interbase, MS Access, SQL Server, Firebird, entre muitos outros. O suporte a bancos de dados um dos recursos fundamentais do Delphi e o desenvolvimento deste produto frente a outros tem se baseado enormemente nesta facilidade. comum que programadores percam muito tempo

operacionalizando tarefas que o Delphi j oferece prontas. Por esta razo, o Delphi conhecido como uma "ferramenta de desenvolvimento rpido", capaz de gerenciar bancos de dados com um mnimo de cdigo de programao. Um aplicativo de banco de dados no Delphi no tem acesso direto s fontes de dados. A interface feita por meio do Borland Database Engine (BDE), que tem acesso a vrias fontes, incluindo o dBase, o Interbase, o Firebird, Paradox, ASCII, FoxPro e Access, sendo que estes dois ltimos so bancos de dados da

Microsoft. Isso significa que, para rodar um aplicativo Delphi em uma mquina que no tenha o Delphi instalado, ser necessrio instalar o BDE junto com o aplicativo. Para tornar esta tarefa mais fcil, a Borland disponibiliza uma verso mais simples do BDE, que pode ser includa nos discos de instalao. O Delphi tambm permite acessar servidores SQL (Structured Query Language ou Linguagem de Consulta Estrutrada) locais e remotos e vem acompanhado do Local Interbase for Windows, da Borland. O BDE tambm permite a interface com drivers ODBC, mas este mtodo geralmente menos eficiente. A figura abaixo ilustra a estrutura geral de acesso a bases de dados no Delphi.

10

6 INSTALAO DO SGBD FIREBIRD 1.5


Primeiramente faz-se necessrio o download do pacote de instalao do Firebird, facilmente encontrado pela internet e principalmente na pgina oficial do projeto: http://www.firebirdsql.org/. O Firebird um banco de dados relacional que oferece recursos ANSI SQL-99 que rodam no Linux, Windows e plataformas Unix. Ele oferece alta performance e uma linguagem poderosa para procedimentos e triggers. Firebird j usado em sistemas de produo sob uma variedade de nomes diferentes desde 1981. Este SGBD um projeto comercialmente independente de

programadores C e C++, tcnicos e analistas que vm desenvolvendo-o a partir do cdigo fonte de um sistema de gerenciamento lanado pela Inprise Corp - hoje conhecida como Borland Software Corp., a fabricante do Delphi.

Tela de boas vindas.

Tela de aceitao de contrato.

Informaes importantes antes da instalao.

Escolha do local de instalao.

11

Escolha dos componentes a serem instalados.

Escolha do nome do menu a ser criado no Menu Iniciar do Windows.

Escolha das tarefas adicionais de instalao. Obs.: Recomendado: rodar o Firebird como servio do Windows.

Finalizar a instalao.

Pronto! Tendo o SGBD j instalado no computador fcil de testar se ele est funcionando. Simplesmente pressionando CTRL+ALT+DEL e verificando a lista de processos se os processos fbguard.exe e fbserver.exe esto em funcionamento.

12

7 INSTALAO DO IBEXPERT
Com o Firebird funcionando corretamente, faz-se necessria a instalao de um software de manipulao/criao de bases de dados nesse SGBD. O Delphi 5 j traz nativamente o Database Explorer, porm ele trabalha somente com bases PARADOX. Tais bases j no so utilizadas no mercado atual. Como exemplo ser demonstrado a instalao do IBExpert. IBExpert uma ferramenta para administrao de bancos de dados Interbase e Firebird. Permite criar e gerenciar usurios e tabelas. A verso gratuita para testes. Caso tenha interesse em obter a verso completa, dirija-se ao site oficial da IBExpert e adquira o gerenciador (www.ibexpert.com). Com IBExpert possvel: analisar dados, copiar objetos de Bancos de Dados, utilizar ferramentas de SQL, comparar Bancos de Dados ou tabelas de Bancos de Dados, bem como a opo de Database designer, para criar tabelas.

Tela de boas vindas.

Seleo de ferramentas a serem instaladas.

Aceitao de contrato de uso.

Seleo de local de instalao.

13

Finalizar instalao.

O IBEXpert pode ser inicializado pelo atalho criado na rea de trabalho ou pelo Menu Iniciar > Programas > HK Software > IBExpert > IBExpert.

Ambiente de trabalho do IBExpert.

14

8 TRABALHANDO COM O IBEXPERT


O trabalho no IBExpert relativamente simples. Para se criar uma nova base de dados basta um simples clique no cone na barra de ferramentas chamado Create Database. A seguinte janela mostrada:

Como no exemplo apresentado nesta apostila utilizarei uma base local, devemos configurar a nova base da seguinte maneira:

Server: Local; Database: endereo no disco da Base de Dados, neste caso: G:\clientes.fdb; User Name: SYSDBA; Password: MASTERKEY; Charset: UTF8; SQL Dialect: Dialect 3.

Logo aps, ser mostrada a janela pedindo que se registre a nova base de dados criada, como demonstra a prxima imagem:

15

Configuraes:
Server: Local; Server Version: Firebird 1.5 (ou a verso instalada); Database File: endereo no disco da Base de Dados, neste caso: G:\clientes.fdb; Database Alias: apelido da base de dados, neste caso: Clientes; User Name: SYSDBA; Password: MASTERKEY; Charset: UTF8; Font Characters Set: ANSI CHARSET.

Depois de feito isso, a base j estar criada. A criao de tabelas e atributos simples. Por exemplo: para se criar uma tabela, clique com o boto direito do mouse em Tables no Database Explorer e New Table, ou simplesmente pressione CTRL+ENTER.

16

8.1 Criando chaves primrias

Imagem de uma tabela no IBExpert.

Aps criados todos os campos de uma tabela, incluindo seus tipos e definindo-se quais campos no podem ser nulos (Not Null), clica-se em Constraints e na primeira aba aberta Primary Key deve-se clicar na rea em branco abaixo com o boto direito do mouse e New Primary Key.

Janela pop-up de seleo do campo (On Field).

A configurao simples:

Constraint Name: nome da chave primria para uso interno do SGBD; On Field: nome do campo da tabela que ser Primary Key. Obs.: Clique na coluna esquerda e envie-o para a coluna direita. Clique na X abaixo para fechar a janela pop-up aberta. Index Name: Nome do ndice que ser criado automaticamente. No obrigatrio; Index Sorting: Classificao dos ndices. No obrigatrio.

17

8.2 Criando chaves estrangeiras

A criao de chaves estrangeiras to simples quanto a criao de chaves primrias, porm alguns fatores devem ser observados. Fatores como:

O campo da tabela que ser chave estrangeira deve ter a propriedade Not Null habititada; Obrigatoriamente deve ser do tipo inteiro; O campo de onde provem a chave estrangeira (tabela pai) obrigatoriamente deve ser chave primria.

8.3 Criando o auto-incremento das chaves primrias


Para se criar o auto incremento dos campos de chave primria no IBExpert proceda da seguinte forma:

Abra a tabela a ser trabalhada; D Duplo-Clique na propriedade (caixa) Autoinc; Marque a opo Create Generator; Clique na 2 aba chamada Trigger; Marque a opo Create Trigger; Clique em OK para dar um Commit e Finalizar a tarefa.

18

9 CONHECENDO UM POUCO MAIS DO AMBIENTE DO DELPHI


Primeiramente vamos iniciar o Delphi, neste caso, depois de instalado, ele poder ser encontrado no Menu Iniciar > Programas > Borland Delphi 5 > Delphi 5. O Delphi se inicia sempre criando um novo projeto por padro chamado Project 1, a tela apresentada similar mostrada abaixo:

O Delphi considerado uma ferramenta de desenvolvimento rpido devido ao fato de se poder fazer muita coisa sem nem mesmo uma linha de cdigo digitada. A facilidade de se arrastar componentes das paletas e adicion-los ao Form torna o Delphi uma das IDEs mais fceis de se desenvolver aplicaes tanto desktop quanto cliente-servidor.

19

9.1 Explanaes das janelas do Delphi


9.1.1 Barra de menus

Barra de Menus.

Como todo programa padro Windows, h uma janela onde esto situados os menus da aplicao, a barra que contem os menus tambm agrupa outras partes. Na barra de menus do Delphi temos a paleta de componentes, o Speedbar, a barra de ferramentas padro de toda aplicao Windows, barra de menus suspensos e barra de desktop.

9.1.2 Paleta de componentes Aplicativos orientados a objetos trabalham com elementos que so denominamos componentes. No Delphi, os componentes encontram-se em uma paleta com vrias guias.

Paleta de Componentes.

Pode-se configurar a ordenao, a disposio, remover e adicionar guias e botes de componentes clicando com o boto direito do mouse sobre qualquer componente e clicar na opo Properties. H basicamente trs maneiras de inserirmos os componentes no formulrio:
Clicar uma vez no componente, e clicar dentro do formulrio (no arrastar para o form). Clicar duas vezes rapidamente no componente desejado. Segurar a tecla Shift e clicar no componente desejado; clicar no form vrias vezes.

Na terceira opo, o componente ser travado ao mouse. Para destrav-lo clique no cone da seta, o primeiro cone da paleta.

20

9.1.3 Speedbar (ferramentas)

A Speedbar est posicionada ao lado esquerdo da barra principal do Delphi. Possui diversos botes (cones) que representam comandos muito utilizados durante o desenvolvimento, como salvar, abrir, novo, novo form, executar a aplicao, dentre outros.

Speedbar.

Pode-se customizar a speedbar adicionando ou retirando algum boto atravs do boto direito em qualquer cone (da speedbar) e escolher o comando customize. Na janela aberta, seleciona-se a guia Commands. Neste momento pode-se arrastar nos dois sentidos, para adicionar ou retirar botes.

Tela de customizao da speedbar.

21

9.1.4 Object Inspector

Uma das partes mais importantes da orientao a objeto a possibilidade de se definir caractersticas personalizadas aos componentes. No Delphi, utilizamos a janela object inspector para realizar esta tarefa. H uma caixa de listagem que permite a escolha de qual componente dever ser selecionado. Duas guias:
Properties define as propriedades e valores do Objeto selecionado. Events Define quais os eventos sero manipulados pelo desenvolvedor.
Objeto selecionado e seu tipo.

Algumas propriedades trazem opes diferenciadas para alterao.


Propriedade

Por exemplo:
Caption Permite a insero de uma string de caracteres. Neste caso de um form, seria o ttulo da janela. Color Permite a insero de um dos valores pr-definidos na caixa de listagem. Neste exemplo, muda a cor de fundo do form. BorderIcons Toda propriedade que possui o sinal de + tem a caracterstica de mostrar subpropriedades. Deve-se clicar no sinal de + para expandir e no sinal de para ocultar. Icon Exibe um boto de reticncias (...) que dar origem a uma caixa de dilogo.
Valor atual da propriedade selecionada

Os nomes definidos como valores das propriedades na object inspector sero os nomes usados na construo do cdigo em Object Pascal.

22

9.1.5 Form

Form.

Form o termo utilizado para representar as janelas do Windows que compem uma aplicao. Os forms servem como base para o posicionamento dos componentes, que so responsveis pela interao entre usurio e mquina. Para selecionarmos o form devemos clicar (uma vez) em sua rea interna ou na object inspector, e no simplesmente em seu ttulo. As caractersticas iniciais do form como tamanho, botes (minimizar, maximizar, fechar, controle) e cone podem (e sero) ser modificadas atravs de recursos que veremos adiante.

9.1.6 Code Editor

O editor de cdigo responsvel por receber todas as declaraes criadas pelo Delphi e handlers criados pelo desenvolvedor. no ambiente Code Editor que implementamos o algoritmo na linguagem Object Pascal.

23

Nome da Unit em edio

Code Explorer

Code Editor.

Na janela do editor pode haver outra janela denominada Code Explorer. a parte esquerda da janela, onde podemos ter uma orientao sobre os objetos, procedimentos, funes e classes utilizadas na aplicao. Para desligar o code explorer clique no pequeno X ao lado da guia do code editor, para visualiz-lo clique com o boto direito dentro do editor e escolha View Explorer ou pelo teclado Ctrl+Shift+E. Uma caracterstica muito importante do Code Explorer que quando inserirmos componentes no form, a sua declarao feita pelo Delphi de maneira automtica.

Antes.

24

Depois.

Pode-se personalizar o Editor atravs do menu Tools | Editor Options.

Opes de configurao do Editor.

25

10 PRIMEIROS PASSOS COM O DELPHI


10.1 Antes de Comear
Antes de comearmos a realmente colocar a mo na massa, vamos a algumas pequenas dicas que podem agilizar e ajudar muito o desenvolvedor durante seu trabalho.

10.1.1 Code Insight

Um recurso que vai facilitar nossa vida no momento de desenvolvimento de cdigo o Code Insight do Code Editor do Delphi. Ele atua como um ajudante de complemento junto ao cdigo do desenvolvedor. Por exemplo: ao digitar o nome de um objeto seguido de ponto (.) abre-se uma listagem de mtodos e propriedades que podem ser utilizadas neste objeto. A seguir exemplificarei a utilizao do code insight complementando cdigo em caso de propriedades, ou seja, aps o ponto. (CTRL + ESPAO). Esta lista pode ser ordenada por nome, clicando com o boto direito dentro da listagem.

Code Insight de propriedades do componente Form.

O Code Insight tambm pode ser utilizado no momento de chamada de procedimentos ou mtodos, como mostra a figura a seguir:

26

Code Insight da funo MessageDlg (Message Dialog).

10.1.2 Configuraes do Ambiente

O Delphi permite que voc personalize o ambiente atravs do menu Tools | Environment Options.

Opes de Ambiente da IDE do Delphi 5.0.

27

Algumas opes da janela Environment Options que a princpio, podemos julgar importantes:

Autosave Options o Editor files Grava os arquivos fonte (.PAS) no momento da compilao, evitando perda de cdigo em caso de travamento da mquina. Porm, no permite compilar um determinado projeto sem salva-lo antes. o Project Desktop - Grava a posio das janelas do projeto atual.

Compiling and running o Minimize on run Para minimizar o Delphi no momento da compilao em efeito de testes. Evita confuses de janelas.

Outra boa alterao seria com relao colorao de cdigos no Code Editor. Durante a criao de cdigo, o fato de que para cada tipo ou trecho do cdigo a fonte esteja com certa colorao pode facilitar nossa vida. Como exemplo, configuraremos algumas cores interessantes, atravs do menu Tools | Editor Options, na aba Color.

Comment: cinza claro; Reserved Word: azul escuro; String: verde musgo; Number: vermelho;

28

10.1.3 Teclas e Atalhos de Teclado Importantes

Tecla
F12 F10 F9 CTRL+F9 SHIFT + F12 CTRL + F12 CTRL + F2

Funo
Alterna entre o code editor e o form designer. Torna o foco para a janela principal. (RUN) Permite compilar e executar o projeto para testes. Este processo gera automaticamente o arquivo .EXE no diretrio onde foi gravado o arquivo de projeto (.DPR). Permite compilar o projeto sem executar. Ideal para conferncia de cdigo. Permite alternar entre os formulrios do projeto. Equivalente ao cone View Form na SpeedBar. Permite alternar entre as Units do projeto. Equivale ao cone View Units na Speedbar. Permite destravar o Delphi em caso de testes onde ocorram excees e erros (travamentos).

10.1.4 Projetos em Delphi

Para se desenvolver em Delphi o usurio deve primeiramente criar um projeto de trabalho. Para aqueles que no esto habituados com IDEs de desenvolvimento atuais, essa uma abordagem bastante utilizada. Quando o usurio cria seu projeto e o salva (utilizando a opo Save All), duas caixas de dilogo so mostradas: Salvar Unit Como e Salvar Projeto Como.

Como se pode observar, as Units do Delphi simplesmente so arquivos .pas do antigo Turbo Pascal, porm tm linguagem Object Pascal, que nada mais que a prpria linguagem pascal orientada a componentes visuais, atravs de suas propriedades e de seus eventos (mtodos).

29

Um detalhe interessante que tambm podemos observar a quantidade de arquivos criados automaticamente pelo Delphi aps salvarmos apenas 2 arquivos l pela IDE. Abaixo segue uma lista das extenses e suas explicaes:
.pas: arquivo Pascal: o cdigo-fonte de uma unidade Pascal, ou uma unidade relacionada a um formulrio ou uma unidade independente; .dpr: arquivo Delphi Project. (Contm cdigo-fonte em Pascal.); .dfm: Delphi Form File: um arquivo binrio com a descrio das propriedades de um formulrio e dos componentes que ele contm. .dcu: Delphi Compiled Unit: o resultado da compilao de um arquivo Pascal; .dof: Delphi Option File: um arquivo de texto com as configuraes atuais para as opes de projeto; .cfg: arquivo de configurao com opes de projeto. Semelhante aos arquivos DOF; .exe: arquivo executvel pelo Windows produzido pelo Delphi. .~dfm, .~pas: arquivos temporrios de backup.

10.2 Primeiro Programa

Como primeiro exemplo, iremos construir um programa que tenha apenas um boto na tela. Quando o usurio clicar nesse boto uma mensagem ser mostrada dentro da prpria janela. Primeiramente iremos colocar um boto na tela. Clique em Button na

aba Standard da paleta de componentes. Logo depois clique dentro do Form. Simples assim! Boto criado. Agora temos de dar caractersticas a esse nosso boto criado. Por enquanto vamos apenas dar um nome e colocar algum texto nesse boto melhor que button1 como est agora. Com o boto selecionado (clique uma vez em cima dele), no Object Inspector altere as seguintes propriedades:

Name: botao Caption: Meu primeiro boto

30

Como se pode perceber, o texto no coube dentro do boto. Para resolver isso, existem as alas de redimensionamento dos componentes visuais do Delphi. Sendo assim, todo tipo de objeto (visual) colocado na tela pode ser dimensionado e posicionado da maneira que o desenvolvedor bem entender.

Detalhe das alas de redimensionamento.

Agora com o boto j redimensionado iremos inserir o texto no form. O componente utilizado ser um Label , localizado tambm na aba Standard da

paleta de componentes. Estique-o no form, onde voc quer que a mensagem aparea.

Posicionamento do Label no Form.

Com o Label selecionado, altere as seguintes propriedades:


Name: LabelMessagem Caption: aqui ns deixaremos em branco.

E agora? O Label sumiu? Voc deve ter se perguntando depois de ter tirado a seleo do Label na tela. Fique tranqilo, caso precise acess-lo s procur-lo na lista que fica acima no Object Inspector.

31

Agora vamos codificao propriamente dita. Como queremos que aparea alguma informao naquele Label que pusemos na tela ao se clicar no boto, ento faremos o seguinte: selecione o boto, clique na aba Events do Object Inspector e d um duplo click no campo em branco direita da opo OnCLick. Ele abrir o Code Editor com um procedimento onCLick j pronto para ser programado.

Exemplo de procedimento criado pelo Delphi.

Traduzindo o que j temos de cdigo na tela seria: Procedimento do formulrio Form1 que funcionar ao se clicar em boto(parmetro: tipo de parmetro usado no procedimento). Daqui pra frente quase que simplesmente Pascal. Vamos adicionar entre o Begin e o End; o seguinte cdigo:

Exemplo: ao se clicar no boto ser exibida a mensagem no Label.

Agora vamos executar nossa aplicao pela primeira vez testar se est tudo OK! Simplesmente aperte a tecla F9 e teste seu primeiro programa. O resultado deve ser algo bem prximo do mostrado na prxima imagem:

32

Exemplo

10.3 Informaes Sobre os Principais Componentes


10.3.1 Objeto Form (Formulrio)

o principal componente container, pois permite posicionar os demais componentes em si mesmo. literalmente a implementao do conceito de janelas do sistema operacional Windows.

Principais Propriedades:
ActiveControl: Permite definir qual o primeiro componente a receber foco assim que o formulrio criado. Align: Altera o alinhamento e preenchimento do objeto. AutoScroll: Permite habilitar as barras de rolagem. BorderIcons: Determina os cones a serem exibidos na barra de ttulo do formulrio. BorderStyle: Define o estilo da borda do formulrio. o bsDialog Borda no redimensionvel, comum em caixa de dilogo o bsSingle Borda simples e redimensionvel. o bsNone Borda invisvel, no redimensionvel, sem botes de controle. o bsSizeable Borda padro redimensionvel. Caption: Indica o rtulo exibido para o componente. ClientHeight / ClientWidth: Define a altura e largura da rea cliente. Color: Define a cor de fundo de um componente. Cursor: Indica a imagem exibida pelo ponteiro do mouse quando este ficar sobre o objeto. Enabled: Define se o componente est habilitado ou no. Font: Permite controlar os atributos do texto exibido em um componente. Height: Define a altura do objeto. Hint: Permite exibir um texto de auxlio no momento em que o ponteiro do mouse permanece sobre o controle.

33

Icon: Define o cone que ser usado pelo formulrio. KeyPreview: Define se o formulrio deve ou no responder a um pressionamento de tecla, atravs do evento OnKeyPress, por exemplo. Menu: Permite escolher entre mais de um componente MainMenu. Name: Define o nome interno que identifica o componente dentro da aplicao. ShowHint: Define se a string de auxlio deve ou no ser exibida quando o usurio mantm o ponteiro do mouse sobre um controle. Visible: Define se o componente aparece ou no na tela. Width: Define a largura do objeto.

Principais Mtodos:
Show: Exibe o formulrio de manipulao no-modal. Caso o form seja exibido de maneira modal o usurio no conseguir sair da janela ativa at que a feche ou execute alguma funo que a feche. ShowModal: Exibe o formulrio de manipulao modal. Close: Permite fechar o formulrio.

10.3.2 Objeto Button (Boto)

um dos objetos mais utilizados para confirmar e disparar ou rotinas associadas Sendo o

(procedimentos

mtodos).

componente mais utilizado numa aplicao, existem variaes diversas de componentes Button, porm as duas mais utilizadas so o Button da paleta Standard e o BitButton da paleta Additional. A principal diferena entre eles que no BitButton possvel adicionarmos uma imagem do tipo bitmap, auxiliando assim a questo da acessibilidade da aplicao.

Principais Propriedades:

Action: Referencia uma ao definida em um objeto TActionList. Anchors: Permite manter a posio relativa do objeto ao objeto parente quando este redimencionado. Cancel: Associa o evento OnClick do objeto ao pressionamento da tecla Esc. Default: Associa ao evento OnClick do objeto ao pressionamento da tecla Enter. ModalResult: Propriedade utilizada para encerrar a execuo de um formulrio Modal quando selecionado um valor diferente de mrNone. Parent...: As propriedades Parent permitem que o componente receba a mesma formatao do objeto proprietrio. TabOrder: Define a ordem na passagem de foco no momento de pressionamento da tecla TAB.

34

TabStop: Define se o foco pra no componente. Glyph: No caso do BitButton, insere a imagem escolhida no boto.

Principais Mtodos:

SetFocus: Envia o foco do windows para o componente.

10.3.3 Objeto Edit (Caixa de Edio)

Um dos principais componentes para a entrada de dados do usurio do sistema.

Principais Propriedades:

AutoSelect: Define se o texto exibido pelo controle ser selecionado quando este receber o foco da aplicao. AutoSize: Para componentes TEdit a propriedade determina se a altura do controle ser redimensionada quando o tamanho da fonte for alterado. BorderStyle: Determina o tipo da borda do componente. CharCase: Determina o se tipo da fonte ser maiscula, minscula ou normal. HideSelection: Define se o texto perde a seleo ao perder o foco. Maxlength: Define um limite para a insero de caracteres. PasswordChar: Define qual caractere ser usado para ocultar o texto inserido no componente. Text: Permite manipular os caracteres inseridos no componente pelo usurio.

Principais Mtodos:
Clear: Limpa o contedo da propriedade text. SetFocus: Envia o foco do windows para o componente.

35

10.3.4 Objeto Label (Rtulo de Orientao)

Orienta o usurio escolha de componentes, bem como sua utilizao. Como se percebe, os rtulos ou Labels podem ser usados para se exibir qualquer texto no form.

Principais Propriedades:

Alignment: Define o alinhamento da string na rea do componente. AutoSize: Para componentes TDBText e TLabel, esta propriedade define se o controle ser automaticamente redimensionado para acomodar o texto. FocusControl: Define qual o componente receber foco quando o usurio selecionar a combinao de teclas aceleradoras (atalho) se existir. Layout: Define o alinhamento vertical do texto na rea do componente. ShowAccelChar: Define se o caracter & ser um literal ou tecla de aceleradora (atalho). Transparent: Define se o fundo do componente ser transparente ou no. WordWrap: Define se o texto poder utilizar o retorno automtico em caso de ultrapassar a largura definida e se a propriedade AutoSize estiver falsa.

10.3.5 Objeto Memo (Memorando)

Permite ao usurio entrar com dados do tipo TStrings, compara-se funcionalidade do software bloco de notas do Sistema

Operacional Microsoft Windows. Principais Propriedades:


Lines: Propriedade do tipo TStrings que contm as linhas de texto do componente. MaxLength: Define o limite mximo de caracteres no componente em sua propriedade Lines. ReadOnly: Define se o componente do tipo somente leitura. ScrollBars: Define se o componente pode trabalhar com barras de rolagem. WantReturns: Define se a tecla ENTER ser utiliza para quebra de linha. WantTabs: Define a tecla Tab como tabulao ou mudana de foco. Caso falso pode-se utilizar CTRL+TAB para produzir o efeito desejado.

36

Principais Mtodos:
LoadFromFile: Permite carregar um arquivo para a propriedade Lines. SaveToFile: Permite salvar o contedo da propriedade Lines em um arquivo especificado.

10.3.6 Objeto CheckBox (Caixa de Verificao)

Permite verificar opes booleanas pr-definidas ou re-definidas pelo usurio.

Principais Propriedades:

AllowGrayed: Define caso verdadeiro, trs estados possveis para o checkbox: checked (ligado), unchecked (desligado) e grayed (parcial). Caso falso, dois 37 estados: checked (ligado) e unchecked (desligado). Checked: Define se o componente est ligado ou no, caso tenha apenas dois estados. State: Permite definir trs estados se AllowGrayed for verdadeiro.

10.3.7 Objeto PageControl (Controle de Abas)

Permite criar abas de navegao como se fossem paletas (assim como as paletas de componentes do Delphi)

Principais Propriedades:

ActivePage: Nome da aba ativa em tempo de execuo. PageCount: nmero de pgina no vetor de pginas que o PageContro. Pages: propriedade somente leitura para se ter acesso diretamente uma determinada pgina do PageControl, atravs de sua posio (PageIndex).

Obs.: Para se criar novas pginas, simplesmente clique com o boto direito do mouse e New Page.

37

10.3.8 Objeto Panel (Painel)

Permite agrupar outros objetos e estabelecer um efeito visual nas aplicaes.

Principais Propriedades:
Align: Define o alinhamento do componente em relao ao seu proprietrio (no caso mais comum, o form). Bevel...: Define a caracterstica das bordas (interna e externa) bem como sua espessura. BorderStyle: Define o tipo da borda.

10.3.9 Objeto StringGrid (Grade de Dados)

Similar a uma tabela, porm com algumas funes a mais. Excelente para exibio de dados como informaes de um banco de dados e/ou informaes que necessitem de tabulao.

Principais Propriedades:
Cells: Determinada clula do StringGrid. Exe.: pode-se acessar determinada clula atravs de StringGrid1.Cells[1,1], o que seria exatamente a clula selecionada na imagem acima. Cols: Acesso a determinada coluna do Grid. Rows: Acesso a determinada linha do Grid. RowCount: Contagem de linhas totais. ColCount: Contagem de colunas totais.

38

11 TRABALHANDO COM ARQUIVOS NO DELPHI

Neste captulo vamos entender como funciona o tratamento de arquivos de texto no Delphi 5.0. De maneira a aprimorar e incrementar os conhecimentos adquiridos at o momento desenvolveremos uma tela de cadastro de clientes genrica. A nossa tela de cadastro de clientes ser subdividida em duas abas: uma ser a aba de cadastro propriamente dita e a outra ser um StringGrid com as informaes dos clientes j cadastradas. Nossa aplicao ficar prxima s imagens seguintes:

Tela de cadastro.

Tela de visualizao dos dados cadastrados.

39

Para iniciarmos nosso desenvolvimento criaremos um novo projeto no Delphi com um novo Form. Salvaremos este projeto com o nome Clientes. A Unit e consequentemente seu form com o nome Unit_Clientes. Primeiramente propriedades:
Name: frmClientes Caption: Gesto de Clientes

configuraremos

nosso

form

com

as

seguintes

Agora adicionaremos um PageControl no form e o configuraremos da seguinte maneira:


Name: PageControl Align: alClient (Para deix-lo do tamanho do form)

Precisamos nossas duas abas,

agora uma

adicionar chamada

Visualizao e a outra Gesto. Para fazer isso simplesmente clica-se com o boto direito do mouse em qualquer rea do Page Control e na opo New Page. Altere a propriedade Caption dos dois Tabsheets criados para Visualizao e Gesto respectivamente. O prximo passo ser a insero de um painel (Panel) na aba Visualizao. Depois de inserido altere sua propriedade Align para alBottom, e Color para clInactiveBorder. O resultado ser nosso painel cobrindo toda a parte inferior do form. Agora inseriremos um StringGrid neste mesmo TabSheet e o colocaremos em todo o restante do espao desta aba Visualizao. Depois de inserido altere sua propriedade Align para alClient. Vamos configurar nosso StringGrid:
Name: StringGrid FixedCols: 0 RowCount: 2 Options > GoRowSelect: True

40

Nosso Tabsheet Visualizao agora est parecido com algo assim:

Tabsheet Visualizao

No painel abaixo do StringGrid mudaremos a cor e inseriremos trs botes com as seguintes propriedades:

Boto 1: o Name: btnApagar o Caption: Apagar Boto 2: o Name: btnAlterar o Caption: Alterar Boto 3: o Name: btnFechar o Caption: Fechar

Botes inseridos no painel

41

Agora vamos montar nosso Tabsheet que controlar os dados, ou seja, onde o usurio inserir valores, alterar e buscar por informaes j cadastradas o Tabsheet Gesto:

Tabsheet de gesto dos dados.

Para chegarmos ao resultado acima inserimos 5 Labels, 4 Edits e 1 MaskEdit para o campo de Telefone, com as seguintes propriedades alteradas:

5 Labels: o Caption: Cada um com seu respectivo rtulo como na imagem acima o Enabled: false Campo 1: Edit o Name: edtCodigo o Enabled: false o Text: Campo 2: Edit o Name: edtNome Dica: o Enabled: false o Text: Para selecionar vrios componentes que Campo 3: Edit ficam dentro de um container (como o Name: edtEndereco exemplo: PageControl, Form, Painel, o Enabled: false GroupBox, etc) voc pode arrastar o mouse o Text: selecionando vrios deles desde que a tecla Campo 4: MaskEdit CTRL esteja pressionada. o Name: edtTelefone o EditMask: (99) 9999-9999 o Enabled: false o Text: Campo 5: Edit o Name: edtEmail o Enabled: false o Text:

Com o Tabsheet j configurado agora inseriremos os botes de controle no painel abaixo, como mostra a imagem seguinte:

42

Tabsheet de gesto de dados com botes

Boto 1: o Name: btnNovo o Caption: Novo Boto 2: o Name: btnGravar o Caption: Gravar Boto 3: o Name: btnCancelar o Caption: Cancelar Boto 4: o Obs.: o boto de fechar a aplicao (que ficaria ao lado direito do cancelar) ns faremos depois, pois o copiaremos da TabSheet Visualizao. Portanto, no o insira por enquanto. Justificativa: no podemos ter em um mesmo form botes (componentes) de mesmo nome.

Agora desabilitaremos os botes Gravar e Cancelar afinal eles s devem estar habilitados quando tivermos informaes nos campos ou se quisermos cancelar alguma ao. Para isto, mude suas propriedades enabled para false. Com todo o visual de nossa aplicao j definido e implementado, vamos obra! Ou melhor, ao cdigo! Primeiramente criaremos um procedimento que habilita todos os componentes e outro para desabilitar todos os componentes da mesma. Desta forma, sempre que quiser re-iniciar a janela, na forma mais bruta de se dizer, iremos chamar esse procedimento, nomeado de Habilita_Tela, e em outro caso: chamaremos o Desabilita_Tela. Posteriormente poderemos alterar alguma coisa ou outra desse cdigo.

43

Para criarmos tais procedimentos seguiremos com o seguinte: com o form FrmClientes selecionado, tecle F12. Voc cair no Code Editor com UnitFrmClientes aberta e pronta para ser codificada. Sendo assim, a rea onde inserimos nosso cdigos {$R so abaixo das como

inscries

*.DFM},

demonstra a imagem esquerda. Criaremos os cdigos como est nesta o imagem. Code Observe tudo que

usando

Insight

praticamente

auto-completado

para

voc. Experimente! Aps procedimentos, criados compilaremos os a

aplicao para vermos como est. Tecle CTRL+F9.

Provavelmente ocorreu para voc o mesmo erro demonstrado na imagem acima. Verificando a caixa de mensagem que apareceu abaixo e a linha em vermelho destacada,

entendemos que: o procedimento que acabamos de fazer, ainda desconhecido para a aplicao, portanto temos que declar-lo no cabealho da Unit como mostra a figura direita.

44

Como voc deve ter percebido, quando criamos procedimentos, assim como funes, temos que colocar antes do nome desejado para tal, o tipo, caso ele faa alteraes e/ou manipulaes visuais no form. Sendo assim, como nossos procedimentos alteraro componentes visuais, neste caso: buttons, labels e edits, ento temos de colocar o tipo antes, exemplo: TFrmClientes. Continuando, agora iremos criar o nosso arquivo no disco. Primeiramente temos de definir qual ser o diretrio de nosso arquivo e seu nome. Usaremos a criao de uma constante para tal atravs da palavra reservada Const e sinal de igualdade na constante criada

Criao de uma constante

No

Delphi,

as

constantes

so

definidas

acima

do

marcador

implementation e abaixo das declaraes de componentes, procedimentos e funes, como demonstra a ltima figura. Em nosso exemplo, nossa constante receber o valor D:\Clientes.txt, onde D nosso disco local. (Obs.: Caso seu computador no tenha uma partio ou HD com tal unidade, poder utilizar a unidade C:, que a padro). Abaixo da declarao de Constantes adicionaremos um novo tipo de dado, que ser um Record de todos os dados que queremos manipular dos clientes. Em outras palavras, assim como existe o tipo Integer, ou o tipo Boolean, String, dentre outros, ns podemos criar o nosso prprio tipo, e para isso usamos a palavra reservada Type abaixo da declarao de constantes e antes da declarao de variveis (var). A imagem seguinte exemplifica o que se h de fazer.

45

Criao de um novo tipo (type)

Feito nosso tipo, agora iremos criar um vetor para trabalharmos nossas informaes, afinal ns no utilizaremos o arquivo no HD para todas as operaes. O que faremos ser o seguinte: sempre que o programa se iniciar, traremos para a memria do computador tudo o que est armazenado no arquivo e o exibiremos no StringGrid. Trabalharemos de forma a alterar, excluir, gravar e localizar clientes tudo da memria, visto que ela muito mais rpida que o HD. Sendo assim quando sairmos do form ou da aplicao, iremos gravar os dados da memria para o HD. Simples no?! Prosseguindo, iremos criar o nosso vetor dentro da declarao de variveis com o nome de

Vet_Clientes: array of Clientes; Vamos trabalhar a

parte visual de nossa aplicao um pouquinho mais. Vamos

colocar um cabealho em nosso StringGrid com um procedimento chamado Ajeita_Grid, como

demonstrado ao lado.

46

Explicando a ltima imagem: cada clula do StringGrid acessada atravs de coordenadas como se fosse no plano cartesiano [x,y], sendo assim, StringGrid1.Cells[3,0] significa a quarta coluna na primeira linha.

StringGrid.ColWidths[3] a largura desejada da coluna. Pode ser alterado pelo mouse em tempo de desenvolvimento tambm atravs do arraste do mouse.

Obs.: No StringGrid as contagens comeam de zero.

Agora vamos criar o arquivo no disco, acess-lo e trazer tudo o que j tem nele para a memria. O procedimento para isso segue na imagem:

Procedimento para copiar o contedo do arquivo e jog-lo para o vetor na memria

Primeiramente declaramos uma varivel com o nome Arq do tipo TextFile, ou seja, Arquivo de texto. Testaremos se o arquivo j existe naquele caminho, caso no exista apenas o criaremos. Mas primeiro temos de Associar

47

nossa varivel do tipo arquivo de texto ao caminho no disco, para isso usamos a funo AssignFile(Arq,Caminho);. E para criar o arquivo, simplesmente

Rewrite(Arq), que o cria e abre para edio. Voltando ao teste da existncia do arquivo, caso ele j exista teremos de resgatar toda informao de dentro dele. Para isso direcionamos nossa varivel Arq para o caminho (AssignFile(Arq,Caminho)) e abrimos o arquivo simplesmente para leitura com Reset(Arq). Utilizando um lao de repetio While, ou seja, enquanto no chegar ao fim do arquivo faa (While Not END OF FILE(EOF)(Arq) Do). Nosso vetor tem 0 posies ainda, portanto temos de criar o primeiro espao para o primeiro registro nele. Aumentaremos a quantidade que ele j tem em 1 com o SetLength(Vet_Clientes, Length(Vet_Clientes) + 1);, onde Length o tamanho atual do vetor. Entendido isso fica fcil o resto: simplesmente lemos cada e adicionaremos em sua devida posio do vetor de clientes como exemplo: Readln(Arq,Vet_Clientes[length(Vet_Clientes)-1].Nome); E para finalizar, antes de fechar nosso procedimento temos de fechar o arquivo criado ou aberto com CloseFile(Arq). muito importante nunca se esquecer de fechar arquivos abertos.

Faremos agora um simples procedimento para limpar o StringGrid para que cada vez que tivermos de trazer os dados do HD para memria o tenhamos limpo. Segue abaixo o procedimento.

Procedimento de limpeza do StringGrid

48

Agora utilizaremos nosso procedimento de Transferir do HD para a memria toda vez que o Form for criado, ou seja, em seu procedimento OnCreate. Para isso, selecione o formulrio (caso no consiga, clique em componentes acima dele, por exemplo Painis e v apertando ESC at que consiga ver seu nome no Object Inspector), clique na aba de eventos do Object Inspector e duplo clique na opo OnCreate. Adicione um Traz_Para_Memoria; dentro do procedimento criado. Tendo chamado o procedimento de alimentao de nosso vetor toda vez que o form criado, agora temos de transferir esses dados para o StringGrid para que o usurio possa visualiz-lo. Faremos um procedimento chamado

Transfere_Memoria_Grid.

Procedimento que transfere do vetor de clientes na memria para o StringGrid

49

Primeiramente cria-se uma varivel para controlar (Flag) do lao For que ser usado, logo limparemos o Grid e colocaremos seus cabealhos, como j foi feito nos procedimentos atrs. Se o vetor de clientes for maior que 0 ento faremos um for indo de 0 at a ltima posio do vetor (Obs.: como Length retorna um valor contado a partir de 1, temos de diminu-lo em um para termos o valor exato do tamanho do vetor). Em cada registro de nosso vetor ns enviaremos as informaes armazenadas para o StringGrid, ressalvando que no StringGrid s se aceitam valores do tipo String, sendo necessrias algumas converses como o caso do cdigo (IntToStr). Ao final de cada linha inserida do StringGrid, devemos aumentar uma linha para a prxima insero (a prxima linha) com StringGrid1.RowCount := StringGrid1.RowCount + 1; Depois de todas as linhas inseridas, acabamos por inserindo uma a mais, de acordo com o cdigo anterior, sendo assim, remova uma linha e a partir de ento habilitaremos dois botes: Apagar e Alterar. O Else de nosso IF para o caso do vetor estar vazio, sendo assim desabilitaremos os dois botes supracitados. Adicionaremos agora a chamada a este procedimento na criao do formulrio tambm, logo abaixo do Traz_Para_Memoria adicione

Transfere_Memoria_Grid;. Agora que temos nosso vetor e nosso Grid alimentados, vamos tratar da insero de dados pelo usurio. Clique duas vezes no boto Novo e implemente o seguinte cdigo, de modo a permitir que o usurio insira novos valores:

Depois que o usurio preencher seus dados na tela, ele clicar em gravar e ento chamar seu procedimento OnClick que faremos agora. Para isso clique duas vezes em seu boto Gravar e implemente o seguinte cdigo:

50

Cdigo pra gravar os dados inseridos no vetor

O procedimento simples: aumentamos uma posio do vetor e cada posio de registro no vetor recebe na sua ltima posio (Length(Vet_Clientes)-1) cada um dos valores dos Edits do formulrio em suas propriedades Text. Ao final teremos que fazer um procedimento para limpar os campos Edit da tela, o chamaremos de Limpa_Tela e ser basicamente assim:

Procedimento para limpar os Edits da tela aps a insero

Depois de limparmos os Edits, temos de desabilitar a tela e atualizar nosso StringGrid com nosso procedimento Transfere_Memoria_Grid. Se executarmos nossa aplicao, at o momento ela deve estar se parecendo com o seguinte:

51

Tabsheet de Visualizao

TabSheet de Gesto dos dados

Obs.: Copie o boto Fechar de um TabSheet para o outro.

Agora faremos o usurio poder alterar valores j inseridos, e para isso precisaremos mexer em nosso StringGrid para que quando o usurio selecionar uma determinada linha do mesmo possamos pegar qual a posio do vetor que devemos exibir em nossos Edits da outra TabSheet. Para isso, faremos algo bem simples: altere a propriedade goRowSelect em options do StringGrid para true e adicionaremos o seguinte cdigo no evento OnSelectCell: Linha := ARow;. Linha ser uma varivel integer global que declararemos abaixo de nosso array de Clientes... l no incio da Unit. Desta forma,

52

sempre que o usurio clicar numa linha do StringGrid, estaremos inserindo na varivel linha a referida linha que o usurio deseja excluir ou alterar. Tendo criado o procedimento OnSelectCell do StringGrid, agora teremos de criar nosso procedimento de alterao, ou seja, o que colocar os valores daquela linha nos seus devidos Edits. Antes de fazermos isto, teremos que criar um procedimento que ache no nosso vetor onde est aquela linha selecionada, portanto criaremos o procedimento da seguinte forma:

Procedimento que localiza a posio do cliente no vetor.

De maneira simples, chamaremos nossa funo passando a posio do StringGrid na coluna de cdigos e na linha que ser nossa varivel Linha, tudo isso como sendo o Cod da funo. Por padro nossa funo retornar -1, caso ela no ache nada. O procedimento varrer o vetor e se ele achar um cdigo igual aquele clicado pelo usurio, retornar a posio e ir parar o lao (Break). Com a posio j em mos, agora iremos implementar o evento OnCLick do boto alterar da seguinte forma:

53

Procedimento do boto alterar

Primeiramente criamos uma varivel Posio que utilizar nosso ltimo procedimento implementado, o Localiza_Cliente. Logo aps isto testamos se nossa posio diferente de -1, pois caso seja igual, nossa funo no achou o cliente escolhido no StringGrid. Neste procedimento teremos de fazer uso de uma varivel global chamada Alterando para podermos modificar o procedimento do nosso boto Gravar, e para que ele entenda quando queremos gravar um novo registro e quando estamos alterando um j existente. Seguindo o raciocnio, quando o usurio clicar no boto Alterar ele ser automaticamente redirecionado para o TabSheet de Gesto e ali os Edits sero preenchidos com a posio encontrada pela funo Localiza_Cliente no nicio deste procedimento. Ao final, devemos Habilitar a tela para que o usurio possa interagir com o form. Para completarmos esta tarefa teremos de modificar um pouco nosso procedimento do boto gravar, j que ele sempre grava novos registros. Primeiramente declare a varivel Alterando abaixo da varivel Linha para que se torne uma varivel global. Seu tipo ser booleano (Boolean). Para a inicializarmos, no procedimento onCreate do form, defina-a recebendo false.

54

Alterao do procedimento OnCLick do boto Gravar

Simplesmente pesquisaremos a posio com aquele cdigo inserido no EdtCodigo e se estiver alterando, inseriremos os valores substituindo os j existentes naquela posio. Simples no? Devemos nos lembrar de passar a varivel Alterando para false, limpamos a tela, desabilitamos e atualizamos o StrinGrid. Agora que temos a condio de alterao, precisamos implementar o boto Cancelar, muito fcil e simples, como se segue:

Procedimento OnClick do boto de Cancelar

55

Igualmente simples, iremos implementar o boto fechar, como se segue:

Procedimento OnClick do boto Fechar

Como se percebe, antes de fecharmos nosso form precisamos gravar o contedo do StringGrid no HD. Sendo assim, criaremos o procedimento Grava_No_HD, como demonstra a imagem seguinte:

Como se percebe, o procedimento para gravao no disco bem similar ao processo de leitura do disco. Portanto, para maiores detalhes de

funcionamento do cdigo ao lado, volta pgina desta apostila onde se encontra o procedimento

Traz_Para_Memoria.

Procedimento de gravao dos dados no arquivo

56

E para finalizar nosso cdigo para esta aplicao, implementaremos um simples detalhe: quando o usurio mudar de abas no PageControl precisamos nos certificar que nada esteja habilitado do form, por exemplo, at que se clique em novo, ou alterar. Sendo assim, segue o cdigo para a mudana de abas:

Procedimento OnChange do PageControl

Pronto! Agora vamos testar nossa aplicao compilando-a e executandoa, atravs da tecla F9.

Obs.: Erros so muito comuns, portanto acostume-se com eles e aprenda aos poucos a trat-los e resolv-los.

57

12 TRABALHANDO COM BANCOS DE DADOS NO DELPHI


Para fins didticos esta apostila abordar a criao de um CRUD (Create, Retrieve, Update and Delete) de Clientes utilizando o SGBD Firebird verso 1.5. A primeira coisa a se fazer criar a base de dados utilizando-se para isso da ferramenta IBExpert, previamente apresentada. Criaremos para o nosso exemplo uma base de dados simples com o nome clientes e apenas uma tabela chamada cliente com os seguintes campos:

Exemplo tabela cliente.

Obs.: no usaremos chave primria neste exemplo

Depois de criada a tabela cliente, iniciaremos nossa aplicao. Abra o Delphi 5 e inicie um novo projeto. Salve o projeto e nomeie-o como: Controle_cliente, a unit do nosso form se chamar Unit_Cliente. Antes de mais nada, precisamos criar um DataModule. Um DataModule nada mais do que um form especfico onde centralizaremos todos os componentes de conexo e manipulao de um ou mais banco(s) de dado(s) em nossa aplicao. Em outras palavras: um DataModule como se fosse um Form invisvel, onde iremos inserir os componentes de acesso a dados, como o Table e o Datasource. Para inserir um DataModule em um projeto, escolha New DataModule do menu File. Os DataModules no gastam recursos do sistema, servem apenas para conter os componentes de acesso a dados e criar, assim, uma classe persistente. Segue abaixo uma imagem de um DataModule:

58

Imagem de exemplo de um DataModule

Como se pode perceber, em um DataModule ns podemos inserir alguns componentes diferentes do que estamos acostumados a lidar. No se preocupe, iremos explicar passo-a-passo como trabalhar com eles. Para que o desenvolvimento fique gil e fcil, mudaremos o nome do DataModule para DM (propriedade Name). Primeiramente temos de informar para a nossa aplicao qual a base de dados que iremos utilizar e, mais importante, onde ela se encontra no disco local do computador. Para fazermos isso utilizamos o componente IBDatabase da

paleta Interbase, padro no Delphi 5.0. Deixaremo-lo com o mesmo nome inserido: IBDatabase1. Algumas propriedades devem ser alteradas deste IBDatabase, como:

DatabaseName: D:\Clientes.fdb LoginPrompt: false SQLDialect: 3

Para terminar a configurao, clique duas vezes no cone do IBDatabase e configure-o de acordo com a imagem seguinte:

59

Explicando: Connection: tipo de conexo que ser usada, local ou remota. Database: local especificado na propriedade DatabaseName do componente. Pode ser feito

diretamente aqui. User Name: sysdba o login padro criado para bases de dados Firebird 1.5. Password: masterkey a

senha padro criada para bases de dados Firebird 1.5. Character Set: utf8, ou seja, Unicode_FSS para que

possamos lidar com acentos e caracteres especiais do alfabeto latino.

Para testar sua conexo com o banco, simplesmente mude a propriedade Connected para true, se o computador congelar durante alguns segundos quer dizer que algo est errado e provavelmente voc receber uma mensagem de erro. Agora criaremos um componente responsvel por fazer a comunicao entre nossa aplicao e o banco de dados, um IBTransaction. Na paleta Interbase adicione um IBTransaction.

Neste componente as nicas alteraes que faremos ser em suas propriedades DefaultDatabase e Active, IBDatabase1 e true, respectivamente. Pronto! Agora j temos nossa aplicao devidamente conectada ao nosso banco de dados. O DataModule facilita muito no desenvolvimento por centralizar todos os componentes da conexo num s lugar. Para se usar o DataModule, simplesmente no form onde ser utilizada a conexo com o banco, v no menu File > Use Unit e aponte para o DM (DataModule). Aproveitando que estamos implementando nosso DataModule, vamos adicionar nossa tabela de clientes tambm. Para isso, insira no DM o componente IBTable, tambm disponvel na paleta Interbase do Delphi 5.0. Vamos agora modificar algumas de suas propriedades, como:

60

Database: IBDatabse1 Name: tblCliente TableName: selecione a tabela disponvel na base de dados, neste caso cliente Transaction: IBTransaction1

Outra configurao importantssima acrescentar os campos de nossa tabela real a esta tabela do nosso DataModule. Para isso, simplesmente clique duas vezes no tblClientes criado e na janelinha que aparece, clique com o boto direito do mouse > Add All Fields. Nosso IBDatabase nos fornece o nome de todos os campos da tabela. A partir daqui, comea a mgica da conexo a bancos de dados no Delphi. Para quem acompanhou a apostila durante a criao do CRUD de clientes em Arquivos, notar uma grande facilidade na utilizao de bancos de dados. Iremos agora montar visualmente nossos componentes no form para a gesto e visualizao dos dados atravs de um DBGrid. Crie um formulrio inserindo os seguintes componentes:
1 Panel 5 DBEdits 5 Labels 1 DBNavigator 1 DBGrid

Dica: A maioria dos componentes do tipo DB para trabalhar com bancos de dados, se localiza na paleta DataControls do Delphi 5.0.

Posicione-os de maneira a ficarem semelhantes imagem abaixo:

Tela bsica de cadastro de clientes

61

Certifique-se de estar com o formulrio selecionado, v ao menu File > Use Unit e adicione o DM ao nosso formulrio de clientes. Agora adicionaremos l no DM um novo componente chamado DataSource, disponvel na paleta Data Access, e o modificaremos sua propriedade DataSet para nossa tblClientes. Tendo tudo corretamente configurado, clique em cada DBEdit do nosso formulrio de clientes e configure as seguintes propriedades:

DataSource: DM.DataSource1 (que acabamos de inserir no DM) DataField: o campo destinado a ser usado neste Edit.

E assim por diante para todos os outros DBEdits. O DBNavigator simplesmente defina o seu DataSource. J no DBGrid alguns ajustes devem ser feitos, como:

DataSource: DM.DataSource1 Options > dgRowSelect: true Options > dgAlwaysShowSelection: true

Agora temos de adicionar os cabealhos e colunas de nosso Grid. Para isto, simplesmente clique duas vezes do DBGrid e clique no boto Add New (Ins) quantas vezes forem nossos campos na tabela de clientes (neste caso, 5 vezes).

Adicionar colunas ao DBGrid

Em cada uma das colunas adicionadas a esta janelinha ns podemos definir propriedades, dentre elas ns definiremos:

62

FieldName: campo da tabela que deseja nesta coluna Title > Caption: coloque o nome que deseja para esta coluna Width: largura da coluna (bem til! Principalmente neste nosso caso)

Agora para testarmos nossa aplicao, v a seu DataModule e ative seu IBTransaction e sua tblClientes atravs da propriedade Active. Pronto! Tudo funcionando s precisamos rodar a aplicao e verificar os resultados... sem nenhuma linha de cdigo!

Cadastro de Clientes em funcionamento

Incrvel no? Sem nem mesmo uma linha de cdigo digitada! Bom! Para que voc no se perca todo, explicarei as funes de cada boto do DBNavigator:

Primeiro

Voltar

Avanar

ltimo

Novo

Excluir

Editar

Gravar

Cancelar

Atualizar

E para aqueles que no queiram utiliz-lo e substitu-lo por botes personalizados, pode-se criar botes com os seguintes cdigos para fazer as mesmas funes:

63

Obs.: a ativao de tabelas e componentes do DataModule deve ser feita somente quando se vai realmente utilizar o componente e depois fechada. As instrues dadas acima so meramente para conhecimento do estudante. Lembre-se: nunca mantenha conexes e tabelas abertas.

DBNavigator.First;

DBNavigator.Prior;

DBNavigator.Next;

DBNavigator.Last;

DBNavigator.Insert;

DBNavigator.Delete;

DBNavigator.Edit;

DBNavigator.Post;

DBNavigator.Cancel;

DBNavigator.Refresh;