Você está na página 1de 112

DELPHI 4

SUMRIO
PRIMEIROS PASSOS............................................................................................................................................................2 ANATOMIA DE UMA JANELA ..............................................................................................................................................3 BARRA DE MENU, BARRA DE FERRAMENTAS E PALETA DE COMPONENTES..................................................................................4 Barra de Ferramentas......................................................................................................................................................4 PALETA DE COMPONENTES.................................................................................................................................................4 JANELAS DO DELPHI.........................................................................................................................................................6 MEU PRIMEIRO PROGRAMA...........................................................................................................................................8 ADAPTAR AS PROPRIEDADES DOS OBJETOS............................................................................................................................9 ESCREVER O CDIGO PARA OS EVENTOS ASSOCIADOS .............................................................................................................12 EXEMPLO I - CALCULADORA........................................................................................................................................17 PROPRIEDADES......................................................................................................................................................23 BorderStyle.....................................................................................................................................................................23 Default............................................................................................................................................................................24 Tabstop...........................................................................................................................................................................25 Name...............................................................................................................................................................................25 Caption...........................................................................................................................................................................26 Text.................................................................................................................................................................................26 MTODO..................................................................................................................................................................26 Setfocus..........................................................................................................................................................................26 VARIVEIS NO DELPHI....................................................................................................................................................26 Formas de Declarar uma Varivel................................................................................................................................29 FORMATAO DE NMEROS.............................................................................................................................................30 Formatando Data e Hora:.............................................................................................................................................30 MODIFICANDO A CALCULADORA........................................................................................................................................31 DEPURAO........................................................................................................................................................................36 EXEMPLO II - JOGO DA VELHA....................................................................................................................................40 UNIDADE (UNIT)............................................................................................................................................................41 EXEMPLO III - BLOCO DE NOTAS................................................................................................................................53 EXEMPLO IV - RELGIO DESPERTADOR..................................................................................................................63 MTODOS GRFICOS.......................................................................................................................................................67 DESENHO DE PONTO.......................................................................................................................................................67 CORES.........................................................................................................................................................................68 DESENHO DE LINHAS......................................................................................................................................................68 DESENHO DE RETNGULOS...............................................................................................................................................72 DESENHO DE ELIPSES......................................................................................................................................................73 FIGURAS.......................................................................................................................................................................74 EXEMPLO V - CATLOGO...............................................................................................................................................79 INSERINDO UMA NOVA UNIDADE........................................................................................................................................81 TIPOS DE DADOS...........................................................................................................................................................82 REGISTROS....................................................................................................................................................................82 PONTEIRO DE REGISTROS.................................................................................................................................................84 BANCO DE DADOS SIMPLES...........................................................................................................................................91 DATABASE DESKTOP.......................................................................................................................................................91 LISTA DE EXERCCIOS...................................................................................................................................................111

Pgina: 1

DELPHI 4

Delphi 4
PRIMEIROS PASSOS
Vantagens : - Facilidade em alteraes e implementaes - Melhor Estruturao do cdigo - Velocidade - Verdadeira orientao a objetos Delphi possui um ambiente de desenvolvimento fcil de usar, com uma grande Biblioteca de Componentes Visuais (VCL - Visual Component Library). A VCL contm cdigo de botes campos, rtulos, grficos, caixas de dilogo e acesso e tabelas de bancos de dados, e foi desenvolvida levando em conta as velocidades no desenvolvimento de aplicativos e na execuo destes aplicativos. O rpido desenvolvimento de aplicativos possvel graas aos vrios controles disponveis na paleta de componentes, onde o programador escolhe um destes componentes, e colocao 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. Pgina: 2

DELPHI 4 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. ANATOMIA DE UMA JANELA A figura abaixo, mostra uma janela tpica do Windows e a denominao de seus componentes bsicos.

Moldura - Os quatro lados da janela, que definem seu tamanho. Barra de Ttulo - Acima da moldura superior como nome da janela e documento corrente. Menu de Controle - esquerda da Barra de Ttulo. Um boto com um cone que representa o programa. Botes de Tamanho - direita da Barra de Ttulo. So dois botes, no primeiro temos um trao, o outro com duas janelinhas ou uma janela desenhadas. Se forem duas janelinhas, mostra que a janela est maximizada, e se for uma janela um pouco maior, mostra que a janela est em seu tamanho normal e pode ser maximizada. O boto com um trao serve para minimizar a janela. Barra de Menu aplicativo. Est abaixo da barra de ttulo e contm as opes de controle do

rea do Cliente - a parte interna da janela, tambm chamada de rea do documento, utilizada para inserir os controles da nossa aplicao. Pgina: 3

DELPHI 4 rea Externa Janela - sua Mesa de Trabalho onde voc pode ter tantos aplicativos abertos quantos necessitar e a memria do seu computador permitir. Janela - Uma Janela plena quando podemos dimension-la (mini, maxi e restaur-la) e mov-la. BARRA DE MENU, BARRA DE FERRAMENTAS E PALETA DE COMPONENTES

Barra de Ferramentas

PALETA DE COMPONENTES A Paleta de Componentes, possui todos os controles que iremos precisar para desenharmos nossa janela - formulrio - como um programa de desenho livre. Para incluir um controle no formulrio, existem dois mtodos:

Pgina: 4

DELPHI 4 1 - Click Duplo no cone da paleta de componentes. Insere o controle no centro do formulrio com um tamanho padro. 2 - Selecionar o cone na caixa de ferramentas e depois dar um clique no formulrio, na posio desejada para o objeto (canto superior esquerdo deste). Podemos dimensionar estes controles, depois de inseridos, a qualquer momento durante o desenvolvimento. Primeiro, selecionamos o controle dando um clique em cima dele e depois o dimensionamos arrastando um dos oito botes dimensionadores que circundam este objeto.

Pgina: 5

DELPHI 4 JANELAS DO DELPHI

Formulrio a janela que aparece no centro da tela do Delphi. Essa a janela que estamos projetando. Quando rodarmos o aplicativo, ser ela que ir aparecer com os objetos que ns incorporamos.

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. 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.

Pgina: 6

DELPHI 4

Na janela Object Inspector mostrada anteriormente, temos algumas das propriedades do formulrio assim que iniciamos o Delphi. Caixa de Objeto - Est 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). Coluna de Propriedades - Exibe todas as propriedades que podemos modificar em tempo de projeto. Coluna de Valores - Exibe o valor da propriedade correspondente.

Pgina: 7

DELPHI 4

MEU 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.

1 - Comeamos inserindo um Label (Legenda) e um Boto de Comando no formulrio, de uma das duas maneiras: a) Dando um duplo clique na barra de ferramentas no controle desejado; b) Selecionar o controle e dar um clique no formulrio. 2 - Ao passar o ponteiro do mouse sobre o controle, nos ser mostrado o seu nome e tipo.

