Você está na página 1de 158

Sumrio

PRIMEIROS PASSOS ____________________________ 3


ANATOMIA DE UMA JANELA ________________________________ AMBIENTE DO DELPHI 6 __________________________________ MENU, BARRA DE FERRAMENTAS E COMPONENTES _______________ BARRA DE FERRAMENTAS _________________________________ PALETA DE COMPONENTES _________________________________ JANELAS DO DELPHI _____________________________________ 5 6 6 7 7 9

PRIMEIRO PROGRAMA _______________________ 14


ADAPTAR AS PROPRIEDADES DOS OBJETOS ____________________ 16 SALVAR ______________________________________________ 25 SALVANDO O PRIMEIRO PROGRAMA __________________________ 26

EXEMPLO I- CALCULADORA __________________ 29


PROPRIEDADES _________________________________________ Mtodo _____________________________________________ VARIVEIS NO DELPHI ___________________________________ FORMAS DE DECLARAR UMA VARIVEL ______________________ FORMATAO DE NMEROS _______________________________ FORMATANDO DATA E HORA: _____________________________ MODIFICANDO A CALCULADORA ___________________________ 36 40 41 42 42 43 43

DEPURAO __________________________________ 48 EXEMPLO II - JOGO DA VELHA ________________ 53 EXEMPLO III - BLOCO DE NOTAS ______________ 68 EXEMPLO IV - RELGIO DESPERTADOR _______ 82

MTODO GRFICO ___________________________ 86


CORES _______________________________________________ DESENHO DE LINHAS ____________________________________ DESENHO DE RETNGULOS _______________________________ DESENHO DE ELIPSES ____________________________________ FIGURAS _____________________________________________ 87 88 92 94 95

EXEMPLO V - CATLOGO ____________________ 101


INSERINDO UMA NOVA UNIDADE ___________________________ 104 TIPOS DE DADOS ______________________________________ 105 REGISTROS __________________________________________ 105 PONTEIRO DE REGISTROS ________________________________ 108 DATABASE DESKTOP ____________________________________ 115

INTEGRANDO MS-WORD COM DELPHI _______ 137 DELPHI 6 E SQL ______________________________ 143
SINTAXE DO SQL _____________________________________ PROGRAMA DE CONSULTAS EM SQL _______________________ CRIANDO O PROGRAMA _________________________________ EXEMPLOS DE CONSULTA SQL ____________________________ 143 145 147 150

LISTA DE EXERCCIOS _______________________ 156

Delphi 6

Delphi 6

PRIMEIROS PASSOS
Vantagens: - Suporte aos padres XML, SOAP, WSDL e XLS - Suporte s plataformas Web

- Compatibilidade entre Delphi 6 (Windows) e Kylix (Linux) por meio da nova biblioteca de componentes CLX, similar VCL
- Especificaes Visibroker CORBA Delphi possui um ambiente de desenvolvimento fcil de usar, com uma grande Biblioteca de Componentes Visuais (VCL - Visual Component Library) e a nova Biblioteca de Componentes de Plataforma Cruzada (CLX Component Library for Cross Plataform). Tanto a VCL quanto a CLX, possuem cdigo de botes campos, rtulos, grficos, caixas de dilogo e acesso e tabelas de bancos de dados, e foram desenvolvidas levando em conta as velocidades no desenvolvimento de aplicativos e na execuo destes aplicativos. A nova CLX, foi desenvolvida para permitir uma compatibilidade entre as plataformas Windows e Linux. Pois a biblioteca VCL no seria compatvel para a plataforma Linux, mas a CLX compatvel para ambas as plataformas.

Celta Informtica - F: (11) 4331-1586

Pgina: 3

Delphi 6
O rpido desenvolvimento de aplicativos possvel graas aos vrios controles disponveis na paleta de componentes, onde o programador escolhe um destes componentes, e coloca-o diretamente no local desejado, dentro de um formulrio. O formulrio ser a janela do aplicativo apresentada ao usurio. O Delphi trabalha com eventos que do incio alguma rotina de trabalho, ou seja, o programa fica parado at que um evento ocorra. Ele utiliza o modelo orientado objetos, permitindo alm do uso de objetos existentes, tambm a criao de outros tantos. Um programa tradicional, feito para ser executado em DOS, organizado em torno de estruturas de dados com um loop principal e uma srie de sub-rotinas constituindo o aplicativo, com procedimentos e funes separados para manipular os dados. Um programa orientado a objetos e eventos organizado em torno de um conjunto de objetos. Onde objeto uma varivel com propriedades que o definem, e vrios cdigos dando funcionalidade a este objeto. Ou seja, objetos so estruturas que combinam dados e rotinas em uma mesma entidade. Um Objeto possui dados internos, que no podem ser acessados por outros objetos e dados externos, tambm chamados de propriedades, estas podendo ser acessadas de fora deste objeto. De maneira semelhante, um objeto possui rotinas internas que so usadas apenas internamente e rotinas externas, tambm chamadas de mtodos, que podem ser acessadas externamente. Um carro um objeto que possui propriedades e mtodos. A tabela abaixo lista algumas propriedades e comportamentos do objeto real carro.

Propriedades
cor comprimento potncia do motor tipo de pintura

Mtodos
dar partida mudar marcha acelerar frear

Um mtodo uma rotina prpria do objeto que o d funcionalidade, ou seja, torna-o vivo, e as propriedades fazem o intercmbio entre o objeto e o programa.

Celta Informtica - F: (11) 4331-1586

Pgina: 4

Delphi 6 ANATOMIA DE UMA JANELA


A figura abaixo mostra uma janela tpica do Windows com seus componentes bsicos, que no Delphi chamamos de formulrio.

Moldura - Os quatro lados do formulrio que definem seu tamanho. Barra de Ttulo - Na parte superior da moldura com nome do formulrio e documento corrente. Menu de Controle - esquerda da Barra de Ttulo. Um boto com o cone que representa o programa. Botes de Tamanho - direita da Barra de Ttulo. O boto da esquerda possui um trao, o outro com uma janela ou duas janelinhas desenhadas. Se forem duas janelinhas, mostra que o formulrio est maximizado, e se for uma janela um pouco maior indica que o formulrio est em seu tamanho normal, podendo ser maximizado. O boto com trao minimiza a janela. Barra de Menu - Est abaixo da barra de ttulo e contm as opes de controle do aplicativo. rea do Cliente - a parte interna do formulrio, tambm chamada de rea do documento, utilizada para inserir os controles da aplicao. rea Externa Janela - sua Mesa de Trabalho onde voc pode ter tantos aplicativos abertos quantos necessitar e a memria do seu computador permitir.

Celta Informtica - F: (11) 4331-1586

Pgina: 5

Delphi 6
Janela - Uma Janela plena quando podemos dimension-la (mini, maxi e restaur-la) e mov-la.

AMBIENTE DO DELPHI 6

A tela principal do Delphi 6 formada por cinco janelas distintas, exibidas na figura a seguir:

MENU, BARRA DE FERRAMENTAS E COMPONENTES

Celta Informtica - F: (11) 4331-1586

Pgina: 6

Delphi 6 BARRA DE FERRAMENTAS

PALETA DE COMPONENTES

Celta Informtica - F: (11) 4331-1586

Pgina: 7

Delphi 6
A Paleta de Componentes, possui todos os controles necessrios para a construo da janela - formulrio - como um programa de desenho livre. Para incluir um controle no formulrio, existem dois mtodos: 1 - Duplo-clique no cone da paleta de componentes insere o controle no centro do formulrio com um tamanho padro. 2 - Selecionar o cone na paleta de componentes e depois dar um clique no formulrio, na posio desejada para o objeto (canto superior esquerdo deste). Estes controles podem ser dimensionados, depois de inseridos, a qualquer momento durante o desenvolvimento. Primeiro, selecione o controle dando um clique nele e depois arraste um dos oito botes dimensionadores que circundam este objeto.

Celta Informtica - F: (11) 4331-1586

Pgina: 8

Delphi 6 JANELAS DO DELPHI

Formulrio a janela que aparece no centro da tela do Delphi. Essa a janela que ser mostrada durante a execuo do programa com todos os objetos incorporados.

Controles Existem vrios tipos de objetos no Delphi, entre eles, formulrios e controles. Controles so todos os objetos que compem um formulrio. Um controle qualquer objeto que o usurio possa manipular desde que no seja uma janela (formulrio). Object Inspector Nesta janela escolhemos como sero as caractersticas de cada objeto do formulrio (botes de comando, quadros de texto, formulrios, e outros), e a que eventos eles respondero, definindo como eles sero apresentados e operados pelo cdigo. Cada objeto possui um conjunto especfico de propriedades, com seus valores, associadas a eles. Ao trabalharmos nos diferentes objetos, a janela Object Inspector nos permitir mudar as propriedades do objeto com o qual estamos trabalhando.

Celta Informtica - F: (11) 4331-1586

Pgina: 9

Delphi 6
Esta janela possui alm da divisria Properties a divisria Events onde esto listados todos os eventos possveis de ocorrerem com o objeto selecionado. Existem propriedades que podemos mudar enquanto construmos nosso projeto, ou seja, em tempo de projeto, e outras propriedades que s podemos mudar durante a execuo do programa, neste caso em tempo de execuo.

Na janela Object Inspector mostrada anteriormente, temos algumas das propriedades do formulrio assim que iniciamos o Delphi. Caixa de Objeto - Esta caixa mostra o objeto atualmente selecionado, atravs dela tambm poderemos selecionar todos os objetos do formulrio ativo, alterando as suas propriedades, basta dar um clique na seta, que um menu de cortina se abre, onde poderemos selecionar um objeto. Nome - Contm o nome do objeto atualmente selecionado, que ser utilizado pelo cdigo. Este nome est na propriedade Name. Tipo - Nesta posio encontraremos qual o tipo (classe) do objeto selecionado, se ele um TForm (formulrio), TButton (boto de comando), TLabel (legenda), ou ento um TEdit (quadro de texto).

Celta Informtica - F: (11) 4331-1586

Pgina: 10

Delphi 6
Coluna de Propriedades - Exibe todas as propriedades que podemos modificar em tempo de projeto. Coluna de Valores - Exibe o valor da propriedade correspondente. Barra de status Mostra a quantidade de propriedades que ocultas.

Object Tree View

Esta janela apresenta a estrutura hierrquica de um projeto em Delphi 6. Assim, torna-se possvel a visualizao de toda a estrutura de objetos e componentes pertencentes a um determinado projeto, implementando rapidez ao acesso a eles. Code Explorer

O Code Explorer facilita navegar dentro de uma Unit. Essa janela contm um diagrama de rvore que mostra todos os tipos, classes, propriedades, mtodos, variveis globais e rotinas globais definidas pela Unit.

Celta Informtica - F: (11) 4331-1586

Pgina: 11

Delphi 6
Janela Code Editor

O Code Editor possu trs sees, o editor de cdigo propriamente dito, o explorador de cdigo (Code Explorer) e o editor de diagramas (Diagram Editor). O editor de cdigo utilizado para acessar o cdigo da aplicao que voc est desenvolvendo. J o explorador de cdigo permite navegar entre os diversos procedimentos e objetos presentes na aplicao utilizando um diagrama em rvore, com os objetos representados pelos seguintes cones:

O editor de diagrama permite a construo de diagramas para explicao grfica do programa desenvolvido, baseado na modelagem de fluxogramas. Cada Unit de um projeto pode ter seu diagrama independente. Basicamente, ajuda o usurio na documentao interna do cdigo a ser desenvolvido.

Celta Informtica - F: (11) 4331-1586

Pgina: 12

Delphi 6

Caso voc queira, possvel fechar o explorador de cdigo com um clique no seu canto superior direito e abri-lo novamente escolhendo no menu View >> Code Explorer ou Shift+Ctrl+E quando o Code Editor estiver ativo. No Code Editor observamos o nome da procedure, identificando qual o objeto e o evento que dar incio execuo do cdigo, e onde est localizado este objeto. O parmetro Sender informa ao Delphi qual componente recebeu o evento que chamou a execuo deste procedimento.

Todas as instrues a serem executadas por um procedimento devem estar entre as palavras reservadas Begin e End. O Code Editor tambm pode ser acessado dando-se um duplo clique no objeto que se queira criar um cdigo exibindo o evento utilizado com maior freqncia, o que no impede a criao de outros cdigos utilizando mais de um evento para o mesmo componente.

Celta Informtica - F: (11) 4331-1586

Pgina: 13

Delphi 6

PRIMEIRO PROGRAMA
Para iniciar, vamos construir um programa que quando for dado um clique no boto de comando, ser mostrada uma mensagem. E posteriormente poderemos alterar a apresentao desta mensagem atravs de outros botes. Existem trs passos principais para a escrita de uma aplicao no Delphi que iremos seguir: Desenhar as janelas que se deseja usar. Inserir no formulrio os controles que sero necessrios Adaptar as propriedades dos objetos. Alterar as propriedades dos controles s necessidades da aplicao Escrever o cdigo para os eventos associados. Esta a parte mais complexa do desenvolvimento, ela que d a funcionalidade ao programa, so as rotinas que comeam a ser executadas a partir de um evento.

Desenhar as janelas que se deseja usar.

Celta Informtica - F: (11) 4331-1586

Pgina: 14

Delphi 6
1. Comece inserindo uma Label (legenda) e um Button (boto de comando) no formulrio, de uma das duas maneiras: a - Dando um duplo clique na barra de ferramentas sobre controle desejado; b - Selecionar o controle e dar um clique no formulrio. 1. Ao passar o ponteiro do mouse sobre o controle, nos ser mostrado o seu nome e tipo.

2. Observe que ao selecionar um objeto, possvel arrast-lo e redimension-lo dentro do formulrio utilizando uma das alas dimensionadoras. Enquanto o controle movido, o Delphi mostra sua posio, e quando redimensionado aparecem as dimenses.

Sendo: Top = distncia entre o topo do formulrio e o objeto. Left = distncia entre o lado esquerdo e o objeto. Width = largura do objeto. Height = altura do objeto. 3. Arraste o Boto para as coordenadas (40,80) e o Label para (8,16).

Celta Informtica - F: (11) 4331-1586

Pgina: 15

Delphi 6 ADAPTAR AS PROPRIEDADES DOS OBJETOS


Para alterar as propriedades de um objeto, ele tem que estar selecionado (com as oito alas dimensionadoras visveis), depois procurar a propriedade a ser alterada na janela Object Inspector, e escolher (no caso de valores padro) o seu valor, ou ento digitar um novo valor. Dimensione o formulrio da seguinte maneira: Selecione a propriedade Height, e atribuir a ela o valor de 150.

Selecione a propriedade Width dando o valor de 180.

Celta Informtica - F: (11) 4331-1586

Pgina: 16

Delphi 6
Os valores dados para estas propriedades correspondem a Pixels, que so os pontos do monitor. Sendo o tamanho do objeto no monitor dependente da resoluo de vdeo utilizada pelo computador. Altere tambm as propriedades Name e Caption. A propriedade Name a identificao do objeto no cdigo da aplicao, pode ser de qualquer tamanho mas s so considerados os primeiros 255 caracteres, deve comear com uma letra ou uma sublinha (_) no pode conter espao, e aps o primeiro caractere so permitidos nmeros, letras (no portuguesas) ou sublinha. A propriedade Caption a palavra que aparecer como ttulo da janela, com at 255 caracteres.

Aps voc alterar estas quatro propriedades (Caption, Height, Name e Width) do formulrio, ele estar conforme a figura a seguir:

Celta Informtica - F: (11) 4331-1586

Pgina: 17

Delphi 6

Agora, altere as propriedades do Label e do Button conforme a figura a seguir. O caractere & quando utilizado na propriedade Caption sublinha o caracter seguinte a ele, identificando-o como atalho para o Windows.

Celta Informtica - F: (11) 4331-1586

Pgina: 18

Delphi 6
Aps alterar a propriedade Caption do controle Label este ficar pequeno, pois a propriedade AutoSize est com o valor True, ou seja, o tamanho do Label estar sempre de acordo com o contedo de Caption.

Escrever o cdigo para os eventos associados. O cdigo escrito na janela Code editor, para acess-la, selecione o boto Iniciar do formulrio e na Object Inspector, clique na pgina Events dando um duplo clique na parte direita da linha que contm o evento OnClick - a rotina escrita para este evento ser executada quando o usurio der um clique no boto Iniciar.

Celta Informtica - F: (11) 4331-1586

Pgina: 19

Delphi 6
Este primeiro projeto (Incio), mostrar uma mensagem no label lblMensagem (objeto) com um clique (evento) no boto btnIniciar (objeto). Ou seja, o programa alterar a propriedade caption de lblMensagem, que contm o texto a ser exibido ao usurio. Atribumos valores a uma propriedade de objeto seguindo o padro: objeto + . + propriedade + := + valor da propriedade ; Abra o Code Editor no procedimento do evento OnClick para o boto btnIniciar e digite o cdigo conforme a seguinte figura. Repare que ao digitar o ponto aps lblMensagem, e aguardar alguns instantes, o Delphi exibir uma lista de propriedades e mtodos do objeto Label, que recebe o nome de Code completion.

Para escolher uma propriedade do lblMensagem utilize as setas de direo do teclado e ento pressione a tecla Enter quando a propriedade desejada estiver seleciona, inserindo-a na linha de comando. Ou ento, digite a primeira letra da propriedade desejada, e se ela for a selecionada, tecla Enter.

Celta Informtica - F: (11) 4331-1586

Pgina: 20

Delphi 6
Continue com o cdigo, seguindo a figura mostrada abaixo. Quando for dado um clique em Iniciar, ser mostrada a mensagem Voc deu um clique em Iniciar.

Clique no boto Run da barra de ferramentas (

), ou pressione a

tecla F9, para o Delphi compilar e executar o projeto. Quando o programa estiver em execuo, clique no boto Iniciar para ver o resultado.

Finalize a execuo do projeto com Alt+F4 ou no boto Finalizar ( barra de ttulo da janela.

) da

Para alternar a visualizao entre o Formulrio e o Code Editor, utilize o boto Toggle Form/Unit ( ) da barra de ferramentas ou a tecla F12.

