Você está na página 1de 49

DELPHI4 - CURSO BSICO

Pag 1
ndice
INICIALIZANDO O DELPHI..........................................................................................................................................2
CRIANDO UM PEQUENO PROJETO ...........................................................................................................................3
OUTRAS FORMAS DE CRIAR UM PROJETO ............................................................................................................4
LINGUAGEM OBJECT PASCAL - CONCEITOS BSICOS ......................................................................................6
PALAVRAS CHAVE........................................................................................................................................................6
VARIVEIS......................................................................................................................................................................
ARRA!S "VETORES#.....................................................................................................................................................$
RECORDS "REGISTROS#...............................................................................................................................................$
CLASSES E OBJETOS....................................................................................................................................................%
COMPONENTES& CONTROLES E PROPRIEDADES..................................................................................................%
FUN'(ES.........................................................................................................................................................................%
PROCEDIMENTOS........................................................................................................................................................1)
PASSAGEM DE PAR*METROS..................................................................................................................................1)
M+TODOS E EVENTOS...............................................................................................................................................11
ESTRUTURAS DE CONTROLE EM OBJECT PASCAL............................................................................................11
E,EMPLO DO USO DE FUN'(ES E PROCEDIMENTOS.......................................................................................13
ESCREVENDO UM EDITOR DE TE,TO SIMPLES.................................................................................................16
APERFEI'OAMENTOS DO EDITOR ........................................................................................................................1
COMPONENTES DE DADOS......................................................................................................................................1%
PROJETO DE SISTEMA I.............................................................................................................................................1%
CRIA'-O DO PROJETO..............................................................................................................................................21
OPERA'(ES COM REGISTROS E CAMPOS "C./0.121324 TF5267#......................................................................23
PROCURANDO DADOS8..............................................................................................................................................24
OUTRAS FORMAS DE ACESSAR CAMPOS ............................................................................................................24
FILTRAGEM DE REGISTROS 8...................................................................................................................................29
A PROPRIEDADE :E!E,CLUSIVE DE TTABLE....................................................................................................29
HABILITANDO E DESABILITANDO A VISUALIZA'-O DE DADOS................................................................26
NAVEGANDO PELO DATASET 8...............................................................................................................................26
PROPRIEDADES BOF 2 EOF...................................................................................................................................26
MODIFICANDO REGISTROS 8....................................................................................................................................26
MARCANDO UM REGISTRO .....................................................................................................................................2
DE VOLTA AO PROJETO PESSOAL .........................................................................................................................2
CLCULO DA FOLHA DE PAGAMENTO.................................................................................................................2$
PROJETO DE SISTEMA II............................................................................................................................................2$
CRIA'-O DO BANCO DE DADOS............................................................................................................................2%
CRIA'-O DO APLICATIVO.......................................................................................................................................3)
CRIA'-O DO FORMULRIO CADASTRO DE CLIENTES....................................................................................34
CRIA'-O DO FORMULRIO PARA QUER! DE CLIENTES................................................................................36
CRIA'-O DO FORMULRIO CADASTRO DE MERCADORIAS..........................................................................41
CRIA'-O DO FORMULRIO MOVIMENTO DE VENDAS....................................................................................43
USANDO O INTERBASE..............................................................................................................................................44
TESTANDO O BD..........................................................................................................................................................4%
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 2
INICIALIZANDO O DELPHI
grupo de programas do Delphi, no Win98 tem formato similar ao mostrado abaixo :
B;43; 4262<5.1;= . ><.12 7. D260?5 4 1. @=A0. 72 0=.@=;/;4 ;<5/; 2 32<6;= Enter 0;=; ;<244;= . D260?5.
N.3; 8 U/ 7A06.-<65BA2 <./ . /.A42 4CD=2 . ><.12 5175<;7. 32=5; . /24/. 2E253..
U/; F2G 515<5;65G;7. . D260?5 ;0=24213;=H ; 4A; IDE "A/D52132 72 D2421F.6F5/213. I132@=;7.# <.1E.=/2 /.43=;7. 1;
0H@51; 42@A5132.
N2442 ;/D52132 32/-42 ;<244. ; A/ 2753.= 72 <I75@. "C.72 E753.=# 0;=; ; <=5;JK.& 275JK. 2 F54A;65G;JK. 7. <I75@. 7.4
0=.@=;/;4 2 ; A/; 4L=52 72 E2==;/213;4 0;=; ; <.143=AJK. 7. A065<;35F..
OD42=F;17.-42 ; 0H@51; 42@A5132& 0.72/.4 572135E5<;= ;4 42@A51324 H=2;4 72 3=;D;6?. 8
- U/; D;==; 72 E2==;/213;4 <.13217. 8 ; D;==; 72 3>3A6.4& ; D;==; 72 /21A4& A/; <;5M; 72 E2==;/213;4 2 ; 0;623; 72
<./0.121324. OD42=F2& 1; D;==; 72 3>3A6.& BA2 . D260?5 ;3=5DA5 . 1./2 default 72 Project1 ;. ;065<;35F..
-U/; N;126; <./ . 1./2 72 Object Inspector . E43; N;126; 02=/532 ;<244. 75=23. ;4 0=.0=527;724 2 2F213.4
=26;<5.1;7.4 ; A/ 7232=/51;7. <./0.12132.
-U/; N;126; 1; BA;6 . D260?5 <.6.<; . 1./2 Form1. E432 L . E.=/A6H=5. ".A E.=/;& .A N;126;# <=5;7.
;A3./H35<;/2132 026. D260?5. P.= 3=H4 7; N;126; 243H 0=242132 A/; N;126; 0;=; ; 275JK. 72 <I75@. "C.72 E753.=#.
I=2/.4 ;0=24213;17. . EA1<5.1;/213. 72 <;7; A/ 7.4 262/213.4 7; IDE 7. D260?5 ; /2757; BA2 2624 E.=2/ 42
3.=1;17. 12<244H=5.4.
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 3
CRIANDO UM PEQUENO PROJETO
Ao iniciar, o Delphi j criou e colocou a nossa disposio um projeto chamado Project1, com uma unidade
de cdigo Unit1. Vamos construir o nosso primeiro projeto em cima desta base inicial fornecida pelo Delphi.
Poderamos tambm escolher a opo New Application no menu File para criar o nosso primeiro projeto .
Utilizaremos esta segunda modalidade em lies futuras.
Nosso projeto dever ter o nome primeiro.dpr e seu nico formulrio dever ter o nome forma.pas.
Ele dever abrir uma janela com o ttulo (caption) 'Primeiro Projeto' e, exibir um rtulo (Label) com a
seguinte mensagem : 'Este meu primeiro programa em Delphi'.
Para a confeco do projeto, siga os seguintes passos :
- crie, utilizando o Windows Explorer, um diretrio(pasta) com o nome CDelphi. Este diretrio
dever ser utilizado para todos os nossos trabalhos neste curso.
- crie, dentro de CDelphi um subdiretrio com o nome Ex1.
- selecione (clicando com o mouse), na paleta !tandard de componentes, o componente Label ( o
terceiro, a partir da esquerda). Clique sbre o formulrio em qualquer posiao, para inserir o componente
selecionado. No "bject #nspector$ procure a propriedade caption e insira, na coluna a direita o texto : 'Este
o meu primeiro programa em Delphi'. O componente Label est selecionado e voc poder moviment-
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 4
lo clicando e arrastando-o. Voc pode tambm, redimension-lo utilizando as alas existentes com esta
finalidade. Para centralizar o texto na janela, clique o boto direito do mouse e acesse a opo Ali%n no
menu que se apresenta. Selecione center in window na horizontal e na vertical e clique "&. !elecionando o
componente com 'm d'plo cli('e tamb)m coloca*o no centro do form'l+rio$ mas a centrali,a-.o pode ser
alterada ao colocarmos o texto.
- selecione o formulrio (clicando em que qualquer ponto do mesmo (fora do rtulo criado anteriormente) e,
no "bject #nspector propriedade caption insira : 'Primeiro Projeto' e na propriedade Name insira
FormaPrincipal.
Vamos escolher a opo !a/e Project As... no menu File . O Delphi vai nos solicitar primeiramente, um
nome para o nosso mdulo de cdigo. Vamos salv-lo (dentro do diretrio c:\CDelphi\Ex01) com o nome
forma.pas. Em seguida, o Delphi habilitar a digitao do nome do projeto. Vamos salv-lo com o nome
primeiro (que ser tambm, o nome passado para o arquivo executvel pelo Delphi).
Falta-nos apenas compilar o nosso projeto.
Temos diversas opes para a compilao do nosso projeto :
- no menu Project opo 0ompile (ou teclando Ctrl+F9) ; neste caso sero compilados apenas os
mdulos que sofreram alterao aps o ltimo processo de compilao.
- no menu Project opo 1'ild All para obter a compilao de todos os mdulos, sem exceo.
Obs : Neste menu temos ainda uma opo para 0hec2 de sintaxe.
- no menu 3'n opo 3'n (ou teclando F9 ou clicando no cone correspondente na barra de
ferramentas) ; neste caso sero compilados os mdulos que sofreram alterao e o programa ser
executado.
Normalmente, o uso da tecla F9 o mais conveniente pois compilamos e comandamos a execuo
imediatamente...
Feita a compilao temos um programa completo e funcional. Ele no faz quase nada de produtivo, apenas
abre uma janela do Windows e coloca uma mensagem no meio desta janela...
A ttulo de exerccio o aluno convidado a verificar o funcionamento do programa : maximize e minimize o
formulrio; desloque-o e redimensione-o; feche o formulrio utilizando o menu de sistema (e as teclas
Alt+F4). Observe que a centralizao do componente se perde ao redimensionarmos o formulrio.
OUTRAS FORMAS DE CRIAR UM PROJETO
Delphi oferece uma flexibilidade muito grande na criao de nossos projetos. Selecionando-se New no
menu File ser aberta a caixa New tems mostrada abaixo :
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 9
A <;5M; 72 75H6.@. N2O I32/4 E.=12<2 A/; F543; 5132=1; 7. R20.453I=5. 72 ODN23.4 7. D260?5. E432 =20.453I=5. <.13L/
E.=/A6H=5.4& 0=.N23.4 2 wizards. V.<P 0.72 A4;= .4 .DN23.4 75=23;/2132& <.05H-6.4 0;=; 7213=. 72 42A 0=.N23. .A ?2=7;=
53214 72 .DN23.4 2M54321324.
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 6

LINGUAGEM OBJECT PASCAL - CONCEITOS BSICOS
Vamos abrir o projeto primeiro.dpr criado anteriormente, utilizando o menu File opo "pen...4 o' "pen
Project o' 3e"pen) e$ em se%'ida /amos acessar o 0ode Editor. O 0ode Editor pode ser acessado de
qualquer uma das seguintes maneiras :
- teclando Shift+F12 e selecionando o formulrio desejado (quando houver mais de 1).
- teclando F12; esta tecla nos permite passar da visualizao do formulrio para a visualizao
do cdigo e vice-versa e deve ser a preferida pelo aluno por ser a mais conveniente.
- clicando em um do itens correspondentes na caixa de ferramentas.
- selecionando a opo Project 5ana%er no menu 6iew.

Observe que muitas linhas terminam com ponto e vrgula, esta a forma que o Object Pascal usa para
indicar o trmino de um comando. Voc pode escrever mais de um comando em uma linha, esta no , no
entanto, uma boa prtica pois o cdigo fica confuso e difcil de depurar.
PALAVRAS CHAVE
Palavras-chave ou palavras reservadas so aquelas usadas pela sintaxe da linguagem com significado
especfico e, portanto, no podem ser usadas com outra finalidade. As palavras-chave aparecem em negrito
no 0ode Editor.
Em nosso mdulo de cdigo forma$ encontramos as seguintes palavras-chave, exibidas em negrito :
- unit : esta palavra-chave define o nome da unidade de cdigo. Este nome ser inserido na clusula
'ses de outras unidades que precisem fazer referncia a esta unidade.
- interface : define o incio de um trecho de cdigo que termina antes da palavra-chave implementation.
Neste trecho se insere o cdigo que poder ser acessado por outras unidades. aqu que se declaram as
constantes, as variveis, os tipos de dados, funes e procedimentos a serem utilizados por outras unidades
de cdigo.
- uses : esta palavra especifica as unidades de cdigo que sero acessadas por esta unidade.
- type : com esta palavra-chave o Delphi define o incio do trecho de cdigo em que so definidos os tipos
de variveis e de classes criados pelo programa. O aluno pode observar que o Delphi j utilizou esta parte
para declarar a classe TFormaPrincipal.
- private : define os elementos de uma classe que no podero ser acessados de fora da classe;
- public : define os elementos de uma classe que podero ser acessados de fora da classe.
- var : define o incio do trecho de cdigo em que so declaradas as variveis e objetos.
- implementation : define o incio do trecho de cdigo em que so implementadas as funes e
procedimentos declaradas no trecho iniciado pela palavra chave interface.
- end : palavra-chave usada para encerrar um bloco de cdigo. So blocos de cdigo :
- um bloco de comandos iniciado pela palavra chave begin, caso em que end deve ser seguida
de um ponto-e-vrgula (;).
- a definio de uma unit; neste caso a palavra end deve ser seguida de um ponto (.) e este ser o
final do arquivo.
Exceo : antes da clusula else em instrues condicionais if-then-else compostas, no se insere
ponto (.) ou ponto-e-vrgula (;), utilizando-se apenas a palavra end.
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag
VARIVEIS
Nossos dados so armazenados na memria do computador. Para que ns no tenhamos que nos referir a
estes dados de forma direta, atravs de um endereo numrico difcil de memorizar, o compilador nos
permite utilizar variveis com esta finalidade. Escolhendo nomes sugestivos (mnemnicos) para nossas
variveis (tais como nome$ f'ncao$ idade$ salario) facilitamos bastante a compreenso de nosso cdigo.
Para que o Delphi possa usar nossas variveis, devemos primeiro declar-las, isto , informar o nome e o
tipo desejados. Por exemplo : o comando a seguir declara idade como sendo uma varivel do tipo inteiro
(inte%er) : idade : integer;
As variveis inteiras podem assumir valores entre -32768 e +32767. Elas ocupam 2 bytes na memria.
Asim sendo, a declarao acima faz com que o Delphi reserve 2 bytes para a nossa varivel idade. Note
que a declarao do tipo de uma varivel, em princpio no lhe atribui valores. Um erro comum em
programao tentarmos ler valores de variveis no inicializadas, ou s quais ainda no se atribuiu
valores...
Damos a seguir uma lista dos tipos de variveis mais comuns do Object Pascal com suas faixas de
valores e o espao ocupado em memria:
BOOLEAN : Tipo lgico que pode assumir somente os valores TRUE ou FALSE e ocupa 1 byte de
memria.
BYTE : Tipo numrico inteiro, pode assumir valores numa faixa de 0 a 255, ocupa 1 byte.
CHAR : Tipo alfa-numrico, pode armazenar um caractere ASC, ocupa 1 byte.
COMP : Tipo numrico real, pode assumir valores na faixa de -9.2.10
-18
a 9.2.10
+18
, ocupa 8
bytes, pode ter entre 19 e 20 algarismos significativos.
EXTENDED : Tipo numrico real, pode assumir valores na faixa de -3,4.10
-4932
a +1,1.10
+4932
, ocupa
10 bytes de memria e tem entre 19 e 20 algarismos significativos.
NTEGER : Tipo numrico inteiro, pode assumir valores numa faixa de -32768 a +32767, ocupa
2 byte de memria.
LONGNT : Tipo numrico inteiro, pode assumir valores numa faixa de -2147483648 a
+2147483647, ocupa 4 bytes de memria.
REAL : Tipo numrico real, pode assumir valores na faixa de -2,9.10
-39
a +1,7.10
+38
, ocupa 6
bytes de memria e tem entre 11 e 12 algarismos significativos.
SHORTNT : Tipo numrico inteiro, pode assumir valores numa faixa de -128 a +127, ocupa 1byte
de memria.
SNGLE : Tipo numrico real, pode assumir valores numa faixa de -1,5.10
-45
a +3,4.10
+38
, ocupa 4
bytes de memria, e tem de 7 a 8 algarismos significativos.
WORD : Tipo numrico inteiro, pode assumir valores numa faixa de 0 a 65535, ocupa 2bytes de
memria.
STRNG : Tipo alfanumrico, possuindo como contedo uma cadeia de caracteres. O nmero de
bytes ocupados na memria varia de 2 a 256, dependendo da quantidade mxima de
caracteres definidos para a string. O primeiro byte contm a quantidade rela de
caracteres da cadeia.
Os nomes de variveis devem comear com uma letra ou o caractere sublinhado (_) seguido por uma
sequncia de letras, dgitos ou caractere sublinhado (_) e no podem conter espao em branco nem
quaisquer tipos de acentos. Os nomes de variveis podem ter qualquer tamanho mas somente os 63
primeiros caracteres sero considerados.
Exemplos : Para definir uma varivel Nome do tipo string e uma varivel !alario do tipo do'ble$
podemos inserir as seguintes linhas de cdigo na clusula var da unidade de cdigo correspondente.
Nome : string;
Salario : double;
Pode-se declarar mais de uma varivel do mesmo tipo na mesma linha, separando-as por vrgula.
nome, funcao, endereco : string;
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag $
ARRAYS VETORES!
Arrays so conjuntos de variveis com o mesmo nome e diferenciadas entre si por um ndice. Eles so teis
para manipularmos grandes quantidades de dados de um mesmo tipo pois evitam a declarao de diversas
variveis.
Considere o caso de um programa de Folha de Pagamento que precise armazenar os seguintes dados
referentes a 100 funcionrios : nome, funcao, salrio, etc... Seramos obrigados a declarar 100 varveis
nome, 100 variveis funcao, etc... O array nos permite declarar uma nica varivel com um ndice para
apontar para as diferentes ocorrncias.
Declara-se um array da seguinte forma :
nome_da_varivel : array[i1..i2] of tipo_de_varivel; onde i1 e i2 repreentam os valores mnimo e
mximo, respectivamente, do ndice.
O Object Pascal permite que i1 e i2 possuam qualquer valor desde que i1 seja menor ou igual a i2. Assim,
poderiamos declarar um array de 100 variveis inteira idade de vrias formas diferentes :
idade : array [1..100] of integer; ou
idade : array [-100..-1] of integer; ou
idade : array [0..99] of integer, etc...
Pode-se definir arrays multidimensionais (com vrios ndices) como, por exemplo :
espaco3d:array[1..10,-5..20,0..30] of double; que pode armazenar 10x26x31=8060 variveis do tipo double.
Um dos casos mais comuns a matriz com m linhas e n colunas : matriz : array[1..m,1..n] of qqer_tipo.
Os elementos dos arrays podem ser quaisquer tipos de variveis ou objetos.
RECORDS REGISTROS!
O Object Pascal permite definir tipos compostos de variveis denominados registros. Define-se da seguinte
forma :
nome_do_tipo : Record
variavel1 : primeiro_tipo;
variavel2 : segundo_tipo;
.......
variaveln : n-zimo-tipo;
end;
variavel1,variavel2.. variaveln so chamadas de campos do registro.
Declaramos uma varivel deste tipo da mesma forma que procedemos para declarar variveis de qualquer
tipo pr-definido
variavel : nome_do_tipo;
Usamos a notao de ponto para acessar um campo de uma varivel composta :
nome_da_varivel.nome_do_campo;
Exemplo :
funcionario = Record
nome : string;
funcao : string;
salario : double:
end;
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag %
Assim, no exemplo citado anteriormente, ao invs de declararmos um array nome de 100 elementos, um
array funcao de 100 elementos, um array salario de 100 elementos, podemos declarar uma nica varivel
chamada empregado, por exemplo, como sendo um array de 100 elementos do tipo funcionrio.
empregado : array[1..100] of funcionario;
Para obter os dados do dcimo funcionrio, basta fazer :
empregado[10].nome;
empregado[10].funcao;
empregado[10].salario;
CLASSES E OBJETOS
Definio de classe :
nome_da_classe_derivada = class(nome_da_classe_base)
private
{propriedades, campos e mtodos privados}
public
{propriedades, campos e mtodos pblicos}
end;
A definio de uma classe bastante similar a de um registro. As classes, diferentemente dos registros
podem conter funes ou procedimentos, chamados mtodos, alm de variveis.
Quando uma classe derivada de outra (chamada classe base, classe pai ou classe me), ela herda os
campos, propriedades e mtodos da classe base.
O Delphi possui uma classe chamada TObject da qual todas as demais classes se derivam, ou seja, todas
as classes so derivadas de TObject ou de classes derivadas de TObject. Quando voc deriva uma classe
de TObject , no preciso declarar explicitamente a classe base pois o Delphi assume TObject como
default.
Um objeto uma instncia de uma classe, isto , depois de definirmos uma classe podemos declarar e
utilizar objetos desta classe, da mesma forma que podemos declarar e usar uma varivel composta (um
registro, por exemplo) depois que o tivermos definido. De forma anloga, tambm, nos referimos aos
elementos de um objeto utilizando a notao de ponto : nome_do_objeto.nome_do_elemento;
COMPONENTES" CONTROLES E PROPRIEDADES
O Delphi j possui muitas classes predefinidas para utilizao no ambiente Windows. Algumas das classes
do Delphi, chamadas genericamente de componentes podem ser acessadas atravs da paleta de
componentes conforme j mostramos anteriormente.
Outra classe bastante utilizada a classe Tform que define um formulrio, mas que no est disponvel na
paleta de componentes. Mas, se olharmos na listagem do exerccio Ex01 verificamos que o Delphi define
automaticamente uma classe derivada de Tform (TFormaPrincipal no nosso exemplo) e declara um objeto
desta classe (FormaPrincipal no nosso exemplo).
As propriedades so um tipo especial de campo em um objeto, cujo valor pode, em alguns casos, ser
alterado usando-se o Object nspector, como fizemos, por exemplo, com a propriedade Caption de
FormaPrincipal no exerccio Ex01. Outras propriedades s podem ser alteradas por programa (run-time). O
sistema de Help do Delphi fornece, para cada classe, uma listagem completa de suas propriedades e seus
mtodos.
FUN#$ES
Uma funo se define em Pascal de forma semelhante a definio matemtica. Ela recebe valores como
parmetros e retorna um outro valor como resultado. A definio de funo obedece a seguinte sintaxe :
function nome_da_funo(parmetro_1:tipo_1,,,,,parmetro_n:tipo_n) : tipo de retorno
var
{declarao de variveis locais funo}
begin
{corpo da funo}
end;
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 1)
O trecho de cdigo a seguir define a funo PRODXY, que retorna como resultado o produto de dois
nmeros reais X e Y:
function PRODXY(X,Y:Real):Real
begin
PRODXY := X*Y;
end;
Observe que o sinal de atribuio em Object Pascal := e, no o sinal de igual simplesmente.
Em Object Pascal podem-se usar os seguintes operadores aritmticos :
+ : Soma;
- : Subtrao;
* : Multiplicao;
/ : Diviso;
div : Diviso inteira e
mod : Resto da diviso inteira.
O Object Pascal tem vrias funes predefinidas, parte das quais listamos a seguir :
Abs(x) Retorna o valor absoluto de x.
ArcTan(x) Retorna o valor do arco tangente de x (em radianos).
Cos(x) Retorna o cosseno de x (x em radianos).
Dec(x) Decrementa (subtrai 1) uma varivel inteira x.
Exp(x) Retorna o valor de e elevado a x , onde e a base dos logaritmos neperianos.
Frac(x) Retorna a parte fracionria do real x.
nc(x) ncrementa (soma 1) uma variavel inteira x.
nt(x) Retorna a parte inteira do real x.
Ln(x) Retorna o logaritmo neperiano de x.
ODD(x) Retorna True se x for impar.
Sqr(x) Retorna o quadrado de x.
Sqrt(x) Retorna a raiz quadrada de x.
PROCEDIMENTOS
Um procedimento semelhante a uma funo, mas no retorna um valor. A chamada a um procedimento
no pode ser colocada do lado direito de um comando de atribuio.
A definio de um procedimento obedece a seguinte sintaxe :
procedure nome_do_procedimento(parmetro_1:tipo_1,,,,parmetro_n : tipo_n)
var
{declarao de variveis locais ao procedimento}
begin
{corpo do procedimento}
end;
PASSAGEM DE PAR%METROS
Podemos passar parmetros para uma funo ou um procedimento por /alor e por refer7ncia. Quando se
passa um parmetro por /alor estamos realmente passando um valor ou a cpia de um valor armazendao
numa varivel. Quando a passagem se faz por referncia, estamos passando o endereo da varivel na
memria e no o seu valor. Quando se altera, dentro da funo, o valor de uma varivel passada por por
refer7ncia esta alterao surte efeito em todo o programa (fora da funo).
Para passarmos um parmetro por refer7ncia devemos preced-lo da palavra reservada var.
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 11
M&TODOS E EVENTOS
Um mtodo um tipo especial de procedimento ou funo, definido dentro de uma classe. Por ser definido
dentro da classe, ele pode acessar diretamente os campos dela sem a necessidade de passar este campos
como parmetros. Para executar um mtodo de uma determinada classe basta usar a mesma notao de
ponto usada para acessar um campo.
Um evento muito semelhante a um mtodo pois ambos so definidos internamente a uma classe. A
diferena que os eventos so executados em resposta a alguma ao do usurio ou em resposta a uma
mensagem enviada pelo Windows. Cite-se como exemplo o evento OnClick de um formulrio, um
procedimento que executado toda vez que o usurio d um clique com o mouse sbre o formulrio. sto
permite que o nosso programa execute alguma ao quando o usurio clica com o mouse sobre o controle.
ESTRUTURAS DE CONTROLE EM OBJECT PASCAL
N.4 65/53;=2/.4 ; ;0=24213;= A/; D=2F2 724<=5JK. 7; 4513;M2 7244;4 243=A3A=;4Q .4 0=IM5/.4 2M2/06.4 A3565G;/-1;4 2
42=F5=K. 72 2M2/06.4 72 ;065<;JK..
ESTRUTURA CONDICIONAL if-then-else
S513;M2 8
if "<.175JK.#
then
begin
RB6.<. 72 <./;17.4 2M2<A3;7.4 42 ; EA1JK. E.= F2=7;725=;S
end
else
begin
RB6.<. 72 <./;17.4 2M2<A3;7.4 42 ; EA1JK. E.= E;64;S
end;
C;4. F.<P 1K. BA25=; 2M2<A3;= BA;6BA2= <./;17. 42 ; <.175JK. E.= E;64;& 4A0=5/; 3.7; ; <6HA4A6; else :
if"<.175JK.#
then
begin
RB6.<. 72 <./;17.4 2M2<A3;7.4 42 ; EA1JK. E.= F2=7;725=;S
end;
N.32 BA2 . end BA2 0=2<272 ; <6;A4A6; else 1K. L 42@A57. 72 ;.
N.32 BA2 ;4 <6HA4A6;4 begin 2 end 4I 4K. 12<244H=5;4 0;=; D6.<.4 <./ /;54 72 A/; 651?;.
ESTRUTURA CONDCONAL case-of
Sintaxe :
case expresso of
constante_1_1,...constante_1_n : bloco_de_comando_1;
constante_2_1,...constante_2_n : bloco_de_comando_2;
...
constante_n_1,...constante_n_n : bloco_de_conabdi_n:
else
bloco_de_comando;
end;
O comando case um substituto mais elegante e mais legivel para if-then-else mltiplos. A expresso
(ou seletor) dever ser de tipo com o tamanho mximo de 2 bytes (Byte, Char,,Word ou Integer) .
Segue-se um exemplo :
case Ch of
'A'..'Z', 'a'..'z' : WriteLn('Letra');
'0'..'9' : WriteLn('Digito');
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 12
'+', '-', '*', '/' : WriteLn('Operador');
else
WriteLn(' Caracter Especial');
end;
ESTRUTURA DE REPETO (for-to, for-downto
Sintaxe :
for contador:=valor_inicial to valor_final do
begin
{bloco_de_comandos}
end!
.172 8
<.13;7.= L A/; F;=5HF26 51325=;Q
F;6.=T515<5;6 L . F;6.= 515<5;6 7. <.13;7.=& BA2 72F2= 42= A/ 1U/2=. 51325=.Q
F;6.=TE51;6 L . F;6.= E51;6 "0;=; . BA;6 . 6;J. 42 21<2==;=H# ; 42= ;44A/57. 026. <.13;7.=& 72F2 42= 51325=.Q
S2 42 7242N;= BA2 . <.13;7.= ;44A/; F;6.=24 72<=24<21324 72F2-42 A4;= ; 42@A5132 4513;M2 8
for contador:=valor_inicial downto valor_final do
begin
{bloco_de_comandos}
end!
N.32 BA2 ;4 <6HA4A6;4 begin 2 end 4I 4K. 12<244H=5;4 0;=; D6.<.4 <./ /;54 72 A/; 651?;.
ESTRUTURA DE REPETO while-do
Sintaxe:
while expresso_booleana do
begin
bloco_de_comando;
end!
Note que o bloco_de_comando executado enquanto a expresso_booleana for verdadeira.
Note que como a expresso_booleana avaliada antes da execuo do bloco_de_comando, se a
expresso_booleana for falsa o bloco_de_comando no ser executado nenhuma vez.
N.32 BA2 ;4 <6HA4A6;4 begin 2 end 4I 4K. 12<244H=5;4 0;=; D6.<.4 <./ /;54 72 A/; 651?;.
ESTRUTURA repeat-untill
Sintaxe :
repeat bloco_de_comando untill expresso_booleana;
Note que o bloco de comando executado em sequncia, enquanto a expresso_booleanda for verdadeira.
Note que o bloco de comando executado pelo menos uma vez, j que a expresso_booleana avaliada
depois dele.
Note que bloco_de_comando pode exigir as clusula begin e end se contiver mais de uma linha.
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 13
ESTRUTURA with
Sintaxe
with identificador_de_registro(objeto) do bloco_de_comando
Note que with uma forma abreviada de referenciar os campos de um registro ou os campos e mtodos de
um objeto. Dentro do bloco_de_comando (com with) uma varivel ou mtodo fica completamente
identificada usando-se apenas seu identificador de campo.
ESTRUTURA try-e"cept-end
Sintaxe :
try
squncia_de_comandos
e"cept
bloco_a_ser_executado_no_caso_de_erros
end!
Esta estrutura nos permite tratar de forma conveniente os erros ocorridos no programa. Sem ela, ocorrendo
um erro, o Delphi dispara o seu mecanismo de tratamento de excees, normalmente emitindo uma
mensagem de erro em ingls e no nos dando chance de recuperao. Com esta estrutura podemos detetar
o erro, fornecer uma mensagem inteligivel e permitir o retorno rotina onde ocorreu o erro e permitir, por
exemplo, a possibilidade de digitao.
E'EMPLO DO USO DE FUN#$ES E PROCEDIMENTOS
Vamos criar, no Delphi, um projeto com um formulrio em branco; vamos dar ao projeto o nome de
segundo.dpr e ao formulrio (que nico), o nome forma.pas. Devemos criar um diretrio
C:\CDelphi\Ex8 e mandar salvar o programa neste diretrio. Vamos dar o ttulo (caption) de Uso de
Funes e Procedimentos ao nosso formulrio.
Vamos baixar 5 componentes Tedit, 5 componentes Tlabel e dois componentes BitBtn.
Faamos a propriedade Active Control da Form1 = a Edit1 e mudemos o caption de Form1 para : Funes
e Procedimentos.
Vamos retirar os textos das caixas de edio e fazer os captions dos rtulos para que a nossa janela fique
com o visual mostrado abaixo :
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 14
Segue-se o cdigo correspondente :
unit forma;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons;
type
TFprincipal = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
9 Pri/ate declarations :
public
9 P'blic declarations :
end!
Empregados = class
public
nome : string;
funcao : string;
salario : double;
salario_hora : double;
horas_trab : integer;
function calcula_salario : double;
9Declaramos 'ma f'n-.o dentro da classe$ isto ) 'm m)todo :
procedure desconto_inss ;
9Declaramos 'm procedimento dentro da classe$ isto ) 'm m)todo :
end!
var
Fprincipal: TFprincipal;
Funcionario : Empregados;
taxa_inss : integer;
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 19
implementation
9;3 <.DF5:
procedure calc_salario(var salario, salario_hora : double ; horas_trab : integer);
begin
salario := salario_hora * horas_trab;
end!
function Empregados.calcula_salario : double;
begin
calcula_salario := Funcionario.salario_hora * Funcionario.horas_trab;
end!
procedure Empregados.desconto_inss;
begin
9#sto ) 'm m)todo * n.o preciso da nota-.o de ponto em salario.=ambem n.o preciso de/ol/er
/alores$ pois esto' imprimindo o /alor em Edit> a('i dentro do procedimento.Edit> n.o pertence a
classe. =enho ('e precede*la do nome do objeto ('e a poss'i 4no caso FPrincipal) e 'm ponto:
FPrincipal.Edit6.Text := FloatToStr(taxa_inss * salario/100);
end!
procedure TFprincipal.BitBtn1Click(Sender: TObject);
begin
Funcionario.nome := Edit1.Text;
Funcionario.salario_hora := StrToFloat(Edit2.Text);
Funcionario.horas_trab := StrTont(Edit3.Text);
9A f'n-.o retorna 'm /alor podemos 's+*la a direita de 'm sinal de atrib'i-.o. Notar ('e n.o
precisamos passar par?metros para a f'n-.o$ pois a mesma pertence a classe 4) 'm m)todo da
classe). =i/emos$ sim$ ('e 'sar a nota-.o de ponto. :
9=este1@:
Funcionario.salario := Funcionario.calcula_salario;
Edit4.Text := FloatToStr(Funcionario.salario);
9PoderAamos escre/er tambem$ de forma mais compacta @
EditB.=ext @C Float=o!tr4F'ncionario.0alc'laDsalario)E:
9A proced're n.o retorna /alores$ se ela precisar de/ol/er 'm /alor teremos ('e passar 'm parametro
por referencia$ no caso passamos F'ncionario.salario.A proced're nada tem a /er com a classe$ assim$
temos ('e passar /alores atra/)s de par?metros. =amb)m n.o 'samos a nota-.o de ponto no nome
da proced're $ pois ela ) independente da classe.:
calc_salario(Funcionario.salario,Funcionario.salario_hora,
Funcionario.horas_trab);
Edit5.Text := FloatToStr(Funcionario.salario);
Funcionario.desconto_inss;
end!
procedure TFprincipal.FormCreate(Sender: TObject);
begin
Funcionario := Empregados.create;
taxa_inss := 10; 9Fi,emos o desconto do inss C a 1F para todos:
end!
end.
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 16
ESCREVENDO UM EDITOR DE TE'TO SIMPLES
Vamos criar, no Delphi, um projeto utilizando a template SDApplication
(File/New/Projects/SDApplication). Vamos utilizar os nomes dados pelo Delphi. Devemos criar um
subdiretrio C:\CDelphi\ExG e mandar salvar o programa neste diretrio.
Vamos baixar um componente TMemo ocupando toda a rea do cliente. Para isso, d um duplo clique no
componente (na paleta de componentes); isto colocar o componente no meio da tela. Em seguida, no
Object nspector faa Align = alClient. sto far com que ele ocupe toda a rea do cliente. Entre na
propriedade Lines de Memo1 e apague a primeira linha colocada pelo Delphi. Observe a forma alternativa
que usamos para baixar um componente. sto pode ser usado com qualquer componente, que ser sempre
colocado no meio da tela. Hrea do cliente a rea til da tela, isto , descontadas a barra de ttulo, a barra
de menus, a barra de ferramentas e a barra de status.
Faamos a propriedade Active Control do formulrio = Memo1 e mudemos o seu caption para : Editor de
Texto. Vamos criar um procedimento para o evento OnShow de SDAppForm. Para tal, no Object
nspector, em Eventos d um duplo clique em OnShow. nsira, na procedure aberta pelo Delphi, o cdigo :
Memo1.SetFocus;
sto faz com que possamos digitar texto de imediato a partir do incio de Memo1. Substitua trechos de
cdigo, como abaixo :
procedure TSDAppForm.OpentemClick(Sender: TObject);
begin
if OpenDialog.Execute = True then
Memo1.Lines.LoadFromFile(OpenDialog.FileName);
Memo1.SetFocus;
end;
procedure TSDAppForm.SavetemClick(Sender: TObject);
begin
if SaveDialog.Execute = True then
Memo1.Lines.SaveToFile(SaveDialog.FileName);
end;
Vamos escolher um speedbutton (paleta adicional) para o menu Ajuda. Carregue C:Arquivos de
Programas\Arquivos Comuns\Borland Shared\mages\Buttons\Help.bmp na propriedade Gliph. Se tiver
dificuldade em alinhar o boto na altura faa sua propriedade top igual a de um qualquer dos outros botes.
Escolha para seu evento OnClick o mesmo do tem de menu About...
Coloque a propriedade FileName= *.txt. Default Extension = txt e Filter = Arquivo Texto (*.txt)|*.txt para os
componentes OpenDialog e SaveDialog.
Vamos traduzir os menus e mudar rtulos do formulrio About para que os formulrioos mostrem o visual
abaixo :
NOTA : O icone foi escolhido com duplo clique no componente mage, selecionando Load e dando Ok na
figura escolhida. Escolhemos C:Arquivos de Programas\Borland\Delphi3\mages\icons\handshak.ico.
Altere os Hints da seguinte forma :
Abrir|Abre arquivo existente
Salvar|Salva o Arquivo
Sair|Encerra o Programa
Sobre|Autoria e nformaes
O aluno deve observar :
Uso dos hints nos botes da speedbar e nos itens de menu;
Teclas sublinhadas no menu;
Teclas de atalho;
Uso de ... (no menu)
Nosso programa est pronto e pode ser compilado e testado pelos alunos...
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 1
APERFEI#OAMENTOS DO EDITOR
Vamos inserir algumas opes para escolha de Fontes, Cor de Fundo e Selees (de Comprimento de
Linha e Atributos de Leitura/Gravao).
Para tal vamos baixar um componente FontDialog da paleta Dialogs; vamos inserir o item de menu Editar|
Fontes (dando um duplo clique no componente Tmenu).
D um duplo clique no evento OnClick do item de menu Fontes1 e tecle na procedure aberta, o cdigo
abaixo :
if FontDialog1.Execute then
Memo1.Font := FontDialog1.Font;
Vamos baixar um componente ColorDialog da paleta Dialogs e inserir o item de menu Editar|Cor de Fundo
(dando um duplo clique no componente Tmenu).
D um duplo clique no evento OnClick do item de menu CordeFundo1 e tecle na procedure aberta, o cdigo
abaixo :
if ColorDialog1.Execute then
Memo1.Color := ColorDialog1.Color;
SDiAppForm.Color := Memo1.Color;
Note que fizemos a cor do formulrio igual a cor do componente Memo1.
Vamos inserir novo formulrio (selecionando New|Dialogs). Escolha o Standard Dialog com botoes na
vertical. Salve este formulrio com o nome de mdulo Seleta.pas e nome de formulrio FrmSel e coloque
os componentes mostrados.
Observar que fizemos o primeiro grupo de Radio Buttons dentro de uma GroupBox e baixamos 3
RadioButtons. No segundo grupo preferimos baixar um RadioGroup e gerar os RadioButtos na propriedade
tens. No primeiro caso escolhemos o boto default com a propriedade Checked = True, no segundo caso
fizemos temndex = 0.O terceiro conjunto est dentro de um GroupBox. E a seleo tambem se faz pela
propriedade Checked.
Vamos criar o item de menu Editar|Selees, dar um clique duplo no evento OnClick e teclar o cdigo que
se segue, na procedure aberta pelo Delphi :
FrmSel.ShowModal;
if FrmSel.ModalResult=mrOK then
begin
if FrmSel.RadioButton1.Checked = True then
Memo1.Width := SDAppForm.Width;
if FrmSel.RadioButton2.Checked = True then
Memo1.Width := SDAppForm.Width*3 div 4;
if FrmSel.RadioButton3.Checked = True then
Memo1.Width := SDAppForm.Width div 2;
if FrmSel.RadioGroup1.temndex = 0 then
Memo1.ReadOnly := True
else
Memo1.ReadOnly := False;
if FrmSel.CheckBox1.Checked = True then
Memo1.Alignment := taCenter
else
Memo1.Alignment := taLeftJustify;
if FrmSel.CheckBox2.Checked = True then
Memo1.WordWrap := True
else
Memo1.WordWrap := False;
end;
nsira Seleta na uses de SDMain.
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 1$
Refaa a propriedade Align de Memo1 para Align = alNone (para possibilitar a variao da largura).
Note poScreenCenter na propriedade Position do formulrio. Verifique tambm seu Border Style (para no
variar o tamanho da tela. Verifique FormCreate e FormShow p/ ajuste inicial de cor e uso de Hint. Notar
'bug' da cor e escondendo o bug de no variar o tamanho.
Note que ao mudarmos a fonte a mudana atinge tudo inclusive o texto j digitado. Esta uma limitao do
componente TMemo. O Delphi3 possui um component TRichEdit com propriedades bem superiores.
As figuras a seguir, mostram como ficou o visual do Editor e da tela de selees.
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 1%
COMPONENTES DE DADOS
O Delphi oferece ao usurio (na sua Paleta de Componentes) duas pginas de componentes aplicveis a
bancos de dados :
A pgina Data Access contm componentes que acessam os dados e permitem especificar o
banco de dados, suas tabelas e registros. Clicando-se a aba correspondente a esta pgina, sero
mostrados os componentes abaixo :
Na ordem : DataSource, Table, Query, StoredProc, DataBase, Session,BatchMove, UpdateSQL,
Provider, ClientDataSet, RemoteServer.
A pgina Data 0ontrols contm componentes de visualizao e edio de dados. Eles nos
permitem visualizar e entrar dados nas tabelas. Clicando-se a aba correspondente a esta pgina,
sero mostrados os componentes abaixo :
Na ordem : DBGrid, DBNavigator, DBText, DBEdit, DBMemo, DBmage, DBListBox,
DBComboBox, DBCheckBox, DBRadioGroup, DBLookupListBox, DBLookupComboBox,
DBRichEdit, DBCtrlGrid e DBChart.
Nota : O componente Data Source, apesar de incluido na pgina Data Access , na realidade, um
componente que faz a ligao entre os componentes de acesso e os componentes de visualizao de
dados.
PROJETO DE SISTEMA I
A melhor forma de se estudar o funcionamento dos vrios componentes referentes a bancos de dados
utilizando-os em um projeto simples, como faremos a seguir :
Nosso projeto ter por finalidade processar a Folha de Pagamento de uma pequena empresa e 32=H 7A;4
3;D26;4& '=abF'n.db, contendo dados cadastrais dos funcionrios da empresa e '=abDados.db contendo os
'dados variveis' de cada funcionrio para um ms. Esta ltima tabela contm um registro para cada
semana trabalhada contendo o nmero de horas que o funcionrio trabalhou na semana. Os funcionrios
so horistas, isto , recebem por hora trabalhada. O pagamento mensal e seu clculo envolve totalizar as
horas no mes (somando as horas na semana) e multiplicar este total pelo salrio hora.
Antes de iniciarmos o projeto vamos criar as tabelas do sistema. Devemos, tambm, preliminarmente, criar
um subdiretrio independente C:\CDelphi\Dados para conter as nossas tabelas.

Tabela '=abF'n.db :
- Entre =ools/Database Des2top e escolha no menu File, a opo Working Directory = C:\CDelphi\Dados
(isso facilitar o nosso trabalho posterior). Em seguida, ainda em File escolha New$ sub-opo =able.
- No quadro =able =Ipe escolha tabela do tipo Paradox 7 e, no quadro 0reate =able$ crie os seguintes
campos :
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 2)
Dicas de operao : Use a tecla ENTER para passar de uma coluna para outra; estando na coluna Type
tecla 'barra de espao' para baixar uma lista com os tipos disponveis ; o " * " na coluna Key indica que
queremos que que seja um campo chave ; estando na coluna Key tecle qualquer caractere para setar
ou resetar " * ".
'Required field' indica tratar-se de um campo de preenchimento obrigatrio; Min e
Max so os valores mnimo e mximo que o campo poder assumir; estas informaes permitem ao
BD, independentemente do programa, verificar a validade dos dados fornecidos (validity checks).
#ield$ame %ype &i'e (ey )e*uired +in +a"
Matricula A 4 * Sim 1 9999
Nome A 40 Sim
Funcao A 20
Sexo A 1
dade S 16 70
Salario_hora $
Horas_No_Mes S 0 220
Salve a tabela com o nome =abF'n clicando no boto !a/e As.
Note que apesar de escolhermos Paradox 7, o DBDesktop utilizou Paradox 4. sto automtico e significa
que no utilizamos tipos de campos das verses mais modernas.
A tabela =abF'n foi criada nos passos anteriores, mas est vazia. Vamos colocar alguns dados nela :
- No menu File, opo "pen, sub-opo =able$ abra a tabela =abF'nE em seguida, no menu =able,
escolha a opo Edit Data$ para trabalhar no modo de edio.
- Cadastre os seguintes funcionrios :
MATRCULA NOME FUNO SEXO DADE SALARO_HORA
1 JOS S. MELO PROGRAMADOR M 22 20
2 MAURCO MAUROS DGTADOR M 21 15
3 LUCANA LUCA PROGRAMADORA F 25 22
4 MARLUCA LUCA ANALSTA F 30 32
5 FERNANDO FARO ANALSTA M 33 30
Obs: O campo HORAS_NO_MES ser preenchido por programa, quando necessrio.
Tabela '=abDados.db :
Utilizando procedimento similar ao anterior, gere esta tabela com os seguintes campos :
#ield$ame %ype &i'e (ey )e*uired +in +a"
Matricula A 4 * Sim 1 9999
Semana S * Sim 1 5
Horas_na_Semana S 0 48
_______________________________________________________________________________________
Preencha alguns dados como abaixo :
MATRCULA SEMANA HORAS_NA_SEMANA
1 1 30
1 2 35
1 3 44
1 4 38
2 2 20
2 4 33
3 1 40
3 3 44
3 4 45
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 21
CRIA#(O DO PROJETO
Selecione menu File|NewE selecione a p+%ina Projects e$ nesta @
4262<5.12 . Application Wizard " <65<;17. OK ).
4262<5.12 ;4 .0JV24 72 /21A File menu 2 elp menu.
C65BA2 !e"t 0;=; 0=.442@A5=/.4 <./ . 0=.N23.Q
C65BA2 !e"t 0.54 1K. A4;=2/.4 ; 0=IM5/; .0JK....
E/ 42@A57; E;J; ;4 42@A51324 4262JV24 72 40227 D;=4 8
4262<5.12 File W Open 2 <65BA2 Insert.
4262<5.12 elp W About <65BA2 I142=3 Q <65BA2 !e"t#
Fa$a o nome do projeto % Pessoal e o pat& % '()'*elp&i)E"+,.
-elecione as op$.es ( 'reate -tatus /ine e Enable ints.
A0I4 <65<;= 2/ F5154? 42=H <=5;7. . ;065<;35F.& <.1E.=/2 ;D;5M. 8
- Nota : mudamos o caption do formulrio para SSTEMA DE PESSOAL.
O ;6A1. 0.72 .D42=F;= BA2 . X5G;=7 <=5.A A/ /21A File 2 A/ /21A elp <./ FH=5.4 4AD-53214 72 /21A. NI4
BA2=2/.4 ;021;4 A/ .A 7.54 4AD-53214 2/ <;7; /21A. O 3=;D;6?. 2M5@57. 0;=; /.75E5<;= .4 53214 72 /21A 5142=57.4
026. X5G;=7 ;4 F2G24& L /;5.= 7. BA2 45/0624/2132 72623;= 3.7. . /21A 2 <=5;= A/ 1.F.. V;/.4& 0.= 544.& 72623;= . 7.
D260?5 2 <=5;= A/ 1.F. /21A. N.44. /21U 72F2=H <.132= . 532/ YA=BA5F. 2 .4 42@A51324 4ADT53214 & YC;7;43=;/213.&
YFA1<5.1H=5.4 & YD;7.4 V;=5HF254& 1 240;J;7.= 2 YS;5=& . =243;132 72F2=H 42= 72623;7.. D2623;= 3;/DL/ .4
<./0.121324 BA2 725M;=;/ 72 42= A4;7.4 8 TP=513D5;6.@& TO021D5;6.@& T4;F2D5;6.@& TP=5132=S23A0D5;6.@ 2 . 2
.
S0227BA33.1. O 0=5/25=. S0227BA33.1 72F2 42= <.142=F;7.& 42=H A4;7. 1; .0JK. 72 /21A C;7;43=;/213..
NK. 24BA2J; 72 <.6.<;= .4 H5134 1.4 53214 72 /21A 2 1. S0227BA33.1 "/A7;/.4 . @650? 7. 40227DA33.1 0;=;
C8Z.A=BA5F.4 72 P=.@=;/;4ZA=BA5F.4 C./A14ZB.=6;17 S?;=27ZI/;@24ZBA33.14ZFLDRMAN!.BMT#.
A0;@A2 . <I75@. 72 3.7;4 ;4 0=.<27A=24& /21.4 ;4 42@A51324 8
0=.<27A=2 F.=/C=2;32"S2172=8 TODN2<3#Q
0=.<27A=2 S?.OH513"S2172=8 TODN2<3#Q
N.3; 8 D;43; ;0;@;= . <I75@. 213=2 .4 D2@514 2 2174 72 <;7; A/; 2 /;17;= 4;6F;= "C3=6[S# BA2 . D260?5 42 21<;==2@; 72
72623;= 3;13. 1; I/062/213;35.1 BA;13. 1; I132=E;<2. C.1E.=/2 <./213;7. ;132=5.=/2132& 32=5; 457. /;54 =H057.
32=/.4 <./2J;7. . 0=.N23. 42/ 121?A/ /21U...
A1324 72 0=.442@A5=/.4& F;/.4 <=5;= A/ A65;4 0;=; 1.44. B;1<. 72 D;7.4. U/ A65;4 L A/ 1./2 E5<3><5. BA2 42=F2
0;=; 7245@1;= A/ <;/51?. 72 75=23I=5. .172 <.6.<;/.4 1.44. BD. O A4AH=5.& EA3A=;/2132& 0.72 <.6.<;= . BD .172
/26?.= 6?2 ;0=.AF2=& 42/ 12<24457;72 72 42 =2<./056;= . 0=.@=;/;.
V;/.4 A4;= . D;3;B;42D24\3.0]]T..64]]A65;4 M;1;@2=]]N2O.
F;J;/.4 A65;4 ^ P244.;6]]D=5F2 T_02 ^ S3;17;=7 ]] P;3? ^ C8ZCD260?5ZD;7.4
D2 O\ 0;=; 21<2==;= 2 O\ .A3=; F2G 0;=; 4;6F;= ;4 <.1E5@A=;JV24 1.F;4 1. ;=BA5F. .CFG.
V;/.4 <=5;= A/ E.=/A6H=5. 0;=; <;7;43=;/213. 72 EA1<5.1H=5.4 2 7;7.4 F;=5HF254. V;/.4 A3565G;= 0;=; 544. . F.=/
X5G;=7 "D;3;D;42]F.=/X5G;=7#& <./ ;4 42@A51324 .0JV24 8
- M;432=]D23;56 A4;17. TT;D62
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 22
- A65;4 ^ P244.;6 ]]M;432= T;D62 ^ T;DFA1
- E4<.6?; 7.4 C;/0.4 "3.7.4# ``
- A==;1N. 2/ @=;72
- A65;4 ^ P244.;6 ]]D23;56 T;D62 ^ T;DD;7.4
- E4<.6?; 7.4 C;/0.4"3.7.4# ``
- A==;1N. 2/ G=;72
- E4<.6?; M;3=5<A6; 1.4 7.54 6;7.4 2 <65BA2 A77 "<;/0.4 =26;<5.1;7.4#.
- G2=;= F.=/ 2 D;3;M.7A62 "NK. 2a M;51F.=/#.
- C65<;= F5154?.
MA7;= .4 1./24 7. D;3;M.7A62 0;=; D;7.4 2 U1D;7.4.0;4.
.P.72=>;/.4 <.6.<;= 1.44. D;1<. 72 7;7.4 1. 0=I0=5. E.=/A6H=5. BA2 . A4; /;4 L D.; 0=H35<; 32=/.4 .4 <./0.121324
72 ;<244. ; 7;7.4 2/ A/ /I7A6. 72 7;7.4 0=I0=5. 2 . F.=/ X5G;=7 E;G 544. 0;=; 1I4.
OD42=F2 <./. E5<.A . F.=/2 2 F;/.4 E;G2= . 42A <;035.1 ^ aC;7;43=;/213.a.
V;/.4& 2/ D;7.4& E;G2= ;4 0=.0=527;724 A<35F2 72 ;/D;4 ;4 3;D26;4 ^ T=A2. V.632/.4 ;. E.=/A6H=5. F.=/2 2
F2=5E5<;/.4 BA2 .4 7;7.4 243K. F54>F254 "NH BA2 ;D=5/.4 ;4 3;D624 1. 0=.N23.#. P.72/.4 ;@.=; 75/2145.1;= . E.=/A6H=5.
0;=; BA2 3.7.4 .4 <;/0.4 E5BA2/ F54>F254. V;/.4 5142=5= 12432 E.=/A6H=5. A/ B53B31 350. C6.42.
V;/.4 <.6.<;= ?5134 1.4 D.3V24 7. N;F5@;3.= <65<;17. 1; 0=.0=527;72 H5134& ;D=517.-42 . E753.= 72 S3=51@ L543 2
75@53;17. 8 Primeiro Registro ; Registro Anterior ; Registro Seguinte ; Ultimo Registro ; ncluir Registro ; Excluir Registro
;Editar Registro ; Gravar Registro ; Cancelar Operao ; Atualizar. Temos tambm, que fazer a propriedade ShowHints =
True.
N.32 BA2 . U635/. D.3K. 7. N;F5@;3.= 0.72=5; 32= 457. .<A63;7. 0.54 2/ ;065<;J.24 724\3.0 262 L 72412<244H=5.. P;=; 3;6
;@5=>;/.4 1; 0=.0=527;72 [V545D62BA33.14 2 E;=>;/.4 1DR2E=24? ^ F;642.
V;/. 75@53;= aF.=/2.S?.OM.7;6 Qa1. 2F213. O1C65<\ 7. 532/ 72 M21A C;7;43=;/213.& F;/.4 75@53;= aC6.42Qa 1.
2F213. O1 C65<\ 7. 532/ 72 /21A S;5=& F;/.4 <.6.<;= ; /214;@2/ aFA1JK. NK. I/062/213;7;a 1.4 .A3=.4 53214 7.
/21U 2 F;/.4 <./056;= 2 2M2<A3;=.
OD42=F;JV24 8
- U3565G;/.4 7A;4 3;D26;4 =26;<5.1;7;4 026. <;/0. M;3=5<A6; ">175<2 1;4 7A;4 3;D26;4#. C;7; 3;D26; 2M5D2 .4
7;7.4 2/ A/; @=;72 0=I0=5;. O4 7;7.4 2M5D57.4 1; @=;72 72 D;7.4 V;=5HF254 "3;D26; D23;6?2# =243=51@2/-
42 ;BA2624 <.==240.1721324 ;. EA1<5.1H=5. 4262<5.1;7. 1; @=;72 72 FA1<5.1H=5.4 "3;D26; M;432=#.
- OD42=F2 2/ U1D;7.4& T;D621 2 T;D622& ;4 0=.0=527;724 0=221<?57;4 026. F.=/ X5G;=7 8 D;3;B;42N;/2&
I172MF5267N;/2& M;432=F52674& M;432=S.A=<2 2 T;D62N;/2. OD42=F2 3;/DL/ ;4 0=.0=527;724 D;3;S23
7.4 7.54 D;3;S.A=<2. OD42=F2 . TN;F5@;3.= 2 4A; ;/;==;JK. <./ T;D621 ;3=;FL4 7; 0=.0=527;72
D;3;S.A=<2.
- A ;/;==;JK. 213=2 ;4 @=;724 "<./0.121324 TDBG=57# 2 ;4 3;D26;4 "<./0.121324 TT;D62# L E253; 026.
<./0.12132 TD;3;S.A=<2. OD42=F2 "1. ODN2<3 I1402<3.=# BA2 ; 0=.0=527;72 D;3;S23 72 D;3;S.A=<21
;0.13; 0;=; ; 3;D26; T;D621 2 BA2 ; 72 D;3;S.A=<22 ;0.13; 0;=; T;D622. OD42=F2 3;/DL/ BA2 ;
0=.0=527;72 D;3;S.A=<2 72 DBG=571 ;0.13; 0;=; D;7.4.D;3;S.A=<21 2 BA2 ; 72 DBG=572 ;0.13; 0;=;
D;7.4.D;3;S.A=<22. O <./0.12132 TD;3;S.A=<2 42=F2& 0.=3;13.& <./. A/ <./0.12132 72 65@;JK. 213=2
A/ <./0.12132 72 ;<244. ; 7;7.4 "TT;D62# 2 A/ <./0.12132 72 2M5D5JK. 72 7;7.4 "TDBG=57#. A 1.3;JK.
72 0.13. D;7.4.D;3;S.A=<2.. L 12<244H=5; 0.=BA2 .4 <./0.121324 TD;3;S.A=<2 243K. 2/ A/ /I7A6.
75E2=2132 7;BA262 BA2 <.13L/ ;4 @=;724.
- A. E;G2= ; 0=.0=527;72 A<35F2 ^ T=A2 1;4 3;D26;4& 1I4 =2;6/2132 ;D=5/.4 ;4 3;D26;4 2/ 32/0. 72 0=.N23..
I43. 1.4 02=/532 F2= "7A=;132 . 0=.N23.# . 0=5/25=. =2@543=. 7. <.1NA13. 72 7;7.4. I43. L D;43;132 U356 0.54
1.4 02=/532 <?2<;= 42 1K. ?H 2==.4.
- A 0=.0=527;72 D;3;B;42N;/2 7;4 3;D26;4 0.72 <.132= 8 . <;/51?. 72 75=23I=5. [ . 1./2 7. B;1<. 72
D;7.4& 42 ?.AF2= "L . <;4. 7.4 BD4 =26;<5.1;54 2 C]S# Q . <;/51?. 72 75=23I=5. BA2 <.13L/ ; 3;D26; Q A/
;65;4 =20=24213;17. A/ 7.4 <;4.4 ;<5/;. A 5/0.=3b1<5; 7. ;65;4 L BA2 . BD 0.72=H 42= <.6.<;7. 2/
BA;6BA2= 75=23I=5. <.1F2152132 42/ 0=2<54;=/.4 /2M2= 1. <I75@. 7. 0=.@=;/; 2 =2<./056H-6.. B;43;=H
12432 <;4.& =2<.1E5@A=;= . ;65;4 A3565G;17. A/; 7;4 E2==;/213;4 .E2=2<57;4 026. D260?5 "BDE
A7/51543=;3.= .A D;3;B;42D24\3.0#.
- O =26;<5.1;/2132 M243=2]D23;6?2 7;4 7A;4 3;D26;4 L E253. 7; 42@A5132 E.=/; 8 ; 0=.0=527;72
M;432=S.A=<2 72 T;D622 ;0.13; 0;=; D;3;S.A=<21 ". BA2 ; =26;<5.1; <./. 723;6?2 <./ T;D621# 2 ;
0=.0=527;72 M;432=F52674 ;0.13; 0;=; . <;/0. M;3=5<A6; BA2 L . <;/0. <./A/ "72 =26;<5.1;/213.#.
N.32 BA2 1K. ?H .D=5@;3.=527;72 72 .4 <;/0.4 32=2/ . /24/. 1./2 1;4 7A;4 3;D26;4...
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 23
- A <.6A1; M;3=5<A6; 1; 3;D26; 723;6?2 L 4A0L=E6A; NH BA2 42=H 42/0=2 5@A;6 ; M;3=5<A6; 4262<5.1;7; 1;
3;D26; /243=2. P.72=>;/.4 265/51H-6; 8 213=2 1. E753.= 72 C.6A1;4 <65<;17. <./ . D.3K. 75=253. 7. /.A42
1; @=;72& 4262<5.12 A77A66F52674& 720.54 4262<5.12 M;3=5<A6; 2 D26232. D2F2/.4 E;G2= 543. 4./2132
720.54 BA2 35F2=/.4 E253. .4 324324 12<244H=5.4 2& /;54 5/0.=3;132& 42 E.=/.4 A3565G;= ; @=;72 0;=; 213=;7;
72 7;7.4 72F2=2/.4& 0.= 0=.@=;/;& 5142=5= ; M;3=5<A6; 1. <;/0. =2402<35F.. P.= .=; 725M2/.4 . 1.44.
<;/0. 1. 6A@;=. B;43; E2<?;= . /I7A6. "42/ 4;6F;=# 2 =2;D=>-6. 2/ 42@A517;.
- C./0.12132 TD;3;M.7A62 "U1D;7.4.0;4# 8 2/ 1.44. 2M2/06. 45/0624 2 1A/; <.1E5@A=;JK. 724\3.0
0.72=>;/.4 32= <.6.<;7. 1.44.4 <./0.121324 72 7;7.4 1. 0=I0=5. E.=/A6H=5. 72 <;7;43=;/213.. O D260?5
7540.15D565G;& 1. 213;13.& A/ <./0.12132 0=I0=5. 0;=; D;7.4 "TD;3;M.7A62# 2 72F2/.4 A4H-6.. QA;17.
42 0214; 2/ 0=.<244;/213. 7543=5DA57. "2/ =2724 6.<;54& 0.= 2M2/06.# . 3=HE2@. 1; =272 "213=2 . 42=F57.=
2 .4 <6521324# L A/; <.14572=;JK. 5/0.=3;132. N.4 @=;172 BD4 =26;<5.1;54 .A C]S 0=.<A=;-42 2M2<A3;= 1.
0=I0=5. 42=F57.= . /HM5/. 72 3;=2E;4 0.44>F26 ;E5/ 72 75/51A5= 2432 3=HE2@.. A .=@;15G;JK. 7.4
0=.@=;/;4 2/ /I7A6.4 ;72BA;7.4 L& 4.D 2432 ;402<3.& /A53. 5/0.=3;132.
- A DBG=57 0.72 42= <.1E5@A=;7; ;3=;FL4 7. E753.= 72 C.6A1;4. C65BA2 <./ . D.3K. 75=253. 7. /.A42 1;
DBG=57& 24<.6?; C.6A/14 E753.=]A77 A66 F52674. P.72/.4 /A7;= 0;=; <;7; <.6A1; 8 T>3A6.& C.= 72
EA17.& 350. 2 <.= 72 E.1324& 23<...V;/.4 0.= 2M2/06.& E;G2= . E.132 72 M;3=5<A6; 0;=; N2@=53. 3;/ 12&
/A7;= ; <.= 72 EA17. 7. N./2 0;=; <6ABA; 2 E.132 3;/ 12]N2@=53.& <.6.<;= ; EA1JK. 2/ I3H65<.& /A7;= .
3>3A6. 7. N./2 0;=; N./2 7. FA1<5.1H=5..
P=.442@A517.& F;/.4 <=5;= 7.54 E.=/A6H=5.4 A/ 0;=; <;7;43=;/213. 72 EA1<5.1H=5.4 2 .A3=. 0;=; 7;7.4 F;=5HF254. P;=;
. 0=5/25=. F;/.4 A3565G;= . F.=/ X5G;=7 "D;3;D;42]F.=/X5G;=7#& <./ ;4 42@A51324 .0JV24 8
- S5/062F.=/ A4;17. TT;D62
- A65;4 ^ P244.;6 ]]T;D62 ^ T;DFA1
- E4<.6?; 7.4 C;/0.4 "3.7.4# ``
- A==;1N. V2=35<;66_
- L;D264 51 3?2 62E3.
- G2=;= F.=/ O16_ "NK. 2a M;51F.=/#.
- C65<;= F5154?.
S262<5.12 3.7.4 .4 <./0.121324 BA2 A4;/ D;3;S.A=<2 "DBE7534 2 N;F5@;3.=# 2 75@532 "A/; F2G 4I#
D;7.4.D;3;S.A=<21 1; 0=.0=527;72 D;3;S.A=<2. D26232 ; T;D621 2 . D;3;4.A=<21 <=5;7.4 026. X5G;=7.
C.052 .4 ?5134 7. N;F5@;3.= 7. F.=/2 2 <.62 1. 72432 E.=/A6H=5.Q E;J; S?.OH5134 ^ T=A2.
N. 2F213. FA1<5.1=5.4C65<\ "M;51F.=/# 4AD4353A; . <./;17. 72 /214;@2/ 026. 42@A5132 8
F.=/1.S?.OM.7;6.
P;=; . 42@A17. E.=/A6H=5. . 0=.<275/213. L 51325=;/2132 ;1H6.@.. A 3;D26; L T;DD;7.4.
T2<62 F%& .D42=F2 2 <.==5N; .4 2==.4 BA2 42=K. ;0=24213;7.4 8
- =2E2=P1<5;4 72 U1531 2 U1533.
- T;D621 512M5432132.
O 2==. 72 =2E2=P1<5;4 L <.==5@57. ;A3./;35<;/2132 026. D260?5. P;=; <.==5@5= . .A3=. 726232 . 2F213.
F.=/C=2;32 "72 U1531 2 U1533#& NH BA2 ;4 3;D26;4 243K. <./ A<35F2 ^ T=A2 "2/ U1D;7.4#.
A. 32<6;= F% .<.==2=H .A3=. 2==. 72 =2E2=P1<5; BA2 /;17;=2/.4 . D260?5 <.==5@5=. P.72/.4 =2<./056;= 2
3243;=.
V2=5E5BA2 . DA@ <./ ; 3;D26; T;DD;7.4. A @=;72 4I /.43=; F;6.=24 0;=; . 0=5/25=. EA1<5.1H=5.. I43. .<.==2
0.=BA2 243; 3;D26; L a24<=;F;a 72 T;DEA1& .A 42N;& 26; 4I /.43=; .4 =2@543=.4 2BA5F;621324 ;.4 72 T;DEA1 BA2 1K.
0.72 42= 1;F2@;7;. HH 7A;4 /;125=;4 0;=; =24.6F2= 2432 0=.D62/;. A 0=5/25=; <.15432 2/ =235=;=/.4& 0.=
<I75@. . =26;<5.1;/213. 7;4 7A;4 3;D26;4 ". BA2 1.4 .D=5@;=5; ; =243;D26P-6. BA;17. 7262 0=2<54H442/.4#. A
42@A17;& BA2 A4;=2/.4 ;BA> & L <=5;= A/ 32=<25=. <.1NA13. D;7.4.T;D623]D;7.4.D;3;S.A=<23 "42/
=26;<5.1;/213.4# 2 A3565G;=/.4 2432 U635/. <.1NA13. 0;=; . 1.44. .DN235F..
OPERA#$ES COM REGISTROS E CAMPOS C)*+),-,.-/ TF0-12!
O Delphi encapsula cada campo de uma tabela com um componente TField prprio (do tipo desejado),
assim, no nosso projeto, foram usados TStringFields, TSmallntField, TCurrencyField.
Devemos usar o Fields Editor (Editor de Campos) para manipular os componentes Tfields, durante o
projeto. Este editor nos permite, entre outras coisas, determinar quais campos queremos mostrar no
formulrio.
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 24
Para abrirmos o Editor de Campos, basta dar um duplo cique sbre o componente TTable. Aparece o
Fields Editor. Clique no boto direito do mouse e selecione Add Fields... para aparecerem os nomes dos
campos disponveis; Selecione o campo que voc quer que aparea no formulrio, dando um clique sbre
ele e clique OK; proceda da mesma forma para os outros campos desejados (Add, seleo, OK...); caso
desejado mude a ordem de disposio dos campos bastando, para isso clicar e arrastar o campo para a
posio desejada. (isto depois que todos os campos desejados estiverem selecionados). No nosso caso
selecione todos os campos. Observando o Object nspector voc notar que o Delphi incluiu varios objetos
da classe Tfield. Feche o Fields Editor pelo menu de sistema.
Como se faz com qualquer outro componente voc pode mudar propriedades de campos Tfield usando o
Object nspector. Observe, por exemplo, a propriedade Currency (dinheiro) = True no componente
Table1Salario_Hora e verifique que o Delphi formata o campo para reais. Ns estabelecemos isto quando,
na montagem da tabela fizemos tipo do campo = $. Vamos, a ttulo de exemplo, fazer neste campo a
propriedade DisplayFormat = #,##0.00. Ao recompilarmos verificamos que a mscara do salrio foi
modificada.
O aluno deve fazer uma anlise de varias propriedades em especial as possibilidades de formatao.
Estando sbre uma determinada propriedade, deve-se teclar F1 para obter o Help correspondente.
As seguintes propriedades se destinam a formatao de campos :
- DisplayFormato : para especificar o formato de visualizao do dado;
- EditMask : fornece uma mscara de edio.
- Display width e Alignment especificam numero de caracteres e alinhamento.
Pode-se usar o evento OnGetText para formatar valores de campo durante a programao. Esse evento
ocorre sempre que o Delphi vai mostrar o conteudo do campo.
Para validar (por programa) a entrada de dados, utilize o evento OnValidate que acionado sempre que o
valor de um campo modificado.
PROCURANDO DADOS3
Devemos usar o mtodo Find&eI para procurar por um determinado valor de um campo numa tabela. O
campo precisa estar indexado para usarmos este mtodo. Por exemplo :
Tablen.FindKey(['Maria']) para um campo Nome que indexe a tabela Tablen.
Para indices compostos de mais de um campo use :
Tablen.FindKey(['valor1', 'valor2', 'valor3'])
FindKey uma funo e devolve um resultado booleano que ser verdadeiro se o registro foi encontrado.
Uma alternativa ao FindKey o mtodo FindNearest que poisiciona o cursor na chave especificada ou
naquela imediatamente superior. o mtodo utilizado em buscas sequenciais.
Alm de FindKey/FindNearest, as verses posteriores ao Delphi2 possibilitam o uso dos mtodos Locate e
Lookup. Locate posiciona o cursor na chave desejada; Lookup recupera valores de campos do registro
pesquisado. Estes mtodos podem ser usados com campos indexados ou no.
OUTRAS FORMAS DE ACESSAR CAMPOS
Voc pode usar o mtodo FieldByName para acessar o valor de um campo. Voc passa o nome do campo
como parmetro.
Por exemplo :
Editn.Text := Tablen.FieldByName('Nome') atribui a caixa de edio Editn o valor do campo 'Nome'
da tabela Tablen. (Nota : Nome no precisa ser campo indice).
Se o campo no for do tipo string, utilize a funo de converso AsString:
EditnText := Tablen.FieldByName('codigo').AsString;
Voc tambm pode usar a propriedade Fields que utiliza como parametro o nmero de ordem do campo na
tabela.
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 29
Por exemplo , para atribuir a caixa de edio Editn o valor do campo Nome, que o terceiro campo na
tabela Tablen voc faz
Editn.Text := Tablen.Fields[2]; { O primeiro campo tem o ndice 0}
ou Editn.Text := Tablen.Fields[n].AsString; para um campo que no seja do tipo string.
Nota : Neste mtodo corre-se o risco de bugs se a estrutura da tabela for modificada j que neste caso a
ordem e a posio dos campos pode mudar.
FILTRAGEM DE REGISTROS 3
Os mtodos abaixo (aplicveis apenas a campos indexados para tabelas do tipo Dbase e Paradox)
permitem filtrar registros de uma tabela :
SetRangeStart ; estabelece o limite inicial do filtro;
SetRangeEnd : estabelece o limite final do filtro;
ApplyRange : aplica o filtro a tabela;
CancelRange : cancela o filtro aplicado a tabela.
Como alternativa pode-se usar :
SetRange([Valornicial],[ValorFinal]) : estabelece os valores inicial e final do filtro e aplica a tabela;
Exemplo :
Tablen.SetRangeStart;
Tablen.FieldByName('Codigo') := 20;
Tablen.SetRangeEnd;
Tablen.FieldByName('Codigo') := 60;
Tablen.ApplyRange;
O exemplo permite filtrar todos os registros com codigo > 20 e menor que 60;
Voc pode usar os mtodos EditRangeStart e EditRangeEnd para mudar valores atribuidos anteriormente.
Voc pode usar indices mltiplos para filtar seus registros,. O exemplo a seguir vai filtrar todos os registros
com codigo > 20 e nome igual a Maria.
Tablen.SetRangeStart;
Tablen.FieldByName('Codigo') := 20;
Tablen.FieldByName('Nome') := 'Maria';
Tablen.SetRangeEnd;
Tablen.ApplyRange;
As verses mais recentes do Delphi permitem algumas alternativas adicionais de filtragem, utilizando as
propriedades Filter e Filtered e o evento OnFilterRecord.
A PROPRIEDADE 4EYE'CLUSIVE DE TTABLE
A propriedade KeyExclusive falsa por default, isto , o filtro ir procurar valores maiores ou iguais ao do
limite inicial e menores ou iguais ao do limite final.
Se voc quiser (no exemplo com os limites 20 e 60 para o cdigo) que o valor 20 no faa parte do filtro,
(ou seja Codigo > 20), faa , por exemplo :
Tablen.SetRangeStart;
Tablen.FieldByName('Codigo') := 20;
Tablen.KeyExclusive := True;
Tablen.SetRangeEnd;
Tablen.FieldByName('Codigo') := 60;
Tablen.ApplyRange;
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 26
HABILITANDO E DESABILITANDO A VISUALIZA#(O DE DADOS
Antes de iniciar um filtro pode ser importante voc desbailitar os componentes de visualizao inseridos no
formulrio, j que o filtro afeta todo o conjunto de dados (dataset). Esta providncia importante para se
ganhar tempo, evitando que os componentes de Visualizao fique mostrando dados provisrios e fique
com flickering. Use estes controles com cuidado pois o usurio espera que os controles de visualizao
mostrem a realidade continuamente, assim, tendo desabilitado os controles, trate de habilit-los logo que
possivel.
Faa Tablen.DisableControls antes de aplicar o filtro e
Tablen.EnableControls aps a aplicao do filtro.
Deve-se usar um bloco tray ... finally e comandar Enable dentro da clausula finally, seno, se ocorrer uma
exceo os componentes de visuzlizao no sero retomados.
NAVEGANDO PELO DATASET 3
First : move o ponteiro para o primeiro registro
Last : move o ponteiro para o ultimo registro
Next : move o ponteiro para o prximo registro
Prior : move o ponteiro para o registro anterior
MoveBy ; move para a frente (se parametro positivo) ou para trs (se parmetro negativo) um nmero
especificado de registros , por exemplo : MoveBy(2), avana dois registros.
Next equivale a MoveBy(1) e Prior equivale a MoveBy(-1)
PROPRIEDADES BOF - EOF
BOF = True indica que o ponteiro est no primeiro registro da tabela e ocorre nos seguintes casos :
- quando voc abre a tabela;
- quando voc executa o mtodo First;
- quando voc executa o mtodo Prior e ocorre uma falha....
EOF = True indica que o ponteiro est no ltimo registro da tabela e ocorre nos seguintes casos :
- Quando voc abre um dataset vazio.
- Quando voc chama o mtodo Last;
- Quando voc chama o mtodo Last e ocorre fallha no ndice.
Exemplo :
while not Tablen.EOF do
begin
{ Faa algum processamento no registro}
Tablen.Next;
end;
MODIFICANDO REGISTROS 3
Utilize Edit para possibilitar a modificao de dados no registro, em seguida utilize Post para gravar os
novos dados no registro :
Tablen.Edit;
{Comando de edio}
Tablen.Post;
Utilize nsert para inserir um registro aps o registro corrente;
Utilize Append para inserir um registro no final do arquivo;
Obs: Ao comandar Post, se houver um ndice, o registro ser inserido na posio dada pelo ndice.
Utilize Delete para deletar um registro;
Utilize Cancel para cancelar alteraes feitas (antes de comandar Post);
Utilize Refresh para apagar os bufers locais e buscar os dados originais na tabela (arquiv). Este comando
pode aparentar resultados inesperados por exemplo : se um usurio est vendo um registro e um segundo
usurio (em compartilhamento) deleta o rgistro, parecer que o registro desapareceu quando o aplicativo
usar Refresh.
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 2
Utilize a propriedade CanModify (de Ttable) para permitir ou proibir modificaes no dataset . Se = True os
dados podem ser alterados.
MARCANDO UM REGISTRO
Para marcar um registro e permitir que, aps vrias operaes se volte a ele, utilize :
GetBookMark : marca o registro associando a ele uma propriedade do tipo Tbookmark;
GoToBookMark : leva o ponteiro at o registro marcado;
FreeBookMark : desmarca o registro.
DE VOLTA AO PROJETO PESSOAL
Aps a digresso que fizemos, podemos voltar ao nosso projeto :
O 2753.= 72 <.6A1;4 02=/532 FH=5;4 .A3=;4 .02=;JV24 5132=244;1324. V.632/.4 ;. F.=/2.
V;/.4 72623;= ; <.6A1; M;3=5<A6; 1; G=572 0.54 26; L =27A17;132 "42=H 42/0=2 ; /24/; 4262<5.1;7; 1;
G=571#. S262<5.12 2432 <;/0. 1. 2753.= 72 <.6A1;4 2 A42 ; .0JK. D26232.
O <;/0. H.=;4T1.T/24 7; G=571 L 0;=; A4. 7. 0=.@=;/; 2 1K. 0.72 =2<2D2= 7;7.4 75@53;7.4 026.
A4AH=5.. V;/.4 E;G2= 1. ODN2<3I1402<3.= 8 R2;7O16_ ^ T=A2 2 BA33.1S3_62 ^ <D4E6650454 "<./
H.=;4T1.T/24 4262<5.1;7. 1. C.6A/14E753.=# V;/.4 ;D=5= . 2F213. O1E753BA33.1C65<\ 7; G=571 2
5142=5= ; 42@A5132 /214;@2/ 72 ;7F2=3P1<5; 0;=; . <;4. 7. A4AH=5. 3213;= 75@53;= 12432 <;/0..
M244;@2D6@"aE432 <;/0. 42=H 0=221<?57.a[c13[
a026. 0=.@=;/;a&/3I1E.=/;35.1&d/DO:e&)#Q
P;=; . <;/0. FA1JK.& F;/.4 ;0=24213;= A/; 6543; 1; BA;6 . A4AH=5. 0.44; 4262<5.1;= A/; 7;4 0.44>F254
EA1JV24 2M54321324 1; 2/0=24;. P;=; 3;6 <=5;/.4 ; 3;D26; T;DFA1<.DB <./ .4 <;/0.4 C.75@. A]]4 2
D24<=5<;. A]]2) 2 0=221<?2/.4 <./ ;4 42@A51324 EA1JV24 8 1 f GERENTEQ 2 f SUB-GERENTEQ 3 f
ANALISTAQ 4 f PROGRAMADOR]AQ 9 f DIGITADOR]A Q 6 f OPERADOR]A. N. 2F213. O1S?.O
7. F.=/A6H=5. 1I4 0=221<?2/.4 ; P5<\L543 7; <.6A1; 2 7; G=571 <./ .4 F;6.=24 7. <;/0. D24<=5<;. 72
T;DFA1<. F;G2/.4 BA33.1S3_62^<D4AA3.. OBS 8 O ;6A1. ;@.=; NH 32/ <.175JV24 72 2132172= . <I75@. 7.
2F213. O1S?.O 72 F.=/2& BA2 L . 42@A5132 8
O53? D;7.4.T;D624 7.
D2@51
D;7.4.T;D624.O021Q
X?562 1.3 EOF 7.
D2@51
DBG=571.C.6A/14d2e.P5<\L543.A77"F5267B_N;/2"aD24<=5<;.a#.V;6A2#Q
N2M3Q
217Q
217Q
V;/.4 ;@5= 72 E.=/; 45/56;= <./ .4 <;/0.4 S2M."G=571# 2 S2/;1;"G=572#. N2432 <;4. 0=221<?2=2/.4 ;
P5<\L543 75=23;/2132 1. E753.= 0=I0=5.. "M;4<A651.QF2/5151. 1. 0=5/25=. <;4. 2 1Q2Q3Q4Q9 1. 42@A17.
<;4.#.
- V;/.4 4AD/232= 1.44. 0=.@=;/; ; ;6@A14 324324 72 F2=5E5<;JK. 8
- V;/.4 3213;= 51<6A5= A/; /;3=><A6; NH 2M5432132. V2=5E5<;/.4 BA2 . 0=.@=;/; 02=/532 <;7;43=;= 3.7.4 .4
<;/0.4 /;4 1; ?.=; 72 @=;F;= . =2@543=. 262 4.63; A/; /214;@2/ 72 :2_ V5.6;35.1 2 1K. @=;F; .
=2@543=..I43. L . BA2 1I4 BA2=2/.4 BA2 .<.==; /;4 ?H A/ 51<.1F2152132& ; /214;@2/ 72 2==. 4I .<.==2
720.54 BA2 . A4AH=5. 75@53.A 3.7.4 .4 <;/0.4 7. =2@543=.& 1A/; 3;D26; <./ /A53.4 <;/0.4 543. 0.72 42
3.=1;= 5==53;132. V2=2/.4 0.432=5.=/2132 3L<15<;4 0;=; E;G2= ; <=>35<; ; 1>F26 72 <;/0. 2 1K. 72 =2@543=..
V;/.4& 5@A;6/2132& 3213;= 51<6A5= A/ <.1NA13. M;3=5<A6;[S2/;1; =202357. 1; G=572. O 0=.@=;/; 2/532
; /214;@2/ /;4& 42 1K. E.= 0.44>F26 2753;=& 262 @=;F;=H . =2@543=.& .D=5@;17.-1.4 ; 72623H-6.
0.432=5.=/2132. I43. .<.==2 0.=BA2 1K. 32/.4 0.445D5657;72 72C;1<26;= ; 1>F26 7; G=572 4./2132. V;/.4
<.==5@5= 5142=517. A/ N;F5@;3.= 0;=; ; T;D622. P;=; 3;6 E;J;/.4 . A65@1 72 G=571 ^ ;6T.0 2 . 72 P;1263
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 2$
72 G=572 ^ ;6B.33./. AA/2132/.4 ; ;63A=; 7. E.=/A6H=5. "0AM;17. 026; D.=7; 51E2=5.=# ;D=517. 240;J.
0;=; 5142=5= .A3=. P;126 "F;J; ;6T.0# 2 .A3=. N;F5@;3.="<.052 . 72 <5/; 2 /A72 0]D;3;S.A=<22#.
P.72=>;/.4& A4;= A/ 1;F5@;3.= 4I 2 /A7;= ; 3;D26; ;0.13;7; 0.= 0=.@=;/;. I43. 42=5; E253. F2=5E5<;17.
BA;6 @=;72 32/ . E.<. 2 =2;0.13;17. . 1;F5@;3.=. O 2M2/06. 7. D260?5 Z...ZD260?54ZD2/.4ZDDZM;43;00
A4; 2432 21E.BA2& /2 0;=2<2& D2/ /;54 262@;132.
- O E.=/A6H=5. 0.72 42= F54A;65G;7. <./. 32M3. 026. ;6A1.. C65BA2 <./ . D.3K. 75=253. 7. /.A42 4.D=2 .
E.=/A6H=5. 2 24<.6?;& 1. /21A 0.0-A0 BA2 42 ;0=24213; ; .0JK. V52OA4T2M3. EM;/512 .4 <./0.121324 2
4A;4 0=.0=527;724. P;=; F.63;= ;. E.=/A6H=5.& ;D=; 72 1.F. . /21A 0.0-A0 2 24<.6?; V52OA4F.=/.
U3565G;17. 243; .0JK. 0.72-42 E;G2= ;632=;JV24 2/ <./0.121324 2 0=.0=527;724.P.72-42 C.05;=]C.6;=
<./0.121324 1. /24/. E.=/A6H=5. .A 72 A/ E.=/A6H=5. 0;=; .A3=.. U3565G;17. C3=6[C ]C36[V
"C36=[,]C3=6[V 42 42 BA5G2= C.=3;=#. I43. 0.72 42= E253. 1. E.=/A6H=5. .A 2/ 4A; 3=;7AJK. A4T2M3& 0.72-42
<.05;= ;3L 0;=; . /I7A6. .0;4. O ;6A1. 4I 72F2 A3565G;= 2432 ;=35E><5. 42 2435F2= 42@A=. 7. BA2 E;G 0.54 0.72
<./232= 2==.4 BA2 ;<;==232/ ; 02=7; 7. E.=/A6H=5.. U/ 2M2/06. 5132=244;132 <.145432 2/ <.05;= 0;=; ;
;=2; 72 3=;14E2=21<5; . 32M3. "V52OA4T2M3 72 F.=/2# 213=2 object 2 end 7. .DN23. B53B311. V.632 ;.
E.=/A6H=5. "V52OA4F.=/#& 726232 . B53B311 2 <.62 . 32M3. 1. E.=/A6H=5.. O B53B31 =2;0;=2<2=H.
CLCULO DA FOLHA DE PAGAMENTO
P=.442@A517. <./ . 1.44. 0=.N23. "P244.;6#& 72F2/.4 0=20;=;= ;4 =.351;4 72 E51;6 72 /P4 BA;17. 42 <;6<A6; 2 42
5/0=5/2 ; E.6?; 72 0;@;/213.. F;=2/.4 0=5/25=. A/; =.351; 0;=; . <H6<A6. 7; F.6?;. E43; =.351; 72F2=H& 0;=; <;7;
EA1<5.1H=5.& 3.3;65G;= ;4 H.=;4T1;TS2/;1;"T;DD;7.4# 1. <;/0. H.=;4T1.T/24 "T;DFA1#Q .D357. . 3.3;6& 2432 42=H
/A635065<;7. 026. 4;6H=5. ?.=; 0;=; 42 .D32= . 3.3;6 ; 0;@;= ;. EA1<5.1H=5.. V;62 62/D=;= BA2 243;/.4 E;G217. ;021;4
A/ 2M2=<><5. 2 1K. 62F;/.4 2/ <.13; ;4 FH=5;4 0.445D5657;724 72 A/; E.6?; 72 0;@;/213. =2;6. V;/.4 <=5;= A/ /21A
0=51<50;6 <./ . 1./2 F.6?; <.13217. 7.54 4AD/21A4 8 CH6<A6. 2 I/0=244K.. A =.351; 72 <H6<A6. L E253; 1. /I7A6. 72
7;7.4 2 72F2 42= F2=5E5<;7; 026. ;6A1.. T2/-42 7.54 6..04 72 6253A=; 42BA21<5;6 72 3;D26;48 . 0=5/25=. ;@2 4.D=2 ; 3;D26;
T;D621 F;==217.-; 72472 . 0=5/25=. ;3L . U635/. =2@543=.. P;=; <;7; =2@543=. 657. 2/ T;DEA1& . 0=.@=;/; F;==2 ;
T;D622 0;=; 3.3;65G;= ;4 ?.=;4T1;T42/;1;. N.32 BA2 F5=43 0;=; T;D622 L . 0=5/25=. =2@543=. <AN; /;3=5<A6; <.51<572
<./ ; 72 T;DEA1. I@A;6/2132 . EOF 72 T;D622 42=H 21<.13=;7. ;. .<.==2= . 0=5/25=. =2@543=. <AN; /;3=5<A6; L
75E2=2132 7; 72 T;D621. A. 515<5;= ; 0=.<27A=2 . 0=.@=;/; /A7; . <A=4.4 7. /.A42 0;=; /.43=;= ; ;/0A6?23;
"H.A=G6;44#& 5175<;35F; 72 .02=;JK. 72/.=;7;. A. 32=/51;= . <A=4.= L =243;A=;7. ;. D2E;A63 "N. 1.44. <;4. .
0=.<244;/213. L 3K. =H057. BA2 1K. 42 FP ; E.=/; 72 ;/0A6?23;#. P;=; 42 <2=35E5<;= 72 BA2 . <A=4.= L /.75E5<;7.& .
;6A1. 0.72 <./213;= "<.6.<;= 213=2 RS# . <./;17. BA2 =243;A=; . <A=4.= ;. E5/ 7; =.351;. R2E;G2= . <./;17. 720.54 7;
F2=5E5<;JK..
P;=; ; =.351; 72 5/0=244K. F;/.4 A4;= . QA5<\R20.=3X5G;=7 "N2O]BA451244]QA5<\R20.=X5G;=7#. + A/ ;445432132
D2/ E=;BA51?. /;4 1.4 02=/532 <./2J;= ; 6543;@2/. E4<.6?; . ;65;4 P244.;6Q 3;D26; T;DFA1& 3.7.4 .4 <;/0.4 /21.4
42M. 2 57;72 2 a F.6?; 72 P;@;/213.a 0;=; 3>3A6. 7. =26;3I=5.. P2J; P=2F52OR20.=3 2 2/ 42@A57; F5154?. A 326; 7. QR
42=H 2M5D57; 0;=; 0.432=5.= <./062/213;JK.. F;J; T;D621.A<35F2 ^ 3=A2Q B;5M2 7.54 <./0.121324 7; 0;623; QR20.=3&
TQREM0 2 TQRL;D26. F;J; TQRL;D26.C;035.1 ^ S;6H=5. 1. M24. P;=; TQREM0= <65BA2 2/ EM0=2445.1 2& 42@A517. .
;AM565;= E;J; 8 D.AD62C65BA2 H.=;4T1.TM24& C65BA2 451;6 , D.AD62C65BA2 S;6;=5.TH.=;. C65BA2 O:. F;J;
M;4\^c&cc).) 2 A65@1/213 ^ 3;R5@?3JA435E_. B;5M2 A/ <./0.12132 QRB;17& E;J; B;13T_02 ^ =DSA//;=_. N243;
D;17; D;5M2 A/ QRL;D26 <./ <;053.1 ^ gT.3;6 7; F.6?;g 2 A/ QREM0 <./ ; 2M0=244K.
gSUM"H.=;4T1.T/24hS;6;=5.T?.=;g.P.72-42 F2= A/ P=2F52O 7; 6543;@2/ <65<;17. <./ . R5@?3DA33.1 7./.A42 1.
E.=/A6H=5. "E.=; 7. QR20.=3# 2 4262<5.1;17. P=2F52O 1. /21A 0.0-A0.N. E.=/A6H=5. 0=51<50;6 E;J; ; <?;/;7; 72
/21A ^ F.=/4.QA5<\R201.P=2F52OQ 2 RF.=/4.QA5<\R201.P=513QS. A 42@A17; .0JK. "<./213;7; RS# /;17; ; 6543;@2/
0;=; ; 5/0=244.=;. A 0=5/25=; 1.4 02=/532 F54A;65G;= ; 6543;@2/. M;172 <./056;= 2 =.7;=.
PROJETO DE SISTEMA II
Nosso projeto ter por finalidade gerenciar uma loja de materiais de nformtica.
Geraremos um programa executvel com o nome de 'Lojainfo.exe' que nos permitir :
- Criar e manter a tabela Esto('es contendo as quantidades e valores de todos os itens mantidos
em estoque, para venda.
- Criar e manter a tabela 0lientes contendo dados cadastrais dos clientes. Esta tabela nos
permitiria, entre outras coisas, o envio de mala-direta promocional, contrle de crdito, etc...
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 2%
- Criar e manter a tabela 6endas contendo a descrio dos produtos vendidos, as quantidades e os
valores envolvidos e a identificao do cliente. Esta tabela nos permitiria atualizar os estoques na saida das
mercadorias pela deduo das quantidades vendidas, analizar resultados pela comparao dos valores de
custo e dos valores de venda, fazer anlises estatsticas do tipo 'mercadoria mais vendida' , 'sazonalidade
de vendas', etc...
- No o faremos pois a finalidade apenas didtica mas, se acrescentssemos tabelas de compras
e de fornecedores, teramos possibilidade de um contrle completo de estoque e de contas a pagar de
mercadorias, o que nos permitiria at anlises financeiras mais abrangentes. Poderamos ter tambm um
arquivo de configurao no estilo do Windows ('lojainfo.ini'), contendo valores parametrizados tais como '%
de lucro desejado', 'tabelas de desconto' , etc... Este tipo de arquivo nos permite modificar valores usados
pelo aplicativo sem a necessidade de modificar programas, para atender as diferentes necessidades de
diferentes usurios. Uma alternativa ao arquivo .ini seria utilizar o prprio Registro do Windows que, alis,
o recomendado pela MS...
- Algumas das funes mostradas no projeto no sero implementadas por desnecessrio. Quando
selecionadas estas funes, o programa dever exibir mensagem indicando este fato.
CRIA#(O DO BANCO DE DADOS
Tabela 'Esto('es' :
- Entre no Database Des2top e escolha no menu File, a opo New$ sub-opo =able.
- No quadro =able =Ipe escolha tabela do tipo Dbase for Windows e, no quadro 0reate =able$ crie os
seguintes campos :
OBS: Caso precise deletar algum campo, use Ctrl+Del.
- Clique no boto Define para criar um ndice; clique sbre o campo 0odi%o no quadro Define #ndex e d o
nome ind0od para o ndice.
- Repita a operao para o campo Descri-.o e d a este novo ndice o nome indDesc.
- Salve a tabela com o nome Esto('es clicando no boto !a/e As.
A tabela Esto('es foi criada nos passos anteriores, mas est vazia. Vamos colocar alguns dados nela :
- No menu File, opo "pen, sub-opo =able$ abra a tabela Esto('esE em seguida, no menu =able,
escolha a opo Edit Data$ para trabalhar no modo de edio.
- Cadastre os seguintes itens :
Codigo Descri,-o .uantidade /r0Compra
1 PC BM Aptiva mod. 2 5 2998,00
2 PC Compaq mod. 1 10 2450,00
3 Modem US-Robotics 28800 3 120,00
4 Kit MultMedia Adventures 22 240,00
5 Scanner Genius mod. 12 10 90,00
- Salve os dados deslocando-se para o prximo registro em branco.
Tabela '0lientes' :
-Crie esta tabela utilizando passos semelhantes ao da tabela anterior.
-Campos da tabela 0lientes @
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 3)
- Crie dois ndices : indCod com o campo 0odi%o e indNome com o campo Nome.
- Digite os seguintes dados nesta tabela :
Codigo $ome &e"o )enda +ensal 1olume de
Compras
2ndere,o C2/ %elefone
1 Jos Maria M 2400,00 500,00 Ladeira do Escorrega, 25 22225-120 222-2222
2 Maria Jos F 13000,00 22000 Rua do Esconde-
Esconde, 212
11111-111 111-1111
3 Luiz Cludio M 900,00 1200,00 Travessa do X, 12 20001-001 123-4567
4 Claudia Luz F 1200,00 5400,00 Rua do Poste, 23 22225-120 222-2222
5 Marcos Fortes M 600,00 100 Av. dos Tarzans, 24 22225-120 111-1111
Tabela '6endas' :
-Crie esta tabela utilizando passos semelhantes ao da tabela anterior.
-Campos da tabela 6endas @
- Crie o ndice indData com o campo DATA.
- Digite os seguintes dados nesta tabela :
Data Cod0+ercadoria Cod0Cliente .uantidade /re,o03nit4rio
12.06.96 2 1 1 2450,00
12.06.96 3 1 1 120,00
12.06.96 5 4 3 90,00
13.06.96 4 4 12 210,00
14.06.96 4 1 3 240,00
Feche o Database Des2top com a opo Exit do menu File.
CRIA#(O DO APLICATIVO
Vamos acessar o Delphi e preparar nosso aplicativo, que ficar com o visual abaixo e ser precedido da
seguinte Splash Screen (mostrada apenas durante o perodo de carga do programa) :
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 31
Passos necessrios para a montagem :
- Crie um projeto a partir de um formulrio em branco; d ao formulrio o nome FormaPrincipal,
mude o caption para Jerente de Loja e salve o cdigo como frmpri e o projeto como lojainfo$ no
diretrio C:\CDelphi\Ex05.
- nsira um componente #ma%e (da paleta Additional) e selecione para ele (na propriedade Pict're)
o arquivo C:\..\Delphi3\images\splash\16color\skyline.bmp, coloque duas legendas, um acima e
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 32
outra abaixo da Pict're .Utilize para o caption das legendas a fonte Poster 1odonni A==*1old*
1
- nsira um menu principal com submenus e teclas de atalho, conforme abaixo :
- nsira um componente Panel apague seu caption e faa as propriedades Ali%n C al=opE
Ali%nmentCta0enterE1e/erl#nner C b/#None e 1e/el"'ter C b/3aised .
- nsira no painel recm-criado alguns speedb'ttons com Kints e propriedade !howKint C =r'e. Os
arquivos .bmp para a propriedade Jliph dos speedb'ttons podem ser obtidos no diretrio
C:L..LDelphiGL#ma%esL1'ttons. A escolha pode ser algo arbitrria, pois a finalidade apenas
ilustrativa. Verifique os arquivos calculat., comppc1,arrow1d, dooropen,fcabshut,printer e help, todos
.bmp. Note que na propriedade Kint dos speedb'ttons pode-se inserir dois textos separados pelo
smbolo '|'. O primeiro aparecer junto ao speedb'tton e o segundo aparecer na linha de status no
rodap.

O seguintes hints devem ser inseridos nos speedbuttons :
- Clientes|Cadastra/Edita Clientes no SpeedButton1;
- Vendas|Movimento de Vendas no SpeedButton2;
- Mercadorias|Cadastra/Edita Mercadorias no SpeedButton3;
- Fim|Encerra o Aplicativo no SpeedButton4;
- Atualizao|Atualiza Estoques de Mercadorias no SpeedButton5;
- Listagem|Lista Estoques de Mercadorias no SpeedButton6;
- Sobre|nformaoes de Autoria no SpeedButton7

- Para criar o rodap, insira um componente !tat'sbar faa a propriedade Ali%n C al1ottom e Kei%ht
para 8M. Mude seu nome para !tat'sLine.
- Para que o texto aparea no rodap so necessrias algumas linhas de cdigo :
Crie uma procedure ShowKint dentro da classe =FormaPrincipal$ e utilize-a ao criar a forma
FormaPrincipal. Na realidade, modifica-se a propriedade SimpleText da StatusBar para conter o
texto desejado.
OBS : Se tivssemos utilizado o Application Ni,ard na montagem, estes passos seriam feitos
automaticamente pelo Delphi.
- Clique no item 0lientes do Menu Ar('i/o e observe que o Delphi vai inserir o evento 0lic21 no
E/ents do submenu e vai abrir a procedure TForm1.Clientes1Click (no 0ode Editor)para nos
permitir inserir o manipulador de eventos apropriado.
- V agora ao "bject #nspector e selecione o SpeedButton1 (que o equivalente a opcao de menu
Clientes), clique na sua pagina E/ents e (no evento "n0li2c) selecione para este evento o mesmo
manipulador (Cliente1Click) do item de menu (j que ambos perfazem a mesma funcao).
- nsira no corpo da Clientes1Click a MessageBox indicando Funo no implementada. necessrio
colocar alguma coisa no corpo da procedure pois, ao salvarmos o projeto, a funo, se estiver
vazia, ser excluida.
- Repita, para os demais itens de menu, um procedimento similar ao anterior.
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 33
- Copie (atravs do Clipboard) a parte do Kint seguinte ao smbolo '|' dos componentes !peed1'tton
para a propriedade Kint dos elementos de menu correspondentes.
- nsira teclas aceleradoras nos sub-itens do menu Arquivo entrando na propriedade short*c't e
selecionando o conjunto de teclas desejadas.
- Neste ponto do projeto ainda no desenvolvemos nenhuma das rotinas do menu. Por razes de
organizao do nosso trabalho (e para no perder os esboos de procedures abertas pelo Delphi),
inserimos as mensagem de advertncia abaixo indicada em cada uma das chamadas de menu.
Cdigo da mensagem :
Application.MessageBox('Funo no mplementada', 'A T E N O', mb_OK + mb_DefButton1);
Vamos, a partir de agora, comear a retirar as mensagens de advertncia e inserir nossas funes de
processamento:
Opo de menu Fim (no menu principal Arquivo:
Na procedure TForm1.Fim1Click substitua a MessageBox por Close;
Note que voc tem vrias opes para encerrar o programa :
- Clicando o item de menu Fim E
* Usando as teclas aceleradoras Alt+X ;
- Usando o speedb'tton correspondente :
- Usando as teclas aceleradoras de sistema (do Windows) Alt+F4;
- Abrindo o menu de sistema da janela e clicando em Fechar.
- Dando dois cliques sobre o menu de sistema.
- Dando um clique simples no boto Close da janela.
Opo de menu !obre (no menu principal Aj'da) :
Vamos criar uma caixa de dialogo About selecionando NewOFormsOAbo't1os no menu File. Mude o caption
para !Pbre o Aplicati/o. Mude a propriedade Name para Forma!obre , renomeie a unidade de cdigo para
Frmsobre e inclua Frmsobre na clusula uses de Frmpri.
Na procedure TFormaPrincipal.Sobre1Click substitua a MessageBox por 'FormaSobre.ShowModal.
As caixas Abo't permitem informar dados de propriedade, autores, verso e outros; para tal, modifique
os labels existentes e insira outros se necessrio e faa as modificaes devidas para obter o visual abaixo:
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 34
CRIA#(O DO FORMULRIO CADASTRO DE CLIENTES
Aproveitamos, para este formulrio, o layout do programa Animals contido no pacote do Delphi1..
O processo de pirataria do programa Animals consiste em copiar os arquivos beastwin.dfm e beastwin.pas
para o nosso diretrio de trabalho. Para incluir o novo arquivo em nosso projeto devemos utilizar
6iewOProject 5ana%erOAdd e selecionar o arquivo beastwin.pas. Em seguida devemos mudar o nome do
nosso arquivo para Frm0ad , abrindo-o e salvando-o com novo nome em FileQ!a/e File As.... Devemos
deletar, em nosso diretrio os arquivos beastwin.pas e beastwin.dfm.
Com o nosso novo formulrio (recm pirateado) selecionado, vamos mudar sua propriedade Name para
Forma0ad6is e o 0aption para Jerente de Loja. Vamos selecionar =able1 e modificar as propriedades :
DatabaseName para (deixar em branco)E =ableName para 0lientes e Acti/e para =r'e. Vamos tambm,
com Table1 selecionada, dar um duplo clique sobre a mesma e remover todos os campos (no Fields
Editor)...
Vamos deletar os componentes D1Edit1$ D1Edit8$ D1EditG e D1EditB e os labels correspondentes.
Vamos alterar o caption do componente Panel1 para 0adastro de 0lientes.
Vamos selecionar o componentes D1#ma%e1 e trocar a sua propriedade DataField para #ma%e.
Vamos , em seguida, inserir componentes dos tipos Label e =DEdit para montar a nossa tela como
mostrado na figura. Para cada componente =D1Edit torne a propriedade Dataso'rce = a Data!o'rce1, em
seguida selecione em DataField o campo correspondente. Por exemplo : No D1Edit1, selecione o campo
Nome...
Alem de cadastrarmos os campos da tabela 0lientes, podemos acrescentar uma imagem grfica associada
a cada um dos registros da tabela. Essa imagem dever ser copiada atravs da Hrea de =ransfer7ncia. e
poder ser a imagem editada de um arquivo grfico.
Para transferir algumas imagens para a tabela proceda da seguinte forma :
Execute, atravs do WindowsExplorer o programa clientes.exe Para selecionar uma imagem basta clicar
com o mouse no interior da mesma. Copie para o clipboard com Ctl+C. Volte para o lojainfo, execute o
programa, selecione o registro desejado e tecle Ctrl+V. A imagem ser transferida para a nossa tabela.
Repita este procedimento quantas vezes for necessrio.
Nota : A cpia de imagens grficas para a rea de transferncia e, desta para a tabela pode ser feita por
programa, utilizando comandos e componente prprios. Uma consulta ao Kelp do Delphi $ tpico 0lipboard
pode ser bastante elucidativa. O programa clientes.exe foi adaptado de um demo do Delphi1 (stocks).
Pode-se tambm transferir direto de arquivos de imagens atravs do comando :
DBmage.Picture.LoadFromFile(FileName);
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 39
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 36
CRIA#(O DO FORMULRIO PARA QUERY DE CLIENTES
Este formulrio, alm de tambm permiitr cadastrar os clientes da loja , vai nos permitir demonstrar alguns
usos de SQL e tambm o uso do mtodo Print da classe TForm.
- Selecione o Form Ni,ard do menu Database. No quadro Form "ptions escolha o boto 0reate a
!imple Form. No quadro Data!et"ptions$ escolha 0reate a form 'sin% =R'erI objects e clique
NextE Escolha a tabela 0lientes.dbf como base para o nosso formulrio; selecione os campos que
voc usar. Clique ' >>' para selecionar todos e, em seguida, clique em NextE Escolha Jrid como a
forma em que os dados sero mostrados e clique em Next; Desmarque a opo para formulrio
principal (MainForm), e clique no boto Finish para gerar o formulrio.
- Mude o caption para R'erI40ons'lta) de 0lientes e o nome para Forrma0ad0lientes.
- Salve o mdulo como Frm0lien. (com !a/e File As...).
Observe que o Ni,ard j inseriu para ns, obedecendo as nossas selees , os seguintes
componentes : Data!o'rce1$ D1Jrid1$ D1Na/i%ator$ Panel1$ Panel8 $R'erI1 e o formulrio por
ns renomeado para Forma0ad0lien. O Panel1 ocupa o topo do formulrio (Ali%n C al=op) , o
Panel8 ocupa o restante da rea do cliente (Ali%n C al0lient).
- O Na/i%ator completo contm 10 botes, os seis ltimos so voltados para o cadastramento e
edio de dados; os quatro primeiros permitem navegar pelo banco de dados e tem o seguinte
significado : o primeiro nos transporta para o primeiro registro da tabela, o segundo nos leva para o
registro anterior ao atual, o terceiro para o registro seguinte e o quarto para o ltimo registro da
tabela. Vamos excluir do Na/i%ator os 6 ltimos botes. Para tal, com o mouse sbre a propriedade
6isible 1'ttons$ d um duplo clique e sero mostrados todos os botes com propriedade =r'eE
passe os 6 ltimos para False. (Um duplo clique na propriedade 6isible1'ttons fechar de novo a
lista individual. Os quatro botes restantes se alargam para ocupar o espao deixado livre; voc
deve reduz-los a um tamanho menor.
- nsira tres componentes 1'tton troque seus captions para !RL1$ !RL8 e !air.
- nsira um componente 0ombobox$ um pequeno label para indicar sua finalidade.
- nsira um boto tipo 1it1tn com o gliph indicado e o caption #mprimir. Para o ghiph selecione
\..\delphi3\images\buttons\print.bmp (ou algo similar)...
Nota : Redimensione o formulrio conforme necessrio.
Para que este formulrio possa ser utilizado pela aplicao o aluno dever incluir um boto 1it1tn
com o smbolo mostrado no formulrio Forma0ad6is (utilize \..\delphi3\images\buttons\query.bmp
para a propriedade Gliph); na procedure associada ao evento OnClick deste boto inserir o
comando : Forma0ad0lientes.!how e, inserir Frm0lien na clusula 5/-/ de Frm0ad.
( Poderamos tambm, ter criado uma chamada de men diretamente para o formulrio de R'erI).
Reproduzimos, em seguida, trecho do 0ode Editor$ contendo a codificao necessria :
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 3
// Arquivo de Projeto (lojainfo.dpr)
program Lojainfo;
uses
Forms,
Frmpri in 'FRMPR.PAS' {FormaPrincipal},
Frmsobre in 'FRMSOBRE.PAS' {FormaSobre},
Frmmerc in 'FRMMERC.PAS' {FormaCadMerc},
Frmclien in 'FRMCLEN.PAS' {FormaCadClientes},
Frmsql in 'FRMSQL.PAS' {FormaTextoSQL},
Frmcad in 'FRMCAD.PAS' {FormaCadVis},
Frmven in 'Frmven.pas' {FormaVendas},
Splash in 'splash.pas' {SplashForm};
{$R *.RES}
begin
{ Observe a insero da splash screen}
SplashForm := TSplashForm.Create(Application);
SplashForm.Show;
SplashForm.Update;
Application.CreateForm(TFormaPrincipal, FormaPrincipal);
Application.CreateForm(TFormaCadClientes, FormaCadClientes);
Application.CreateForm(TFormaCadMerc, FormaCadMerc);
Application.CreateForm(TFormaSobre, FormaSobre);
Application.CreateForm(TFormaTextoSQL, FormaTextoSQL);
Application.CreateForm(TFormaCadVis, FormaCadVis);
Application.CreateForm(TFormaVendas, FormaVendas);
Application.CreateForm(TSplashForm, SplashForm);
{ Observe a retirada e destruio da splash screen}
SplashForm.Hide;
SplashForm.Free;
Application.Run;
end.
//Unidades do projeto (.pas)
unit Frmclien;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
StdCtrls, Forms, DBCtrls, DB, DBGrids, DBTables, Grids, ExtCtrls, Dialogs,
Buttons, Frmsql;
type
TFormaCadClientes = class(TForm)
DBGrid1: TDBGrid;
Panel1: TPanel;
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 3$
DataSource1: TDataSource;
Panel2: TPanel;
Query1: TQuery;
Button2: TButton;
Button3: TButton;
OpenDialog1: TOpenDialog;
ButPrint: TBitBtn;
ComboBox1: TComboBox;
DBNavigator: TDBNavigator;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure ButPrintClick(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
private
9 pri/ate declarations :
public
9 p'blic declarations :
end;
var
FormaCadClientes: TFormaCadClientes;
implementation
9;3 <.DF5:
procedure TFormaCadClientes.FormCreate(Sender: TObject);
begin
Query1.Open;
end!
procedure TFormaCadClientes.Button2Click(Sender: TObject);
begin
Close;
end!
procedure TFormaCadClientes.Button1Click(Sender: TObject);
begin
FormaTextoSQL.Show;
end!
procedure TFormaCadClientes.Button3Click(Sender: TObject);
begin
if OpenDialog1.Execute = True then
begin
With Query1 do
begin
Close;
SQL.LoadFromFile(OpenDialog1.FileName);
Open;
end!
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 3%
end!
end!
procedure TFormaCadClientes.ButPrintClick(Sender: TObject);
begin
Print;
end!
procedure TFormaCadClientes.ComboBox1Change(Sender: TObject);
begin
case ComboBox1.temndex of
0 : OpenDialog1.FileName := 'sqltex1.txt';
1 : OpenDialog1.FileName := 'sqltex2.txt';
2 : OpenDialog1.FileName := 'sqltex3.txt';
3 : OpenDialog1.FileName := 'sqltex4.txt';
4 : OpenDialog1.FileName := 'sqltex5.txt';
5 : OpenDialog1.FileName := 'sqltex6.txt';
6 : OpenDialog1.FileName := 'sqltex7.txt';
7 : OpenDialog1.FileName := 'sqltex8.txt';
end!
With Query1 do
begin
Close;
SQL.LoadFromFile(OpenDialog1.FileName);
Open;
end!
end!
end.
O boto SQL1 habilita a abertura de vrios arquivos .txt (poderamos usar qualquer extenso) usados
para acessar o banco de dados de diversas formas diferentes. Experimente com os varios arquivos
para voc sentir a fora da linguagem SQL. Apesar do ttulo ser 0adastro de 0lientes /oc pode
acessar qualquer tabela, no s a tabela Clientes. evidente que, se escolhida outra tabela, o
caption de nosso formulrio no mais estar representando a realidade, pois ele especfico para
a tabela 0lientes. O aluno no ter dificuldade alguma em antever um software mais genrico,
destinado a mostrar qualquer tabela; bastar mudar (em run-time) o caption do formulrio para
refletir o nome da tabela selecionada.
D-se, a seguir os textos contidos nos arquivos utilizados no exemplo :
sqltex1.txt :
Select * from clientes
order by codigo
sqltex2.txt:
Select * from clientes
order by nome
sqltex3.txt:
Select * from clientes
where Sexo = "M"
order by Nome
sqltex4.txt:
Select * from clientes
where Sexo = "F"
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 4)
order by Nome
sqltex5.txt :
Select * from clientes
where renda_mens > 1500 and vol_compra > 10000
order by Nome
sqltex6.txt:
Select * from clientes
where Nome like "M%"
order by Nome
sqltex7.txt:
Select * from estoques
order by codigo
sqltex8.txt:
Select * from vendas
order by data
O boto SQL2 permite que o usurio digite uma 'query' diretamente em uma caixa de memorando e a
'query' executada em seguida. Utilizando o Notepad ou outro editor de texto, visualize os arquivos
utilizados em SQL1 para treinar o uso da linguagem SQL... Esta uma excelente opo para o
aluno se exercitar no uso de queries em SQL... Vale a pena consultar, no Kelp do Delphi, os
tpicos referentes a!RL.
A opo SQL2 utiliza uma caixa de dilogo para a didgito de queries. Selecione New Dialo%s e
escolha !tandard Dialo%. Mude o caption p/ =exto de !RLE altere o nome para Forma=exto!RL;
renomeie o mdulo para Frms(l e inclua-o na clusula 5/-/ do mdulo Frm0lienE Baixe um
componente =memo e faa-o ocupar todo o espao de =be/el. e insira na propriedade Lines do
=memo as seguintes linhas :
select * from clientes
order by codigo
D-se abaixo, o cdigo necessrio a Frmsql.
unit Frmsql;
interface
uses WinTypes, WinProcs, Classes, Graphics, Forms, Controls, Buttons,
StdCtrls, ExtCtrls;
type
TFormaTextoSQL = class(TForm)
OKBtn: TBitBtn;
CancelBtn: TBitBtn;
Bevel1: TBevel;
Memo1: TMemo;
procedure OKBtnClick(Sender: TObject);
procedure CancelBtnClick(Sender: TObject);
private
9 Pri/ate declarations :
public
9 P'blic declarations :
end!
var
FormaTextoSQL : TFormaTextoSQL;
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 41
implementation
uses Frmclien;
9;3 <.DF5:
procedure TFormaTextoSQL.OKBtnClick(Sender: TObject);
var
i : integer;
begin
Close;
9Exec'ta a ('erI:
With FormaCadClientes.Query1 do
begin
Close;
SQL.Clear;
for i := 0 to FormaTextoSQL.Memo1.Lines.Count-1 do
SQL.Add(Memo1.Lines[i]);
Open;
end!
end!
procedure TFormaTextoSQL.CancelBtnClick(Sender: TObject);
begin
Close;
end!
end.
A caixa Combo SQL3 permite escolher os mesmos arquivos da SQL1 mas, desta feita,
selecionando-os em uma lista explicativa.
O boto #mprimir utiliza o mtodo Print 4de =Form) para imprimir o formulrio. uma forma simples
e limitada de imprimir os dados de uma tabela visveis na janela. Maximize o formulrio para obter
a maior quantidade de dados possvel.
A esquerda do formulrio, aparece o D1Na/i%ator que serve para o usurio navegar na tabela. Neste
caso particular, devido a premncia de espao, deixamos visveis apenas os elementos
necessrios navegao pelo banco de dados, excluindo os demais. Nada impede, no entanto, que
a tabela seja editada pois tornamos RequestLive = True na Query correspondente. O aluno deve
exercitar-se, utilizando o 'navigator', o mouse e o teclado.
CRIA#(O DO FORMULRIO CADASTRO DE MERCADORIAS
Este formulrio vai servir para cadastrarmos as mercadorias da loja e ter o lay-out abaixo:
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 42
Utilize o Form Ni,ard e, utilizando um procedimento semelhante ao do formulrio anterior, selecione o
objeto=('erI e a forma de apresentao com o objeto Jrid.
Mude o 0aption para Cadastro de Mercadorias e o Name para FormaCadMerc e renomeie o mdulo para
Frmmerc.
Faa a propriedade R'erI1.Acti/e igual a =r'e para vermos os dados do BD durante a montagem.
Antes de compilar faa a propriedade Query1.Active = False.
Se o Delphi abrir a query na procedure do evento OnFormCreate, retire-a e utilize a FormShow para abrir a
Query1 e FormClose p/ Fechar a Query1.
Redimensione o formulrio (clicando e arrastando nas fronteiras) at que todas as colunas estejam visveis.
Selecione a propriedade SQL do Query1 para ver as strings de SQL criadas pelo Delphi e que devero ser
iguais as mostradas abaixo:
!elect
esto('es.SDE!03#TU"S$
esto('es.SP3D0"5P3AS$
esto('es.SRUAN=#DADES$
esto('es.S0"D#J"S
From esto('es
nsira Frmmerc na clausula uses de Formapri para que haja o devido reconhecimento.
Torne False a propriedade Visible de FormaCadMerc.
Faa Query1.RequestLive = True para poder editar a query.
Note que utilizamos o DBNavigator completo (inserido pelo Ni,ard) j que, pretendemos poder cadastrar e
editar mercadorias neste formulrio. Note tambm que traduzimos os Kints para o Portugus.
Para fazer isto, inserimos as strings em Portugus na propriedade Kints e fizemos a propriedade !howKint
igual a =r'e. As strings de hint devem ser separadas pelo smbolo '|' ; a parte a esquerda deste smbolo
ser mostrada junto ao cone do navigator e a parte a direita ser mostrada na status line.
Utilizamos a traduo seguinte (ver propriedade Kints).
nicio|Primeiro registro --- equivalente a First 3ecord
Anterior|Registro Anterior --- equivalente a Prior 3ecord
Seguinte|Registro Seguinte --- equivalente a Next 3ecord
Final|Ultimo Registro --- equivalente a Last 3ecord
ncluir|ncluir Registro --- equivalente a #nsert 3ecord
Deletar|Deletar Registro --- equivalente a Delete 3ecord
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 43
Editar|Editar Registro --- equivalente a Edit 3ecord
Gravar|Gravar Alteraes --- equivalente a Post Edit
Cancelar|Cancelar Alteraes --- equivalente a 0ancel Edit
Retaurar|Restaurar Dados --- equivalente a 3efresh Data
CRIA#(O DO FORMULRIO MOVIMENTO DE VENDAS
Este formulrio vai servir para cadastrarmos as vendas da loja e ter o lay-out abaixo:
O formulrio foi criado usando-se o FormNi,ard. Escolhemos o tipo 5asterODetail para relacionar duas
tabelas. Nosso formulrio, baseado na tabela 6endas.dbf mostra os dados Nome e =elefone (da tabela
clientes). A relao entre as duas tabelas foi feita usando-se o campo indexador 0odi%o (em clientes.dbf) e
0odD0liente (em vendas.dbf).
No usamos SQL neste formulrio...
Note que utilizamos o DBNavigator completo (inserido pelo FormNi,ard ) j que, pretendemos poder
cadastrar e editar o movimento de vendas.
Colocamos tambm um BitBtn com Kind = Close (Caption = &Fechar) para fecharmos o formulrio
(sem precisarmos escrever cdigo para isso).
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 44
USANDO O INTERBASE
V;/.4 A3565G;= . I132=D;42 "V2=4K. XI-V9.1.1# 2/ A/ 0=.N23. 45/0624& 724351;7. ;021;4 ; 1.4 E;/565;=5G;= <./ .4
;02<3.4 515<5;54 72432 BD. V;/.4 A3565G;= ; F2=4K. 0;=; 72421F.6F5/213. BA2 ;<./0;1?; . D260?5 4.
N. @=A0. 72 0=.@=;/;4 7. I132=D;42 9.) F;/.4 4262<5.1;= ; E2==;/213; X-ISQL. E43; L ; E2==;/213; 0=51<50;6 0;=; .4
72421F.6F27.=24& 0.54 1.4 02=/532 2M2<A3;= 3.7;4 ;4 .02=;JV24 72 DDL 2 DML 7. BD.
V;/.4 <=5;= A/ BD 72 1./2 IBE43.BA2.@7D. ".@7D# L ; 2M3214K. 0;7=K. 7. I132=D;42. C=5;= . BD L ; U15<; .02=;JK.
BA2 1K. 0.72 42= E253; F5; SQL.
N. M21A F562 4262<5.12/.4 iC=2;32 D;3;D;42...i 2 0=221<?;/.4 ; <;5M; 72 75H6.@. BA2 42 ;0=24213;& <./ .4 7;7.4
/.43=;7.4 ;D;5M. 8
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 49
OBS 8 S!SDBA L . U42= N;/2 72E;A63 7. IB 2 ; 421?; 75@53;7; 72F2 42= j/;432=\2_k.
A0I4 . O:& 42 3A7. .<.==2= 1.=/;6/2132& . 1./2 7. BD ;0;=2<2=H 1; D;==; 72 43;3A4 7. XISQL& 5157<;17. BA2 ;
<.12MK. <./ . BD E.5 243;D262<57;.
A 0;=35= 72432 /./213. 0.72/.4 3=;D;6?;= <./ <./;17. SQL 75=23;/2132. E4324 <./;17.4 72F2/ 42= 75@53;7.4 1;
N;126; 4A02=5.= 7. XISQL ".4 =24A63;7.4 4K. /.43=;7.4 1; N;126; 51E2=5.=#.
V;/.4& ; 3>3A6. 72 ;0=2175G;7.& <=5;= A/; 3;D26; <?;/;7; T;D26;B.D; <./ .4 <;/0.4 8
- C.75@.B.D. 5132@2=& N./2B.D. F;=<?;= "3)# 2 E172=2<.B.D. F;=<?;="2)# 8

C./;17. SQL 8 C=2;32 3;D62 T;D26;B.D;"C.75@.B.D. 5132@2=& N./2B.D. F;=<?;="3)#&E172=2<.B.D. F;=<?;="2)##Q
V;/.4 A3565G;= . /21A M23;7;3; 0;=; F2=5E5<;= . 1.44. BD ;3L . /./213..
V;/.4 0.F.;= ; 1.44; 3;D26; <./ ;6@A14 =2@543=.4 8
C./;17. SQL 8 I142=3 513. T;D26;B.D; "C.75@.B.D.&N./2B.D.&E172=2<.B.D.# F;6A24 "1&kB.D.1k&kE17 B.D.1k#Q
E/ 42@A57; A42/.4 . S262<3 42@A5132 0;=; F2=5E5<;= 42 ; 51<6A4K. EA1<5.1.A 8
C./;17. SQL 8 S262<3 h E=./ T;D26;B.D;Q
V;/.4 5142=5= /;54 A/ =2@543=. 8
C./;17. SQL 8 I142=3 513. T;D26;B.D; F;6A24 "2&kB.D.2k&kE17 B.D.2k#Q ]] P.72/.4 E;G2= 243; 45/065E5<;JK. 42/0=2
BA2 5142=5=/.4 F;6.=24 0;=; 3.7.4 .4 <;/0.4& 1; .=72/ 2/ BA2 2624 .<.==2/ 1; 3;D26;.
V;/.4 72623;= . 2
.
=2@543=. 8
C./;17. SQL 8D26232 E=./ T;D26;B.D; O?2=2 C.75@.B.D. ^ 2Q
V;/.4 =2E;G2= . S262<3 "QA2=_-0=2F5.A4# 2 F2=5E5<;= BA2 ; 2M<6A4K. =2;6/2132 .<.==2A.
OBS 8 D26232 42/ ; <6;A4A6; X?2=2 DELETA TODOS OS REGISTROS DA TABELA.
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 46
O4 <./;17. A3565G;7.4 0;=; 42=2/ 3.=1;7. 2E235F.4 "@=;F;7.4 1. BD# 2M5@2/ BA2 42 <./;172 iC.//53i. NI4
A3565G;=2/.4 iR.66D;<\i 0.54 E5G2/.4 ;021;4 ;6@A14 324324...
V;/.4 7;= A/ D=.0 7;3;D;42 0.54 E5G2/.4 ;021;4 ;6@A14 324324 2 1K. BA2=2/.4 <.142=F;= ;4 3;D26;4 <=5;7;4. O4
<./;17.4 DDL 1K. 0=2<54;/ 72 C.//53& 2624 4K. 2E235F;7.4 1. /./213. 2/ BA2 4K. 5142=57.4.
P;=; E;<5657;72 72 3=;D;6?. . XISQL 02=/532 . A4. 72 ;=BA5F.4 72 4<=503 " ;=BA5F.4 32M3. <./ 2M3214K. .4B6 <.13217.
<./;17.4 SQL#. V;/.4 @2=;= . ;=BA5F. IBE43.BA2.4B6 "1. B6.<. 72 N.3;4#& <.13217. .4 <./;17. ;D;5M. 8
A=BA5F. 72 4<=503 IBE43.BA21
]h EM2=<5<5. 4.D=2 I132=D;42 f D./;514 2 <=5;JK. 72 3;D26;4h]
]h E432 ;=BA5F. <=5; . D;1<. 72 7;7.4 IBE43.BA2 h]
CONNECT gZ<7260?5ZIBE43.BA2ZIBE43.BA2.@7Dg
USER gS!SDBAg
PASSXORD g/;432=\2_gQ
]h P.72=5;/.4 32= A4;7. CREATE ;. 51FL4 72 CONNECT h]
]h D./;51 72E51535.14 h]
CREATE DOMAIN TDINHEIRO AS NUMERIC"19& 2#
DEFAULT )
CHEC: "VALUE ` )#Q
CREATE DOMAIN TDESCRICAO AS VARCHAR"4)#Q
CREATE DOMAIN TCODIGO AS INTEGERQ
]h T;D628 ESTOQUES& OO12=8 S!SDBA h]
CREATE TABLE ESTOQUES
"
CODIGO TCODIGO NOT NULL&
DESCRICAO TDESCRICAO&
PRTCOMPRA TDINHEIRO NOT NULL&
QUANTIDADE INTEGER&
PRIMAR! :E! "CODIGO#
#Q
]h T;D628 SAIDAS& OO12=8 S!SDBA h]
CREATE TABLE SAIDAS
"
CODIGO TCODIGO&
DATA DATE&
DESCRICAO TDESCRICAO&
QUANTIDADE INTEGER&
PRECOTUNIT TDINHEIRO&
FOREIGN :E! "CODIGO# REFERENCES ESTOQUES "CODIGO#
#Q
]h T;D628 ENTRADAS& OO12=8 S!SDBA h]
CREATE TABLE ENTRADAS
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 4
"
CODIGO TCODIGO&
DATA DATE&
DESCRICAO TDESCRICAO&
QUANTIDADE INTEGER&
CUSTOTTOTAL TDINHEIRO&
FOREIGN :E! "CODIGO# REFERENCES ESTOQUES "CODIGO#
#Q
OBS 8 1#D./;514 4K. 350.4 0=272E5157.4 <.==240.1721324 ;. D5<5.1H=5. 72 D;7.4. C.1<253A;6/2132 4K. 2BA5F;621324 ;.
350.4 7; 651@A;@2/.
2# O4 <.1<253.4 72 P=5/;=_ :2_ 2 F.=25@1 :2_ 4K. .4 A4A;54 7; /.726;@2/ 72 7;7.4.
A=BA5F. 72 4<=503 IBE43.BA22
]h EM2=<5<5. 4.D=2 I132=D;42 f C=5;JK. 72 T=5@@2=4h]
CONNECT gZ<7260?5ZIBE43.BA2ZIBE43.BA2.@7Dg
USER gS!SDBAg
PASSXORD g/;432=\2_gQ
SET TERM l Q
]h T=5@@2=4 .16_ O566 O.=\ E.= SQL 3=5@@2=4 h]
]h INCLUS(ES h]
CREATE TRIGGER INCLUSAOTENTRADAS FOR ENTRADAS
ACTIVE AFTER INSERT POSITION )
AS
BEGIN
UPDATE ESTOQUES
SET ESTOQUES.VALORTESTOQUE ^ ESTOQUES.VALORTESTOQUE [CUSTOTTOTAL&
ESTOQUES.QUANTIDADE ^ ESTOQUES.QUANTIDADE [NEX. QUANTIDADE
XHERE ESTOQUES.CODIGO ^ NEX.CODIGOQ
END
l
CREATE TRIGGER INCLUSAOTSAIDAS FOR SAIDAS
ACTIVE AFTER INSERT POSITION )
AS
BEGIN
UPDATE ESTOQUES
SET ESTOQUES.VALORTESTOQUE ^ ESTOQUES.VALORTESTOQUE -
NEX.QUANTIDADEh"ESTOQUES.VALORTESTOQUE]ESTOQUES.QUANTIDADE#&
ESTOQUES.QUANTIDADE ^ ESTOQUES.QUANTIDADE - NEX.QUANTIDADE
XHERE ESTOQUES.CODIGO ^ NEX.CODIGOQ
END
l
]h E,CLUS(ES h]
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 4$
CREATE TRIGGER E,CLUSAOTENTRADAS FOR ENTRADAS
ACTIVE AFTER DELETE POSITION )
AS
BEGIN
UPDATE ESTOQUES
SET ESTOQUES.VALORTESTOQUE ^ ESTOQUES.VALORTESTOQUE - OLD.CUSTOTTOTAL&
ESTOQUES.QUANTIDADE ^ ESTOQUES.QUANTIDADE - OLD.QUANTIDADE
XHERE ESTOQUES.CODIGO ^ OLD.CODIGOQ
END
l
CREATE TRIGGER E,CLUSAOTSAIDAS FOR SAIDAS
ACTIVE AFTER DELETE POSITION )
AS
BEGIN
UPDATE ESTOQUES
SET ESTOQUES.VALORTESTOQUE ^ ESTOQUES.VALORTESTOQUE [
"ESTOQUES.VALORTESTOQUE]ESTOQUES.QUANTIDADE#hOLD.QUANTIDADE&
ESTOQUES.QUANTIDADE ^ ESTOQUES.QUANTIDADE [ OLD.QUANTIDADE
XHERE ESTOQUES.CODIGO ^ OLD.CODIGOQ
END
l
]h UPDATES h]
CREATE TRIGGER UPDATETENTRADAS FOR ENTRADAS
ACTIVE AFTER UPDATE POSITION )
AS
BEGIN
UPDATE ESTOQUES
SET ESTOQUES.VALORTESTOQUE ^ ESTOQUES.VALORTESTOQUE - OLD.CUSTOTTOTAL [ NEX.
CUSTOTTOTAL&
ESTOQUES.QUANTIDADE ^ ESTOQUES.QUANTIDADE [ NEX.QUANTIDADE - OLD.QUANTIDADE
XHERE ESTOQUES.CODIGO ^ OLD.CODIGOQ
END
l
CREATE TRIGGER UPDATETSAIDAS FOR SAIDAS
ACTIVE AFTER UPDATE POSITION )
AS
BEGIN
UPDATE ESTOQUES
SET ESTOQUES.VALORTESTOQUE ^ ESTOQUES.VALORTESTOQUE [
"ESTOQUES.VALORTESTOQUE]ESTOQUES.QUANTIDADE#h"OLD.QUANTIDADE-NEX.QUANTIDADE#&
ESTOQUES.QUANTIDADE ^ ESTOQUES.QUANTIDADE [ OLD.QUANTIDADE - NEX.QUANTIDADE
XHERE ESTOQUES.CODIGO ^ OLD.CODIGOQ
END
l
OBS 8 1#T=5@@2=4 4K. <./;17. SQL BA2 4K. 2M2<A3;7.4 1; .<.==P1<5; 7.4 42@A51324 2F213.4 7. BD& I1<6A4K.& EM<6A4K.
.A A3A;65G;JK. "A07;32# 72 =2@543=.4.
2)Os conceitos de Old e New so exclusivos de triggers.
Clube Delphi - www.clubedelphi.com.br
DELPHI4 - CURSO BSICO
Pag 4%
TESTANDO O BD
F5G2/.4 A/ 0=.@=;/51?; 72 32432 "P=.N2<31#. E43H 1. 75=23I=5. C8ZC7260?5ZIBE43.BA2& .172 <.6.<;/.4 3;/DL/ . BD.
P;=; E;<5653;= . A4. <=5;/.4 A/ A65;4& A3565G;17. . SQL EM06.=2= "/21A 7. D260?5 D;3;D;42]EM06.=2# 8
A65;4N;/2 ^ IBE43.BA2
S2=F2=N;/2 ^ C8ZCD260?5ZIBE43.BA2ZIBE43.BA2.@7D
U42=N;/2 ^ S!SDBA
P;=; A3565G;= . BD 1. D260?5& D;5M;/.4 . <./0.12132 D;3;B;421 2 ;632=;/.4 ;4 42@A51324 0=.0=527;724 8
N;/2 ^ E43.BA2
P;44O.=7 ^ /;432=\2_
L.@51P=./03 ^ F;642
OBS8 F5G2/.4 L.@51P=./03 ^ F;642 0;=; 1K. 0=2<54;=/.4 E5<;= 75@53;17. 421?; ; 3.7. . 5143;132. A. 21<;/51?;= A/
0=.N23. ;. A4AH=5.& . L.@51P=./03 72F2=H 42= =243;A=;7..
O ;6A1. 72F2 E;G2= FH=5.4 324324 51<6A517.& 2M<6A517. 2 ;632=;17. =2@543=.4 7;4 3;D26;4 E13=;7;4 2 S;57;4Q ;0I4 E;G2=
;632=;JV24 <65BA2 2/ A065<;= 2 F2N; . 2E253. 7;4 ;632=;JV24 1; 3;D26; E43.BA24.
T=;3;-42 72 A/ 2M2=<><5. 2 0.= 544. 1K. 42 <.@53.A 72 ;6@A14 <;4.4 BA2 0.72/ <.17AG5= ; 2==.4& 3;54 <./. 243.BA2
12@;35F.& 7;3; 51FH657;& 23<...
Clube Delphi - www.clubedelphi.com.br

Você também pode gostar