3 - Arraste o Boto para as coordenadas (40,80) e o Label para (8,16). Pgina: 8

DELPHI 4 4 - Observe que, quando o controle estiver selecionado, poderemos arrast-lo e dimension-lo dentro do formulrio utilizando os botes dimensionadores. Enquanto movemos o controle, nos mostrada a posio, e quando dimensionamos aparecem as dimenses.

ADAPTAR AS PROPRIEDADES DOS OBJETOS Para alterar as propriedades de um objeto, ele tem que estar selecionado (com os oito pontos dimensionadores visveis), depois procurar o nome da propriedade a ser alterada, na janela Object Inspector, e selecionar (no caso de valores padro) o seu valor, ou ento escrever um novo valor. 1 - Dimensione o formulrio da seguinte maneira: Selecionar a propriedade Height, e atribuir a ela o valor de 150.

Pgina: 9

DELPHI 4 Selecionar a propriedade Width e dar o valor de 180.

Estes nmeros 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 assim:

Pgina: 10

DELPHI 4

Agora, altere as propriedades do TLabel e do TButton. O caractere & quando utilizado na propriedade Caption de Botes ir sublinhar o caracter seguinte a ele, identificando-o como atalho para o Windows

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

Pgina: 11

DELPHI 4 ESCREVER O CDIGO PARA OS EVENTOS ASSOCIADOS. O cdigo escrito na janela Code editor, para acess-la, selecione o boto Iniciar e na janela Object Inspector, chame a divisria 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 boto Iniciar for clicado.

Janela Code Editor

Nesta janela 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.

Pgina: 12

DELPHI 4

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 quer criar um cdigo. Cada objeto tem um evento que mais comumente utilizado, e com este evento que o Delphi iniciar o Code Editor quando acessado desta forma, isto no impede que criemos outros cdigos utilizando mais de um evento para o mesmo componente. O nosso projeto de Incio, mostrar uma mensagem no Label (objeto) com um Click (evento) no Boto Iniciar (objeto). Ou seja, iremos alterar a propriedade Caption de lblMensagem, esta propriedade contm o que ser mostrado ao usurio. Atribumos valores a uma propriedade de objeto seguindo o padro: objeto + . + propriedade + := + valor da propriedade ; Abra o Code Editor para o boto de comando e digite o cdigo conforme a figura a seguir. Repare que ao digitar o ponto aps LblMensagem, e aguardar alguns instantes, o Delphi exibir uma lista de propriedades e mtodos do controle Label.

Para escolher uma propriedade do LblMensagem, selecione-a com as setas de direo e ento pressione Enter, inserindo-a na linha de comando. Ou ento, digite a primeira letra da propriedade, selecionando-a.

Pgina: 13

DELPHI 4

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 sobre o boto Run da barra de ferramentas ( ) para que o Delphi compile e execute o projeto. Em seguida, selecione o boto Iniciar para ver o resultado.

Finalize a execuo do projeto teclando Alt+F4 ou no boto Finalizar ( da janela.

) da barra de ttulo

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

Pgina: 14

DELPHI 4 Existem propriedades que possuem valores predefinidos, quando escolhemos a propriedade Alignment e damos um clique na seta da caixa de valor, aparecem os tipos de alinhamento para o texto dentro do componente.

Selecione o objeto TLabel atravs da Caixa de Objeto da janela Object Inspector, e altere a propriedade Alignment para taCenter, para que o texto no TLabel fique centralizado. Altere tambm a propriedade AutoSize para False, e no Formulrio aumente o tamanho do TLabel.

Alm das propriedades descritas acima, com padres pr-definidos, existem outras que possuem inmeras escolhas, neste caso, ao invs de uma seta, observaremos trs pontos, este o caso da propriedade Font.

Pgina: 15

DELPHI 4

Quando selecionamos os trs pontos, aparece um Quadro de Dilogo onde escolheremos o formato da fonte da mensagem apresentada. No seu 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, ns temos duas opes para que este texto aparea integralmente. 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, redimensionar o Label e o Formulrio. Como mostram as figuras a seguir.

Pgina: 16

DELPHI 4

EXEMPLO I - CALCULADORA
Para iniciar um novo projeto, escolha a opo New Application do menu File. salvando o projeto Iniciar anterior. No

Para inserir vrios objetos repetidos no Formulrio, damos um clique no cone do objeto escolhido enquanto pressionamos a tecla Shift, ele ficar conforme a figura abaixo.

Dimensione e insira os controles Edit, utilizando a Paleta de Componentes, no formulrio como o exemplo abaixo. Dimensionamos o formulrio no Delphi da mesma forma que no Windows dimensionamos as janelas. Logo aps, basta ir inserindo os controles (Edit) dentro do Formulrio, sem se preocupar com a esttica. Aps inserir todos os componentes repetidos, clique no cursor bitmap em forma de seta, isto desativar o boto selecionado anteriormente na Paleta de Componentes.

Observe que os objetos Edit esto desalinhados, o Dephi nos oferece um recurso para realizar rapidamente um alinhamento entre objetos. Primeiro deveremos selecionar os objetos que queremos alinhar. Pressione a tecla Shift enquanto voc d um clique em cada um dos Edit, selecionando todos ao mesmo tempo como mostra a figura a seguir.

Pgina: 17

DELPHI 4 Depois disto, pressione o boto direito do mouse em cima de um Edit, para aparecer o popmenu. Escolha Align..., aparecendo ento a janela Alignment.

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

Aps o alinhamento, nosso Formulrio estar conforme a figura abaixo:

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

Pgina: 18

DELPHI 4

Utilize o alinhamento Horizontal - Center in Window para o Button2. Agora, altere as propriedades assinaladas dos Objetos conforme a figura a seguir:

Neste exemplo de projeto, digitaremos um nmero em Edit1, outro em Edit2, e quando for dado um Clique em Button1, o resultado da multiplicao aparecer em Edit3. Para limpar os Quadros de texto (Edit), usaremos o Button2. O projeto ir trabalhar basicamente com dois eventos : - Clique em Button1 (=) - Clique em Button2 (Limpar) Ento, para escrevermos o cdigo, daremos dar um Duplo Clique no Button1 - o Code Editor ser exibido. O editor de cdigo possui vrias ferramentas que auxiliam o programador durante a digitao do programa. Uma delas a Code Completion (concluso de cdigo), ela lista as propriedades, mtodos e eventos apropriados classe exibida. Aps digitar Valor1:=, pressione Ctrl+Espao para exibir a lista, procure a funo StrToFloat (transforma uma string em nmero com ponto flutuante) em seguida pressione Enter.

Pgina: 19