No Delphi existem propriedades que possuem valores predefinidos para seus valores, como por exemplo a propriedade Alignment. Quando dado um clique na seta da caixa de valor dessa propriedade, aparecem

Celta Informtica - F: (11) 4331-1586

Pgina: 21

Delphi 6
os tipos de alinhamento para o texto dentro do componente. Essas propriedades com valores predefinidos tambm podem ser alteradas com um duplo-clique sobre seu valor, alternado entre todos os valores disponveis.

Selecione o objeto Label atravs da Caixa de Objeto da janela Object Inspector, e altere a propriedade Alignment para taCenter, centralizando o texto que aparecer no label. Altere tambm a propriedade AutoSize para False, e no formulrio aumente o tamanho do label.

Celta Informtica - F: (11) 4331-1586

Pgina: 22

Delphi 6

Alm das propriedades descritas acima, com padres predefinidos, existem outras que possuem inmeras escolhas, que ao invs de uma seta, possuem trs pontos na sua caixa de valor, sendo o caso da propriedade Font.

Quando damos um clique nos trs pontos, aparece um Quadro de Dilogo onde escolheremos o formato da fonte da mensagem apresentada. Se for dado um clique no sinal de soma ao lado da propriedade, ser aberta uma lista com seus parmetros, que podem ser alterados de modo semelhante caixa de dilogo.

Celta Informtica - F: (11) 4331-1586

Pgina: 23

Delphi 6

No projeto Iniciar, teste as alteraes de fonte e observe as mudanas. Na figura a seguir, foi utilizada a fonte Arial com tamanho de 14 pontos.

Observe na figura acima que o texto no coube na rea de exibio do label e nem no formulrio, este problema corrigido utilizando-se uma das duas opes disponveis. A primeira alterar para True a propriedade WordWrap do label, esta propriedade insere uma mudana de linha quando o texto atinge a margem direita do objeto. A segunda alterar os tamanhos do label e do formulrio da mesma forma que no Windows redimensionamos as janelas. Como mostram as figuras a seguir.

Celta Informtica - F: (11) 4331-1586

Pgina: 24

Delphi 6

SALVAR
Um projeto em Delphi trabalha com vrios arquivos. Um arquivo para cada formulrio, outro para unidade e um arquivo para o projeto. Os arquivos de unidades possuem a extenso .PAS, o arquivo do projeto .DPR e o do formulrio, .DFM. E outros arquivos que so: .CFG - armazena as definies de configurao do projeto. .DOF - contm o compilador e as definies de linker, diretrios de procura, informao de verso, e assim sucessivamente. .RES - contm os resources do projeto como o como o cone de aplicao, bitmaps e cursores. .DCU - contm informaes sobre a ltima compilao realizada, para que o Delphi compile somente o que foi mudado no cdigo numa prxima vez. .EXE - arquivo criado pelo compilador para ser executado pelo usurio. Quando o projeto salva, o Delphi solicita apenas os nomes dos arquivos de unidade e projeto, os outros ele cria automaticamente.

Celta Informtica - F: (11) 4331-1586

Pgina: 25

Delphi 6 SALVANDO O PRIMEIRO PROGRAMA


No menu, selecione File >> Saveall ou clique no boto Save All ( ) da barra de ferramentas, o que abre a caixa de dilogo para salvar do Windows, pedindo para dar um nome ao arquivo do formulrio, extenso .pas, d o nome de PrimeiroUnt.pas e clique em Salvar. A seguir, aparecer o mesmo quadro pedindo para dar um nome ao arquivo de projeto, extenso .dpr, d o nome de Primeiro.dpr e clique em Salvar. Os nomes dos arquivos da unidade e do projeto devero ser diferentes, apesar da extenso j o ser, pois o Delphi no aceita nomes iguais para arquivos de projeto e unidades.

O projeto agora est salvo. preciso escolher um cone que o representar na tela do Windows. No menu principal do Delphi, selecione Project >> Options..., e escolha a pgina Application.

Celta Informtica - F: (11) 4331-1586

Pgina: 26

Delphi 6

Clique no boto Load Icon... , e procure o cone About.ico, no diretrio \Borland \Delphi6\Objrepos, escolha Abrir para voltar janela Project Options. D um ttulo ao programa e pronto, o programa j possui um cone e um ttulo associados.

Compile o projeto utilizando o menu Project >> Compile Primeiro, gerando um arquivo executvel contendo as ltimas alteraes realizadas sem executar o projeto. Agora, voc tem um programa que pode ser executado em qualquer microcomputador que possua o sistema Windows, sem necessariamente ter o DELPHI ou de suas bibliotecas instalados.

Celta Informtica - F: (11) 4331-1586

Pgina: 27

Delphi 6
Verifique no Windows Explorer todos os arquivos que compem este projeto.

Exerccio: Adicione mais um boto ao formulrio que alterar a cor e o estilo da fonte do lblMensagem. Digitando o seguinte cdigo: procedure TfrmInicio.btnAlterarClick(Sender: TObject); begin lblMensagem.Font.Color:=clRed; lblMensagem.Font.Style:=[fsBold]; end; O valor das contantes de cor e estilo so facilmente encontradas na Object Inspector, basta selecionar a propriedade e verificar sua caixa de valores. A constante para estilo aparece entre colchetes pois ela faz parte de uma lista com seus prprios valores, True e False para cada estilo, devendo estar entre colchetes os estilos assumidos como True. Como por exemplo: lblMensagem.Font.Style:=[fsBold, fsItalic], para fonte em negrito e itlico.

Celta Informtica - F: (11) 4331-1586

Pgina: 28

Delphi 6

EXEMPLO I- CALCULADORA
Para iniciar um novo projeto, escolha a opo New Application do menu File. Para inserir vrias vezes o mesmo objeto no formulrio, d um clique no cone do objeto escolhido enquanto pressiona a tecla Shift, ele ficar com a aparncia mostrada na figura abaixo.

Aps selecionar o controle Edit, como descrito anteriormente, insira trs deles no formulrio dando cliques na rea de cliente, no se preocupando com a esttica. Aps inserir todos os componentes, clique no cursor bitmap em forma de seta na Paleta de Componentes para desativar o cone selecionado.

O Delphi oferece um recurso para realizar rapidamente alinhamento entre objetos, que ser utilizado para alinhar os Edit no formulrio. Primeiro selecione os objetos a serem alinhados. Pressione a tecla Shift enquanto dado um clique em cada um deles, ou arraste o ponteiro do mouse formando um retngulo de seleo, selecionando todos ao mesmo tempo como mostra a figura a seguir.

Celta Informtica - F: (11) 4331-1586

Pgina: 29

Delphi 6

Depois disso, pressione o boto direito do mouse sobre um Edit, para aparecer o pop-menu. Escolha Position, Align..., aparecendo ento o dilogo Alignment.

Escolha Space equally (igualmente espaado) para alinhamento horizontal, e Tops (topo) para o alinhamento vertical.

Celta Informtica - F: (11) 4331-1586

Pgina: 30

Delphi 6

Aps o alinhamento o formulrio estar de acordo com a figura:

Insira os objetos restantes da maneira que preferir, posicionando-os de acordo com a figura a seguir:

Celta Informtica - F: (11) 4331-1586

Pgina: 31

Delphi 6
Utilize o alinhamento Horizontal - Center in window para o Button2. Altere as propriedades assinaladas dos Objetos conforme a figura a seguir:

Neste projeto, o usurio digitar um nmero em edtNum1, outro em edtNum2, e quando ele der um clique no boto btnIgual, o resultado da multiplicao aparecer em edtResult. O boto btnLimpar utilizado para limpar as caixas de texto (edit). O programa trabalha basicamente com dois eventos : - Clique em btnIgual (=) - Clique em btnLimpar (Limpar) Para escrever o cdigo, inicie dando um duplo clique no btnIgual o que faz o Code Editor aparecer com o cursor no procedimento btnIgualClick. O editor de cdigo possui vrias ferramentas que auxiliam o programador durante a digitao do programa. Uma delas a Code Completion (concluso de cdigo), que lista as propriedades, mtodos e eventos apropriados classe em uso. Enquanto estiver digitando o cdigo e aps digitar Valor1:=, pressione Ctrl+Espao para exibir a Code Completion , procure a funo StrToFloat (transforma uma string em nmero com ponto flutuante) em seguida pressione Enter.

Celta Informtica - F: (11) 4331-1586

Pgina: 32

Delphi 6

Com um clique-direito na lista do Code Completion, ela pode ser ordenada por rea ou por ordem alfabtica. Outra ferramenta o Code Parameters (parmetros de cdigo), que mostra uma lista dos parmetros exigidos pela rotina ou funo. Esta lista aparece logo aps a abertura de parntese.

Na figura anterior, a funo StrToFloat necessita de um parmetro do tipo String (cadeia de caracteres), que no exemplo est na propriedade Text do edtNum1.

Celta Informtica - F: (11) 4331-1586

Pgina: 33

Delphi 6
Digite o restante do cdigo como mostrado a seguir.

Abra o procedimento do evento OnClick do btnLimpar, digitando os comandos a seguir:

Execute o projeto e para utiliz-lo, entre com um nmero em edtNum1, outro em edtNum2 e d um clique em =, e o resultado da multiplicao aparecer em edtResult. Para mudar o campo ativo, utilizada a tecla Tab. A ordem de tabulao corresponder ordem em que os controles foram colocados no formulrio. Esta ordem determinada pela propriedade TabOrder dos controles, caso o seu projeto no esteja, coloque-o na seguinte ordem:

Celta Informtica - F: (11) 4331-1586

Pgina: 34

Delphi 6
Objeto edtNum1 edtNum2 edtResult btnIgual btnLimpar TabOrder 0 1 2 3 4

Para alterar esta propriedade, selecione o controle, e no Object Inspector mude seu valor. Como o Delphi no aceita controles com TabOrder iguais, talvez seja necessrio utilizar algum valor temporrio diferente da tabela. possvel alterar a ordem de tabulao acessando o popup-menu. D um clique-direito sobre qualquer componente escolhendo a opo TabOrder ( ), abrindo o quadro de dilogo Edit Tab Order, onde altera-se a ordem de todos os controles inseridos no formulrio. Modifique a ordem selecionando o controle na lista e clique nas setas para cima ou para baixo, de acordo com a figura a seguir:

Execute o projeto e observe as alteraes feitas na ordem de tabulao. Como o usurio pode alterar o valor de edtResult mesmo aps a multiplicao ter sido efetuada, necessrio definir as propriedades TabStop:=False e ReadOnly:=True deste controle, para evitar este inconveniente.

Celta Informtica - F: (11) 4331-1586

Pgina: 35

Delphi 6

Nas aplicaes para Windows, os botes de comando geralmente so acionados com um clique, mas h aqueles que acionam com a tecla Enter. No projeto da calculadora, o boto que acionar com Enter ser o btnIgual, faa com que propriedade Default desse boto fique com o valor True. Fazendo aparecer um contorno mais espesso no boto, dando a indicao que se a tecla Enter for acionada, o evento OnClick ocorrer.

PROPRIEDADES BorderStyle
Retorna ou d um valor para o estilo de borda do objeto; objeto.BorderStyle := [valor]

Celta Informtica - F: (11) 4331-1586

Pgina: 36

Delphi 6
Existem 6 tipos de bordas: 1 - bsDialog O formulrio no possui os botes de maximizar e nem de minimizar. No redimensionvel.

2 - bsNone Nenhuma borda

3 - bsSingle Fixa Simples, o formulrio s dimensionvel atravs dos botes de minimizar e maximizar. 4 - bsSizeable Borda Redimensionvel

5 - bsSizeToolWin Semelhante bsToolWindow, mas dimensionvel.

Celta Informtica - F: (11) 4331-1586

Pgina: 37

Delphi 6
6 - bsToolWindow No mostra os botes de maximizar e de minimizar. No redimensionvel, mostrando somente o boto de fechar e a barra de ttulo com a fonte reduzida. E o formulrio no aparece na barra de tarefa do Windows 95.

As Bordas Fixas no podem ser dimensionadas em tempo de execuo. Ou seja, o usurio no poder mudar o tamanho do formulrio.

Default
Retorna ou d o valor de um boto de comando em um formulrio; object.Default :[= booleano] Default= False True

Quando esta propriedade de um TButton estiver como True o Delphi chamar o evento OnClick sempre que a tecla Enter for pressionada. Ex: Desejo que o boto btnMultiplicar seja o default: btnMultiplicar.Default := True; Desejo saber se o boto cmdMultiplicar default ou no, e o resultado ser armazenado na varivel booleana Estado: Estado := btnMultiplicar.Default;

Celta Informtica - F: (11) 4331-1586

Pgina: 38

Delphi 6 Tabstop
Retorna ou d o valor ao objeto indicado; objeto.TabStop: [= booleano] TabStop = False True Ex: Para alterar a ordem de tabulao dos botes em tempo de execuo basta incluir estas linhas em algum procedimento: btnMultiplicar.TabStop := 0; btnDividir.TabStop := 1; btnSomar.TabStop := 2; btnSubtrair.TabStop := 3; Para saber qual a ordem de tabulao do objeto edtNum1 e armazen-la em uma varivel que conter a ordem de tabulao do objeto: Ordem_Tab:= edtNum1.TabStop; No ambiente Windows comum mudarmos o foco entre os controles com a tecla Tab. Quando no quisermos que o usurio acesse determinado controle usando Tab, definimos a propriedade TabStop desse controle como False.

Name
Esta propriedade contm o nome que dado ao objeto como referncia para o cdigo e definio de propriedades. Em tempo de execuo, retorna o nome usado por um controle; objeto.Name Ex: Desejo exibir o Name do formulrio em um edit: editNome_Form.Text := frmCalculadora.Name;

Celta Informtica - F: (11) 4331-1586

Pgina: 39

Delphi 6 Caption
objeto.Caption := [string] Determina o texto mostrado na barra de ttulo do formulrio, o texto dentro de um controle ou um ttulo na barra de menu. Ex: Para alterar a Caption do boto Limpar aps seu uso, basta inserir esta linha no procedimento cmdLimpar_Click: btnLimpar.Caption := Iniciar

Text
Retorna o texto que est escrito na rea de edio de um quadro de texto (TextBox), ou escreve um string nesta rea; objeto.Text := [string];

MTODO Setfocus
D o foco ao objeto indicado; objeto.SetFocus Fixa o foco a um formulrio ou controle. Somente pode ser usado para um formulrio ou controle visvel.

Celta Informtica - F: (11) 4331-1586

Pgina: 40

Delphi 6 VARIVEIS NO DELPHI


Varivel um local nomeado da memria, onde so guardados dados que podem ser mudados em tempo de execuo. O nome de uma varivel pode ter at 255 caracteres, tem que comear com uma letra, no pode conter caracteres brasileiros e ser nica. O nome pode conter nmeros e sublinhados e no pode ser uma palavra reservada. Existem vrios tipos de variveis, sendo cada tipo especfico para o tipo de dado a ser armazenado. Tipos Inteiros
Cardinal Integer Byte Int64 LongInt ShortInt SmallInt Word

Faixa
De 0 at 4.294.967.295 De 2.147.483.648 at 2.147.483.647 De 0 at 255 De 263 at 263 -1 De 2.147.483.648 at 2.147.483.647 De 128 at 127 De 32.768 at 32.767 De 0 at 65.535

Tipos Inteiros Fundamentais

Tipos Booleanos
Boolean ByteBool WordBoll LongBoll

Valores Vlidos
False ou True (1 byte) False ou True (1 byte) False ou True (2 bytes) False ou True (4 bytes) De 5.0 * 10-324 at 1.7 * 10308 De 1.5 * 10-45 at 3.4 * 1038 De 5.0 * 10-324 at 1.7 * 10308 De 3.6 * 10-4951 at 1.1 * 104932 De -263 + 1 at 263 -1 De 2.9 * 10-39 at 1.7 * 1038 De 922.337.203.685.477,5808 at 2.337.203.685.447,5807 255 caracteres Aproximadamente 231 Aproximadamente 230

Tipos Reais
Real Single Double Extended Comp Real48 Currency

Tipo String
ShotString AnsiString WideString

Celta Informtica - F: (11) 4331-1586

Pgina: 41

Delphi 6 FORMAS DE DECLARAR UMA VARIVEL


As variveis so declaradas usando-se a palavra reservada var, o nome da varivel, dois pontos e o tipo de dado a ser armazenado nesta varivel. var Valor1: Real; Elas podem ser declaradas em trs locais diferentes, conforme a sua abrangncia: 1. Varivel Local: ela ser utilizada somente pelo procedimento onde est declarada, terminado o procedimento ela desaparecer da memria. declarada logo aps o cabealho do procedimento. 2. Varivel a nvel de unidade: a varivel ser utilizada por todos os procedimentos e funes da unidade. declarada logo aps a palavra reservada implementation. 3. Varivel a nvel de projeto: a varivel que poder ser utilizada por toda a aplicao, ou seja, poder ser utilizada por outras unidades. declarada na seo interface da unidade.

FORMATAO DE NMEROS
A funo FloatToStr, transforma um nmero em texto, mas no padroniza sua apresentao. Caso necessite formatar a exibio de um nmero, use a seguinte funo: FormatFloat(formato , expresso), onde: - formato = a maneira como dever ser mostrada a expresso. - expresso = expresso numrica a ser formatada.

Celta Informtica - F: (11) 4331-1586

Pgina: 42

Delphi 6
Formatando nmeros:
Formato 0 0,00 #.##0 #.##0,0 $#.##0;($#.##0) $#.##0,00;($#.##0,00) 0% 0,00E+00 5 positivo 5 5,00 5 5,0 $5 $5,00 500% 5,00E+00 5 negativo -5 -5,00 -5 -5,0 ($5) ($5,00) -500% -5,00E+00 5 decimal 1 0,50 1 0,5 $1 $0,50 50% 5,00E-1