DELPHI 4

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 nosso exemplo est na propriedade Text do Edit1. Digite o restante do cdigo de acordo com a figura a seguir.

Pgina: 20

DELPHI 4 Alterne para o evento OnClick do Button2. E entre com os comandos a seguir:

Execute o projeto. Para utiliz-lo, entre com um nmero em Edit1, outro em Edit2 e d um Clique em =, e o resultado da multiplicao aparecer em Edit3. Note que alternamos os campos ativos com 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: Objeto Edit1 Edit2 Edit3 Button1 Button2 TabOrder 0 1 2 3 4

Para alterar esta propriedade basta selecionar o controle, e na janela Object Inspector, procure TabOrder e altere o seu valor, o Delphi no aceita controles com TabOrder de mesmo valor. Poderemos tambm alterar a ordem de Tab acessando o popup-menu. D um clique com o boto direito em cima de qualquer componente escolhendo a opo TabOrder ( ), abrindo o quadro de dilogo Edit Tab Order, onde poderemos alterar a ordem de todos os controles inseridos no formulrio. Modifique a ordem de acordo com a figura a seguir:

Pgina: 21

DELPHI 4

Execute o projeto e observe as alteraes. O usurio pode alterar o valor de Edit3 mesmo aps a multiplicao ter sido efetuada. Para evitarmos isso, defina as propriedades TabStop:=False e ReadOnly:=True para o Edit3 e ver que o usurio no ter mais acesso ao texto em Edit3.

Existem, nas aplicaes para Windows, botes de comando que so acionados com a tecla Enter ou com um Clique. No nosso projeto este boto ser o Button1, por isso, a propriedade Default foi selecionada para True. Fazendo aparecer um contorno mais espesso no boto, dando a indicao que se a tecla Enter for acionada, ocorrer o evento OnClick no boto.

Pgina: 22

DELPHI 4 PROPRIEDADES

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

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 Pgina: 23

DELPHI 4

5 - bsSizeToolWin

Semelhante bsToolWindow, mas dimensionvel.

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 Click sempre que a tecla Enter for pressionada. Ex: Desejo que o boto BtnMultiplicar seja o default: btnMultiplicar.Default := True; Pgina: 24

DELPHI 4 Desejo saber se o boto cmdMultiplicar default ou no, e o resultado ser armazenado na varivel booleana Estado: Estado := btnMultiplicar.Default;

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 txtNum1 e armazen-la em uma varivel que conter a ordem de tabulao do objeto: Ordem_Tab:= editNum1.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
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;

Pgina: 25

DELPHI 4

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: Alterar o Caption do boto Limpar aps o 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. 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, dependendo do tipo de dados que queremos que ela armazene.

Pgina: 26

DELPHI 4

Pgina: 27

DELPHI 4

Pgina: 28

DELPHI 4 Tipos Inteiros ShortInt Integer LongInt Byte Word Tipos Booleanos Boolean ByteBool WordBoll LongBoll Tipos Reais Real Single Double Extended Comp Nmero de Bytes 1 2 4 1 2 1 1 2 4 6 4 8 10 8 Faixa -128 a 127 -32768 a 32767 -2147483648 a 2147483647 0 a 255 0 a 65535 1 byte booleano Byte - sized Booleano Word - sized Booleano Double - word - sized Booleano 2,9.10-39 a 1,7.1038 1,5.10-45 a 3,4.1038 5.10-324 a 1,7.10308 3,4.10-4932 a 1,1.104932 -263+1 a 263-1

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 (Unit); 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.

Pgina: 29

DELPHI 4 FORMATAO DE NMEROS A funo FloatToStr, transforma um nmero em texto, mas no padroniza a sua apresentao. Caso necessitemos formatar um nmero a ser exibido, usaremos a funo; FormatFloat(formato , expresso), onde: - formato = a maneira como dever ser mostrada a expresso. - expresso = expresso numrica a ser formatada. 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 nirus (#) no ser mostrado. Podemos inserir smbolos na funo Format, como no exemplo: $ , % ou E.

Formatando Data e Hora:


Para formatar data e hora usamos 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 10/5/98 18-Ago-1998 02-dom 08:50 AM 8:50:20 a 03/07/98 9:30

Pgina: 30

DELPHI 4 MODIFICANDO A CALCULADORA No Formulrio da calculadora, selecione o boto de comando Button1 e pressione a tecla Delete. O boto de igual desaparecer do formulrio, mas o seu cdigo continuar no editor de cdigo. Selecione o editor de cdigo, e observe que a procedure TfrmCalculadora.Button1Click continua no mesmo lugar. Modifique o formulrio TfrmCalculadora como o exemplo a seguir, inserindo um novo boto:
Na figura aparecem as propriedades Name de cada objeto

Selecione o Button1, copie ( posicione-os de acordo com a figura:

) e cole mais trs botes (

).

Depois

Para que o Button5 exiba o smbolo correto da diviso, primeiro altere a sua fonte para Symbol. Depois, abra o Mapa de caracteres do Windows e procure pelo smbolo da diviso na fonte Symbol, e ento copie e cole 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, mas no se preocupe com este problema. Chame o procedimento para o Button1 dando um duplo clique no boto de comando. Note que antes este procedimento executava uma multiplicao, agora dever executar uma soma. Usaremos tambm a funo FormatFloat para formatar a apresentao do resultado. 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, Pgina: 31

DELPHI 4 retire-as do procedimento Implementation da Unidade. TfrmCalculadora.Button1Click e declare-as na seo

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

Teste os vrios formatos de apresentao dos nmeros, alterando os parmetros de apresentao da funo FormatFloat. 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 de apoio 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. Pgina: 32

DELPHI 4 Quando salvamos nosso projeto, o Delphi solicita apenas os nomes dos arquivos de Unidade e Projeto, os outros ele cria automaticamente. Vamos salvar o nosso projeto Calculadora. No menu, selecione File / Saveall ou ( ) e aparecer o quadro de dilogo de salvar do Windows, pedindo para dar um nome ao arquivo do Formulrio, extenso .pas, d o nome de CalculadoraUnt.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 Calculadora.dpr e clique em Salvar. Os nomes dos arquivos da Unidade e do Projeto devero ser diferentes, apesar da extenso j o ser.

O nosso projeto est salvo. Agora, precisamos escolher um cone que o representar na tela do Windows. No menu principal do Delphi, selecione Project / Options..., e escolha a pgina Application:

Pgina: 33

DELPHI 4

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

Pgina: 34

DELPHI 4 Compile o projeto utilizando a opo Compile Calculadora do menu Project ( ), gerando um novo arquivo executvel contendo as ltimas alteraes realizadas sem executar o projeto. Agora, voc tem um programa executvel em qualquer microcomputador que possua o sistema Windows, sem necessariamente ter o DELPHI ou de suas bibliotecas instalados. Verifique no Windows Explorer todos os arquivos que compem este projeto.

Pgina: 35

DELPHI 4

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 ajudando-nos a resolver tais erros. 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. Para praticarmos a depurao de programas, vamos construir 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 ( propriedade dos componentes: ), sem alterar nenhuma

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.

Pgina: 36

DELPHI 4

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

Agora nos foi apresentado um erro onde o tipo de dado requerido um (String) mas o fornecido outro (Integer). Para corrigir isto devemos transformar do contedo da varivel T em String utilizando a funo IntToStr() na seguinte linha. - Lista.Items.Add (IntToStr(T)); Aps esta correo, o compilador no detectar mais nenhum erro de sintaxe. Portanto, execute este exemplo pressionando F9.

Pgina: 37

DELPHI 4

Observamos que a sada do programa no corresponde desejada, temos ento 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; Mas a sada do programa ainda no est de acordo.

Vamos agora acompanhar o programa passo-a-passo verificando o valor das variveis. Primeiro inserimos um ponto de parada (Breakpoint), 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.

Pgina: 38

DELPHI 4 Quando for dado um clique no boto o programa ir parar e ser mostrada a janela do Code Explorer. Para executar o programa passo-a-passo pressione F8, at a linha indicada na figura abaixo como linha corrente.

Para verificarmos o valor atual de uma varivel basta posicionar o ponteiro em cima dela e aguardar uns instantes para o Delphi nos mostrar o seu valor.

Avance o programa aos passos at a finalizao, acompanhando a variao de valores. Para a sada estar correta esto faltando os parnteses entre 5+i, que deve ser (5+i), para executar primeiro a soma e depois a multiplicao. Digite os parnteses e execute o programa, agora sem nenhum erro.

Pgina: 39

DELPHI 4

EXEMPLO II - JOGO DA VELHA


Para iniciar um novo projeto, selecione New Application do menu File. Caso voc ainda no tenha salvo o seu projeto corrente, o Delphi abrir as janelas necessrias para salvar o projeto. E s ento iniciar o novo projeto. Vamos iniciar um projeto de Jogo da Velha, onde o usurio ir jogar contra o computador que no pensa as 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, como mostra a figura.

Selecione o Boto, Copie-o (Ctrl+C) e Cole (Ctrl+V) mais oito botes iguais. Formando um total de nove botes.

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

Pgina: 40

DELPHI 4

Nosso jogo ir modificar a propriedade Caption desses botes, mas para iniciar o jogo, todos devem estar em branco. Primeiro devemos selecionar todos 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.

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 que pertenam exclusivamente unidade. Pgina: 41

DELPHI 4

UNIDADE <nome da unidade>; INTERFACE


Seo de interface

IMPLEMENTATION
Seo de implementao

FIM.
Na seo de Interface da nossa unidade est sendo definido o tipo TFrmPainel (o nosso Formulrio) pertencente classe TForm, a seguir, so listados todos os controles, seus tipos, e procedimentos pertencentes a este formulrio. A figura abaixo mostra a listagem da Unit do nosso projeto: unit Unit1; interface uses Windows, Messages, Forms, Dialogs; type TFrmPainel Button1: Button2: Button3: Button4: Button5: Button6: Button7: Button8: Button9: private public
{ Public declarations }

SysUtils,

Classes,

Graphics,

Controls,

= class(TForm) TButton; TButton; TButton; TButton; TButton; TButton; TButton; TButton; TButton;

{ Private declarations }

end; var FrmPainel: TFrmPainel; 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, Pgina: 42

DELPHI 4 faremos a implementao destes procedimentos que nada mais do que a construo do seu cdigo.

Devemos declarar 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 conter nmeros inteiros (array [1..9] of Integer;) ou strings.

Quando o projeto iniciar, o formulrio ser carregado na memria, neste momento ocorre um evento OnCreate. Neste evento colocaremos 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 a janela Object Inspector escolhendo o indicador Events, e d um duplo clique em OnCreate. Aparecendo o editor de cdigo com o cabealho do procedimento.

Pgina: 43

DELPHI 4 Entre com o cdigo mostrado na figura abaixo:

No procedimento acima, temos a procedure Randomize que inicializa o gerador de nmeros aleatrios utilizando como base o relgio do sistema. Nas prximas linhas atribumos valores varivel Botao[ ], associando-a aos botes do Formulrio. E logo a seguir chamada a procedure JogoNovo. Salve a Unit como JogoVelhaUnt.pas e o projeto como JogoVelha.dpr. Agora vamos implementar a procedure JogoNovo na seo Implementation, como segue. Declare tambm a varivel NumeroVezes que poder ser utilizada por todos os procedimentos desta Unidade.

Pgina: 44

DELPHI 4

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. 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 da procedure composto do nome do objeto que contm a procedure(Form) e o nome da procedure.

O procedimento JogoNovo, inicia um novo jogo apagando todas as legendas dos botes e fazendo uma nova jogada aleatoriamente. Pgina: 45

DELPHI 4 A varivel I do tipo inteiro (Integer) de uso exclusivo deste procedimento. Findo o procedimento, ela deixar de existir. Para apagar as legendas usamos a instruo for...to, que ir em loop apagando as legendas. Aqui usamos a varivel Botao[ I ] para identificar os botes do formulrio, com o index I do loop for..to. A instruo for...to, pode ser tambm for...downto, para decrementar o valor da varivel de controle (I). No exemplo, usamos somente uma declarao aps o do, se fossem necessrias mais declaraes, teramos que usar begin..end; como uma maneira de agrupar estas declaraes, indicando que todas fazem parte do loop for...to, como mostra o exemplo abaixo : for i:=1 to 3 do begin Botao[i].Caption:=''; Botao[i+1].Caption:=''; Botao[i+2].Caption:=''; end; Na linha M:= Int (Random *10);, atribumos um valor inteiro varivel M entre 1 e 10. A procedure Random gera um nmero do tipo Real X sendo, 0<=X<1, multiplicamos este nmero por 10 e pegamos a sua parte inteira, que apesar de ser um nmero inteiro do tipo Real, no podendo us-lo para indicar um boto. Para converter um nmero real em inteiro, podemos utilizar 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 nosso cdigo utilizamos 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.

Pgina: 46

DELPHI 4

O evento OnClick nos botes que dar partida ao programa. O procedimento associado a este evento, incrementar o nmero de jogadas (NumeroVezes), mudar a legenda do boto e chamar o procedimento para verificar se o jogo terminou. Construa o procedimento Verificar na seo de implementao da unidade, como segue: procedure TFrmPainel.Verificar (); label 1,2; var I: integer; begin if (Button1.Caption='X') and and (Button3.Caption='X') if (Button4.Caption='X') and and (Button6.Caption='X') if (Button7.Caption='X') and and (Button9.Caption='X') if (Button1.Caption='X') and and (Button7.Caption='X') if (Button2.Caption='X') and and (Button8.Caption='X') if (Button3.Caption='X') and and (Button9.Caption='X') if (Button1.Caption='X') and and (Button9.Caption='X') if (Button3.Caption='X') and and (Button7.Caption='X') (Button2.Caption='X') then goto 1; (Button5.Caption='X') then goto 1; (Button8.Caption='X') then goto 1; (Button4.Caption='X') then goto 1; (Button5.Caption='X') then goto 1; (Button6.Caption='X') then goto 1; (Button5.Caption='X') then goto 1; (Button5.Caption='X') then goto 1;

repeat I:=Trunc (Random * 10) until Botao[I].Caption='' ; Botao[I].Caption:='O'; Pgina: 47

DELPHI 4 if (Button1.Caption='O') and (Button2.Caption='O') and (Button3.Caption='O') then goto 2; if (Button4.Caption='O') and (Button5.Caption='O') and (Button6.Caption='O') then goto 2; if (Button7.Caption='O') and (Button8.Caption='O') and (Button9.Caption='O') then goto 2; if (Button1.Caption='O') and (Button4.Caption='O') and (Button7.Caption='O') then goto 2; if (Button2.Caption='O') and (Button5.Caption='O') and (Button8.Caption='O') then goto 2; if (Button3.Caption='O') and (Button6.Caption='O') and (Button9.Caption='O') then goto 2; if (Button1.Caption='O') and (Button5.Caption='O') and (Button9.Caption='O') then goto 2; if (Button3.Caption='O') and (Button5.Caption='O') and (Button7.Caption='O') then goto 2; 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 nosso 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. Pgina: 48

DELPHI 4 O Windows possui quadros padronizados de mensagem que servem para emitir avisos e recolher opes de tratamento dessas mensagens. Podemos incrementar o nosso 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. 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. 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;

Pgina: 49

DELPHI 4 Argumento Tipo 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

No nosso caso, o programa verificar se o boto No foi pressionado, e se foi, fechar o formulrio principal, encerrando o programa. Em nosso 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.

Pgina: 50

DELPHI 4

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. No Code Explorer, de um clique com o boto direito e no menu, escolha Rename e altere o nome do procedimento Button1Click para ButtonClick.

Aps a compilao, os procedimentos associados aos demais botes foram 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 os botes executaro o mesmo procedimento apartir do evento OnClick.

Pgina: 51

DELPHI 4

Por ltimo vamos alterar a procedure ButtonClick para que ela reconhea o boto que recebeu o evento OnClick, alterando sua Caption. procedure TFrmPainel.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.

Pgina: 52

DELPHI 4

EXEMPLO III - BLOCO DE NOTAS


O nosso prximo projeto ser um editor de texto simples do tipo caractere, com ele poderemos alterar o tipo e tamanho da fonte utilizada em todo o texto, recortar, colar e copiar partes selecionadas, salvar e abrir nosso 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 ele 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 que trabalhamos so visveis, como TEdit, TButton, TForm e outros. Os componentes no visveis, no aparecem na janela do usurio em tempo de execuo. So eles, Timer, Menus, Caixas de dilogo comuns e controle de acesso a dados. O nosso exemplo de Bloco de Notas, usar um menu e quatro caixas de dilogo. Para comear a editar o menu, d um duplo clique no controle MainMenu que est dentro do formulrio, para que a janela Menu Designer aparea.

nesta janela que iremos construir o menu do nosso exemplo. Observe que o primeiro ttulo j est selecionado. V at a janela Object Inspector e mude a propriedade Caption para &Arquivo e pressione Enter - para acesso via teclado, usamos o & comercial antes da letra que Pgina: 53

DELPHI 4 queremos que seja o atalho. Este procedimento, cria o menu Arquivo e move a barra de destaque para o lado, d um clique logo abaixo da opo Arquivo inserindo um item deste menu. Repare que o Delphi coloca um nome para este menu baseado na propriedade Caption, neste caso Name:=Arquivo.

Monte as demais opes do nosso menu seguindo a janela 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. Defina as teclas de atalho na propriedade ShortCut dos itens de menu.

Quando chegarmos ao item Formatar Fonte..., escolha a opo Create Submenu do PopupMenu, para criar um submenu deste item. Pgina: 54

DELPHI 4

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

Feche a Menu Designer, voltando ao formulrio principal. Insira nele as caixas de dilogo que iro formatar a fonte exibida no componente Memo, e as caixas que iro operar com o disco (HD). Os componentes destas caixas esto na paleta Dialogs do Delphi.

Pgina: 55

DELPHI 4

Acabamos de desenhar o nosso formulrio, colocando todos os componentes a ele pertencentes. Os visveis e os no visveis. Mesmo os componentes no visveis estando em cima do Memo, no atrapalharo a apresentao do texto. Salve seu trabalho para darmos 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 ir 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. Siga o cdigo mostrado a seguir:

procedure TPrincipal.Novo1Click(Sender: TObject); begin Memo1.Clear; Recortar1.Enabled:=False; Copiar1.Enabled:=False; Colar1.Enabled:=False; end;

Pgina: 56

DELPHI 4 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 Memo. procedure TPrincipal.Abrir1Click(Sender: TObject); begin if OpenDialog1.Execute then Memo1.Lines.LoadFromFile(OpenDialog1.Filename); end; Digite o cdigo para as outras caixas de dilogo. Elas trabalham alterando as propriedades do Memo aps as mudanas realizadas pelo usurio. procedure TPrincipal.Salvar1Click(Sender: TObject); begin if SaveDialog1.Execute then Memo1.Lines.SaveToFile(SaveDialog1.Filename); end; procedure TPrincipal.Fonte1Click(Sender: TObject); begin FontDialog1.Font:=Memo1.Font; {inicializa a FontDialog com a font de Memo} if FontDialog1.Execute then Memo1.Font:=FontDialog1.Font; end; A linha entre chaves indica um comentrio, no sendo tratada pelo compilador do Delphi. procedure TPrincipal.Cor1Click(Sender: TObject); begin ColorDialog1.Color:=Memo1.Color; if ColorDialog1.Execute then Memo1.Font.Color:=ColorDialog1.Color; end; Quando o programa comea a ser executado, o evento OnCreat ocorre com o Formulrio, no procedimento deste evento, iremos apagar o contedo do Memo e desabilitar as opes do menu Editar. procedure TForm1.FormCreate(Sender: TObject); begin Memo1.Clear; Recortar1.Enabled:=False; Copiar1.Enabled:=False; Colar1.Enabled:=False; end;

Pgina: 57

DELPHI 4 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 TPrincipal.Memo1Change(Sender: TObject); begin Recortar1.Enabled:=True; Copiar1.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 TMemo possui mtodos prprios de trabalhar com o Clipboard, eles esto nos procedimentos para os itens do menu Editar mostrados abaixo. procedure TPrincipal.Recortar1Click(Sender: TObject); begin Memo1.CutToClipboard; Colar1.Enabled:=True; {habilita o item Colar} end; procedure TPrincipal.Copiar1Click(Sender: TObject); begin Memo1.CopyToClipboard; Colar1.Enabled:=True; end; procedure TPrincipal.Colar1Click(Sender: TObject); begin Memo1.PasteFromClipboard; end; As opes Negrito e Itlico, formataro o texto e mudaro tambm a propriedade Checked do item no menu, indicando que elas esto selecionadas. Os procedimentos associados negrito e itlico, trabalham juntos 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 TPrincipal - nosso formulrio. E depois, implemente-o na seo Implementation. procedure Memo1Change(Sender: TObject); procedure Recortar1Click(Sender: TObject); procedure Copiar1Click(Sender: TObject); procedure Colar1Click(Sender: TObject); procedure Fonte; private { Private declarations } public { Public declarations } end;

Pgina: 58

DELPHI 4 implementation {$R *.DFM} procedure TPrincipal.Fonte (); begin if (Negrito1.Checked=False) and (Itlico1.Checked=False) then Memo1.Font.Style:= []; if (Negrito1.Checked=True) and (Itlico1.Checked=False) then Memo1.Font.Style:= [fsBold]; if (Negrito1.Checked=False) and (Itlico1.Checked=True) then Memo1.Font.Style:= [fsItalic]; if (Negrito1.Checked=True) and (Itlico1.Checked=True) then Memo1.Font.Style:= [fsBold, fsItalic]; end; procedure TPrincipal.Negrito1Click(Sender: TObject); begin Negrito1.Checked:= Not Negrito1.Checked; Fonte; end; procedure TPrincipal.Itlico1Click(Sender: TObject); begin Itlico1.Checked:= Not Itlico1.Checked; Fonte; end; Quando o usurio clicar no menu Sair, fechar o formulrio, finalizando a execuo do programa pois este o nico formulrio do nosso aplicativo. Isto feito com o uso do mtodo Close. procedure TForm1.Sair1Click(Sender: TObject); begin Close; end; Salve seu trabalho, e teste o programa pressionando F9. Ns j aprendemos a associar um cone ao nosso projeto, agora iremos aprender a desenhar um, utilizando o aplicativo Image Editor do Delphi. Para inicializ-lo, v at a opo Tools do menu principal do Delphi, e escolha Image Editor.

Pgina: 59

DELPHI 4

Escolha a opo New do menu File, e IconFile.

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

Pgina: 60

DELPHI 4

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

Salve o 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 nosso cone da caneta, deveremos alterar a propriedade Icon do formulrio e carregar o cone que acabamos de desenhar.

Pgina: 61

DELPHI 4

Use este cone para representar o Bloco de Notas no Windows, da mesma forma descrita para a Calculadora.

Pgina: 62

DELPHI 4

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 Inteval 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 ou no formulrio caso o boto esteja fora de algum grupo. As opes de escolhas 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.

Pgina: 63

DELPHI 4

Feito o formulrio, vamos digitar o cdigo para os eventos associados. Declare primeiro as variveis Ligado e Tecla. Ligado indicar qual o boto de opo est selecionado, e Tecla armazenar um caractere digitado no teclado. implementation var Ligado: Boolean; Tecla: Char; {$R *.DFM}

Pgina: 64

DELPHI 4 Quando o Formulrio for criado, o boto Desligado ser selecionado atravs da linha RadioGroup1.ItemIndex:= 0. A propriedade ItemIndex, indica qual o boto do grupo est selecionado. Colocaremos a data do sistema em Label2 usando a funo FormatDateTime, de acordo com a tabela mostrada no projeto da Calculadora. procedure TForm1.FormCreate(Sender: TObject); begin RadioGroup1.ItemIndex := 0; Label2.Caption:=FormatDateTime('dddd,dd "de" mmmm yyy' ,Date); {a funo Date retorna a data do sistema} end;

"de"

A propriedade ItemIndex do RadioGroup1 ser igual a 1 se o boto Ligado for selecionado, e igual a 0, caso Desligado esteja selecionado. procedure TForm1.RadioGroup1Click(Sender: TObject); begin if RadioGroup1.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. procedure TForm1.Edit1KeyPress(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;

Pgina: 65

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

Pgina: 66

DELPHI 4

MTODOS GRFICOS
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, quando o boto for selecionado.

Pgina: 67

DELPHI 4

CORES O Delphi possui trs formas diferentes de atribuir valores para o parmetro cor de um objeto grfico, so elas: a) RGB - (NRed, NGreen, NBlue), onde NRed, NGreen e NBlue pode variar de 0 a 255. Ponto vermelho: Canvas.Pixels[x,y,]:= RGB(255,0,0); b) $00bbggrr - onde bb, gg e rr variam em hexadecimal de 00 a FF. Ponto Amarelo: Canvas.Pixels[x,y]:= $0000FFFF; c) Usando uma das constantes vlidas para o objeto TColor. - Para cores fixas :clAqua, clBlack, clBlue, clDkGray, clFuchsia, clGray, clGreen, clLime, clLtGray, clMaroon, clNavy, clOlive, clPurple, clRed, clSilver, clTeal, clWhite, e clYellow. - Para 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 desenharmos 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.