Em formato o nmero 0 ser mostrado ou trocado pelo caractere em sua posio, j o caracter nrus (#) no ser mostrado. Pode-se inserir smbolos na funo Format, como no exemplo: $ , % ou E.

FORMATANDO DATA E HORA:


Para formatar data e hora use a funo FormatDateTime: FormatDateTime (formato , data); Formato d/m/yy dd-mm-yyyy dd-ddd hh:mm AM/PM h:mm:ss a/p d/m/yy h:mm Exibido 06/5/02 06-Mai-2002 02-dom 08:50 AM 8:50:20 a 03/07/02 9:30

MODIFICANDO A CALCULADORA
No formulrio da calculadora, selecione o boto btnIgual e pressione a tecla Delete. O boto de igual desaparecer do formulrio, mas o seu cdigo continuar no editor de cdigos. Abra o editor de cdigos, e observe que a procedure TfrmCalculadora.btnIgualClick continua no mesmo lugar. Exclua tambm o label com X.

Celta Informtica - F: (11) 4331-1586

Pgina: 43

Delphi 6
Modifique o formulrio frmCalculadora como o exemplo a seguir, inserindo e dimensionando um novo boto:

Selecione o novo boto, copie ( ) e cole ( ) mais trs botes semelhantes. Depois posicione-os de acordo com a figura:

Algumas propriedades podem ser alteradas ao mesmo tempo para um grupo de objetos selecionados. Como exemplo, selecione todos os botes criados anteriormente e altere as propriedades Font.Size e Font.Style de todos ao mesmo tempo.

Celta Informtica - F: (11) 4331-1586

Pgina: 44

Delphi 6

Como o smbolo de diviso encontrado na fonte Symbol, necessrio alterar o propriedade Font.Name do boto e depois, abrir o Mapa de caracteres do Windows e procurar pelo smbolo da diviso na fonte Symbol, copiando e colando para a propriedade Caption deste boto. Provavelmente o caractere que aparecer na caixa de propriedade no ser o mesmo do boto, pois a fonte da Object Inspector no Symbol, portanto no se preocupe com este problema. Faa o mesmo processo para o boto de raiz. O procedimento para o antigo boto btnIgual ser agora aproveitado no boto btnMultiplicacao. Selecione o boto btnMultiplicacao e na Object Inspector abra a pgina Events escolhendo a opo btnIgualClick para o evento OnClick. Fazendo com que este procedimento que antes era de um boto agora possa ser disparado por outro.

Celta Informtica - F: (11) 4331-1586

Pgina: 45

Delphi 6
As duas variveis Valor1 e Valor2 que antes pertenciam a apenas um procedimento, agora devero ser utilizadas pelos procedimentos das outras operaes. Para que isso ocorra, retire-as do procedimento TfrmCalculadora.btnIgualClick e declare-as na seo Implementation da unidade. Ser usada tambm a funo FormatFloat para formatar a apresentao do resultado.

Substitua o tipo de operao em btnIgualClick, e nos demais botes, utilizando as ferramentas Copiar e Colar.

Celta Informtica - F: (11) 4331-1586

Pgina: 46

Delphi 6
Os operandos das quatro operaes so: Soma Subtrao Multiplicao Diviso + * /

A funo exponenciao est programada em uma unidade do Delphi, que possui diversas funes matemticas complexas, chamada Math. Uma delas a funo Power(base, expoente) que ser utilizada para efetuar a operao de raiz disparada pelo boto btnRaiz. Primeiro necessrio incluir esta unidade na seo Uses da Unit.

Depois digite o cdigo associado ao evento OnCLick do boto btnRaiz.

Celta Informtica - F: (11) 4331-1586

Pgina: 47

Delphi 6
Todo bom programador coloca em seu cdigo linhas de comentrio para que ele ou outra pessoa possam guiar-se no cdigo durante uma manuteno, pois com o tempo, o caminho para determinado resultado pode ser esquecido. No Delphi as linhas de comentrio so precedidas por duas barras ( // ), ou o texto do comentrio estar entre chaves ( { ... } ). Salve e execute o programa, testando os vrios formatos de apresentao dos nmeros, com alteraes nos parmetros de apresentao da funo FormatFloat.

DEPURAO
Quando construmos uma aplicao, possvel errarmos na sintaxe durante a digitao, fornecendo parmetros errados ou trocando nomes de variveis, ou ento, criarmos erros lgicos que so detectados como sadas incorretas do programa. Para resolver estes problemas o Delphi possui vrias ferramentas que controlam a execuo do programa fornecendo uma execuo passo-a-passo e exibindo valores de parmetros. Quando o Delphi compila o programa (Ctrl+F9) e encontra algum erro de sintaxe ele mostra a linha onde est o erro, dando uma dica do problema, na parte inferior da janela do Code Editor. Praticaremos a depurao de programas construindo um aplicativo que nos d como sada uma lista com os seguintes nmeros: 18, 21, 24, 27 e 30.

Construa um formulrio com um boto e um quadro de lista - ListBox ( ), sem alterar

nenhuma propriedade dos componentes:

Celta Informtica - F: (11) 4331-1586

Pgina: 48

Delphi 6
Entre com o seguinte cdigo, exatamente como est, para o boto:

Compile o programa pressionando Ctrl+F9, e observe os erros de sintaxe encontrados pelo Delphi. So erros que indicam a no declarao ou existncia da varivel T e do objeto Lista. A linha destacada em vermelho indica aonde o compilador parou.

Celta Informtica - F: (11) 4331-1586

Pgina: 49

Delphi 6
Declare a varivel T como do tipo inteiro semelhante i e altere a propriedade Name da ListBox para Lista, e compile novamente.

Desta vez foi apresentado um erro onde o tipo de dado requerido um String mas o fornecido pela varivel T Integer. Para corrigir, transforme o contedo da varivel T em String utilizando a funo IntToStr() na linha onde ocorreu o erro. Lista.Items.Add (IntToStr(T)); Aps esta correo, o compilador no detectar mais nenhum erro de sintaxe. Portanto, execute este exemplo pressionando F9.

Celta Informtica - F: (11) 4331-1586

Pgina: 50

Delphi 6
Observe que a sada do programa no corresponde desejada, constatando a existncia de erros lgicos neste projeto. A funo digitada est incorreta pois ela no varia em funo do valor de i, altere ento a seguinte linha: T:= 3*5+I;

Mesmo aps a incluso da varivel I, a sada do programa ainda no est como desejada.

Para continuar a resoluo deste problema, acompanhe o programa passo-a-passo verificando o valor das variveis em cada momento. Primeiro insira um ponto de parada (Breakpoint), onde o programa ser executado at este ponto e depois pra. Para inserir um Breakpoint, d um clique na barra do lado esquerdo da linha que deseja ser a parada. Quando desejar remover o Breakpoint basta dar um novo clique na mesma posio.

Celta Informtica - F: (11) 4331-1586

Pgina: 51

Delphi 6
Quando for dado um clique no boto, o programa comear a executar e ir parar na linha do Breakpoint exibindo o Code Explorer. Para continuar a executar o programa passo-a-passo pressione F7, at a linha que est indicada na figura abaixo como linha corrente.

Verifique o valor atual de uma varivel posicionando o ponteiro sobre ela, e aguardando uns instantes para o Delphi mostrar seu valor.

Avance o programa aos passos at a finalizao, acompanhando a variao dos valores. A sada somente estar correta quando 5+I estiver entre parnteses (5+I), executando primeiro a soma e depois a multiplicao. Digite os parnteses e execute o programa, que agora apresentar a sada correta.

Celta Informtica - F: (11) 4331-1586

Pgina: 52

Delphi 6

EXEMPLO II - JOGO DA VELHA


Este prximo exemplo de projeto o conhecido Jogo da Velha, onde o usurio ir jogar contra o computador que no pensa suas jogadas, pois ele trabalha com jogadas aleatrias, e ao final da partida ser mostrado um quadro de mensagem informando quem ganhou a partida. Insira um boto de comando no formulrio dimensionando-o como um quadrado, e depois, copie (Ctrl+C) e cole (Ctrl+V) mais oito botes iguais. Formando um total de nove botes.

Celta Informtica - F: (11) 4331-1586

Pgina: 53

Delphi 6
Estes botes de comando so nomeados automaticamente de Button1 a Button9, de cima para baixo. Arraste-os de forma que fiquem como a figura a seguir.

Como programa do jogo ir modificar a propriedade Caption desses botes, necessrio iniciar o jogo com todos botes em branco. Primeiro selecione todos os botes ao mesmo tempo, para isso, posicione o ponteiro do mouse em um canto do formulrio e depois arraste-o at que o retngulo pontilhado envolva todos os botes. V at a janela Object Inspector e deixe a propriedade Caption em branco. Qualquer propriedade que for alterada enquanto a seleo estiver ativa, servir para todos os botes. Altere tambm as propriedades Name, Caption e BorderStyle do formulrio.

Celta Informtica - F: (11) 4331-1586

Pgina: 54

Delphi 6
Unidade (Unit) Uma Unit possui as seguintes sees: Cabealho Interface Implementao O cabealho identifica o nome da Unit. Ele bem compacto, contendo a palavra reservada Unit e o nome da unidade, que no precisa ser o mesmo nome do arquivo .PAS, que a contm. Na seo Interface declaramos as variveis e cdigos que podem ser usados por cdigos de outras unidades e lista todas as outras Units que ela precisa ver. Se esta Unit precisar utilizar algum recurso de outra Unit, deveremos referenciar esta outra Unit na clusula uses da seo de interface. Na seo Implementation so declarados os cdigos e variveis pertencentes exclusivamente unidade.

UNIDADE

<nome da unidade>;

INTERFACE
Seo de interface

IMPLEMENTATION
Seo de implementao

FIM.

Na seo de Interface da unidade que est sendo construda, est sendo definido o tipo TfrmJogo (o formulrio) pertencente classe TForm, a seguir, so listados todos os controles, seus tipos, e procedimentos pertencentes ao formulrio.

Celta Informtica - F: (11) 4331-1586

Pgina: 55

Delphi 6
A figura abaixo mostra a listagem da Unit do projeto: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TfrmJogo = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; Button8: TButton; Button9: TButton; private { Private declarations } public { Public declarations } end; var frmJogo: TfrmJogo; implementation {$R *.DFM} end. O projeto Jogo da Velha, utiliza dois procedimentos que no esto associados a nenhum controle, so eles JogoNovo e Verificar. Estes procedimentos devem primeiro ser primeiro declarados para depois serem implementados, declare os procedimentos JogoNovo e Verificar na definio de tipo do formulrio como mostra a listagem abaixo. Logo mais,

Celta Informtica - F: (11) 4331-1586

Pgina: 56

Delphi 6
faremos a implementao destes procedimentos que nada mais do que a construo do seu cdigo.

Declare tambm a varivel Botao na seo Implementation. Esta varivel uma matriz unidimensional com nove elementos do tipo TButton, ou seja, cada varivel dessas possui as mesmas propriedades de um boto de comando. Esta matriz poderia ser bidimensional contendo nmeros inteiros (array [1..3, 1..3] of Integer) ou strings.

Quando o projeto iniciar, o formulrio ser carregado na memria e neste momento ocorre o OnCreate, onde ser escrito um procedimento de incio do jogo. D um duplo clique no formulrio para ter acesso ao editor de cdigo, ou selecione o formulrio, v at o Object Inspector escolhendo a pginas Events, dando um duplo clique em OnCreate.

Celta Informtica - F: (11) 4331-1586

Pgina: 57

Delphi 6

Entre com o seguinte cdigo:

No procedimento acima, a procedure Randomize inicializa o gerador de nmeros aleatrios utilizando como base o relgio do sistema. Nas prximas linhas so atribudos valores varivel Botao[n], associando-a aos botes do formulrio. E logo a seguir chamada a procedure JogoNovo.

Celta Informtica - F: (11) 4331-1586

Pgina: 58

Delphi 6
Salve a Unit como JogoVelhaUnt.pas e o projeto como JogoVelha.dpr. Agora implemente o procedimento JogoNovo na seo Implementation, como segue. Declare tambm a varivel NumeroVezes que poder ser utilizada por todos os procedimentos desta Unidade.

Uma declarao de procedure tem a seguinte forma: procedure Nome (Lista de parmetros); Diretivas; Declaraes locais begin Instrues end; A Lista de parmetros, Diretivas e Declaraes locais so opcionais. Uma Lista de parmetros uma seqncia de parmetros que devero ser enviados pela linha de instruo que chamou a procedure. Cada parmetro possui um nome seguido pela identificao de tipo, eles podem ser precedidos pelas palavras reservadas var ou const indicando varivel ou constante respectivamente.

Celta Informtica - F: (11) 4331-1586

Pgina: 59

Delphi 6
Exemplos: (X, Y: Real) (var S: string; X: Integer) (HWnd: Integer; Text, Caption: PChar; Flags: Integer) (const P; I: Integer) As Diretivas informam procedure como ela tratar os parmetros e como ser a construo deste procedimento em relao a outros anteriores. No cabealho, observamos que o nome completo da procedure composto do nome do objeto que contm a procedure (Form) e o nome de chamada da mesma procedure.

O procedimento JogoNovo, inicia um novo jogo apagando todas as legendas dos botes e fazendo uma nova jogada aleatoriamente. A varivel I do tipo inteiro (Integer) de uso exclusivo deste procedimento. Findo o procedimento, ela deixar de existir. Para apagar as legendas usada a instruo for...to...do, que ir em loop apagando as legendas. Aqui a varivel Botao[I] identifica os botes do formulrio usando como ndice a varivel I do loop for...to...do. A instruo for...to...do, pode ser tambm for...downto, para decrementar o valor da varivel de controle (I). No exemplo, existe somente uma linha de comando aps o do, se fossem necessrias mais declaraes, seria necessrio usar begin...end; como uma maneira de agrupar estas declaraes, indicando que todas fazem parte do loop for...to...do, como mostra o exemplo abaixo : for i:=1 to 3 do begin Botao[i].Caption:=; B o t a o [ i + 1 ] . C a p t i o n : = ; B o t a o [ i + 2 ] . C a p t i o n : = ; end;

Celta Informtica - F: (11) 4331-1586

Pgina: 60

Delphi 6
Na linha M:= Trunc (Random *10), atribudo um valor inteiro varivel M entre 1 e 9. A procedure Random gera um nmero do tipo Real X entre 0 e 1 (0<=X<1), que multiplicado por 10 e aproveitada sua parte inteira, que apesar de ser um nmero inteiro do tipo Real, no podendo ser utilizado para indicar um boto. Para converter um nmero real em inteiro, utiliza-se as funes Trunc ou Round. Trunc, retorna a parte inteira de um nmero, enquanto Round arredonda um nmero real. Real 1,4 1,5 -1,4 2,5 -2,7 Trunc 1 1 -1 2 -2 Round 1 2 -1 2 -3

No cdigo utilizada a funo Trunc para retornar o ndice do boto que ter sua legenda alterada. O prximo passo fazer o cdigo dos botes, d um duplo clique no Button1 para a janela de cdigo aparecer, e copie o exemplo. Faa o mesmo para os demais botes modificando apenas o nome daquele que ter sua legenda alterada.

Celta Informtica - F: (11) 4331-1586

Pgina: 61

Delphi 6
Construa o procedimento Verificar na seo de implementao da unidade, como segue:
procedure TfrmJogo.Verificar (); label 1,2; var I: Integer; begin if (Button1.Caption=X) and (Button2.Caption=X) and (Button3.Caption=X) then goto 1; if (Button4.Caption=X) and (Button5.Caption=X) and (Button6.Caption=X) then goto 1; if (Button7.Caption=X) and (Button8.Caption=X) and (Button9.Caption=X) then goto 1; if (Button1.Caption=X) and (Button4.Caption=X) and (Button7.Caption=X) then goto 1; if (Button2.Caption=X) and (Button5.Caption=X) and (Button8.Caption=X) then goto 1; if (Button3.Caption=X) and (Button6.Caption=X) and (Button9.Caption=X) then goto 1; if (Button1.Caption=X) and (Button5.Caption=X) and (Button9.Caption=X) then goto 1; if (Button3.Caption=X) and (Button5.Caption=X) and (Button7.Caption=X) then goto 1; repeat I:=Trunc(Random*10) until Botao[I].Caption= ; Botao[I].Caption:=O; if (Button1.Caption=O) and and (Button3.Caption=O) if (Button4.Caption=O) and and (Button6.Caption=O) if (Button7.Caption=O) and and (Button9.Caption=O) if (Button1.Caption=O) and and (Button7.Caption=O) if (Button2.Caption=O) and and (Button8.Caption=O) if (Button3.Caption=O) and and (Button9.Caption=O) if (Button1.Caption=O) and and (Button9.Caption=O) if (Button3.Caption=O) and and (Button7.Caption=O) (Button2.Caption=O) then goto 2; (Button5.Caption=O) then goto 2; (Button8.Caption=O) then goto 2; (Button4.Caption=O) then goto 2; (Button5.Caption=O) then goto 2; (Button6.Caption=O) then goto 2; (Button5.Caption=O) then goto 2; (Button5.Caption=O) then goto 2;

Celta Informtica - F: (11) 4331-1586

Pgina: 62

Delphi 6
if NumeroVezes= 4 then begin ShowMessage (Partida Empatada); JogoNovo; exit; end; exit; 1: begin ShowMessage (Voc Ganhou); JogoNovo; exit; end; 2: begin ShowMessage (Eu Ganhei); JogoNovo; exit; end; end;

Logo aps o cabealho, temos as declaraes locais. Usamos a declarao label para definir os locais de desvio da instruo goto. E tambm declaramos a varivel I como do tipo integer. A instruo repeat declarao until expresso; repete a declarao enquanto a expresso for verdadeira. No exemplo, o programa selecionar um boto aleatoriamente, at que seja encontrado um boto vazio - Caption:= , preenchendo-o com O, indicando a jogada do computador. A procedure ShowMessage, mostra um quadro de mensagem com o boto de Ok. O programa fica parado at que o usurio d um clique em Ok, retornando linha seguinte no procedimento. O Windows possui quadros padronizados de mensagem que servem para emitir avisos e recolher opes de tratamento dessas mensagens. Podemos incrementar o programa do Jogo da Velha criando um quadro de mensagem com vrios botes e que retorne uma resposta do usurio, indicando qual boto foi escolhido. Para isso utilizamos a funo MessageBox.

Celta Informtica - F: (11) 4331-1586

Pgina: 63

Delphi 6
Esta funo pertence biblioteca do Windows (API). O Delphi a relaciona ao objeto do tipo TApplication. MessageBox (Mensagem ,Ttulo, Tipo); Onde: mensagem - expresso mostrada dentro do quadro de dilogo. tipo - somatria de nmeros, conforme o que queremos que seja exibido no Quadro de Mensagem, seguindo a tabela Tipo. ttulo - ttulo do Quadro de Mensagem (barra de ttulo). Mude o cdigo do procedimento Verificar como mostrado abaixo, declarando a varivel Resposta como Inteiro - Resposta: Integer. 1: begin Resposta:=Application.MessageBox (Voc ganhou, quer Jogar Novamente?,Vencedor,36); if Resposta = 7 then Close; JogoNovo; exit; end; 2: begin Resposta:=Application.MessageBox (Eu ganhei, quer Jogar Novamente?,Vencedor,36); if Resposta = 7 then Close; JogoNovo; exit; end;

Celta Informtica - F: (11) 4331-1586

Pgina: 64

Delphi 6
O argumento Tipo possui os seguintes valores para a funo MessageBox: Valor 0 1 2 3 4 5 16 32 48 64 0 256 512 Significado Somente o boto de OK Botes de OK e Cancelar Botes Anular, Repetir e Ignorar Botes Sim, No, Cancelar Botes Sim, No Botes Repetir e Cancelar Sinal de Stop Sinal de Pesquisa Sinal de Aviso cone de Informao Primeiro boto com foco Segundo boto com foco Terceiro boto com foco

Teste o projeto alterando o valor de tipo para Messagebox, faa a sua soma escolhendo um item de cada seo. A varivel Resposta, conter a resposta do usurio que segue o padro da tabela abaixo. Valor 1 2 3 4 5 6 7 Significado Boto OK foi pressionado Boto Cancelar foi pressionado Boto Anular foi pressionado Boto Repetir foi pressionado Boto Ignorar foi pressionado Boto Sim foi pressionado Boto No foi pressionado

O programa verificar se o boto No foi pressionado, e se foi, fechar o formulrio principal, encerrando sua execuo. No exerccio, todos os botes realizam basicamente a mesma operao quando respondem ao evento OnClick. Vamos alterar o projeto para que exista somente uma procedure que trate o evento OnClick para todos os botes.

Celta Informtica - F: (11) 4331-1586

Pgina: 65

Delphi 6

Primeiro apague as linhas entre begin...end dos procedimentos relativos aos botes exceto o Button1Click. Compile o projeto (Ctrl+F9) para que o Delphi exclua estes procedimentos do editor de cdigo - qualquer procedimento vazio ser excludo. D um clique-direito no Code Explorer e no menu escolha Rename, alterando o nome do procedimento Button1Click para ButtonClick.

Aps a compilao, os procedimentos associados aos demais botes sero excludos do editor de cdigos e como conseqncia, estes botes no respondero mais ao evento OnClick. Acesse a pgina Events do Object Inspector, associando a procedure ButtonClick como resposta ao evento Onclick para todos os botes. Desta forma todos eles executaro o mesmo procedimento a partir do evento OnClick.

Celta Informtica - F: (11) 4331-1586

Pgina: 66

Delphi 6

Por ltimo altere a procedure ButtonClick para que ela reconhea o boto que recebeu o evento OnClick, alterando sua Caption. procedure TfrmJogo.ButtonClick(Sender: TObject); begin NumeroVezes:=NumeroVezes + 1; (Sender as TButton).Caption:= X; Verificar; end;

O parmetro Sender indica qual objeto recebeu o evento acionador da procedure, podendo ser utilizado nos casos em que vrios objetos executam a mesma funo.

Celta Informtica - F: (11) 4331-1586

Pgina: 67

Delphi 6

EXEMPLO III - BLOCO DE NOTAS


O prximo exemplo de projeto ser um editor de texto simples do tipo caractere. Com ele ser possvel alterar o tipo e tamanho da fonte utilizada em todo o texto, recortar, colar e copiar partes selecionadas e tambm salvar e abrir o texto utilizando as caixas de dilogo padro fornecidas pelo Delphi. Monte o formulrio conforme o exemplo:

Defina a propriedade Align do componente Memo como alCliente. Esta propriedade faz com que o Memo ocupe toda a rea do cliente do formulrio, mesmo que este seja redimensionado. O Delphi possui componentes visveis e no visveis. Os componentes visveis so aqueles que durante a execuo do programa so vistos pelo usurio. At aqui todos os componentes utilizados nos exemplos so visveis, como TEdit, TButton, TForm e outros. Os componentes no visveis no aparecem na janela do usurio em tempo de execuo, estando visveis apenas em tempo de projeto. So eles, Timer, menus, caixas de dilogo comuns e controles de acesso a dados.

Celta Informtica - F: (11) 4331-1586

Pgina: 68

Delphi 6
O exemplo de Bloco de Notas usar um componente MainMenu e quatro componentes da paleta Dialogs - OpenDialog, SaveDialog, FontDialog e ColorDialog. Para comear a editar o menu, d um duplo-clique no controle MainMenu que est no formulrio, abrindo o dilogo Menu Designer.

nesta janela que o menu do programa ser construdo. Observe que o primeiro ttulo j est selecionado. V at o Object Inspector e mude a propriedade Caption para &Arquivo e pressione Enter - para acesso via teclado, a letra de atalho deve ser precedida pelo & comercial. Este procedimento, cria o menu Arquivo e move a barra de destaque para o lado direito, d um clique logo abaixo da opo Arquivo para inserir um item neste menu. Repare que o Delphi coloca um nome para cada menu e opo de menu baseado na propriedade Caption, no caso do menu Arquivo, Name:=Arquivo. Porm til seguir uma certa norma que identifica o objeto a partir de seu nome. Esta norma consiste na utilizao de trs letras como prefixo do nome de cada objeto. Como exemplos temos: frm lbl mnu itm edt btn Form Label Menu Item de menu Edit Boto

Celta Informtica - F: (11) 4331-1586

Pgina: 69

Delphi 6

Monte as demais opes do menu seguindo a figura do Menu Designer mostrada abaixo. Para criar um separador no menu, digite apenas um sinal de menos ( - ) na propriedade Caption do item abaixo de Salvar.

Terminado o menu Arquivo, inicie o menu Editar como segue abaixo. Definindo as teclas de atalho na propriedade ShortCut para cada item do menu.

Celta Informtica - F: (11) 4331-1586

Pgina: 70

Delphi 6
Quando chegar ao item Formatar Fonte , escolha a opo Create Submenu do PopupMenu, para criar um submenu deste item.

O sub-menu do item Formatar Fonte, dever estar igual a figura mostrada abaixo. Como o Delphi no reconhece caracteres brasileiros, o nome dado ao item Itlico ser Itlico, suprimindo do Name o caractere ( Name:= Itlico).

Celta Informtica - F: (11) 4331-1586

Pgina: 71

Delphi 6
Feche o Menu Designer, voltando ao formulrio principal. Adicione as caixas de dilogo que iro formatar a fonte exibida no componente Memo, e aquelas que iro abrir e salvar arquivos. Os componentes destas caixas esto na paleta Dialogs do Delphi.

Acabamos de desenhar o nosso formulrio, colocando nele todos os seus componentes, os visveis e os no visveis. Mesmo os componentes no visveis estando sobre o componente Memo, no atrapalharo a apresentao do texto. Salve seu trabalho para dar incio construo do cdigo. As caixas de dilogo so mostradas atravs do mtodo Execute. Este mtodo responde True se o usurio selecionou Ok, indicando que o programa dever responder s alteraes da caixa de dilogo exibida. Se o usurio no quiser efetuar as mudanas, ser retornado False. D um clique no item Novo do menu, para chamar o procedimento associado. Este procedimento ter a funo de limpar a caixa Memo1 e desabilitar as opes de edio do texto. Estas opes estaro desabilitadas at que se tenha um texto para Recortar, Copiar ou Colar.

Celta Informtica - F: (11) 4331-1586

Pgina: 72

Delphi 6

Siga o cdigo mostrado a seguir: procedure TfrmBlocoNotas.itmNovoClick(Sender: TObject); begin memTexto.Clear; itmRecortar.Enabled:=False; itmCopiar.Enabled:=False; itmColar.Enabled:=False; end; A opo Abrir trabalhar com a caixa de dilogo OpenDialog, verificando o valor retornado por Execute e carregando o contedo do arquivo selecionado, na propriedade Lines do objeto memTexto. procedure TfrmBlocoNotas.itmAbrirClick(Sender: TObject); begin if OpenDialog.Execute then memTexto.Lines.LoadFromFile(OpenDialog.Filename); end; Digite o cdigo para as outras caixas de dilogo. Elas trabalham alterando as propriedades do Memo aps as mudanas realizadas pelo usurio.

Celta Informtica - F: (11) 4331-1586

Pgina: 73

Delphi 6
procedure TfrmBlocoNotas.itmSalvarClick(Sender: TObject); begin if SaveDialog.Execute then memTexto.Lines.SaveToFile(SaveDialog.Filename); end; procedure TfrmBlocoNotas.itmFonteClick(Sender: TObject); begin FontDialog.Font:=memTexto.Font; {inicializa a FontDialog com a font de Memo} if FontDialog.Execute then memTexto.Font:=FontDialog.Font; end; A linha entre chaves indica um comentrio, no sendo tratada pelo compilador do Delphi. procedure TfrmBlocoNotas.itmCorClick(Sender: TObject); begin ColorDialog.Color:=memTexto.Color; if ColorDialog.Execute then memTexto.Font.Color:=ColorDialog.Color; end; Como o memo est ocupando toda rea do cliente no formulrio, fica praticamente impossvel selecionar o formulrio para alterar suas propriedades. Para alterar alguma propriedade ou abrir algum procedimento de evento dele, selecione o formulrio na caixa de objeto do Object Inspector.

Celta Informtica - F: (11) 4331-1586

Pgina: 74

Delphi 6
Quando comear a execuo do programa, o evento OnCreat ocorre para o formulrio, e o procedimento deste evento ir apagar o contedo do Memo e desabilitar as opes do menu Editar. procedure TfrmBlocoNotas.FormCreate(Sender: TObject); begin memTexto.Clear; itmRecortar.Enabled:=False; itmCopiar.Enabled:=False; itmColar.Enabled:=False; end; As opes Recortar e Copiar do menu Editar, estaro ativas assim que o Memo contiver algum texto. Cada vez que ocorre uma mudana no Memo, o evento OnChange gerado. procedure TfrmBlocoNotas.memTextoChange(Sender: TObject); begin itmRecortar.Enabled:=True; itmCopiar.Enabled:=True; end; Os recursos de Recortar, Colar e Copiar utilizam o objeto TClipBoard. Com ele ns usamos a rea de transferncia do Windows e podemos trocar informao entre programas. O objeto Memo possui mtodos prprios para trabalhar com o Clipboard, eles esto nos procedimentos para os itens do menu Editar mostrados abaixo. procedure TfrmBlocoNotas.itmRecortarClick(Sender: TObject); begin memTexto.CutToClipboard; itmColar.Enabled:=True; {habilita o item Colar} end;

Celta Informtica - F: (11) 4331-1586

Pgina: 75

Delphi 6
procedure TfrmBlocoNotas.itmCopiarClick(Sender: TObject); begin memTexto.CopyToClipboard; itmColar.Enabled:=True; end; procedure TfrmBlocoNotas.itmColarClick(Sender: TObject); begin memTexto.PasteFromClipboard; end; As opes Negrito e Itlico, formataro o texto e mudaro tambm a propriedade Checked do item no menu, indicando que elas esto ativas. Os procedimentos associados negrito e itlico, trabalham junto com o procedimento Fonte que verificar o estado das opes alterando as propriedades da fonte do Memo. Inicie declarando o procedimento Fonte na seo de definio do tipo TfrmBlocoNotas - o formulrio. E com o cursor ainda na mesma linha, clique-direito e no menu escolha a opo Complete Class at Cursor ou pressione Ctrl+Shit+C, para o Delphi adicionar o esqueleto do procedimento na seo Implementation. procedure itmCopiarClick(Sender: TObject); procedure itmColarClick(Sender: TObject); procedure Fonte; private { Private declarations } public { Public declarations } end; Aps Ctrl+Shit+C, voc ter:

Celta Informtica - F: (11) 4331-1586

Pgina: 76

Delphi 6

Digite:
procedure TfrmBlocoNotas.Fonte; begin if not itmNegrito.Checked and not itmItalico.Checked then memTexto.Font.Style:= []; if itmNegrito.Checked and not itmItalico.Checked then memTexto.Font.Style:= [fsBold]; if not itmNegrito.Checked and itmItalico.Checked then memTexto.Font.Style:= [fsItalic]; if itmNegrito.Checked and itmItalico.Checked then memTexto.Font.Style:= [fsBold, fsItalic]; end; procedure TfrmBlocoNotas.itmNegritoClick(Sender: TObject); begin itmNegrito.Checked:= not itmNegrito.Checked; Fonte; end; procedure TfrmBlocoNotas.itmItalicoClick(Sender: TObject); begin itmItalico.Checked:= not itmItalico.Checked; Fonte; end;

Quando o usurio clicar na opo Sair do menu Arquivo, fechar o formulrio, e como este o nico formulrio do programa, a execuo dele ser finalizada. O formulrio fechado com o mtodo Close.

Celta Informtica - F: (11) 4331-1586

Pgina: 77

Delphi 6
procedure TfrmBlocoNotas.itmSairClick(Sender: TObject); begin Close; end;

Salve seu trabalho, e teste o programa pressionando F9. Ns j aprendemos a associar um cone ao projeto, agora iremos aprender a fazer um cone personalizado, utilizando o aplicativo Image Editor do Delphi. Para inicializ-lo, v at a opo Tools do menu principal do Delphi, e escolha Image Editor. Escolha a opo New do menu File, e IconFile.

Na janela de propriedades, escolha uma matriz de 32 x 32 pixels e 16 cores.

Celta Informtica - F: (11) 4331-1586

Pgina: 78

Delphi 6

Desenhe um cone semelhante ao da figura ao lado, utilizando recursos semelhantes ao programa Paint do Windows. A cor de fundo (verde) funciona como uma cor Cromaqui - transparente ao fundo.

Salve seu cone memorizando o nome completo incluindo o caminho. E feche o aplicativo Image Editor. O formulrio possui no canto superior esquerdo o cone padro do Delphi. Para trocar este cone pelo criado anteriormente, deveremos alterar a propriedade Icon do formulrio atribuindo a ela o cone que acabamos de desenhar.

Celta Informtica - F: (11) 4331-1586

Pgina: 79

Delphi 6

Use este cone para representar o Bloco de Notas no Windows, da mesma forma descrita para a Calculadora. Quando o usurio escolhe as opes Abrir e Salvar do menu, as caixas de dilogo Abrir e Salvar como so abertas aguardando uma entrada de dados. At agora neste exemplo estas caixas exibiam todo tipo de arquivo sem nenhum tipo de filtro. Porm ao observarmos os aplicativos desenvolvidos por outras pessoas notamos que estes dilogos possuem uma lista com o nome de Arquivos de tipo. Neste exemplo que estamos construindo, altere a propriedade Filter do OpenDialog deixando-a conforme a figura.

Celta Informtica - F: (11) 4331-1586

Pgina: 80

Delphi 6

Altere tambm a propriedade Filter do SaveDialog deixando-a igual primeira linha do OpenDialog. E a propriedade DefaultExt, que indica a extenso padro para o nome do arquivo que ser salvo caso o usurio no escolha nenhuma.

Celta Informtica - F: (11) 4331-1586

Pgina: 81

Delphi 6

EXEMPLO IV - RELGIO DESPERTADOR


Este projeto contm um outro componente no visvel - o TTimer. Este componente gera o evento OnTimer a intervalos regulares determinados em sua propriedade Interval. Esta propriedade esta expressa em milisegundos, ou seja, para que o evento OnTimer ocorra a cada segundo: Interval:=1000. Se Interval:=0 o Timer estar desativado. Devemos ter cuidado na programao do Timer, porque mesmo ele sendo capaz de gerar um evento a cada milisegundo, o procedimento que trata o evento pode demorar mais do que o valor de Interval, ocorrendo perda de algumas execues do procedimento ligado a ele, ou se Interval for muito pequeno pode ocorrer travamento do programa. Construa o formulrio como mostrado abaixo.

A propriedade Caption dos Label1 e Label2 dever estar em branco. No Label1, ser apresentada a hora do sistema, e em Label2 a data atual. O componente RadioGroup permite construir um grupo de botes de opo, utilizamos estes botes quando precisarmos selecionar opes mutuamente excludentes. S poder haver um boto de opo selecionado por vez, em cada grupo de botes ou no formulrio caso o boto esteja fora de algum grupo.

Celta Informtica - F: (11) 4331-1586

Pgina: 82

Delphi 6
As opes de escolha do RadioGroup esto na propriedade Items. Quando selecionamos esta propriedade, a janela String list editor mostrada, nela editamos os botes de opo do grupo. Entre com as duas opes, como mostrado a seguir.

Feito o formulrio, vamos digitar o cdigo para os eventos associados. Declare primeiro as variveis Ligado e Tecla. Ligado indicar qual boto de opo est selecionado, e Tecla armazenar um caractere digitado no teclado.

Celta Informtica - F: (11) 4331-1586

Pgina: 83

Delphi 6
implementation var Ligado: Boolean; Tecla: Char; {$R *.DFM}

Quando o formulrio for criado, o boto Desligado ser selecionado atravs da linha rdgControle.ItemIndex:= 0. A propriedade ItemIndex, indica qual boto do grupo est selecionado. Colocaremos a data do sistema em lblData (Label2) usando a funo FormatDateTime, de acordo com a tabela mostrada no projeto da Calculadora.
procedure TfrmRelogio.FormCreate(Sender: TObject); begin rdgControle.ItemIndex := 0; lblData.Caption:=FormatDateTime(dddd,dddemmmmdeyyy ,Date); {a funo Date retorna a data do sistema} end;

A propriedade ItemIndex do rdgControle ser igual a 1 se o boto Ligado for selecionado, e igual a 0, caso Desligado esteja selecionado.
procedure TfrmRelogio.rdgControleClick(Sender: TObject); begin if rdgControle.ItemIndex = 1 then Ligado:=True else Ligado:=False; end;

Quando o usurio digita algo em um quadro Edit, o ocorre evento KeyPress. No procedimento a seguir, realizada uma validao dos caracteres para definir a hora de acionamento do despertador. Caso no seja um caractere vlido, soado um alarme e este caractere excludo do Edit. O evento KeyPress envia para a procedure, o parmetro Key do tipo Char, sendo esta varivel verificada pelo programa.

Celta Informtica - F: (11) 4331-1586

Pgina: 84

Delphi 6
procedure TfrmRelogio.edtHoraKeyPress(Sender:TObject;var Key:Char); begin Tecla:=(Key); if ((Tecla < 0)or(Tecla > 9))and(Tecla <> :) then begin Beep; Key:=chr(0); {a funo chr(X:byte), retorna o caractere correspondente ao nmero X na tabela ASCII} end; end;

Quando o evento Timer ocorrer (no caso a cada segundo - Interval:=1000), ser feita uma verificao do contedo do edtHora e se o alarme est Ligado ou no. O Timer tambm atualiza a hora mostrada no lblHora (Label1). Se a hora que est no edtHora for menor ou igual a hora do sistema e a varivel Ligado verdadeira, o Beep soar.
procedure TfrmRelogio.TimerTimer(Sender: TObject); begin if (edtHora.Text <= TimeToStr(Time))and (Ligado) then begin Beep; Beep; end; lblHora.Caption:=TimeToStr(Time); end;

Celta Informtica - F: (11) 4331-1586

Pgina: 85

Delphi 6

MTODO GRFICO
Embora o uso dos mtodos grficos - que permitem desenhos de linhas, crculos e retngulos - sejam complexos, poder ser divertido e til para quem deseja sofisticar seus programas. A seguir, conheceremos alguns destes recursos atravs de exemplos simples. O Sistema de coordenadas do Delphi, possui o seu ponto de origem (0,0) no canto superior esquerdo da tela, ao contrrio do que ns estamos acostumados desde Descartes. A escala utilizada no Delphi o Pixel, que representa um ponto visvel na tela, de acordo com a resoluo do monitor. As funes e procedimentos para desenho, esto agrupadas em um objeto da classe TCanvas, o Delphi cria para ns um objeto deste tipo de nome Canvas. com este objeto que desenhamos na tela pois, a tela realmente um objeto da classe TCanvas. Desenho de Ponto Para desenhar um ponto usamos a propriedade Pixels, do objeto Canvas; Canvas.Pixels [x,y]:= cor; Onde: Canvas - o objeto do tipo TCanvas, declarado desta forma, o ponto ser desenhado na rea do cliente - Formulrio. x,y - coordenadas horizontal e vertical, respectivamente. Elas so absolutas, ou seja, a partir da origem. cor - especifica uma cor para o ponto. O exemplo abaixo desenha um ponto vermelho nas coordenadas (50,50) do formulrio com um clique no boto.

Celta Informtica - F: (11) 4331-1586

Pgina: 86

Delphi 6

CORES
O Delphi possui trs formas diferentes de atribuir valores para o parmetro cor de um objeto grfico, so elas: 1 - RGB - (NRed, NGreen, NBlue), onde NRed, NGreen e NBlue podem variar de 0 a 255. Ponto vermelho: Canvas.Pixels[x,y,]:= RGB(255,0,0); 2- $00bbggrr - onde bb, gg e rr variam em hexadecimal de 00 a FF. Ponto Amarelo: Canvas.Pixels[x,y]:= $0000FFFF;

Celta Informtica - F: (11) 4331-1586

Pgina: 87

Delphi 6
3 - Usando uma das constantes vlidas para o objeto TColor. Cores fixas :clAqua, clBlack, clBlue, clDkGray, clFuchsia, clGray, clGreen, clLime, clLtGray, clMaroon, clNavy, clOlive, clPurple, clRed, clSilver, clTeal, clWhite, e clYellow. Cores definidas pelo sistema: clActiveBorder, clActiveCaption, clAppWorkSpace, clBackground, clBtnFace, clBtnHighlight, clBtnShadow, clBtnText, clCaptionText, clGrayText, clHighlight, clHighlightText, clInactiveBorder, clInactiveCaption, clInactiveCaptionText, clMenu, clMenuText, clScrollBar, clWindow, clWindowFrame, e clWindowText. Exemplo: Ponto Azul - Canvas.Pixels[x,y]:= clBlue:

DESENHO DE LINHAS
Para desenhar no Delphi, usamos a propriedade Pen do objeto TCanvas, que nada mais que uma caneta invisvel. Podemos alterar o modo como esta caneta desenha em nossa tela. O Delphi indica a posio desta caneta atravs da propriedade PenPos. Uma linha desenhada utilizando-se os mtodos MoveTo e LineTo para mover a Pen (caneta). MoveTo posiciona a caneta em um determinado lugar no formulrio. LineTo traa uma linha, que vai da posio corrente (PenPos) at as coordenadas especificadas. Copie o procedimento abaixo, inserindo-o no mesmo formulrio do exemplo do ponto.
procedure TForm1.Button1Click(Sender: TObject); begin with Canvas do begin MoveTo(0,0); LineTo(100,ClientHeight); {ClienteHeight:=Altura da rea de cliente no formulrio} LineTo(200,50); end; end;

Celta Informtica - F: (11) 4331-1586

Pgina: 88

Delphi 6
Quando queremos alterar vrias propriedades ou mtodos de um mesmo objeto, ns no precisamos indicar o seu nome em todos as linhas, basta usarmos a instruo with ... do. Esta instruo significa que entre as palavras reservadas begin ... end, o uso do objeto ficar implcito para qualquer acesso a uma de suas propriedades ou mtodos.
Canvas.Pen.Style:= psDot; Canvas.Pen.Color:=clBlue;

ou
with Canvas.Pen do begin Style:= psDot; Color:=clBlue; end;

No exemplo acima, utilizamos este recurso com o objeto Canvas e seus mtodos MoveTo e LineTo. O tipo TCanvas usa como propriedades outros dois tipos de objetos: o TPen e TBrush. O TPen a nossa caneta, este tipo possui propriedades que modificam a forma das linhas a serem desenhadas, so elas: Color - define a cor da linha Width - define a espessura da linha - em pixels Style - determina o tipo de linha.

Modifique o exemplo anterior, como mostrado a seguir:


procedure TForm1.Button1Click(Sender: TObject); begin with Canvas do begin MoveTo(0,0); LineTo(100,ClientHeight); Pen.Color:=clBLue; LineTo (200,50); end; end;

Celta Informtica - F: (11) 4331-1586

Pgina: 89

Delphi 6
Note que a segunda linha desenhada da cor azul. Vamos montar exemplos que usem as outras duas propriedades - Width e Style.
procedure TForm1.Button1Click(Sender: TObject); var Estilo: array [0..6] of TPenStyle; i: Integer; SX: Integer; SY: Integer; begin Estilo[0]:= psSolid; Estilo[1]:= psDash; Estilo[2]:= psDot; Estilo[3]:= psDashDot; Estilo[4]:= psDashDotDot; Estilo[5]:= psClear; Estilo[6]:= psInsideFrame; SX := ClientWidth; SY := ClientHeight; with Canvas do begin SY:=Trunc(SY/8); {a procedure Trunc, transforma um valor do tipo Real em tipo Inteiro} for i:= 0 to 6 do begin Pen.Style:= Estilo[i]; MoveTo(0,(i*SY)+20); LineTo(SX,(i*SY)+20); end; end; end;

Comeamos declarando a matriz Estilo como do tipo TPenStyle. Nesta matriz sero armazenados todos os estilos da caneta. ClientWidth e ClientHeight, retornam um valor do tipo inteiro indicando o tamanho da rea do cliente no formulrio, quando este nmero dividido ele passa a ser um tipo Real, ento ns precisamos convert-los novamente em Inteiro para que os mtodos MoveTo e LineTo possam aproveit-los.

Celta Informtica - F: (11) 4331-1586

Pgina: 90

Delphi 6
Antes de executar o exemplo acima, altere a propriedade Color de Form1 para clWhite (Color:=clWhite) para uma visualizao melhor das linhas, teremos ento todos os estilos de linha desenhados no formulrio mostrado abaixo:

Altere o procedimento anterior, para serem mostradas as vrias espessuras de linha.


procedure TForm1.Button1Click(Sender: TObject); var i: Integer; SX: Integer; SY: Integer; begin SX := ClientWidth; SY := ClientHeight; with Canvas do begin SY:=Trunc(SY/8); {a procedure Trunc, transforma um valor do tipo Real em tipo Inteiro} for i:= 0 to 6 do begin Pen.Width:= i+1; MoveTo(0,(i*SY)+20); LineTo(SX,(i*SY)+20); end; end; end;

Celta Informtica - F: (11) 4331-1586

Pgina: 91

Delphi 6

DESENHO DE RETNGULOS
Para desenhar retngulos use o mtodo Rectangle do TCanvas. Como parmetros so utilizadas as coordenadas dos cantos superior esquerdo e inferior direito do retngulo. Canvas.Retangle (X1, Y1 , X2, Y2);

Digite o exemplo abaixo.


procedure TForm1.Button1Click(Sender: TObject); begin with Canvas do begin Rectangle (10,10,110,110); Rectangle (130,10,260,110); end; end;

Celta Informtica - F: (11) 4331-1586

Pgina: 92

Delphi 6

Observe que o desenho ficou por trs do boto, isto ocorre por que o boto est acima do formulrio e o desenho faz parte da tela do formulrio, o boto seria como uma borracha sobre um papel desenhado. Para preenchermos estes retngulos, usamos o tipo TBrush que como TPen, uma propriedade do TCanvas. As propriedades mais comuns do TBrush so: Color - define a cor do interior da figura Style - indica o padro de preenchimento As cores so as mesmas da Pen e os estilos so: bsSolid, bsClear, bsBDiagonal, bsFDiagonal, bsCross, bsDiagCross, bsHorizontal e bsVertical.

Faa o exemplo a seguir:


procedure TForm1.Button1Click(Sender: TObject); begin with Canvas do begin Brush.Style:=bsFDiagonal; Brush.Color:=clBlack; Rectangle (10,10,110,110); Brush.Color:=clRed; Brush.Style:=bsHorizontal; Rectangle (130,10,260,110); end; end;

Celta Informtica - F: (11) 4331-1586

Pgina: 93

Delphi 6

DESENHO DE ELIPSES
O desenho de elipses feito com o mtodo Ellipse. A elipse ou o crculo so desenhados usando-se as duas coordenadas de um retngulo delimitador - imaginrio - onde a figura estar inscrita. Faa o exemplo a seguir.
procedure TForm1.Button1Click(Sender: TObject); begin with Canvas do begin Rectangle(10,40,80,100); Ellipse (10,40,80,100); Ellipse (90,50,250,90); Brush.Style:=bsSolid; Brush.Color:=clGreen; Ellipse (153,53,187,87); Brush.Color:=clWhite; Ellipse (168,55,173,85); end; end;

Celta Informtica - F: (11) 4331-1586

Pgina: 94

Delphi 6 FIGURAS
O Delphi permite a incluso de figuras no formulrio atravs do objeto Image ( ), onde poderemos carregar arquivos dos tipos EMF, WMF,

BMP ou ICO. As figuras so vistas como valores da propriedade Picture do controle Image. Podemos atribuir um valor para esta propriedade em tempo de projeto, ou utilizar a procedure LoadFromFile para carregar um arquivo de imagem durante a execuo do programa. Construiremos agora um projeto que ir carregar sucessivas figuras em um controle Image a cada clique em um boto.

Abra o programa Paint do Windows e desenhe quatro figuras semelhantes s mostradas abaixo, salvando-as com os nomes indicados.

Estas figuras daro a impresso de movimento da luz.

Celta Informtica - F: (11) 4331-1586

Pgina: 95

Delphi 6
Para o cdigo do boto utilizaremos a estrutura case...of. O Delphi possui modelos de cdigo (code templates) caso o programador no se lembre da sintaxe exata de determinada estrutura, estes modelos podem ser editados ou adicionados novos modelos. Para ativar o code template, pressione Ctrl+J para exibir uma lista com os cdigos permitidos. Entre com o cdigo a seguir para o boto at o ponto indicado, pressione Ctrl+J e escolha case statement na lista.

Celta Informtica - F: (11) 4331-1586

Pgina: 96

Delphi 6
Complete o cdigo seguindo a listagem a seguir.
implementation var sinal:Integer; {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin with Image do begin case Sinal of 0:begin picture.loadfromfile (c:\...\frame1.bmp); sinal:=1; end; 1:begin picture.loadfromfile (c:\...\frame2.bmp); sinal:=2; end; 2:begin picture.loadfromfile (c:\...\frame3.bmp); sinal:=3; end; 3:begin picture.loadfromfile (c:\...\frame4.bmp); sinal:=0; end; end; {case} end; {with} end; {procedure} procedure TForm1.FormCreate(Sender: TObject); begin Sinal:=1; Image.Picture.LoadFromFile (c:\...\frame1.bmp); end;

Celta Informtica - F: (11) 4331-1586

Pgina: 97

Delphi 6
Executando o programa:

Ao invs de cada figura ser carregada do disco quando necessitarmos, poderemos incluir todas de uma s vez no aplicativo. Vamos ento alterar o programa anterior copiando o controle Image e colando trs cpias dele no formulrio, todos na mesma posio. Incluindo tambm um controle Timer para que a mudana entre as figuras ocorra automaticamente.

Altere a propriedade Enabled:=False do Timer. E para os controle Image, Visible:=False e na propriedade Picture carregue as figuras utilizadas anteriormente - Frame1.bmp a Frame4.bmp.

Digite o cdigo a seguir:


procedure TForm1.ButtonClick(Sender: TObject); begin if Button.caption=&Parar then begin Button.caption:=&Automtico; Timer.enabled:=False;

Celta Informtica - F: (11) 4331-1586

Pgina: 98

exit; {sai da procedure, sem executar as linhas seguintes} end; Timer.enabled:=True; Button.caption:=&Parar; end;

procedure TForm1.TimerTimer(Sender: TObject); begin case Sinal of 0:begin Image1.Visible:=True; Image4.Visible:=False; Sinal:=1; end; 1:begin Image2.Visible:=True; Image1.Visible:=False; Sinal:=2; end; 2:begin Image3.Visible:=True; Image2.Visible:=False; Sinal:=3; end; 3:begin Image4.Visible:=True; Image3.Visible:=False; Sinal:=0; end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin Sinal:=1; Image1.Visible:=True; end;

Como prximo passo vamos incluir um controle ScrollBar ( ir controlar a variao da propriedade Interval do Timer.

) que

Delphi 6
Altere as propriedades da ScrollBar de acordo com a figura a seguir:

Onde: Kind - especifica se a scrollbar ser horizontal ou vertical. LargeChange - determina o quanto muda a posio quando o usurio clica a barra de rolagem em um de seus lados. Max - especifica o valor mximo da posio. Min - especifica o valor mnimo da posio. SmallChange - determina o quanto muda a posio quando o usurio clica nas setas da barra de rolagem. Digite a procedure a seguir para o evento OnChange da ScrollBar, que ocorre quando o usurio muda a posio da barra de rolagem.
procedure TForm1.ScrollBarChange(Sender: TObject); begin Timer.interval:=ScrollBar.position; {A propriedade position contm o valor da posio da barra de rolagem, e varia entre 100 e 1000 neste exemplo.} end;

Celta Informtica - F: (11) 4331-1586

Pgina: 100

Delphi 6

EXEMPLO V - CATLOGO
Neste projeto de catlogo telefnico, trabalharemos com acesso a arquivos do tipo aleatrio. Ele ser constitudo por trs Units e dois Formulrios. Duas Units sero associadas aos formulrios e a outra Unit conter apenas cdigos de acesso ao disco (HD) sem estar associada a nenhum formulrio. Inicie um novo projeto e crie o formulrio, inserindo e modificando as propriedades dos objetos, como a figura abaixo.

Altere a propriedade Filter do controle SaveDialog, para salvar o catlogo no formato de arquivos binrios (.dat)

Celta Informtica - F: (11) 4331-1586

Pgina: 101

Delphi 6
D um clique-duplo no controle MainMenu para editar o menu, conforme o exemplo.

Deveremos inserir um novo formulrio ao nosso projeto que ser utilizado para selecionar um determinado registro do arquivo de dados. Para inserir um novo formulrio ao projeto, escolha a opo New Form do menu File ou clique no boto New Form ( ) na barra de ferramentas. Monte este novo formulrio como mostrado abaixo.

Este novo formulrio ir apresentar ao usurio os nomes de pessoas registros no arquivo - contidos no catlogo atravs do componente ComboBox (caixa combinada). O ComboBox, um controle de edio associado uma lista contendo itens disponveis para a escolha do usurio. O usurio poder tanto digitar uma opo no quadro de edio, quanto escolher uma opo fornecida pela lista associada.

Celta Informtica - F: (11) 4331-1586

Pgina: 102

Delphi 6
A propriedade Style, determina o tipo de ComboBox que iremos trabalhar, que pode ser: csDropDown - Cria uma lista drop-down com uma caixa de texto, para entrada de texto manualmente. Todos itens so strings de qualquer comprimento. CsSimple - Cria uma caixa de texto associada a uma caixa de lista suspensa. Esta lista no aparecer em tempo de execuo a menos que o ComboBox seja dimensionado para acomod-la. CsDropDownList - Cria uma lista drop-down com uma caixa de texto, mas o usurio no poder entrar com texto manualmente. csOwnerDrawFixed - Cria uma lista drop-down com uma caixa de texto, para entrada de texto manualmente. Mas cada item do ComboBox ter seu comprimento em caracteres determinado pela propriedade ItemHeight. CsOwnerDrawVariable - Cria uma lista drop-down com uma caixa de texto, para entrada de texto manualmente. Os itens neste ComboBox podem ter comprimento varivel. Vamos alterar a propriedade Style do combobox para csDropDownList, pois no queremos que o usurio altere o contedo do combo. Evitando que o usurio entre com um nome de pessoa inexistente.

Celta Informtica - F: (11) 4331-1586

Pgina: 103

Delphi 6 INSERINDO UMA NOVA UNIDADE


Uma Unit pode estar vinculada a um formulrio ou no, ns iremos criar uma Unit no vinculada a nenhum formulrio. Escolha a opo New... do menu File ou o boto New ( ) na barra de ferramentas e aparecer a janela New Itens, escolha Unit.

O Delphi criar uma nova Unit no vinculada a nenhum formulrio, j com o cabealho pronto. Onde iremos digitar as rotinas de acesso ao disco.

Celta Informtica - F: (11) 4331-1586

Pgina: 104

Delphi 6 TIPOS DE DADOS


No Delphi ns podemos criar nossos prprios tipos de dados, para fazer isto, declare o seu tipo de dado dentro de um bloco Type, antes do bloco de definio de variveis Var: type TMeusValores = ShortInt; var Venda, Custo : TMeusValores; interessante definir um tipo de varivel, porque quando tivermos uma famlia de variveis relacionadas e for necessrio mudar o tipo de todas elas, basta alterar a declarao de definio de tipo destas variveis: type TMeusValores = LongInt; Venda e Custo eram variveis ShortInt, aps a nova definio passam a ser LongInt.

REGISTROS
Para armazenar os dados de uma pessoa (Nome, Endereo e Telefone), usamos um registro. Registro um tipo de dado que rene alguns itens de tipos diferentes, nosso tipo registro ter o nome de TPessoasReg. Em um projeto podem existir vrias variveis do tipo TPessoasReg. Declare o novo tipo na seo Interface da nova Unit (DiscoUnt - nome salvo em disco).
unit DiscoUnt; interface type {registro com dados pessoais} TPessoasReg=record CNome: string[30]; CTelefone: string[15]; CEndereco: string[40]; end;

Celta Informtica - F: (11) 4331-1586

Pgina: 105

Delphi 6
TPessoas = file of TPessoasReg; var PesArq: TPessoas;

O Delphi possui um tipo denominado arquivo, que permite escrever e ler arquivos em disco. Para declarar um tipo arquivo, associamos o nome da varivel a um tipo de dado previamente existente. No nosso caso: TPessoasReg. Na listagem acima definimos alm do tipo TPessoasReg, o tipo TPessoas, definindo-o como um tipo de arquivo formado por registros do tipo TPessoasReg. Os campos so declarados como String de tamanhos fixos pois, caso no fossem declarados os tamanhos, eles iriam ocupar o espao de 255 Bytes. Logo aps, informamos ao Delphi que existe um tipo de arquivo composto por esse registro, e tambm declaramos uma varivel do tipo desse arquivo de registros, essa varivel conter o nome do arquivo aberto em disco. Algumas procedures e functions, precisam de parmetros para trabalharem, ns declaramos esses parmetros no cabealho da procedure, indicando um nome de referncia, o seu tipo de dado e o prefixo var. Primeiro declaramos as procedures na seo Interface e depois implementamos na seo Implementation.
procedure AbrirArq(var A:TPessoas; var NomeArq:string; var N:boolean); procedure FecharArq(var A:TPessoas); procedure GravarArq(var A:TPessoas;var RegN:integer; var Reg:TPessoasReg); procedure LerArq(var A:TPessoas;var RegN:integer; var Reg:TPessoasReg);

Celta Informtica - F: (11) 4331-1586

Pgina: 106

Delphi 6
implementation procedure AbrirArq(var A:TPessoas; var NomeArq:string; var N:boolean); begin Assign (A, NomeArq); if N then Rewrite (A) else Reset (A); end; procedure FecharArq (var A:TPessoas); begin Close (A); end; procedure GravarArq (var A:TPessoas; var RegN:integer; var Reg:TPessoasReg); begin Seek (A,RegN); Write (A,Reg); end; procedure LerArq (var A:TPessoas; var RegN:integer; var Reg:TPessoasReg); begin Seek (A,RegN); Read (A,Reg); end; end.

Antes de abrir um arquivo para leitura e gravao, ns temos que associlo a uma varivel do mesmo tipo dos registros contidos no arquivo em disco. Para isso usamos a procedure Assign. Assign diz ao Delphi que todas as operaes com a varivel tero ligao com um arquivo em particular. Assign(varivel, nome do arquivo);

Celta Informtica - F: (11) 4331-1586

Pgina: 107

Delphi 6
Aps a associao, abrimos o arquivo com uma das seguintes formas: 1) Reset - abre um arquivo existente para leitura ou gravao. 2) Rewrite - abre um arquivo novo para leitura ou gravao. Caso j exista o arquivo, todos os dados anteriores sero perdidos. Reset(nome do arquivo) Rewrite(nome do arquivo) Para gravar ou ler um registro, usamos as funes Write e Read, informando a varivel do arquivo e em qual varivel estar ou conter o registro. Write(varivel arquivo,varivel registro) Read(varivel arquivo,varivel registro)

PONTEIRO DE REGISTROS
O ponteiro do arquivo indica qual registro ser afetado com a prxima operao de leitura ou gravao. Sempre que um arquivo aberto, o ponteiro posicionado no incio do arquivo. Cada operao de leitura ou gravao, move o ponteiro um registro frente. Ou seja, se o registro 3 for lido, o ponteiro estar apontando para o registro 4, e a prxima operao ser realizada com o registro 4. Para acessar um registro aleatoriamente, usamos a procedure Seek. Esta procedure posiciona o ponteiro no registro que quisermos, antes de uma leitura ou gravao. Seek(varivel arquivo,nmero registro) Os registros em um arquivo so numerados seqencialmente a partir do registro 0. Existem mais duas funes teis para manipulao de arquivos, FileSize e FilePos. A primeira indica quantos registros o arquivo tem, e a segunda indica a posio do ponteiro. Para ligarmos as Units, devemos colocar o nome das Units acessadas na seo uses. Uma vez declarada uma unidade na seo uses de outra unidade, voc poder referenciar qualquer coisa na seo de interface da unidade nomeada. Feita esta ligao, poderemos acessar as variveis e procedures da outra unidade.

Celta Informtica - F: (11) 4331-1586

Pgina: 108

Delphi 6
O formulrio frmCatalogo (CatalogoUnt), ter acesso aos procedimentos das unidades ProcurarUnt e DiscoUnt. Ento, declare estas duas unidades logo aps as unidades j colocadas pelo Delphi.

unit CatalogoUnt; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, ProcurarUnt,DiscoUnt;

Declare as variveis utilizadas na unidade CatalogoUnt, como mostrado abaixo.


private { Private declarations } strArqNovo,strArqAtual: string; bolNovo,bolArquivoAberto: boolean; {Prefixos str= varivel string bol=varivel boolena} public { Public declarations } end;

Comece a implementao dos procedimentos associados aos objetos e seus eventos, seguindo as listagens abaixo.
procedure TfrmCatalogo.itmNovoClick(Sender: TObject); begin edtNome.Text:=; edtTelefone.Text:=; edtEndereco.Text:=; bolNovo:=True; strArqNovo:=Temp.dat; strArqAtual:= strArqNovo; DiscoUnt.AbrirArq (PesArq, strArqNovo, bolNovo); {Executa procedimento na unidade DiscoUnt} bolArquivoAberto:=True; end;

Celta Informtica - F: (11) 4331-1586

Pgina: 109

Delphi 6
procedure TfrmCatalogo.itmAbrirClick(Sender: TObject); begin edtNome.Text:=; edtTelefone.Text:=; edtEndereco.Text:=; if OpenDialog.Execute then begin strArqAtual:=OpenDialog.Filename; bolNovo:=False; DiscoUnt.AbrirArq (PesArq, strArqAtual, bolNovo) end else Exit; bolArquivoAberto:=True; end;

Para se referir a um procedimento em outra unidade, ns informamos primeiro o nome da unidade e depois o nome do procedimento: DiscoUnt.AbrirArq(...);.
procedure TfrmCatalogo.btnNovoClick(Sender: TObject); var Reg: DiscoUnt.TPessoasReg; intRegN: Integer; begin edtNome.SetFocus; if not bolArquivoAberto then begin ShowMessage (Abra primeiro um arquivo); exit; end; if btnNovo.Caption=&Novo then begin edtNome.Text:=; edtTelefone.Text:=; edtEndereco.Text:=; btnNovo.Caption:=A&dicionar; end else begin with Reg do begin CNome:=edtNome.Text; CTelefone:=edtTelefone.Text;

Celta Informtica - F: (11) 4331-1586

Pgina: 110

Delphi 6
CEndereco:=edtEndereco.Text; end; frmProcurar.cbxLista.Items.Add (edtNome.Text); intRegN:= FileSize(PesArq); DiscoUnt.GravarArq (PesArq, intRegN, Reg); btnNovo.Caption:=&Novo; end; end; procedure TfrmCatalogo.btnAtualizarClick(Sender: TObject); var Reg : TPessoasReg; intRegN :integer; begin with Reg do begin CNome:=edtNome.Text; CTelefone:=edtTelefone.Text; CEndereco:=edtEndereco.Text; end; frmProcurar.cbxLista.Items.Add (edtNome.Text); intRegN:= FilePos(PesArq)-1; DiscoUnt.GravarArq (PesArq, intRegN, Reg); end; procedure TfrmCatalogo.FormCreate(Sender: TObject); begin bolArquivoAberto:=False; end; procedure TfrmCatalogo.itmSalvarClick(Sender: TObject); begin if SaveDialog.Execute then begin strArqNovo:=SaveDialog.Filename; DiscoUnt.FecharArq (PesArq); RenameFile(strArqAtual,strArqNovo); {a funo RenameFile,renomeia um arquivo} bolNovo:=False; DiscoUnt.AbrirArq (PesArq, strArqNovo, bolNovo); end; end;

Celta Informtica - F: (11) 4331-1586

Pgina: 111

Delphi 6
procedure TfrmCatalogo.btnProcurarClick(Sender: TObject); begin frmProcurar.ShowModal; end;

Para mostrar outro formulrio, usamos o mtodo Show ou ShowModal. Show abre uma janela que pode ser alternada entre outras janelas do aplicativo, enquanto ShowModal no aceita uma troca da janela ativa. Com ShowModal o usurio s poder ir para outra janela, aps ter fechado a janela Modal. Comece a construo do cdigo para o formulrio frmProcurar, informando ao Delphi que ela ir acessar a unidade DiscoUnt.
unit ProcurarUnt; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,DiscoUnt;

Declare as variveis intReN e Reg.


private { Private declarations } intRegN: Integer; Reg: TPessoasReg;

Siga a listagem abaixo para os eventos associados.


procedure TfrmProcurar.FormActivate(Sender: TObject); begin cbxLista.Clear; {limpa o contedo do ComboBox} Seek (PesArq,0); while Not Eof (PesArq) do {enquanto no chegar ao final do arquivo, faa} begin Read(PesArq,Reg); cbxLista.Items.Add (Reg.CNome); end; end;

Celta Informtica - F: (11) 4331-1586

Pgina: 112

Delphi 6
procedure TfrmProcurar.btnCancelarClick(Sender: TObject); begin Close; end;

procedure TfrmProcurar.btnOkClick(Sender: TObject); begin intRegN:=cbxLista.ItemIndex; DiscoUnt.LerArq (PesArq,intRegN,Reg); with frmCatalogo do begin edtNome.Text:=Reg.CNome; edtEndereco.Text:=Reg.CEndereco; edtTelefone.Text:=Reg.CTelefone; end; Close; end;

Para preencher um quadro combo com dados, temos duas possibilidades: 1) Usar o mtodo Add para a sua propriedade Items. Em tempo de execuo. 2) Editar a propriedade Items em tempo de projeto. Por fim, declare a unidade CatalagoUnt na seo Implementation. Porque a unidade ProcurarUnt tambm se referencia CatalogoUnt, mas se CatalogoUnt for declarada na seo uses da interface, o Delphi gerar um erro de referncia circular.