Pgina: 68

DELPHI 4 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,150); end; end; 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 fica 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: Pgina: 69

DELPHI 4 procedure TForm1.Button1Click(Sender: TObject); begin With Canvas do begin MoveTo(0,0); LineTo(100,ClientHeight); Pen.Color:=clBLue; LineTo (200,150); end; 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. armazenaremos todos os estilos da caneta. Nesta matriz

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-lo novamente em Inteiro para que os mtodos MoveTo e LineTo possam aproveit-lo. Pgina: 70

DELPHI 4 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;

Pgina: 71

DELPHI 4 DESENHO DE RETNGULOS Para desenharmos retngulos usamos o mtodo Rectangle do TCanvas. Como parmetros so utilizadas as coordenadas do canto 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,330,110); end; end;

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, seria como uma borracha em cima de 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. Pgina: 72

DELPHI 4 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,330,110); end; end;

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. Siga o exemplo a seguir. procedure TForm1.Button1Click(Sender: TObject); begin With Canvas do begin Rectangle (10,10,100,80); Ellipse (10,10,100,80); Ellipse (110,10,200,80); end; end;

Pgina: 73

DELPHI 4 FIGURAS O Delphi permite a incluso de figuras no formulrio atravs do objeto Image ( poderemos carregar arquivos dos tipos EMF, WMF, BMP ou ICO. ), onde

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". 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 outros. Para ativar o code template basta acionar Ctrl+j, e logo ser mostra um popup com os cdigos permitidos. Entre com o cdigo a seguir para o boto at o ponto indicado, pressionando Ctrl+j e escolha case statement.

Pgina: 74

DELPHI 4

Complete o cdigo seguindo a listagem a seguir. implementation var sinal:integer; {$R *.DFM} procedure TForm1.ButtonClick(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; Pgina: 75

DELPHI 4 end; 3:begin picture.loadfromfile ('c:\...\frame4.bmp'); sinal:=0; end; end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin sinal:=0; end; 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 mais outros trs Image, todos na mesma posio. Incluindo tambm um controle Timer para que a mudana 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 a 4.

Pgina: 76

DELPHI 4 Digite o cdigo a seguir: procedure TForm1.ButtonClick(Sender: TObject); begin if Button.caption='Parar' then begin Button.caption:='Automtico'; Timer.enabled:=False; 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; Como prximo passo vamos incluir um controle ScrollBar ( da propriedade Interval do Timer. ) que ir controlar a variao

Pgina: 77

DELPHI 4 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 mudamos 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;

Pgina: 78

DELPHI 4

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. Ser ento mostrada a janela Filter Editor, edite-a como mostra o modelo abaixo.

Pgina: 79

DELPHI 4 D um duplo clique no controle MainMenu e edite o menu.

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

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. 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 os 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.

Pgina: 80

DELPHI 4 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 nosso quadro combo, para csDropDownList, pois no queremos que o usurio altere o contedo do combo. Evitando que o usurio entre com um nome de pessoa inexistente. 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 ( barra de ferramentas e aparecer a janela New Itens, escolha Unit. ) na

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.

Pgina: 81

DELPHI 4 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; TPessoas = file of TPessoasReg; var PesArq: Pessoas; 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. Pgina: 82

DELPHI 4 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); 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); Pgina: 83