implementation uses CatalogoUnt; {$R *.DFM}

Salve, execute e teste o programa.

Celta Informtica - F: (11) 4331-1586

Pgina: 113

Delphi 6

BANCO DE DADOS SIMPLES


Um banco de dados pode ser definido como um conjunto unificado de informaes compartilhadas por pessoas autorizadas de uma organizao. A funo de um Banco de Dados permitir o armazenamento e a recuperao de informaes necessrias para as pessoas da organizao tomarem decises. Um Banco de Dados formado por um conjunto de arquivos de dados, tambm chamados de tabelas. Em uma tabela temos, linhas e colunas. Onde uma linha contm informaes a respeito de um item em particular, e a coluna possui uma parte das informaes de uma linha. A seguir mostrada uma tabela de Clientes.

C digo 001 002 005 012 015

Nome Aldair Marina Aline Jos Mrcio

Telefone 554-8788 879-9687 572-2258 7070-858 446-3987

A tabela mostrada acima possui os campos ou colunas: Cdigo, Nome e Telefone. E em cada linha temos a identificao de um cliente em particular. Cada tabela em um banco de dados possui um campo que identifica unicamente cada registro. O conjunto de atributos ou campos utilizados para gerar este ndice conhecido como chave primria. Ns podemos escolher qualquer campo de uma tabela para ser uma chave primria, sempre levando em considerao que ela deva ser curta. Por exemplo, usar um campo numrico melhor do que um campo formado por strings. Como a chave primria determina a singularidade de um registro, quando se usa um string no poderemos ter dois registros com o mesmo nome de cliente. Na tabela do exemplo acima, o mais sensato determinar o campo Cdigo como chave primria dela. Alm de determinar os campos e a chave primria da tabela, tambm teremos que definir o tipo de dado, comprimento, formato e o domnio para cada campo desta tabela.