DELPHI 4 end; end. Antes de abrir um arquivo para leitura e gravao, ns temos que associ-lo 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); Aps a associao, abrimos o arquivo, que pode ser de duas 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(PessArq, Reg); Read(PessArq, Reg); 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(PessArq, RegN); 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.

Pgina: 84

DELPHI 4 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 em que esteja trabalhando, voc poder referenciar qualquer coisa na seo de interface da unidade nomeada. Feita esta ligao, poderemos acessar as variveis e procedures da outra unidade. O nosso formulrio frmCatalogo (CatalogoUnt), ter acesso aos procedimentos das unidades ProcurarUnt e DiscoUnt. Ento, declaramos estas duas unidades logo aps as unidades j colocadas pelo Delphi. unit Catalogo; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, ProcurarUnt,DiscoUnt; Declare as variveis que iremos utilizar na unidade CatalogoUnt, como mostrado abaixo. private { Private declarations } ArqNovo,ArqAtual: string; Novo,ArquivoAberto: boolean; public { Public declarations } end; Comece a implementao dos procedimentos associados aos objetos e seus eventos, seguindo as listagens abaixo. procedure TfrmCatalogo.Sair1Click(Sender: TObject); begin Close; end; procedure TfrmCatalogo.Novo1Click(Sender: TObject); begin Nome.Text:=''; Telefone.Text:=''; Endereco.Text:=''; Novo:=True; ArqNovo:='Temp.dat'; ArqAtual:= ArqNovo; DiscoUnt.AbrirArq (PesArq, ArqNovo, Novo); ArquivoAberto:=True; end;

Pgina: 85

DELPHI 4 procedure TfrmCatalogo.Abrir1Click(Sender: TObject); begin Nome.Text:=''; Telefone.Text:=''; Endereco.Text:=''; if OpenDialog1.Execute then begin ArqAtual:=OpenDialog1.Filename; Novo:=False; DiscoUnt.AbrirArq (PesArq, ArqAtual, Novo) end else Exit; ArquivoAberto:=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; RegN: integer; begin Nome.SetFocus; if ArquivoAberto=false then begin ShowMessage ('Abra primeiro um arquivo'); exit; end; if btnNovo.Caption='&Novo' then begin Nome.Text:=''; Telefone.Text:=''; Endereco.Text:=''; btnNovo.Caption:='A&dicionar'; end else begin with Reg do begin CNome:=Nome.Text; CTelefone:=Telefone.Text; CEndereco:=Endereco.Text; end; frmProcurar.Lista.Items.Add (Nome.Text); RegN:= FileSize(PesArq); DiscoUnt.GravarArq (PesArq, RegN, Reg); btnNovo.Caption:='&Novo'; end; Pgina: 86

DELPHI 4 end;

Pgina: 87

DELPHI 4 procedure TfrmCatalogo.btnAtualizarClick(Sender: TObject); var Reg : TPessoasReg; RegN :integer; begin with Reg do begin CNome:=Nome.Text; CTelefone:=Telefone.Text; CEndereco:=Endereco.Text; end; frmProcurar.Lista.Items.Add (Nome.Text); RegN:= FilePos(PesArq)-1; DiscoUnt.GravarArq (PesArq, RegN, Reg); end;

procedure TfrmCatalogo.FormCreate(Sender: TObject); begin ArquivoAberto:=False; end;

procedure TfrmCatalogo.Salvar1Click(Sender: TObject); begin if SaveDialog1.Execute then begin ArqNovo:=SaveDialog1.Filename; DiscoUnt.FecharArq (PesArq); RenameFile(ArqAtual,ArqNovo);{a funo RenameFile,} Novo:=False; {renomeia um arquivo} DiscoUnt.AbrirArq (PesArq, ArqNovo, Novo); end; end;

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.

Pgina: 88

DELPHI 4 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 ReN e Reg. private { Private declarations } RegN: integer; Reg: TPessoasReg; Siga a listagem abaixo para os eventos associados. procedure TfrmProcurar.FormActivate(Sender: TObject); begin Lista.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); Lista.Items.Add (Reg.CNome); end; end;

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

Pgina: 89

DELPHI 4 procedure TfrmProcurar.btnOkClick(Sender: TObject); begin RegN:=Lista.ItemIndex; DiscoUnt.LerArq (PesArq,RegN,Reg); With frmCatalogo do begin Nome.Text:=Reg.CNome; Endereco.Text:=Reg.CEndereco; Telefone.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}

Pgina: 90

DELPHI 4

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 da 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 figura a seguir ilustra uma tabela de Clientes.
Cdigo 001 002 005 012 150 Nome Aldair Marina Aline Jos Mrcio Telefone 554-8788 879-9687 572-2258 7070-8580 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 deve 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 nossa chave primria. Alm de determinarmos os campos e a chave primria da nossa tabela, tambm teremos que definir o tipo de dado, comprimento, formato e o domnio para cada campo desta tabela. 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 pr definidos, podendo estar em uma lista, ou satisfazer uma regra. DATABASE DESKTOP

Pgina: 91

DELPHI 4 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, gerenciar 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.

Abra uma nova tabela como mostra a figura a seguir.

Pgina: 92

DELPHI 4 Escolha o tipo Paradox 7. Aparecendo ento a janela 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 com o boto direito do mouse nele, para ser exibido 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 nosso 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.

O campo CODIGO ser a nossa 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.

Pgina: 93

DELPHI 4

D continuidade entrando com outros campos, seguindo o modelo apresentado abaixo.

Pgina: 94

DELPHI 4 Salve-a como Clientes.db.

Logo aps, abra uma nova tabela no mesmo formato, e construa-a como mostrado abaixo.

Para que a tabela Vendas se relacione 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 o quadro de dilogo Define Secondary Index. Na janela 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. Pgina: 95

DELPHI 4 Ser ento solicitado um nome para este ndice, digite INDCODIGO.

Salve a tabela como Vendas.db. Saia do Database Desktop, atravs do menu File, opo Exit. O Delphi possui um assistente para a construo de formulrios de acesso a Banco de Dados (Form Wizard), ns iremos utiliz-lo para construirmos o nosso projeto, que utiliza as tabelas de Clientes e Vendas construdas 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.

Pgina: 96

DELPHI 4

Excludo o formulrio, inicie o wizard escolhendo a opo Form Wizard... do menu Database. 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 nosso 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.

Pgina: 97

DELPHI 4 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 do dados.

Selecione o boto >> para incluir todos os campos da tabela Clientes.db no formulrio.

Pgina: 98

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

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

Pgina: 99

DELPHI 4 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.

Selecione os campos que faro a ligao entre as duas tabelas, escolhendo INDCODIGO 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.

Pgina: 100

DELPHI 4

Pressione Next e finalize o Form Expert. O seu formulrio estar como a figura a seguir.

Pgina: 101

DELPHI 4

Vamos agora, alterar as propriedades de alguns componentes do formulrio. Comece alterando o tamanho do Panel3 referente aos dados dos clientes. E redesenhe o formulrio como a figura abaixo.

Pgina: 102

DELPHI 4 Para formatar a entrada de dados, ou seja, definir o formato do dado, para a tabela Clientes.db, d um clique duplo 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, como mostra as figuras a seguir.

Faa o mesmo para o campo Telefone, escolhendo a mscara Phone. 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: 1 - Caption:=Sai&r; Kind:=bkCLose

Pgina: 103

DELPHI 4 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 frmClientesUnt.pas.

O prximo formulrio ser construdo manualmente, sem o uso do Form Wizard. No utilizaremos o Form Wizard apenas por questes didticas, mas este novo Formulrio tambm poderia ser construdo utilizando este 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. Insira um novo formulrio ao projeto escolhendo a opo New Form do menu File ou o boto ( abaixo. ). Monte este novo formulrio utilizando os componentes descritos na figura

Pgina: 104

DELPHI 4

Altere as propriedades, de alguns componentes, indicadas na tabela a seguir:

Componente
Table1

Propriedade
DatabaseName TableName Name Active DataSet Name DatabaseName TableName Name Active DataSet Name DataSource Name ShowHint

Valor
C:\Curso Delphi 4 Vendas.db tblVendas True tblVendas dsrVendas C:\Curso Delphi 4 Clientes.db tblClientes True tblClientes dsrClientes dsrVendas navVendas True

DataSource1 Table2

DataSource2 DbNavigator

Selecione todos os TEdit, 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 TEdit. D um clique duplo em tblVendas para editar o campo Data. Repare que a janela Fields Editor aparece vazia sem nenhum campo listado. Clique com o boto direito do mouse 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.

Pgina: 105

DELPHI 4

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 a seguir.

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 que estamos projetando - Vendas, o nome dos clientes 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.

Pgina: 106

DELPHI 4

Propriedade
DataSource DataField ListSource KeyField ListField

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 combo.

Siga a tabela abaixo para determinar as propriedades do nosso 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 srie de opes pr-definidas a serem selecionadas pelo usurio, contendo um boto para cada opo. Estas opo so determinadas pela propriedade Items. 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, seguindo o modelo a seguir.

Pgina: 107

DELPHI 4 Altere outras propriedades conforme a tabela mostrada abaixo:

Propriedade
DataSource DataField Columns Caption

Valor
dsrVendas PRODUTO 3 vazia

Salve este Formulrio com o nome de frmVendasUnt.Pas. O Formulrio final mostrada abaixo.

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

Pgina: 108

DELPHI 4 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. Com isto conclumos a construo de nossa interface grfica com o usurio. Temos ento em nosso projeto trs formulrios - frmControle, frmClientes e frmVendas. Todos foram salvos no disco com o mesmo nome da sua propriedade Name mais "Unt". Comearemos o cdigo pelo frmControle. implementation uses frmVendaUnt, frmClientesUnt; {$R *.DFM} procedure TfrmControle.SpeedButton3Click(Sender: TObject); begin Close; end; procedure TfrmControle.SpeedButton2Click(Sender: TObject); begin frmVenda.Show; end; procedure TfrmControle.SpeedButton1Click(Sender: TObject); begin frmClientes.Show; end; Cdigo para frmVendas. procedure TfrmVenda.BitBtn1Click(Sender: TObject); begin frmVenda.Hide; {o mtodo Hide esconde o Formulrio, mas no a elimine da memria, enquanto que Close retira o Formulrio da memria } end; Antes de compilar o projeto, verifique se o formulrio inicial do programa mesmo o frmControle. No menu Project do Delphi, escolha a opo Option..., e defina como o Main Form o formulrio frmControle.

Pgina: 109

DELPHI 4

Execute o programa pressionando F9.

Pgina: 110

DELPHI 4

LISTA DE EXERCCIOS
1. Qual a diferena entre um programa feito para trabalhar sob o DOS e outro construdo atravs do Delphi? 2. O que encontramos na Paleta de Componentes? 3. Qual a funo da janela Object Inspector? 4. Quais os passos para desenvolvermos um programa em Delphi aps a anlise do projeto? 5. No primeiro programa que desenvolvemos, coloque um boto de comando que apague o contedo do label, e outro que finalize o programa. 6. 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. 7. 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. 8. 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 e .

9. 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. 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.

Pgina: 111