Celta Informtica - F: (11) 4331-1586

Pgina: 114

Delphi 6
Tipo de Dado: refere-se ao contedo do dado, podendo ser numrico, alfabtico, data, hora ou cadeia de caracteres longa ou curta. Comprimento: refere-se ao tamanho ou nmero mximo de posies que poder assumir o valor ou contedo de cada dado. Formato: refere-se forma com que os dados devero ser editados ou apresentados, definindo-se as posies de smbolos. Domnio: especifica se os valores dos dados pertencem a uma lista de valores predefinidos, podendo estar em uma lista, ou satisfazer uma regra.

DATABASE DESKTOP
No grupo de programas do Delphi, encontramos o utilitrio Database Desktop, que permite a criao e manipulao de banco de dados de diversos formatos. O nosso prximo exemplo, trabalhar duas tabelas. Uma com o cadastro dos clientes e outra com as vendas realizadas para estes clientes. Execute o Database Desktop, selecionando a opo Database Desktop no menu Tools.

Celta Informtica - F: (11) 4331-1586

Pgina: 115

Delphi 6
Abra uma nova tabela como mostra a figura:

Escolha o tipo Paradox 7. Aparecendo ento a caixa de dilogo Create Paradox 7 Table.

Digite o nome para o primeiro campo (Codigo) e mude para tipo de campo (Type) usando a tecla Tab. Com o campo Type selecionado, de um clique-direito nele, para exibir o menu pop-up com todos os valores para o tipo de campo. As letras sublinhadas correspondem letra de atalho para cada tipo de dado. O campo CODIGO ser definido como tipo Alpha. Apesar de ser um campo com nmeros ns no iremos realizar nenhum clculo matemtico com ele, por isso o definimos como Alpha.

Celta Informtica - F: (11) 4331-1586

Pgina: 116

Delphi 6

O campo Codigo ser a chave primria para a identificao dos clientes na tabela Clientes. Para definir um campo como chave primria, pressione qualquer tecla quando o campo Key estiver selecionado, marcando este campo com um * - asterisco.

Celta Informtica - F: (11) 4331-1586

Pgina: 117

Delphi 6
D continuidade entra dos outros campos, seguindo o modelo apresentado abaixo.

Salve esta tabela como Clientes.db.

Celta Informtica - F: (11) 4331-1586

Pgina: 118

Delphi 6
Logo aps, monte uma nova tabela Paradox7 de acordo com a figura, salvando-a como Vendas.db.

Para a tabela Vendas relacionar-se com a tabela Clientes, deveremos definir o campo Codigo como ndice secundrio na tabela Vendas. No ComboBox Table properties, selecione a opo Secondary Indexes e clique no boto Define..., aparecendo a caixa de dilogo Define Secondary Index. No dilogo Define Secondary Index, selecione o campo Codigo e d um clique na seta para introduzi-lo como campo ndice, e finalmente d um clique no boto OK para aceitar a opo. Ser ento solicitado um nome para este ndice, digite ICodigo.

Celta Informtica - F: (11) 4331-1586

Pgina: 119

Delphi 6

Salve novamente a tabela e saia do Database Desktop, atravs do menu File >> Exit. O Delphi possui um assistente para a construo de formulrios de acesso a Banco de Dados (Form Wizard), ns iremos utiliz-lo para construir o projeto de banco de dados que utiliza as tabelas de Clientes e Vendas montadas anteriormente. Volte ao Delphi, e exclua o formulrio Form1 que o Delphi cria junto com um novo projeto. No menu Project, escolha a opo Remove from Project..., ou o boto ( ) na barra de ferramentas, e exclua Form1 no salvando o arquivo. Pois o Form Wizard criar um novo formulrio automaticamente.

Celta Informtica - F: (11) 4331-1586

Pgina: 120

Delphi 6

Excludo o formulrio, inicie o wizard a partir do menu Database >> Form Wizard... do menu. O Database Form Wizard um assistente para a criao de Formulrios envolvendo banco de dados. Este assistente ajudar na definio dos campos a serem mostrados e o layout do formulrio, alm de incluir um componente DBNavigator, que ser usado para a navegao entre os registros das tabelas. DBNavigator

O primeiro formulrio ter duas divises, uma para cada tabela. A primeira conter os dados relativos a um cliente, e a segunda as compras realizadas por este cliente. Inicie o Form Wizard, seguindo as opes mostradas nas figuras a seguir; pressionando o boto Next para continuar com o assistente.

Celta Informtica - F: (11) 4331-1586

Pgina: 121

Delphi 6

Estas opes criam um formulrio com duas divises, usando componentes TTable. Um componente TTable realiza a conexo entre o formulrio e uma tabela do banco de dados. Ele um componente visvel somente em tempo de projeto - semelhante ao componente TTimer. Inclua a tabela Clientes.db, como sendo a master query. Ou seja, a tabela que ir comandar a apresentao dos dados.

Celta Informtica - F: (11) 4331-1586

Pgina: 122

Delphi 6
Clique no boto >> para incluir todos os campos da tabela Clientes.db no formulrio.

A opo Vertical posiciona os campos dentro do formulrio, um acima do outro.

Celta Informtica - F: (11) 4331-1586

Pgina: 123

Delphi 6
Alinhamento Left, posiciona as legendas ao lado esquerdo dos quadros de Edit.

Defina a tabela Vendas.db como a tabela de detalhes.

Inclua todos os campos da tabela Vendas, e a seguir, escolha o formato Grid para a apresentao da tabela Vendas.

Celta Informtica - F: (11) 4331-1586

Pgina: 124

Delphi 6

Selecione os campos que faro a ligao entre as duas tabelas, escolhendo ICodigo como ndice. Em Detail Fields e Master Fields, selecione o campo Codigo como campo de juno em ambas as tabelas e pressione Add. Como mostrado a seguir.

Celta Informtica - F: (11) 4331-1586

Pgina: 125

Delphi 6
Aps o clique em Add, clique no boto Next. A seguir finalize a execuo do Form Expert com a criao de apenas um formulrio.

Celta Informtica - F: (11) 4331-1586

Pgina: 126

Delphi 6
Vamos agora, alterar as propriedades de alguns componentes do formulrio. Comece alterando o tamanho do Panel3, alterando antes sua propriedade Align para alBottom, a fim de visualizar todos os dados dos clientes. E redesenhe o formulrio como a figura abaixo.

Para formatar a entrada de dados, ou seja, definir o formato do dado, para a tabela Clientes.db, d um duplo-clique em Table1 para acessar o editor de campos (fields edit). Selecione o campo CEP e no Object Inspector, procure a propriedade Edit Mask. Esta propriedade abre o quadro de dilogo Input Mask Editor onde poderemos escolher uma mscara para o campo CEP, escolha Long Zip Code e na caixa Input Mask elimine um dgito 9 da segunda parte da mscara, como mostram as figuras a seguir.

Celta Informtica - F: (11) 4331-1586

Pgina: 127

Delphi 6

Altere tambm a propriedade EditMask do campo Telefone, escolhendo a mscara Phone e adicionando um nmero 9 na primeira parte do nmero telefnico. Feche a Input Mask Edit. Selecione o campo Codigo em Table2 , e mude a propriedade Visible:=False, para no aparecer o cdigo do cliente no componente DBGrid, pois ele j ser exibido por um componente Edit. Selecione o EditEstado e altere a propriedade Charcase:=ecUpperCase, para que os caracteres neste TEdit sejam apresentados em maiscula. Insira um boto BitBtn no Formulrio com as seguintes definies de propriedades: Caption:=Sai&r Kind:=bkCLose

Celta Informtica - F: (11) 4331-1586

Pgina: 128

Delphi 6
A propriedade Kind do BitBtn determina qual desenho ser mostrado na face do boto. Esta propriedade tambm implementa algumas funes ao boto eliminando linhas de cdigo, neste caso no ser necessrio nenhuma linha de cdigo para fechar o formulrio. Finalmente, mude a propriedade Active dos dois componentes TTable (Table1 Table2) de False para True. Isto tornar o Table ativo tanto em tempo de projeto quanto em tempo de execuo. Ao ativarmos o Table, os controles TEdit mudaro seu contedo, passando a exibir o primeiro registro da tabela a eles ligada. D o nome de frmClientes ao Formulrio e salve como ClientesUnt.pas.

O prximo formulrio ser construdo manualmente, sem o uso do Form Wizard. No utilizaremos o Form Wizard por questes didticas, mas este novo formulrio tambm poderia ser construdo utilizando o assistente. Este segundo formulrio servir para cadastrar vendas. O usurio selecionar um nome de cliente j cadastrado, a partir de um quadro combo, digitar a data da venda e escolher um produto, atravs de botes de opo, definindo tambm a quantidade de itens de um mesmo produto e o valor total da venda.

Celta Informtica - F: (11) 4331-1586

Pgina: 129

Delphi 6
Insira um novo formulrio ao projeto a partir do menu File >> New Form ou clique no boto New Form ( ). Monte este novo formulrio utilizando os componentes da paleta Data Controls mostrados na figura a seguir.

Altere as propriedades indicadas na tabela a seguir para alguns componentes.


Componente T able1 Propriedade DatabaseName TableName Name Active DataSet Name DatabaseName TableName Name Active DataSet Name DataSource Name Valor C:\Banco dados Vendas.db tblVendas True tblVendas dsrVendas C:\Banco dados Clientes.db tblClientes True tblClientes dsrClientes dsrVendas navVendas

DataSource1 T able2

DataSource2 DbNavigator

Celta Informtica - F: (11) 4331-1586

Pgina: 130

Delphi 6
Selecione todos os DBEdit, dando um clique em cada um enquanto pressiona a tecla Shift, e altere a propriedade DataSource de todos ao mesmo tempo para dsrVendas. Depois selecione um por vez e altere a propriedade DataField correspondente a cada DBEdit. D um duplo-clique em tblVendas para editar o campo Data. Repare que a janela Fields Editor aparece vazia sem nenhum campo listado. Clique-direito no Fields Editor e escolha a opo Add Fields..., selecione todos os campos e pressione Ok, para inserir todos os campos da tabela Vendas.db no Fields Editor.

Voltando ao Fields Edit, selecione o campo DATA e altere o formato da propriedade EditMask para Date. Aps a insero de todos os campos da tabela Vendas no componente tblVendas, as propriedades destes campos podem ser acessadas diretamente atravs do Object Inspector. Como ilustra a figura ao lado.

Celta Informtica - F: (11) 4331-1586

Pgina: 131

Delphi 6
O componente DbLookupComboBox, exibe os valores de um campo em uma lista, onde o usurio poder escolher um valor para este campo. Os valores exibidos pertencem a uma tabela e quando o usurio fizer uma escolha, o valor escolhido ser vinculado a uma outra tabela. No formulrio Vendas, o nome do cliente vir da tabela Clientes e quando inserirmos a venda, o nome do cliente escolhido ser vinculado a esta venda na tabela Vendas atravs da chave primria Codigo. Portanto o DbLookupComboBox trabalha com duas tabela simultaneamente, uma que fornece os dados para a lista e outra que est associada ao DbLookupComboBox. A tabela abaixo explica as propriedades relativas a esta vinculao.

Propriedade
DataSource DataField ListSource KeyField ListField combo.

Uso
Indica qual tabela associada. Indica o campo associado. Determina a tabela que fornecer os dados para a lista. Indica qual o campo da tabela acima ser usado como vnculo. Indica qual campo ser mostrado na lista do quadro

Siga a tabela abaixo para determinar as propriedades do DbLookupComboBox.

Propriedade
Data Source Data Field ListSource KeyField ListField

Valor
dsrVendas Codigo dsrClientes Codigo NOME

A lista de clientes ser vinculada atravs do campo Codigo mas estar exibindo ao usurio, o campo Nome. O componente DBRadioGroup apresenta uma s rie de op es predefinidas a serem selecionadas pelo usurio, contendo um boto para cada opo. Estas opes so determinadas pela propriedade Items.

Celta Informtica - F: (11) 4331-1586

Pgina: 132

Delphi 6
O valor do campo na tabela associada ao DBRadioGroup, ser o mesmo valor do boto selecionado. Selecione o DBRadioGroup e edite a propriedade Items, configurando trs opo para produtos vendidos, de acordo com o modelo a seguir.

Altere outras propriedades DBRadioGroup conforme a tabela mostrada abaixo:

Propriedade
DataSource DataField Columns Caption

Valor
dsrVendas Produto 3 vazia

Salve o formulrio com o nome de VendasUnt.Pas. A sua forma final mostrado abaixo.

Celta Informtica - F: (11) 4331-1586

Pgina: 133

Delphi 6

O prximo formulrio ser a abertura do programa. A partir dele sero chamados os dois formulrios construdos anteriormente. Acrescente um formulrio vazio ao projeto e construa-o da seguinte forma:

A propriedade Hint dos SpeedButtons, contm o texto que ser mostrado quando o mouse ficar parado por alguns instantes sobre o boto. Define ShowHint:=True, para ativar esta funo.

Celta Informtica - F: (11) 4331-1586

Pgina: 134

Delphi 6
Os dois controles DBNavigator tambm possuem a propriedade Hint, defina para eles ShowHint:=True e altere o texto que ser mostrado ao usurio modificando a propriedade Hints.

Com isto conclumos a construo da interface grfica com o usurio. Temos ento no projeto trs formulrios: frmControle, frmClientes e frmVendas. Salvos em suas respectivas unidade: ControleUnt, ClientesUnt e VendasUnt. Comearemos o cdigo pelo frmControle.
implementation uses VendasUnt, ClientesUnt; {$R *.DFM} procedure TfrmControle.spbSairClick(Sender: TObject); begin Close; end; procedure TfrmControle.spbVendasClick(Sender: TObject); begin frmVendas.Show; end;

Celta Informtica - F: (11) 4331-1586

Pgina: 135

Delphi 6
procedure TfrmControle.spbClientesClick(Sender: TObject); begin frmClientes.Show; end;

Cdigo para frmVendas.


procedure TfrmVenda.btnSairClick(Sender: TObject); begin frmVenda.Hide; {o mtodo Hide esconde o Formulrio, mas no o elimine da memria, enquanto que o mtodo Close retira o formulrio da memria } end;

Cdigo para frmClientes.


procedure TfrmClientes.btnSairClick(Sender: TObject); begin frmClientes.Hide; end;

Antes de compilar o projeto, verifique se o formulrio inicial do programa mesmo o frmControle. No menu Project >> Option... , defina o formul rio frmControle como o Main Form

Execute o programa pressionando F9.

Celta Informtica - F: (11) 4331-1586

Pgina: 136

Delphi 6

INTEGRANDO MS-WORD COM DELPHI


Na paleta Server do Delphi encontramos diversos componentes que permitem uma conexo COM (Components Object Model) com a famlia Office. O padro COM, desenvolvido pela Microsoft, oferece mais recursos ao programador que o uso da OLE Automation. Com estes componentes o programador pode automatizar tarefas utilizando recursos de outros programas. possvel criar um relatrio no Word e depois realizar alteraes atravs de um programa feito em Delphi. Facilitando a vida de usurios que necessitam editar estes relatrios, criando uma personalizao a partir de um documento padro. Como exerccio inicial, iremos criar um documento no Word com o texto escrito no componente Memo do projeto Bloco de notas. Abra o projeto Bloco de Notas construdo anteriormente. Adicione um boto e os componentes WordApplication e WordDocument da paleta Server.

Altere o nome dos componentes: Button1 WordApplication WordDocument btnWord WA WD

Celta Informtica - F: (11) 4331-1586

Pgina: 137

Delphi 6
Digite o seguinte cdigo para o boto de comando.
procedure TfrmBlocoNotas.btnWordClick(Sender: TObject); var NomeArquivo: OLEVariant; begin WA.Connect; //Inicializa o Word WD.Activate; //Exibe o aplicativo Word WD.NewInstance; //Cria um novo documento WD.Content.InsertAfter(memTexto.Lines.Text);//Insere texto NomeArquivo:= C:\Temp\Bloco.doc; //String em OLEVariant WA.ActiveDocument.SaveAs(NomeArquivo,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam); WD.Close; //Fecha documento end;

Inicialmente dada a abertura do Word e depois cria-se um novo documento. A procedure InsertAfter adiciona um texto o final do documento, mas poderia ser InsertBefore para texto antes. Na lista de code completion possvel observar todos os procedimentos e funes associadas cada um desses objetos. Na ajuda do WordBasic possvel encontrar detalhes sobre a operao de cada procdimento. A partir do Word abra o Editor do Visual Basic (Ferramentas >> Macro) e na sua ajuda procure por SaveAs, escolhendo a opo Mtodo SaveAs. Note que este mtodo requer a definio de onze parmetros para salvar o arquivo. Mas para salvar o texto digitado no programa, necessrio apenas informar o nome do arquivo a ser salvo, mantendo os demais parmetros vazios. Isto faz o Word manter os valores padro para cada opo de salvamento. Execute o programa. Digite algum texto no Memo e depois d um clique no boto Word, notando que o texto ser escrito no documento, salvo e depois fechado. Segundo exemplo com o uso dos componentes COM para Word ser feito com o programa de Banco de dados. Este programa ter um boto

Celta Informtica - F: (11) 4331-1586

Pgina: 138

Delphi 6
no formulrio Vendas que ao ser clicado, abrir um documento modelo, alterar algumas palavras, baseadas no pedido corrente, salvando o documento com outro nome. Abra o programa Banco de dados criado anteriormente, incluindo um componente WordApplication e um boto no formulrio frmVendas.

No Word digite um documento semelhante ao mostrado na figura a seguir, mantendo as palavras chave que sero substitudas pelo programa: DATAHOJE, NUMEROPEDIDO, NOMECLIENTE,PRODUTONOME, QUANTIDADEPRODUTO e VALORTOTAL. Salve este documento com o nome de Recibo.doc.

Celta Informtica - F: (11) 4331-1586

Pgina: 139

Delphi 6
A maneira mais fcil de saber quais mtodos implementar no programa em Delphi para efetuar as mudanas necessrias no texto, criar uma macro no Word e depois editar e copiar no Code explorer traduzindo-a para a linguagem Object Pascal, pois ela estar em WordBasic. Grave uma macro substituindo a palavra DATAHOJE por qualquer outra, pois o que ns desejamos apenas a sintaxe utilizada pelo Word. A listagem a seguir mostra uma macro que substitui o texto DATAHOJE por 24 de Janeiro com a opo de substituir todas.
Sub Macro1() Macro1 Macro Macro gravada 24/07/00 por Jair Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = DATAHOJE .Replacement.Text = 24 de Janeiro .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With Selection.Find.Execute Replace=wdReplaceAll End Sub

Na unidade do formulrio frmVendas, acrescente um procedimento chamado Substituir que ter por funo substituir cada palavra do documento. Este procedimento receber dois parmetro que so o texto a ser substitudo e o substituto. Na implementao do procedimento Substituir, cole a macro gravada no Word. Associe os mtodos ao componente WordApplication (WA) e retire os mtodos de limpeza da procura (ClearFormatting) que sero utilizados somente uma vez. A seguir, traduza para Object Pascal.

Celta Informtica - F: (11) 4331-1586

Pgina: 140

Delphi 6
procedure btnReciboClick(Sender: TObject); procedure Substituir(Texto, TextoSub: String); private { Private declarations } implementation procedure TfrmVendas.Substituir(Texto, TextoSub: String); {Texto contm a palavra que ser substituda e TextoSub a substituta} var Repor: OLEVariant; //Tipo de varivel aceita nos mtodos Word begin Repor:= wdReplaceAll; //Constante definida em Word97.pas with WA.Selection.Find do begin Text := Texto; Replacement.Text := TextoSub; Forward := True; Wrap := wdFindContinue; //Constante definida em Word97.pas Format := False; MatchCase := True; // = True para no ser tudo maisculo MatchWholeWord := False; MatchWildcards := False; MatchSoundsLike := False; MatchAllWordForms := False; end; WA.Selection.Find.Execute (EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam, EmptyParam,Repor); end;

O evento OnClick do bot o, abre o arquivo Recibo.doc, limpa as formataes de procura, chama o procedimento Substituir para cada campo do documento, atribuindo a eles os valores do registro corrente nas tabelas, e por ltimo salva com outro nome e fecha o documento.

Celta Informtica - F: (11) 4331-1586

Pgina: 141

Delphi 6
procedure TfrmVendas.btnReciboClick(Sender: TObject); var NomeArquivo: OLEVariant; begin NomeArquivo:=C:\Temp\Recibo.doc; WA.Documents.Open(NomeArquivo,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam); WA.Selection.Find.ClearFormatting; WA.Selection.Find.Replacement.ClearFormatting; Substituir (DATAHOJE, FormatDateTime(dd de mmmm de yyyy,Date)); Substituir (NUMEROPEDIDO,tblVendasNumero.Value); Substituir (NOMECLIENTE,tblClientesNome.Value); Substituir (PRODUTONOME,tblVendasProduto.Value); Substituir (QUANTIDADEPRODUTO,tblVendasQuantidade.AsString); Substituir (VALORTOTAL,tblVendasValor.AsString); NomeArquivo:=C:\Temp\Recibo + tblVendasNumero.Value + .doc; WA.ActiveDocument.SaveAs (NomeArquivo,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam); WA.ActiveDocument.Close (EmptyParam,EmptyParam,EmptyParam); end;

Execute o programa e no formulrio frmVendas, clique no boto Recibo para ver o Word abrir o documento, alterar o texto, salvar e fechar com outro nome.

Celta Informtica - F: (11) 4331-1586

Pgina: 142

Delphi 6

DELPHI 6 E SQL
No incio dos anos 70, foi criado pelo departamento de pesquisa da IBM, uma nova forma de se comunicar com os Bancos de Dados Relacionais, denominada SYSTEM R. Era o inco do SQL (Structured Query Language). A ANSI (American National Standard) padronizou o SQL em 1986, estabelecendo-se ento uma nova linguagem padro de Banco de Dados. Uma consulta em SQL nada mais do que uma pergunta que um determinado aplicativo faz a um Banco de Dados. Essas perguntas retornam um conjunto de registros que satisfazem os critrios especificados na pergunta, contendo informaes dos campos das tabelas. Vamos agora aprender um pouco mais sobre a sintaxe do SQL e em seguida, desenvolveremos um aplicativo para sua demonstrao prtica.

SINTAXE DO SQL
Select Exibe colunas e linhas de uma ou mais tabelas conforme os critrios especificados. From Acompanha sempre um Select e especifica as tabelas a serem utilizadas Coringa Exibe todos os dados das tabelas especificadas em From. representado por *, mas ao invs de ser utilizado, pode-se especificar os nomes dos campos desejados, separados por vrgula. Distinct Os registros iguais de uma pesquisa, no sero repetidos, ou seja, no haver registros em duplicidade na exibio. Where Especifica um critrio ou condio para a seleo dos registros a serem exibidos no resultado de uma consulta. Pode ser utilizado com uma srie de operadores.

Celta Informtica - F: (11) 4331-1586

Pgina: 143

Delphi 6
Operadores de Comparao: = <> > >= < <= Igual a Diferente de Maior que Maior ou igual a Menor que Menor ou igual a

Operadores Lgicos utilizados em duas ou mais condies: AND OR NOT E lgico OU lgico NO lgico

Operadores Aritmticos: + * / Adio Subtrao Multiplicao Diviso

Operadores de Complementao: IN BETWEEN e AND EXISTS Opera sobre uma lista de valores e testa se um outro valor especificado pertence a lista. Valores compreendidos na faixa especificada. Pertence a uma subconsulta e utilizado para recuperar os dados de uma segunda tabela que satisfaa clausulas na condio Where. Para a utiliza o de m scaras em campos alfanumricos. Testa se os campos so nulos ou em branco. Ordena os dados de uma consulta em ordem crescente. Pode ser atribudo em ordem decrescente atravs de DESC ao fim da clusula. Exibe as colunas de uma consulta em letra mai scula.

LIKE IS NULL ORDER BY

UPPER

Celta Informtica - F: (11) 4331-1586

Pgina: 144

Delphi 6
AVG MIN MAX SUM GROUP BY Retorna a mdia dos valores de uma coluna. Retorna o menor valor de uma coluna. Retorna o maior valor de uma coluna. Retorna a soma dos valores de uma coluna. Agrupa os dados de uma consulta para linhas que possuam os mesmos valores em suas colunas. Pode ser atribudo a clusula HAVING que especifica um critrio para o agrupamento. Possibilita a extrao de consultas em duas ou mais tabelas ao mesmo tempo. Para isso, deve se existir campos em comum entre as tabelas para serem feitas as ligaes. Self Joins e Alias no so clusulas utilizadas no SQL, mas sim um mtodo de extrao de dados, onde se criam apelidos para os campos semelhantes com os testes necessrios.

Self Joins e Alias

PROGRAMA DE CONSULTAS EM SQL


Vamos agora dar incio a construo de um programas para efetuar automaticamente, consultas em SQL para um banco de dados relacional. Veja abaixo um passo-a-passo para a construo inicial do Banco para o Delphi: 1) Crie no seu HD, uma pasta de nome BancoSQL na unidade C: (C:\BancoSQL). 2) V at o Painel de Controle do Windows e d um duplo clique no item BDE Administrator. 3) Clique na guia Databases e no menu Object, New para criarmos nosso banco de dados. 4) Na janela New Database Alias , deixe selecionado a op o STANDARD e clique em OK. 5) Ao lado esquerdo da janela, digite no lugar de STANDARD o alias para nosso banco: MeuBancoSQL. 6) Ao lado direito da janela, clique no campo PATH e selecione o diretrio C:\BancoSQL.

Celta Informtica - F: (11) 4331-1586

Pgina: 145

Delphi 6
7) Clique no menu Object, Apply para gravarmos o nosso novo banco de dados e em seguida feche o BDE Administrator. 8) Agora, v at o Database Desktop e no menu File, selecione Working Directory. 9) No ComboBox Aliases, selecione MeuBancoSQL e clique em OK.

Agora crie as tabelas abaixo, do tipo Paradox7: Tabela de Clientes: Field Name CodigoCliente RazaoSocial Telefone Estado LimiteCredito Type A A A A $ Size 4 40 14 2 Key *

Tabela de Produtos: Field Name CodigoProduto Descricao Tipo Quantidade Preo Tabela de Vendas: Field Name NumeroVenda CodigoProduto CodigoCliente Quantidade ValorTotal Type A A A N $ Size 4 3 4 Key * * * Type A A A N $ Size 3 40 2 Key *

Insira os dados demonstrados abaixo para todas as tabelas criadas respectivamente. Para isso, abra as tabelas no Database Desktop atravs do menu File, Open e o nome da tabela. Em seguida, clique em Table, Edit Data para inserir os dados.

Celta Informtica - F: (11) 4331-1586

Pgina: 146

Delphi 6
Tabela de Clientes:
C digo 0001 0002 0003 0004 0005 0006 Raz o Social Japo Comercial Ltda AutoEltrica do Baixinho Mercado Barat o AutoPosto Vila Nova Neco Transportes TV Alian a Telefone Estado 3242-4921 SP 4921-4929 RJ SP 2124-4800 MG 2210-4990 RJ 4816-4922 SP LimiteCredito 10.000,00 3.000,00 7.000,00 4.250,00 8.950,00 12.300,00

Tabela de Produtos:
Cdigo 001 002 003 004 005 Descrio Piso 3x7 galvanizado Papel de Parede MX Calha de alumnio CimentCola Quartzolit PVC Flex Tipo Quantidade Pre o 01 300 7,60 30 712000 3,47 04 1000 12,50 01 7000 5,00 30 500 3,40

Tabela de Vendas:
Venda Produto 001 004 002 001 003 005 004 001 005 002 006 003 007 005 008 001 Cliente Quantidade 0006 30 0003 100 0002 50 0004 200 0001 3000 0005 500 0001 100 0006 50 Valor Total 150,00 760,00 170,00 1.520,00 10.410,00 6.250,00 340,00 380,00

CRIANDO O PROGRAMA
Como chegamos ao final da apostila, voc a esta altura j deve ser um Expert em Delphi 6, no mesmo? Por isso, eu lano um desafio, vou apresentar apenas uma tela do programa e vou descrever como voc dever criar o programa, sem muito detalhes. Veremos quem criar o programa mais semelhante ou mesmo, desenvolver novos recursos ou mesmo uma tela mais bonita! Vamos agora criar o programa SQL Viewer, de acordo com a figura a seguir.

Celta Informtica - F: (11) 4331-1586

Pgina: 147

Delphi 6

Conforme o layout da figura anterior, acrescente os componentes relacionados em seguida e altere as propriedades conforme descrito. Componente Form1 Propriedade Name Caption Border Style Name Align Border Style Name Align Border Style Valor da Propriedade frmSQL SQL Viewer bsDialog pnBotoes alTop bsNone pnSQL alClient bsNone

Panel1

Panel2

Dentro do componente pnSQL, adicione na mesma ordem os componentes listados abaixo. Quando na coluna Componente aparecer um sinal de >, significa que o componente est dentro do componente anterior:

Celta Informtica - F: (11) 4331-1586

Pgina: 148

Delphi 6
Componente GroupBox1 Propriedade Name Align Caption FontSize FontStyle Name Name Align Name Align Caption FontSize FontStyle Name Align Valor da Propriedade grbResultado alBottom RESULTADO 10 fsBold dbgResultado splitter alBottom grbQuery alClient Cdigo SQL 10 fsBold memQuery alClient

DBGrid Splitter1 GroupBox2

Memo

Dentro do componente pnBotoes, adicione na mesma ordem os componentes listados abaixo. Componente SpeedButton1 Propriedade Name Caption Glyph Name Caption Name Caption Valor da Propriedade spdExecutar Executar ( sua escolha) spdLimpar Limpar spdSair Sair

SpeedButton2 SpeedButton3

Agora, adcione ao formulrio, um DataSource e uma SQL Query. Altere a propriedade DataBaseName do SQL Query para MeuBancoSQL (o banco de dados que criamos anteriormente). Altere a propriedade Name para qrySQL. No componente DataSource, altere a propriedade Name para datSQL e aponte o DataSet para qrySQL. Neste instante, voc deve tambm alterar a propriedade DataSource do componente dbgResultado para datSQL.

Celta Informtica - F: (11) 4331-1586

Pgina: 149

Delphi 6
Agora clique duas vezes sob o spdExecutar e insira o seguinte cdigo:
procedure TfrmSQL.spdExecutarClick(Sender: TObject); begin qrySQL.Close; qrySQL.SQL.Clear; if memQuery.Text= then begin showMessage(Erro no cdigo SQL...); memQuery.SetFocus; exit; end; qrySQL.SQL := memQuery.Lines; dbgResultado.DataSource := datSQL; qrySQL.Open; end;

Clique duas vezes sob o spdLimpar e insira o seguinte cdigo:


procedure TfrmSQL.spdLimparClick(Sender: TObject); begin qrySQL.Close; qrySQL.SQL.Clear; memQuery.Lines.Clear; memQuery.Text := ; memQuery.SetFocus; end;

Clique duas vezes no spdSair e inclua a clusula close;. Salve a Unit1 como ViewerUnt.pas e o projeto como SQLViewer.dpr. Compile, execute.

EXEMPLOS DE CONSULTA SQL


Parabns! Chegamos aqui ao final de nossa apostila. Esperamos que voc tenha gostado e que o Delphi seja realmente uma ferramenta muito importante na sua vida. Utilize os exemplos abaixo para criar consultas no seu programa de SQL. Divirta-se e at breve!

Celta Informtica - F: (11) 4331-1586

Pgina: 150

Delphi 6
Consulta 1 Selecione todos os campos da tabela clientes. select * from clientes Consulta 2 Selecione apenas os campos Codigo e Razo Social da tabela clientes. select Codigo, RazaoSocial from clientes Consulta 3 Selecione o campo CodigoCliente da tabela de vendas. select CodigoCliente from vendas Consulta 4 Selecione o campo CodigoCliente da tabela de vendas por ordem crescente. select CodigoCliente from vendas order by codigocliente Consulta 5 Selecione o campo CodigoCliente da tabela de vendas, por ordem crescente e sem duplicidade. select distinct codigocliente from vendas order by codigocliente Consulta 6 Selecione Razao Social e Estado da tabela de clientes para estados iguais a RJ select razaosocial, estado from clientes where estado=RJ

Celta Informtica - F: (11) 4331-1586

Pgina: 151

Delphi 6
Consulta 7 Selecione todos os campos da tabela de clientes quando o campo telefone for em branco. select * from clientes where telefone is null Consulta 8 Selecione todos os campos da tabela de clientes quando o campo telefone no estiver em branco. select * from clientes where telefone is not null Consulta 9 Selecione todos os campos da tabela de clientes onde exista Auto no campo Razo Social. select * from clientes where razaosocial like %Auto% Consulta 10 Selecione o valor mnimo do campo Limite de Crdito na tabela de clientes. select min(LimiteCredito) from clientes Consulta 11 Selecione os campos codigo, razo social da tabela de clientes, numero da venda e codigo do cliente da tabela de vendas identificando quando os cdigos forem iguais um ao outro. select a .codigo, a .razaosocial, b.codigocliente from clientes a, vendas b where a.codigo=b.codigocliente b .numerovenda,

Celta Informtica - F: (11) 4331-1586

Pgina: 152

Delphi 6
Consulta 12 Selecione os campos numero da venda da tabela de vendas, razao social da tabela de clientes e descrio da tabela de produtos quando os campos codigo do cliente forem iguais nas tabelas de vendas e de clientes e os campos codigo do produto forem iguais nas tabelas de vendas e de produtos. select a.numerovenda, b.razaosocial, c.descricao from vendas a, clientes b, produtos c where b.codigo=a.codigocliente and c.codigoproduto=a.codigoproduto Consulta 13 Selecione os campos numero da venda da tabela de vendas, razao social da tabela de clientes, descricao da tabela de produtos quando os campos codigo do cliente forem iguais nas tabelas de vendas e de clientes e os campos codigo do produto forem iguais nas tabelas de vendas e de produtos, e o estado do cliente for igual a RJ. select a.numerovenda, b.razaosocial, c.descricao from vendas a, clientes b, produtos c where b.codigo=a.codigocliente and c.codigoproduto=a.codigoproduto and b.estado=RJ Consulta 14 Selecione todos os campos da tabela de produtos quando a quantidade estiver entre 5000 e 20000. select * from produtos where quantidade between 5000 and 20000 Consulta 15 Selecione todos os campos da tabela de clientes quando o estado for igual a SP e/ou MG. select * from clientes where estado in (SP, MG)

Celta Informtica - F: (11) 4331-1586

Pgina: 153

Delphi 6
Consulta 16 Selecione Razo Social e telefone da tabela de clientes, exibindo o campo Razo Social em letras maisculas. select upper(razaosocial), telefone from clientes Consulta 17 Selecione a mdia do campo valor total da tabela de vendas. select avg(valortotal) from vendas Consulta 18 Selecione o campo Razo Social da tabela de clientes, conte o campo codigo do cliente na tabela de vendas quando o campo codigo de clientes for igual ao codigo de clientes em vendas e o telefone na tabela de clientes for branco, agrupado pelo campo razo social. select razaosocial, count(codigocliente) from clientes a, vendas b where telefone is null and (a.codigo=b.codigocliente) group by razaosocial Consulta 19 Selecione o campo Razo Social da tabela de clientes, conte o campo codigo do cliente na tabela de vendas quando o campo codigo de clientes for igual ao codigo de clientes em vendas e o telefone na tabela de clientes no for em branco, agrupado pelo campo razo social. select razaosocial, count(codigocliente) from clientes a, vendas b where telefone is not null and (a.codigo=b.codigocliente) group by razaosocial Consulta 20 Selecione o camp Razo Social da tabela de clientes, conte o campo codigo do cliente na tabela de vendas deixando com o nome de QtdVendas quando o campo codigo de clientes for igual ao codigo de clientes em vendas e o telefone na tabela de clientes no for em branco.

Celta Informtica - F: (11) 4331-1586

Pgina: 154

Delphi 6
select razaosocial, count(codigocliente) as QtdVendas from clientes a, vendas b where telefone is not null and (a.codigo=b.codigocliente) group by razaosocial Consulta 21 Selecione os campos codigo e razo social da tabela de clientes, para quando existirem apenas 1 venda. select codigo, razaosocial from clientes where codigo in (select codigocliente from vendas group by codigocliente having count(*)=1) Consulta 22 Selecione os campos codigo e razo social da tabela de clientes, para quando existirem 2 vendas ordenado de maneira decrescente pelo campo razo social. select codigo, razaosocial from clientes where codigo in (select codigocliente from vendas group by codigocliente having count(*)=2) order by razaosocial desc Consulta 23 Selecione os campos codigo, razo social e telefone de clientes, que no pertencem a nenhuma venda mas que pertencem a alguma venda de um produto que tenha o preo maior do que 5. select distinct codigo, razaosocial, telefone from clientes A where not exists (select codigocliente from vendas B where exists (select codigoproduto from produtos C where preco > 5 and B.codigoproduto=C.codigoproduto and A.codigo=B.codigocliente))

Celta Informtica - F: (11) 4331-1586

Pgina: 155

Delphi 6

LISTA DE EXERCCIOS
1. 2. 3. 4. 5. Qual a diferena entre um programa feito para trabalhar sob o DOS e outro construdo atravs do Delphi? O que encontramos na Paleta de Componentes? Qual a funo da janela Object Inspector? Quais os passos para desenvolver um programa em Delphi aps a anlise do projeto? No primeiro programa que desenvolvemos, coloque um boto de comando que apague o contedo do label, e outro que finalize o programa. Na calculadora, mesmo redefinindo a propriedade TabStop do Edit de resultado, o usurio poder alterar o resultado da operao. Que outro controle poderamos utilizar no lugar de um TEdit para exibir o resultado sem que o usurio possa alterar seu valor? Altere o projeto. O cone escolhido para representar o projeto, no estar presente no formulrio. Qual propriedade deveremos alterar para que o cone representante do projeto tambm esteja no formulrio? Responda e execute. Altere os botes do Jogo da Velha para o tipo BitBtn, e reconstrua o projeto para alterar as propriedades Kind e Caption, exibindo nos botes os cones 9. e .

6.

7.

8.

No Jogo da Velha, sempre o computador inicia uma nova partida. Altere o cdigo para que o programa pergunte ao usurio quem iniciar uma nova partida.

10. No projeto Bloco de Notas, quando escolhemos a opo Sair, o programa no pergunta se queremos salvar as alteraes realizadas no texto. Inclua uma varivel booleana na seo Implementation, alterando o seu valor no procedimento Memo1Change e verificando-a no momento de encerrar o programa. 11. Inclua mais um boto no Relgio Despertador com a opo de Soneca, soando o Beep dez minutos aps o primeiro despertar. 12. Construa um projeto que mostre todos os tipos de preenchimentos (hachuras) dentro de crculos em um nico formulrio.

Celta Informtica - F: (11) 4331-1586

Pgina: 156

Delphi 6
13. Construa um exemplo semelhante ao da luz em movimento, mas que a figura ao invs de ser desenhada em outro aplicativo, seja desenha por instrues (ellipse e rectangle) contidas dentro do programa em Delphi. 14. Substitua o controle ComboBox por um ListBox no exemplo de Catlogo, com pesquisa pelo nmero do telefone. 15. No ltimo exemplo, crie mais uma tabela de Estoque, e a cada venda realizada os valores de estoque devero ser atualizados. 16. Crie mais duas tabelas, uma de Fornecedores e outra de Compras, semelhantes a Clientes e Vendas, e acrescente os campos ao seu critrio.

Celta Informtica - F: (11) 4331-1586

Pgina: 157

Celta Informtica http://www.celtainformatica.com.br

Você também pode gostar