Você está na página 1de 160

Captulo I

Conceito de Programao Orientada a Objeto


Para compreendermos melhor a novo ambiente de desenvolvimento da Borland o Delphi necessrio que voc, aprenda e, tenha em mente os conceitos de POO (Programao Orientada a Objetos), no con unda os conceitos com PO! (Programao Orientada a !ventos) muito di undido com o Access 2.0 " (um ambiente baseado em Objetos), mas ao longo deste cap#tulo voc vai notar as sens#veis di erenas que e$istem entre esses dois conceitos% & POO e a PO! so acilmente con undidas, mas lembre'se a POO contm a PO! mas a PO! no contm a POO, um objeto pode e$istir mesmo que no e$ista nenhum evento associado a ele, mas um evento no pode e$istir se no houver um objeto a ele associado% Outra caracter#stica que pode causar con uso so ambientes Orientados a Objetos e ambientes (aseados em Objetos% !m ambiente Orientado a Objetos consegue'se criar e manipular objetos enquanto que o (aseado em Objetos no possivel a criao de objetos apenas a sua manipulao% & POO um conceito desenvolvido para acilitar o uso de c)digos de desenvolvimento em inter aces gr icas% *endo a Borland, uma das primeiras a entrar neste novo conceito, possui suas principais linguagens de programao (tais como Object Pascal e C++), totalmente voltadas para este tipo de programao% & POO atraiu muitos adeptos principalmente pelo pouco uso de c)digo que o projeto (di erente de sistema) carrega no programa onte, ao contrrio das linguagens mais antigas como o Clipper87 " muito utili+ado no inal da dcada de ,- e in#cio da dcada de ,-% O resultado desta .limpe+a/ no c)digo resulta que a manuteno do projeto torna'se muito mais simples%

Orientao a Objeto
&ntes de comearmos a alar realmente de linguagem orientada a objetos e necessrio que voc possua os conceitos bsicos da orientao a objetos, so eles0

Objeto ' qualquer estrutura modular que a+ parte de um produto% 1ma janela por e$emplo, um objeto de uma casa, de um carro ou de um so t2are com inter ace gr ica para o usurio%

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Atributos ' *o as caracter#sticas do objeto, como cor e tamanho, a janela, por e$emplo, tem atributos como o modelo, tamanho, abertura simples ou dupla, entre outros% Encapsulao ' um mecanismo interno do objeto .escondido/ do usurio% 1ma pessoa pode abrir uma janela girando a tranca sem precisar saber o que h dentro dela% Ao ' a operao e etuada pelo objeto% 6odas as janelas, por e$emplo, controlam a iluminao e temperatura ambiente, dependendo do seu design% Herana ' um objeto novo nem sempre criado do +ero% !le pode .herdar/ atributos e a7es de outros j e$istentes% 1m basculante herda atributos das janelas e das persianas% Polimorfismo ' a capacidade de objetos di erentes reagirem segundo a sua uno a uma ordem padro% O comando .abre/, por e$emplo, a+ um objeto entrar em ao, seja ele uma janela, uma porta ou uma tampa de garra a% Ligao ' quando um objeto conecta a sua ao a outro% 1m sensor de claridade, por e$emplo, ativa o acendimento automtico da iluminao de rua% Embutimento ' Permite a um objeto incorporar un7es de outros, como um liq8idi icador que m)i carne com a mudana do tipo da l9mina%

Object Pascal
Object Pascal uma linguagem Orientada a Objetos no pura mas h#brida por possuir caracter#sticas de programao no s) visual mas tambm escrita, para os programadores que j conhecem tcnicas de estruturas de programao, com o C, Basic, Pascal ou $BA ! entre outras linguagens a Object Pascal providncia uma migrao de orma natural o erecendo um produto de maior comple$ibilidade% Object Pascal ora a voc e$ecutar passos l)gicos isto torna mais cil o desenvolvimento no ambiente "indo#s" de aplica7es livres ou que utili+am banco de dados do tipo Cliente$ ervidor, trabalha com o uso de ponteiros para a alocao de mem)ria e todo o poder de um c)digo totalmente compilvel% &lm disso possibilita a criao e reutili+ao (vantagem de re'uso to sonhado com a Orientao a Objetos) de objetos e bibliotecas din9micas (D%namic &in' &ibraries ' 3::)% Object Pascal contm todo o conceito da orientao a objetos incluindo encapsulamento, herana e polimor ismo% &lgumas e$tens7es oram inclu#das para acilitar o uso tais como conceitos de propriedades, particulares e p;blicas, e tipos de in orma7es em modo run'time, manuseamento de e$ce7es, e re erncias de classes% O resultado de toda esta juno a+ com que Object Pascal consiga suportar as acilidades de um bai$o n#vel de programao, tais como0 4ontrole e acesso das subclasses do "indo#s" (&P<)= Passar por cima das mensagens de loop do "indo#s"= >ensagens semelhantes as do "indo#s"= 4)digo puro da linguagem Assembler%

4omo deu para perceber a base de toda a programao Delphi a linguagem Object Pascal, ento neste cap#tulo trataremos e$clusivamente deste tipo de programao%

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Smbolos Especiais
& Object Pascal aceita os seguintes caracteres &*4<<0

:etras ' do &l abeto <ngls0 A at Z e a at z% 3#gitos ' 3ecimal0 0 at 9 e ?e$a3ecimal0 0 at 9 e A at (ou a at f) (rancos ' !spao (A!"## $2) e todos os caracteres de controle A!"##
A!"## $%), incluindo inal de linha e !nter (A!"## %$)% !speciais ' 4aracteres0 & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : *#mbolos ' 4aracteres0 +* ,* 3* // 1( (2 1/ /2 ))

(A!"## 0 at

O colchetes esquerdo ( - ) e equivalente ao 1/ e o colchetes direito ( . ) e equivalente a /2% & chave esquerda ( 7 ) e equivalente ao 1( e a chave direita ( 8 ) e equivalente a (2%

Palavras Reservadas
& Object Pascal se utili+a das seguintes palavras reservadas, no podendo as mesmas serem utili+adas ou rede inidas0
&nd &rra@ &s &sm (egin 4ase 4lass 4onst 4onstructor 3estructor 3iv 3o 3o2nto !lse !nd !$cept !$ports Aile Ainnal@ Aor Aunction Coto < <mplementation <n <nherited <nitiali+ation <nline <nter ace <s :abel :ibrar@ >od Bil Bot Object O On Or PacDed Procedure Program Propert@ Faise Fecord Fepeat *et *hl *hr *tring 6hen 6o 6r@ 6@pe 1nit 1ntil 1ses Ear Ghile Gith Hor

1ma outra lista a seguir, apresenta as diretivas que so utili+adas em conte$tos de identi icao de objetos0
&bsolute &bstract &ssembler &t 4decl 3e ault 3@namic !$port !$ternal Aar Aor2ard <nde$ <nterrupt >essage Bame Bear Bode ault Override Private Protected Public Published Fead Fesident *tored Eirtual Grite

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Nmeros
I poss#vel de inir variveis e constantes de tipos de (nteiro ou )eal atravs de qualquer decimal ordinrio ( 0 a 9 ), mas a Object Pascal tambm aceita a notao ?e$adecimal utili+ados com o pre i$o dollar ( 9 ) ou a notao cient# ica ( E )%

Constantes
1ma constante um identi icador com valor(es) i$o(s)% 1m bloco de declara7es constante possui a seguinte e$presso0 J3eclarao 4onstanteK J<denti icadorK (L) JconstanteK (=) & lista abai$o apresenta um conjunto de un7es que podem ser utili+adas para a declarao das constantes0
&b 4hr ?i ?igh :ength :o :o2 Odd Ord Pred Ptr Found *i+eO *ucc *2ap 6runc

&lguns e$emplos para a de inio de 4onstantes0


const >in L -= >a$ L M--= 4entro L (>a$ ' >in) div N= (eta L 4hr(NNO)= Bum:etras L Ord(PQP) ' Ord(P&P) R M= >ensOla L P<nstruo invlidaP= >ens!rro L P !rro0 P R >ensOla R P% P= Pos!rr L S- ' :ength(>ens!rro) div N= :nM- L N%T-NOSO-,N,,U-UOVSU= :nM-F L M 5 :nM-= 3igBumericos L JP-P%%P,PK= :etras&lpha L JP&P%%PQP, PaP%%P+PK= &lphaBum L :etras&lpha R 3igBumericos=

Expresses
&s e$press7es em Object Pascal (como em qualquer linguagem) ormada por operadores e operandos= os operadores so divididos em quatro categorias bsicas0
Wnicos >ultiplicativos &dicionais Felacionais X, Bot Y, 5, div, mod, and, shl, shr, as R, ', or, $or L, Z Y, Z, Y, Z L, Y L, in, is

&s e$press7es obdecem as regras bsicas de l)gica para a precedncia da e$ecuo das opera7es%

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

denti!icadores
<denti icadores podem ser constantes, tipos, variveis, procedures, un7es, unidades, programas e campos de registros% Bo e$iste limite de caracteres para o nome de um identi icador mas apenas os VT primeiros caracteres so signi icantes (no podendo ser idntico ao nome das palavras reservadas)% O nome de um identi icador deve ser iniciado por :etras ou o carcter underscore ( < )% O resto ormado por :etras, 3#gitos, carcter underscore (&*4<< [OA)% Bo permitido a utili+ao de espaos para a ormao do nome%

!$emplo de identi icadores vlidos0 AormM, *@s1tils%*tr:en, :abelM%4aption

with... do...;
3elimita um determinado bloco de declara7es para um identi icador espec# ico evitando a declarao deste identi icador% & sinta$e do comando 0 =#>H 7nome ?o i?entifica?or8 @O 7coman?os84% !$0
begin \ %%% comandos iniciais %%% ] AitB form% ?o begin 4aption 0L ^6este_= (order*t@le 0L bs*i+able= end= end=

!quivalente a AormM%4aption !quivalente a AormM%(order*t@le

array [ ... ] of ...;


3e ine um conjunto de variveis ou constantes de um mesmo tipo% & sinta$e do comando 0 arraC -7Duanti?a?e ?e ocorrencias8. of 7>ipo84% Os arra@s so controlados por trs un7es0
uno :o2 ?igh *i+eO Ealor ?e Fetorno Primeiro elemento &ponta para o ;ltimo elemento 6amanho do arra@

!$0
const t0 arraC -%//G0. of "Bar \ 3eclara O- elementos para o tipo 4har ] var s 0 arraC-%//%00. of Feal \ 3eclara M-- elementos para o tipo real ] ind0 <nteger= begin or <nd 0L LoA(s) to HigB(s) do sJ<ndK 0L -= \ Qera os elementos do arra@ * ] i !izeOf (t) L ^4_ then e$it= \ *e o ;ltimo elemento do arra@ 6 or ^4_ sai do bloco ] \ %%% outros comandos%%% ] end=

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

"eclaraes
3eclara7es descrevem a7es de um algor#tmo a serem e$ecutadas%

be in... end;
Prende um conjunto de declara7es em um bloco de comandos determinado% & sinta$e do comando 0 HEI#J 7coman?os8 EJ@4% !$0
begin \ %%% comandos iniciais %%% ] begin \ %%% bloco M %%% ] en?= begin \ %%% bloco N %%% ] en?= \ %%% comandos inais %%% ] en?=

if... then... else...;


!sta e$presso escolhe entre o resultado de uma condio booleana o caminho verdadeiro (then) ou also (else)% & sinta$e do comando 0 # 7con?io8 >HEJ 7bloco ?e coman?os8 EL!E 7bloco ?e coman?os84% !$0
begin \ %%% comandos iniciais %%% ] if K , 2 tBen \ %%% (loco verdadeiro %%% ] else \ %%% (loco also %%% ]4 end=

oto... ;
6rans ere a e$ecuo de um programa para o ponto determinado pelo Label% & sinta$e do comando 0 IO>O 7Label84% !$0
label primeiro= begin \ %%% comandos iniciais %%% ] i $ L N then goto primeiro4 \ %%% outros comandos %%% ] Primeiro3 \ %%% comandos do Primeiro %%% ] end=

case... of... else... end;


4onsiste de uma lista de declara7es que sati+ a+ a condio de um seletor de e$press7es, se nenhuma parte da lista satis i+er ao seletor e$ecuta os comandos do sub'comando else% Para o

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

seletor sero vlidos os tipos de inidos, tipo <nteiros ou :ong<nt% & sinta$e do comando 0 "A!E 7seletor8 O 7EKpresso %83 7coman?o ?a eKpresso %84 7EKpresso 283 7coman?o ?a eKpresso 284 7EKpresso n83 7coman?o ?a eKpresso n8 EL!E 7coman?o84 en?4% !$0
begin \ %%% comandos iniciais %%% ] case K of %3 \ %%% (loco para $ L M %%% ] 20 $3 \ %%% (loco para $ L N ou H L T%%% ] ;//L3 \ %%% (loco para U ZL $ ZL V %%% ] else \ %%% (loco para $ Z M ou $ Y V %%% ] 4 en?4 end=

repeat... until;
Fepete um determinado bloco de declara7es at a condio booleana do subcomando until ser satis eita% & sinta$e do comando 0 FEPEA> 7coman?os84 until 7con?io84% !$0
begin \ %%% comandos iniciais %%% ] $ 0L -= repeat $ 0L $ R M until 1K * 224 end=

for... to !downto"... do...;


<ncrementa em M uma determinada varivel inteira, repetindo um bloco de comandos, at que esta atinja o valor inal do intervalo, o subcomando ?oAnto reali+a o incremento reverso% & sinta$e do comando 0 OF 7MariaMel8 3* 7Malor inicial8 to 1?oAnto2 7Malor final8 ?o 7bloco ?e coman?os84% !$0
begin \ %%% comandos iniciais %%% ] for i 3* % to %0 ?o \ %%% 4omandos & %%% ] for s 3* %0 ?oAnto % ?o \ %%% 4omandos (%%% ] end=

!$ecuta o Jcomandos &K para i L M,N,T,U,O,V,`,S,, e M!$ecuta o Jcomandos (K para i L M-,,,S,`,V,O,U,T,N e M

while... do...;
Fepete um bloco de comandos enquanto que determinada condio booleana seja satis eita% & sinta$e do comando 0 =H#LE 7con?io8 @O 7bloco ?e coman?os84% !$0
begin \ %%% comandos iniciais %%% ] ABile i 3* % ?o \ %%% (loco de comandos %%% ] end=

Fepete o J(loco de comandosK enquanto i L M

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

brea#; ou continue...;
O comando breaO interrompe um bloco de repetio for, ABile ou repeat saindo do bloco% & sinta$e do comando 0 HFEAP4 enquanto que o comando continue retorna a primeira instruo do bloco de repetio for, ABile ou repeat% & sinta$e do comando 0 "OJ>#JQE4% !$0
begin \ %%% comandos iniciais %%% ] or i 0L M to M- do begin i i L S then breaO4 \%%% comandos &%%%] i i L O then continue4 \%%% comandos ( %%%] end= \%%% comandos 4 %%%] end=

*alta para os Jcomandos 4K Fetorna para o comando for pulando os Jcomandos (K

#locos de Procedimentos o$ %$nes


&s procedures ou un7es so declaradas na seo de tipos de declara7es (abai$o do comando tCpe) pertencendo ao objeto ou serem do tipo public (p;blicas ' e$ecutadas por outras unidades) ou priMate (particulares ' restritas a unidade local)%

Procedure
proce?ure 7cabealBo84 Mar 7?eclarao ?as MariRMeis84 7bloco ?e coman?os84

O cabealho da procedure composto pelo nome do procedimento e variveis que sero recebidas (ou modi icadas atravs da declarao Mar0 e$0 procedure teste(Mar $0string)=)%
procedure soma(a,b0 integer)= var c0 integer= begin c 0L a R b= end= <n#cio enviando as variveis & e ( do tipo inteiro% 3eclarao de variveis locais% 4orpo do procedimento%

$unction
function 7cabealBo8 3 7resulta?o84 Mar 7?eclarao ?as MariRMeis84 7bloco ?e coman?os84

&s un7es se di erem dos procedimentos pela obrigatoriedade do retorno de um resultado, podendo este resultado ser retornado pela declao0 7nome ?a funo8 3* Malor ou result 3* Malor%
unction soma(a,b0 integer) 0 integer= begin soma 0L a R b= end= <n#cio enviando as variveis & e ( do tipo inteiro% 4orpo do procedimento% ou result 0L a R b=

aunto com o Delphi 2.0 vem o manual de Object Pascal em ormato /HLP, caso a linguagem seja novidade para voc aconselho que voc d uma boa olhada (o Delphi *.0 tra+ o

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

mesmo manual, mas em ormato /P@ ), mas no se preocupe com o que oi e$plicado acima j est mais do que su iciente para uma boa iniciali+ao com o Delphi% 6udo o que vimos a cima o que normalmente temos em outras linguagens comuns, mas o caracteri+a realmente a linguagem Orientada em Objetos o trabalho e a manipulao com os mesmos%

Caractersticas de Objetos
>as a inal de contas, o que um objeto b 4omo oi dito anteriormente, um objeto qualquer tipo de elemento, ou componente, que envolva dados e c)digo dentro de um ;nico pacote% 1ma vantagem de programar na POO e quanto a +eran,a dos objetos, este mtodo a+ com que seja poss#vel um objeto ^Ailho_ poder herdar todas as caracter#sticas e conte;dos de um objeto ^Pai_% 6irando um pouco do Pascal da geladeira (a partir do Pascal verso `%- a Borland tornou poss#vel a utili+ao simpli icada de todo o conceito de POO) aqui vai um c)digo completo de declarao de dois objetos, o primeiro chamado de 6Pai e o segundo de 6 ilho0
6Pai L object Bome0 P"Bar4 constructor <nit (P0 P4har)= ?estructor @one= proce?ure >udaBome(P0 P4har)= proce?ure *ho2Bame= en?= 6Ailho L object(6Pai) proce?ure >udaBome(P0 P4har)= en?=

O segundo objeto 6Ailho herda do objeto 6Pai o ponteiro varivel Jome, a constructor #nit, o ?estructor @one e a proce?ure !BoAJame, apenas a proce?ure Tu?aJome ter o uncionamento como uma caracter#stica ;nica para cada objeto% O Delphi possui in;meros .pais/ (classes de objetos) prontos para serem usados por voc, tais como0
> orm0 4entro das aplica7es Delphi, utili+ados na criao de janelas, cai$as de dilogo entre outros% >Tenu0 Fesponsvel pela concepo de menus e menu popup% >Hutton"ontrol0 *impli ica o re inamento do controle da janela serve de base para os componentes como0 (ot7es, 4hecD (o$ e Fadio (o$%

Pro ra%ando co% objetos Delphi


cuando iniciado o Delphi, criado automaticamente um novo projeto e um objeto ormulrio (derivado da classe > orm) para o suporte dos demais objetos% !$plorando o !ditor de 4)digos (Code !ditor) voc poder observar a declarao do novo objeto da classe -.orm que oi produ+ido automaticamente com a criao do novo ormulrio% !$aminando o conte;do deste c)digo criado para o objeto, teremos0

Borland
unit 1nitM= interface

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

&bertura de uma nova unidade Par9metros do obejetos 1so de outras unidades

uses *@s1tils, Gin6@pes, GinProcs, >essages, 4lasses, Craphics, 4ontrols, Aorms, 3ialogs= tCpe 6AormM L class(6Aorm) priMate / Private declarations 0 public / P1blic declarations 0 en?= Mar AormM0 6AormM= implementation /2) 3.D.40 en?% & declarao do objeto inicia aqui

&qui o inal da declarao &tribui a varivel AormM as caracter#sticas do objeto 6AormM <n#cio da parte a ser implementada 3iretiva de compilao que agrega o desenho da tela (em %3A>) com o mesmo nome da unidade Ainal da parte implementada

1m novo tipo de objeto -.orm*, declarado derivado da classe -.orm5 que tambm um outro objeto% Felembre um objeto um tipo de elemento capa+ de guardar dados e c)digo dentro de um ;nico pacote% &t agora, o tipo -.orm* no contm campos ou mtodos, isso acontecer com a adio de alguns componentes neste objeto% Observando o c)digo, notamos que e$iste uma varivel declarada com o nome .orm* para o novo tipo de objeto -.orm*0
Mar AormM0 6AormM=

.orm* a chamada de inst9ncia ao tipo -.orm*% !sta varivel re ere'se ao ormulrio em si, aonde ser adicionado componentes e desenhado a inter ace entre o computador e o usurio que or operar o sistema% I sempre notado declara7es de uma ou mais inst9ncias re eridas ao tipo de objeto% Auturamente ser mostrado o poder deste tipo de declara7es quando alarmos sobre janela >3< (41ltiple Doc1ment (nter6ace ' <nter ace de documento m;ltiplos) gerenciando vrias .janelas ilhas/, no permitindo que estas .janelas ilhas/ saiam do espao criado pela .janela pai/% &dicionando alguns componentes ao ormulrio, veremos como o Delphi completar a aplicao escrevendo automaticamente o c)digo, e permitindo que ao inal tornar'se' poss#vel a compilao (lembra'se do Clipper", com /EUE), e$ecuo e distribuio da aplicao% !m nosso ormulrio, colocaremos um boto que, em tempo de e$ecuo, ao ser dado um clique com o mouse sobre este objeto, o ormulrio mude sua cor% &perte a tecla %2 para retornar a viso do ormulrio e na palheta de objetos ( Componnent Pallete) clique no objeto (b1tton locali+ado na pgina tandard) e clique no ormulrio% Ba janela da Object (nspector clique na pgina !vents e clique duas ve+es sobre a ao OnClic' e insira o seguinte c)digo0

%0

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

proce?ure 6AormM%(uttonM4licD(*ender0 6Object)= begin AormM%4olor 0L clCreen= en?=

Feparando no c)digo completo da aplicao, veremos0


unit 1nitM= interface uses *@s1tils, Gin6@pes, GinProcs, >essages, 4lasses, Craphics, 4ontrols, Aorms, 3ialogs= tCpe 6AormM L class(6Aorm) (uttonM0 6(utton= proce?ure (uttonM4licD(*ender0 6Object)= priMate / Private declarations 0 public / P1blic declarations 0 en?= Mar AormM0 6AormM= implementation /2) 3.D.40 proce?ure 6AormM%(uttonM4licD(*ender0 6Object)= begin AormM%4olor 0L clCreen= en?= en?% O c)digo do novo mtodo

1m novo dado oi aqui inserido 3eclarado um novo mtodo

O novo objeto -.orm* agora apresenta um campo B1tton* ' o boto que voc adicionou ao ormulrio% -B1tton e o tipo do objeto, e B1tton* o objeto boto propriamente dito% 4om o tempo voc colocar novos componentes ao ormulrio% Fode o projeto, clicando no boto ()1n), d um clique no boto e veja o que acontece% Pare a aplicao echando a janela com Alt& ;% *) por curiosidade, salve este arquivo, eche'o e abra o arquivo 78(-*.D.4 (com a opo ile d Open ile///) notaremos que o Delphi criou um arquivo com todas as propriedades dos objetos criados e que a declarao do objeto orm% engloba todos os outros, no7es de Encapsulamento%

%%

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

&eno%eando os objetos e os co%ponentes


Eoc sempre deve utili+ar a janela do Object (nspector para renomear os objetos criados% Por e$emplo, o nome padro do ormulrio e .orm* mude a propriedade 8ame para f"ores% O Delphi se encarregar de mudar qualquer re erncia que e$istia ao .orm*% !nto o c)digo apresentar a seguinte modi ica7es0
unit 1nitM= interface uses *@s1tils, Gin6@pes, GinProcs, >essages, 4lasses, Craphics, 4ontrols, Aorms, 3ialogs= tCpe 6 4ores L class(6Aorm) (uttonM0 6(utton= proce?ure (uttonM4licD(*ender0 6Object)= priMate / Private declarations 0 public / P1blic declarations 0 en?= Mar 4ores0 6 4ores= implementation /2) 3.D.40 proce?ure 6 4ores%(uttonM4licD(*ender0 6Object)= begin AormM%4olor 0L clCreen= en?= en?% &qui oi modi icado &qui no eee &qui oi modi icado

&qui oi modi icado

O Delphi modi icar apenas os c)digos gerados automaticamente pfr ele% Os c)digos para a ao OnClic' oram gerados por voc e o Delphi no os modi icar% 4abe a voc a manuteno neste caso% <sto oi ideali+ado para preservar o conte;do original do seu c)digo%
proce?ure 6 4ores%(uttonM4licD(*ender0 6Object)= begin 4ores%4olor 0L clCreen= en?=

%2

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Captulo II
Con&ecendo o "elp&i
*e voc teve algumas d;vidas no cap#tulo anterior sobre a rea de trabalho do Delphi no se preocupe, neste cap#tulo voc poder san'las completamente, tambm ser mostrado o mtodo de estrutura de aplica7es 4lient5*erver% 4aso voc seja usurio do Delphi *.0 na barra de menu selecione a opo Help e #nteractiMe >utors, voc receber uma aula On9&ine sobre a nova rea de trabalho% Os elementos da inter ace Delphi oram divididos do seguinte modo0

'le%entos (is)eis
O ambiente de trabalho do Delphi ormado por objetos que esto vis#veis to logo que o aplicativo seja iniciado ormando a rea de trabalho%

%$

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

:is;o <eral dos objetos vis=veis do Ambiente Delphi

%orm
Os ormulrios (objeto .orm) so os pontos centrais para o desenvolvimento Delphi% Eoc se utili+ar deles para desenhar sua comunicao com o usurio, colocando e organi+ando outros objetos% !stes objetos so arrastados da Component Palette, mostrada na janela locali+ada acima% Eoc pode imaginar que o ormulrio um objeto que contm outros objetos% *ua aplicao icar locali+ada em um ormulrio principal e este interagir com outros ormulrios criados% I poss#vel aumentar, mover ou ocupar completamente a tela do monitor, ou at mesmo ultrapass'la% 1m ormulrio bsico inclui os seguintes componentes0

4ontroles de menu= (ot7es de ma$imi+ao e minimi+ao= (arra de t#tulo= e (ordas redimensionveis%


O c)digo gerado, na rea conhecida como Code !ditor, ica e$atamente atrs do objeto ormulrio, clique na barra de notas, em 7nit*, se alguma coisa or desconhecida para voc, leia maiores e$plica7es no "apVtulo #%

I poss#vel enviar um ormulrio para a impressora, para isto e$istem duas maneiras0 M% 6ipo um Print creen de 6ela, coloque o seguinte comando .JBome do ormulrioK%Print=/ no evento on ho# do ormulrio= ou N% Para imprimir um ormulrio no tamanho de um papel &U, atravs do uso de comandos da biblioteca Printer, veja o ApWn?ice @ para maiores detalhes%

%;

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Code Editor
O editor de c)digos providncia total acesso ao c)digo gerado pelo projeto, incluindo alguns dos mais poderosos recursos para a edio% Pode ser selecionado tipos de cores para os elementos do programa (como por e$emplo comentrios, palavras reservadas, c)digos assembler, %%%) para tanto a partir do menu principal entre em >ools d Options///, locali+e a pgina "olors% Para outras in orma7es adicionais sobre o modo de usar este editor, procure re erncias no +elp On&ine no t)pico Code Editor% &o ser aberto um novo projeto, o Delphi gera automaticamente na pgina do Code !ditor uma 7nit com o arquivo c)digo (%P&*)% Para ver o c)digo de uma 7nit em particular, simplesmente Clic' na tabulao de pgina% O Code !ditor mostrar sempre o nome do arquivo corrente ativo na tabulao de pgina%

I poss#vel alternar entre o objeto orm e a "o?e E?itor atravs do pressionamento

da tecla %2, do boto boto (-o>>le .orm$7nit) da peedBar, ou ainda atravs das op7es do menu EieA X >oggle orm)Qnit% (curiosidade0 o acesso rpido atravs da tecla &lt R :etra sublinhada para esta opo est marcado sobre a letra I)

Component Palette
4omponentes (ou objetos) so os elementos que voc usar para trabalhar com a aplicao% Aoram inclu#dos objetos em vrias pginas, tais como cai$as de dilogos e bot7es, a palheta inclui tambm alguns espaos em branco para ser permitida a adio de novos objetos% &lguns objetos no sero vis#veis enquanto a aplicao estiver e$ecutando, eles a+em parte do servio da @@E (D%namic Data !?chan>e)% Os objetos da palheta oram divididos em grupos de uncionalidade em di erentes pginas% Por e$emplo, os objetos que representam as janelas tradicionais do "indo#s" (tais como ontes, palheta de cores, %%%) oram colocados na pgina Dialo>s da palheta% Eoc poder criar seus pr)prios objetos como tambm instalar outros j prontos, para isso oi colocado os espaos va+ios% Por e$emplo poder ser instalado novos controles e objetos do Eisual Hasic" ;/0 (Objetos O4H ' ou para os portadores do Delphi *.0 o do Eisual Hasic" $/0 os objetos E(H)% 1ma das principais vantagens da POO que muito em breve dever ser colocado no mercado pacotes de objetos prontos para serem integrados aos sistemas o que acilitar ainda mais o desenvolvimento e a manuteno dos mesmos%

Object nspector
Providncia a cone$o entre a inter ace visual e o c)digo% I 4omposto por duas pginas Properties (propriedades) e !vents (!ventos) que mostrar as propriedades e eventos do objeto selecionado%

%G

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

3isponibili+a um cil caminho para a personali+ao dos objetos% Eoc usar a pgina de Proprie?a?es para personali+ar os objetos colocados no ormulrio (inclusive o pr)prio ormulrio), e a pgina de EMentos para gerenciar a navegao entre certas partes do c)digo do programa% O seletor de objetos (Object elector 9 locali+ado em um objeto do tipo ComboBo? no topo do Object (nspector) mostra o nome e o tipo de todos os componentes do ormulrio corrente (inclusive o pr)prio)% Eoc pode usar o seletor de objetos para locali+ar acilmente qualquer objeto no ormulrio%

Speed#ar
4ontm os bot7es mais req8entemente utili+ados% Aornecendo deste modo um atalho de navegao ao menu principal do Delphi% I poss#vel a personali+ao da peedBar colocando nela os caminhos do menu principal que voc mais utili+a, bastando para isso0 M% Fedimensione a peedBar. Para tanto posicione o cursor do mouse sobre o ponto de encontro da peedBar com a Component Palette con orme o desenho abai$o0

N% cuando o cursor do mouse mudar de ormato, clique o boto esquerdo do mouse e arraste abrindo a rea da peedBar% T% 4lique com o boto direito do mouse na rea aberta, aparea um menu P1llDo#n contendo entre outras op7es a opo Properties, selecione'a% U% &s categorias e os comando so divididos de acordo com o menu, clique em cima dos comandos dispon#veis e arraste'os para a rea aberta de acordo com a sua necessidade, para retirar os bot7es da peedBar aa o processo inverso%

'le%entos no (is)eis
&lguns elementos no esto prontamente vis#veis quando o Delphi iniciado mas voc poder ter acesso a eles bastando para isso selecionar a opo na barra de menu%

Project 'anager
O Cerenciador de Projetos contm uma lista de ormulrios ou unidades utili+ados pela aplicao, e serve para controlar estes ormulrios ou unidades, adicionando'os ou removendo'os do projeto, organi+ando as op7es do projeto, entre outros%

%L

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

da peedBar

Eoc tambm poder colocar um boto para iniciar o Cerenciador de Projetos atravs ,

'en$ "esigner
O 4en1 Desi>ner permite a criao de menus para os seus ormulrios% Eoc pode criar menus ou menus do tipo p1lldo#n atravs dos objetos 4ain4en1 ou Pop1p4en1 (locali+ado na pgina tandard na Component palette)% & criao completa de Tenus ser colocada de orma mais abrangente no "apVtulo #E%

%N

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

%ields Editor
Para o Delphi poss#vel editar e modi icar as propriedades de quaisquer campos dos objetos de tabelas associadas ao banco de dados, a .ields !ditor em conjunto com a Object (nspector controlam o modo de mostrar determinados campos de arquivos, importante lembrar que esta modi icao no a etar os campos da tabela, apenas para o ormulrio ativo em questo% *ua utili+ao e etiva ser mostrada a partir do "apVtulo E%
A?? fiel?s/// responsvel pela adio de de ini7es de campos da tabela, poss#vel inserir um ou mais campos, dependendo de sua utili+ao para o ormulrio%

JeA fiel?/// permite a criao de um novo campo, este pode ser a derivao de um ou mais campos da tabela% "ut envia para rea de trans erncia e elimina todas as de ini7es do campo selecionado% "opC copia para a rea de trans erncia todas as de ini7es do campo selecionado% Paste recebe da rea de trans erncia todas as de ini7es do campo selecionado criando'o% @elete e$clui quaisquer de inio para os campos% !elect all seleciona todas as de ini7es dos campos% FetrieMe Attributes atuali+a os atributos do campo selecionado com os campos do dicionrio de dados% !aMe attributes salva os atributos do campo selecionado para o dicionrio de dados% !aMe attributes as/// salva os atributos do campo selecionado para o dicionrio de dados permitindo a renomeao do campo% Associate attributes/// a+ a associao dos atributos do campo selecionado com determinado campo do dicionrio de dados% Qnassociate attributes remove a associao dos atributos do campo selecionado com determinado campo do dicionrio de dados%

Reposit(rio de Objetos
O FepositYrio ?e Objetos do Delphi 2.0 arma+ena e gerencia os objetos da aplicao0 Aormulrios, Data 4od1les, geradores e?perts, e 3:: (Dinamic &in'ed &ibrar% ' (ibliotecas de acesso din9mico)% Ba essncia, ele centrali+a as locali+a7es dos objetos envolvidos agrupado'os% & proli erao dos objetos no reposit)rio incrementa as seguintes vantagens0 *uporte a equipe de desenvolvimento para re erncia aos objetos da rede%

%S

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

1ma customi+ao de todo o desenvolvimento em grupos l)gicos de objetos, acilitando o re'uso dos mesmos%

O Delphi possui diversas caracter#sticas quanto a sua utili+ao% 6em os -1tors e !?perts que so as erramentas responsveis para guiar'nos atravs de tcnicas, tais como, manipulao de componentes e criao de simples aplica7es% &lm disso o Delphi o erece uma coleo de modelos para ormulrios, janelas de dilogo e at mesmo aplica7es completas na erramenta 8e# (tems% & janela do 8e# (tems sempre chamada automaticamente quando a opo ile d JeA/// do menu principal e$ecutada%

I poss#vel para voc criar novas janelas, ou projetos, automticos no Delphi% Para a nossa sorte a Horlan? no esconde o jogo e mostra como se cria uma template visite o diret)rio ZHOFLAJ@Z@ELPH# 2/0ZOH[FEPO! , o equivalente no Delphi *.0 encontrado no diret)rio Z@ELPH#ZIALLEF\ , todos os e$emplos so auto'e$plicativos% Para de inir o projeto padro que o 8e# (tems e$ecutar no in#cio de cada projeto, clique com o boto direito acima da janela e escolha a opo Properties aparecer as listas Pa>es e Objects, de ina quaisquer dos objetos como 8e# .orm ou 4ain .orm% Observe que a segunda olha da janela 8e# (tems (ter o nome do seu arquivo com a e$tenso /@PF) o seu projeto corrente, ou seja, uma nova janela poder ser derivada, por caracter#stica de herana, de uma outra janela j e$istente%

'strutura de *plica+es co% o Delphi 2.0


1m dos objetivos de desenhar aplica7es do tipo Client $ erver para o desenvolvimento a reutili+ao dos objetos, das regras de neg)cio e das telas do projeto% O Delphi Client $ erver 1ite 2.0 o ;nico que implementa uma arquitetura incorporando a tecnologia FA@ ()apid Application Development ' 3esenvolvimento Fpido de &plica7es) com o desenvolvimento totalmente OO (Object Orientation ' Orientado a Objetos) para a reduo do tempo de

%9

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

desenvolvimento e manuten7es improvveis% &dicionando, uma arquitetura aonde poss#vel a separao da IQ# (<ra6ic 7nit (nter6ace ' 1nidade de <nter ace Cr ica), das regras de neg)cio l)gicas e do desenho do banco de dados de acordo com o modelo representado abai$o0

Benefcios:
M% & separao do desenho da IQ# (atravs dos objetos orms) com a rea de ligao l)gica de dados (atravs dos objetos @ata To?ules) permite que se cause um menor impacto sobre ambas as reas% &s mudanas podem ser e$ecutadas nas telas de entrada ou nas liga7es, independentemente, de acordo com os requerimentos do usurio% N% & separao do desenho da IQ# com a rea de ligao l)gica de dados reali+ada com uma certa habilidade aos eventos envolvidos, poder no necessariamente dever ser controlada por um habilidoso @HA (Database Administrator ' &dministrador de (anco de 3ados), com suas antsticas regras de neg)cio, podendo inclusive ser mantida por um .analista de in orma7es/% T% O desenho do banco de dados, a construo das metodologias de neg)cio e o desenho e a criao das janelas de entrada so e etivados dentro da aplicao% O desenvolvimento, ento paralelamente, resultar em uma maior rapide+% U% ?erdando as janelas de entrada, em n#veis de utili+ao, redu+'se drasticamente o processo de codi icao, e em conseq8ncia, o processo uturo de manuteno% &s mudanas l)gicas das regras de neg)cio ou a incorporao de novos padr7es, so eitas automaticamente para todos os objetos herdados%

20

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

O% O reposit)rio de objetos, os ormulrios reusveis e a utili+ao dos objetos @ata To?ules, envolve em eliminao da duplicao de c)digos e de trabalhos com desenhos de janelas, e em conseq8ncia na reduo da equipe de desenvolvimento%

I%ple%entao efeti)a
Objetos "ata 'od$le
& partir do Delphi 2.0 oi incorporado o uso de objetos conhecidos por @ata To?ule, que servem para que suas aplica7es providenciem um desenho centrali+ado da de inio de acesso aos dados e das regras de neg)cio% Os objetos @ata To?ules, tambm podem ser separados por neg)cios l)gicos (como e$emplo por reas0 compras, vendas, estoque, etc%) ormando caminhos de cone$7es simples%

Os objetos @ata To?ules podem ser aplicados a objetos tais como >ables, !tore? Proce?ures, ou ]ueries permitindo a centrali+ao dos eventos envolvidos em antes e depois da gravao, e$cluso, insero ou edio dos dados% ! at mesmo na colocao de novos objetos de controle para maior acilidade% &s rela7es de dados 4aster $ Detail so de inidas em menor quantidade% Possibilita ento ao desenvolvedor criar aplica7es do tipo Client $ erver de orma mais cil, rpida, e segura se utili+ando das propriedades dos objetos @atasources ou utili+ando o @atabase orm EKpert%

2%

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Os ormulrios das aplica7es, podem ser ligados diretamente a um ou mais objetos @ata To?ule para a propagao das regras de neg)cio sem a necessidade de e$ecuo de um c)digo e$tra% Os objetos @ata To?ules so classes de objetos que pertencem a interao dos dados do database server% <solando totalmente o acesso ao banco de dados com a aplicao Client, simpli icando deste modo toda a manuteno reali+ada% O &cesso ao Delphi aos bancos de dados se processa da seguinte maneira0

Distribuio Lgica da Aplicao:


Os objetos @ata To?ule oram desenvolvidos para criar uma centrali+ao l)gica de todas as regras de neg)cio, separando a rea de viso do usurio com a rea do desenho do (anco de 3ados% !ste s)lido undamento de suporte so distribu#dos em um n'n;mero de aplica7es e arquiteturas servidoras dispon#veis, tais como "#"! da #HT, >opEn? da A>>, >uKe?o da JoMell, Object HroOer da @igital, #OJA da OrbiK e muitas outras%

"icion)rio de "ados Escal)vel


O ?icionRrio ?e ?a?os utili+ado para arma+enar in orma7es sobre o uso dos dados contidos nas suas tabelas% O dicionrio deve ser como uma rvore geneal)gica trabalhando como um inspetor de modi ica7es que permitem um arma+enamento acilitado% O dicionrio deve conter in orma7es dos atributos dos campos tais como0 valores m#nimo, m$imo e comuns (valores de6a1lt), mscaras utili+adas, etc% & utili+ao do dicionrio de dados tra+ as seguintes vantagens0 M% "onsistWncia0 4ampos idnticos so arma+enados centralmente no dicionrio isto redu+ o tempo de de inio das duplicidades% 1m desenvolvedor poder criar os campos complementares com dom#nios e aplica7es apropriadas% N% Fe?uo ?o >rRfico ?a Fe?e0 O Delphi permite que a validao dos dados seja eita nas mquinas client ou no servidor% O 3icionrio de dados permite que a manuteno dos atributos dos campos do lado client seja validado de orma e iciente redu+indo a necessidade do tr ego da rede%

22

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

*erdando os %orm$l)rios
O desenvolvimento de aplica7es corporativas de uma orma padroni+ada um ato de suma import9ncia para as empresas envolvidas% >as conseguir e manter este padro uma tare a considerada praticamente imposs#vel, j que as aplica7es devem se moderni+ar na velocidade que o mercado de in ormtica e$ige% Os ormulrios herdados do Delphi so simples e$tens7es da programao orientada a objetos, conseguindo manter, de orma automtica, os padr7es e as modi ica7es reali+adas nos projetos% ! em conjunto com o FepositYrio ?e Objetos, padroni+a, organi+a e centrali+a os ormulrios resultando em modi ica7es de curt#ssimo tempo%

2$

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

$erra%entas *u,iliares de -./


Para o trabalho com bases de dados padro !]L ( tr1ct1re @1er% &an>1a>e ' :inguagem estruturada de 4onsultas), o Delphi conta com as seguintes erramentas FA@ que au$iliam ao desenvolvimento%

'onitor S+,
1m monitor !]L um erramenta para testes, depurao e e$ecuo de consultas !]L em aplica7es Client $ erver% <sto resulta em um aumento da produtividade de desenvolvimento e melhor per ormance da aplicao% O monitor !]L, intercepta as chamadas entre as mquinas client e o servidor% !sta in ormao au$ilia ao desenvolvedor em problemas relacionados as declara7es !]L e otimi+a este tipo de transao% 1ma srie de caminhos de intercepta7es podem ser traados, dependendo da necessidade do desenvolvedor, para que as in orma7es a serem colocadas em um relat)rio on9 line sejam as mais imprescind#veis o poss#vel% I poss#vel inclusive salvar e imprimir o relat)rio gerado para consultas ou testes posteriores%

2;

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

S+, Explorer
& erramenta !]L EKplorer providencia uma in ormao centrali+ada do gerenciamento das demandas da base de dados= tais como, suporte a modi icao e criao de tabelas, sinfnimos, procedimentos de gravao, tri>>ers (gatilhos disparados pelo banco) e e$ecuo das regras de neg)cio interativas do !]L% 1ma erramenta gr ica que proporciona um esquema de integridade da base da dados e contm as erramentas essenciais para os administradores de bancos de dados% O !]L EKplorer, unicamente para o Delphi, administra de orma intuitiva e cil o banco de dados% & simplicidade de uso da inter ace gr ica um per eito caminho para representar o comple$o relacionamento que e$iste no banco de dados do servidor% &presenta um esquema para in orma7es em bancos como Oracle", !Cbase", #nterHase, #nformiK", @H2" e outros% O desenvolvedor poder trilhar campos, tabelas e procedimentos do banco dentro da construo da aplicao Delphi rapidamente, podendo ser direcionado para m;ltiplos servidores e m;ltiplos bancos%

2G

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

O !]L EKplorer, tambm administra o @icionRrio ?e @a?os% *ua inter ace de uso simplicado permite acilmente de inir novos dom#nios para os atributos dos campos e associao entre tabelas%

nter#ase N- . #anco de "ados Relacional


O Delphi Client $ erver 1ite 2.0 inclui uma licena para dois usurios do uso do banco de dados #nterHase J>% 3esenvolvedores podem criar em mquinas standalone aplica7es usando este poderoso banco de dados (concorrente de bancos como Oracle", !Cbase", #nformiK", @H2" e outros)% 4om o crescimento do volume de dados e do tamanho da aplicao, ambos, o #nterHase e o Delp i conseguem interagir de orma harmoniosa% O #nterHase um banco de dados de alta per ormance produ+ido pela Horlan?, como plata orma para @& erver% !st dispon#vel em mais de MO sistemas operacionais incluindo0 @O! e =in?oAs" $/%, =in?oAs" 9G, =in?oAs" J>, Jet=are", !"O", !un O!", !un !olaris", HP'QU", #HT A#U", !I# #F#U", etc% O #nterHase um banco a n#vel A8 ( @& A2, suportando eventos programados e e$ce7es ocorridas no modelo por acesso de m;ltiplos usurios% O erece chaves de controle a n#vel de registros para arquiteturas >ulti'Cerenciais causando um per ormance muito superior a uma leitura das opera7es de banco, em contrrio das leituras de blocagem de opera7es escritas reali+adas por outros bancos% & verso local do #nterHase, dispon#vel apenas com a c)pia Client $ erver 1ite 2.0 , providencia aos desenvolvedores um caminho rpido para o desenvolvimento de prot)tipos e de sistemas com um banco de padro A8 ( A2 @&% !sta verso propicia as mesmas uncionalidades da verso multi'usurio para J> e QniK, incluindo controles de transa7es, procedimentos de gravao (stored proced1res), uso de tri>>ers (gatilhos disparados do banco), ou eventos de alerta%

2L

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

<magine o desenvolvimento de um grande sistema sendo reali+ado em um &aptop dentro de um trem, avio ou at mesmo na rente do cliente, apenas o acesso ao banco de dados inal que ser modi icado% 1tili+ando o Delphi Client$ erver 1ite 2.0 , desenvolvedores podero conceber e desenhar prot)tipos e testar a aplicao inal em uma ;nica mquina% O #nterHase o erece um e$cepcional acesso a inter ace gr ica do =in?oAs", incluindo a con igurao das propriedades, um per eito gerenciador de bancos nativo TN bits, total interatividade com erramentas *c:, e uma completa documentao em ormato de +elp do =in?oAs" (arquivos %?:P)%

2N

Captulo III
Projeto Piloto
I )bvio que ica mais simples o aprendi+ado de uma nova erramenta quando se a+ algum tipo de aplicativo, principalmente um que seja ;til, ento ao longo deste estudo, iremos desenvolver um aplicativo destinado ao 4adastro de 4ompact 3isc (43_s)% 6odas as pessoas hoje em dia tem montes de 43_s, virou uma espcie de ebre, ento, porque no a+er um sistema para cadastr'los e control'los, quanto tempo voc j perdeu pensando em qual deles est aquela m;sica que voc quer ouvirb Ou uma capa que seu ilho rasgou, que tal imprimi'la novamenteb ! no cap#tulo multim#dia aprenderemos um mtodo para tocar o 43% Para darmos partida ao nosso primeiro aplicativo (Projeto Piloto), de iniremos inicialmente as nossas necessidades0 M% Permitir o cadastro completo e a consulta aos 43_s= N% *er poss#vel separar os 43_s em categorias, acilitando deste modo a busca e o arma+enamento= T% cuanto as m;sicas deve ser permitido o cadastro do autor e o tempo de durao= U% Permitir a incluso da oto da capa do 43= e O% 4omportar relat)rios de con erncia e reimpresso da capa% O acesso Delphi a arquivos pode ser eito atravs de duas maneiras local ou remoto, sendo a segunda apenas poss#vel pela c)pia C&(!8-9 !):!) voltadas a bases de dados mais comple$as como O)AC&!" ou BBA !", inicialmente, restringiremos o nosso estudo a base de dados locais conseguida atravs da verso Des'top. :embre'se que g verso Des'top contm acesso a criao e a de inio de bases dBase e Parado?, alm de outras conseguidas atravs de ODBC% 4om base no que oi sugerido acima, vamos de inir as tabelas0
"A>EIOF#A Objetivo0 3ados das categorias do 43% 4ampos0 *<C:& 3& 4&6!COF<& ' &breviao da descrio da categoria% 3!*4F<hiO 3& 4&6!COF<& ' 3escrio da 4ategoria% H^!#"O Objetivo0 3ados iniciais do 43% 4ampos0 4j3<CO 3O 3<*4O ' 4)digo do 43, encontrado na pr)pia capa% BO>! 3O 3<*4O ' Bome do 43% 6<PO 3O 3<*4O ' 6ipo de Cravao do 430 &&&, &&3, &33 ou 333% AO6O 3& 4&P& ' &rma+enar a oto da capa do 43% *<C:& 3& 4&6!COF<& ' :igao para o c)digo da 4ategoria%

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

T_!#"A! Objetivo0 3ados das m;sicas do 43% 4ampos0 4j3<CO 3O 3<*4O ' :igao com o 43% B1>!FO 3& A&<H& ' B;mero da ai$a% BO>! 3& >W*<4& ' 6#tulo da m;sica% BO>! 3O &16OF ' Bome do autor da m;sica% 6!>PO 3& >W*<4& ' 6empo de durao da m;sica >>**%

Criando o 0odelo &elacional


Para criar um modelo relacional simples e trabalhar com bases locais voc pode optar por dois modos do tipo dBase ou Parado?, particularmente eu pre iro trabalhar com Parado?, mas voc rapidamente notar que tanto a+, trabalhe com aquela que voc se sinta mais a vontade% !scolha a base de acordo com o porte do sistema0 Para sistemas pequenos e simples e com poucos dados use o dBase, para sistemas mdio, multi'usurio, com uma boa quantidade de dados escolha a base Parado? e para sistemas comple$os em vrias plata ormas e acessos multi' usurio opte por (nterBase% Eamos agora visuali+ar um modelo que demonstrar como as tabelas devero se relacionar no sistema, este modelo tambm acilitar as rela7es e a integrao dos ormulrios do sistema quando construiremos nossas consultas e relat)rios%

Bo modelo de entidade e relacionamento acima l'se0 M registro da entidade HRsico se relaciona com M registro da entidade "ategoria enquanto que M registro da entidade "ategoria se relaciona com n registros da entidade HRsico, M registro da entidade T`sicas se relaciona com M registro da entidade HRsico enquanto que M registro da entidade HRsico se relaciona com n registros da entidade T`sica%

4om o >!F nas mos j se tem a idia de como deve icar as estruturas das tabelas, ento, vamos queimar um pouco de neurfnios%

29

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

1rabalhando co% 2ata3ase 'n ine Confi uration


Criando o /lias
O AL#A! simplesmente um apelido (sinfnimo) a ser dado para o banco de dados, este apelido permitir que no lugar de alarmos para ao Delphi que a nossa base se encontra em 40k*<*6!>&k%%% ou 30k3!*!BEk*<*6!>&k%%%, simplesmente digamos se encontra em &liasH ou &liasl, isto acilitar o seu trabalho quando voc por e$emplo quiser modi icar o diret)rio do sistema, basta mudar o endereo do AL#A! e no sair modi icando vrios ormulrios% Outra vantagem em se criar um &lias est na mudana da base, basta reapontarmos o &lias para outra base que o sistema automaticamente ver estas novas in orma7es% :embre'se que para isto ser poss#vel necessrio que o nome das tabelas e dos campos sejam necessariamente os mesmos, incluindo o tamanho e o tipo (no apndice ( encontrado uma tabela para a converso das diversas bases de dados)% Para trabalhar com AL#A! o caminho mais interessante e com o Database !n>ine

Con6i>1ration, no arquivo de programas do Delphi d um duplo clique sobre o #cone con igurao do banco de dados se divide em vrias pginas0

,a

@riMers ' 4ontrola os arquivos de acesso locais e O3(4 dos bancos de dados utili+ados= Aliases ' 4ontrole dos sinfnimos dos sistemas= !Cstem ' 3e ine os recursos do "indo#s que sero alocados pela aplicao= @ate ' !speci ica os o rmatos utili+ados para campos tipo data= >ime ' !speci ica os ormatos utili+ados para campos tipo hora= e Jumber ' !speci ica os ormatos utili+ados para campos tipo numrico%
*e atualmente voc estiver utili+ando a verso de desenvolvimento, os drivers que aparecero sero0 d(ase, <nter(ase e Parado$, na verso Client$ erver alm desses sero colocados0 Oracle, <n ormi$, *@(ase entre outros% >ude para a pgina Aliases e clicD no boto JeA Alias, in orme0
JeA alias name3 &lias3isco Alias tCpe3 *6&B3&F3 (oto OP PatB3 40k*<*6!>&k4&33<*4O @efault @riMer3 Parado$

Beste momento o seu AL#A! &lias3isco oi criado para a banco de dados Parado$, no ormato Padro locali+ado no diret)rio 40k*<*6!>&k4&33<*4O, no menu principal escolha a opo ile e !aMe, o BD! salvou o seu arquivo de con igurao chamado <3&P<%4AC% 4rie com o Cerenciador de &rquivos o diret)rio 40k*<*6!>&k4&33<*4O, aonde ser locali+ado o sistema%

$0

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Para a base d(ase a ;nica di erena seria o comando @efault @riMer0 3(&*!%

!ncerre o Database !n>ine Con6i>1ration%

1rabalhando co% 2ata3ase 2es#1op

Criando o #anco de "ados via Estr$t$ra


Para criar suas tabelas, disp7e'se de duas maneiras0 o modo declara7es em @& ou pela janela de estrutura, inicialmente, utili+aremos a janela de estrutura, pois alm de mais simples mais prtico, a menos que voc trabalhe com bases de acesso remoto, evite o modo declara7es em @& para manusear a estrutura de tabelas, principalmente tabelas simples como o caso do Parado? ou o dBase, apesar que e$istem muitos anticos por C)!A-! -AB&!, A&-!) -AB&! e D)OPs% !m seguida mostrarei como criar as mesmas tabelas utili+ando o mtodo @&% :embre'se de apagar as tabelas antes de cri'las novamente% *eno no ser poss#vel e$ecutar uma ;nica declarao @&% Fetorne ao Delphi, no menu principal escolha a opo >OOL!d@ataHase @esO>op, ma$imi+e a tela para permitir uma melhor visuali+ao% 4om o nosso sinfnimo (AL#A!) criado iremos agora de inir as nossas tabelas% <nicialmente vamos de inir como nossa rea de trabalho0 Bo menu principal, opo iled=orOing @irectorC///, na opo Aliases3 selecione Alias@isco, note que a opo =orOing @irectorC ser automaticamente modi icada para 3Alias@isco3, inalmente con irme clicando no boto Om% O diret)rio apontado pelo &lias, agora ser o ?efault, ou seja, tudo o que i+ermos ser apontado para o diret)rio%

$%

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Bo menu principal, opo ile, opo JeA, e opo >able///, ser mostrada uma janela com os tipos de poss#veis reposit)rios de tabelas no >able >Cpe escolha a opo Para?oK N e clique no boto OP% <nsira os seguintes campos0
Aield Bame 4O3n3<*4O BO>n3<*4O 6<Pn3<*4O AO6n4&P& *<Cn4&6!C 6@pe B & & ( & VT T N *i+e me@ o

3os campos, o ;nico que merece uma e$plicao e AO6n4&P& ele oi escolhido neste ormato ((inar@) pois guardar uma imagem (it>ap (e$tenso /HTP) da 4apa do 43, todos os outros campos so caracteres al anumricos, com a e$ceo do 4O3n3<*4O que um campo Bumrico e chave% Para esta tabela precisamos ainda criar um #ndice secundrio, para tanto na opo >able properties3 chame a opo !econ?arC #n?eKes e clique no boto @efine///, marque no campo Jom<@isco (na lista .ields) e clique no boto o campo passou para a lista (nde?ed .ields, clique no boto OP e digite *<nBom3isco para o nome do indice e clique no boto OP% Para salvar sua tabela clique no boto !aMe as/// na opo Jome ?o ArDuiMo3 insira o nome da tabela ' (asico% 4rie agora as seguintes tabelas0 %% 4ategor
Aield Bame *<Cn4&6!C 3!*n4&6!C 6@pe & & *i+e N Ume@ o

2% >usica
Aield Bame 4O3n3<*4O B1>nA&<H& BO>n>1*<4& BO>n&16OF 6@pe B B & & VU*i+e me@ o o

$2

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

6>Pn>1*<4&

&

Criando os Relacionamentos via Estr$t$ra


Os relacionamentos entre as tabelas poderia ter sido criado no momento da construo das mesmas, mas acredito que deste modo seja mais simples, a partir do menu principal, opo ile, opo Open, e opo >able///, ser aberto uma janela com todas as tabelas, clique na tabela (&*<4O e sua estrutura ser mostrada, clique no boto Festructure, ou a partir do menu principal, opo >able, opo Festructure///, na opo >able properties3 alterne para a opo Feferential #ntegritC e clique no boto @efine%%%, no lado esquerdo (:ista iel?s2 d um duplo clique no campo !#I<"A>EI e no lado direito (:ista 6ables) d um duplo clique na tabela "A>EIOF/@H, clique no boto de Om para con irmar e ser solicitado o nome para o #ndice% Para o nome do #ndice crie um padro de Amn R \nome do campo] R \nome tabela pai], uma padroni+ao dos nomes dos #ndices acilita a procura uturamente, ento para o nosso #ndice crie Amn*ig4ategn(asico% 4rie agora o outro relacionamento entre a tabela >1*<4& e (&*<4O con orme a igura abai$o0

6ambm poss#vel acessar o Database Des'top atravs do #cone grupo de trabalho DELP!"% !ncerre o Database Des'top e retorne ao Delphi, ou apague as tabelas e%%%

locali+ado no

Criando o #anco de "ados via S+,


Para os anticos por declara7es @&, vamos criar a mesma base de dados via @&, se voc ainda no o e+, observe no t)pico anterior como colocar o AL#A! na rea de trabalho% <sto ser de muita utilidade quando ormos salvar o nosso trabalho% Bo menu principal, opo ile, opo JeA, e opo !]L ile, ser mostrada uma janela para ser digitada a declarao @&, observe na barra de comandos o boto !elect Alias, ou a partir do menu principal opo !]L)!elect Alias///, apenas observe que a rea de trabalho =orO j est selecionada, clique em Om ou 4ancel sem a+er nenhuma modi icao, observe que o t#tulo da janela !]L E?itor 3=OFP3+Qntitle?,% 3igite o seguinte na janela0

$$

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

4reate 6able (asico ( 4O3n3<*4O Bumeric(U,-), BO>n3<*4O Ear4har(V-), 6<Pn3<*4O 4har(T), AO6n4&P& (lob(T,N), *<Cn4&6!C 4har(N), Primar@ me@(4O3n3<*4O) )=

4lique no boto Fun !]L, ou no menu !]L)Fun !]L, ou ainda pressione S, ap)s e$ecutado o comando a tabela ser criada% *alve o *c: com a opo ile)!aMe (digite (&*<4O %*c:) &bra novas janelas e crie o resto das tabelas0
4reate <nde$ *<nBom3isco on (asico (BO>n3<*4O)= 4reate 6able 4&6!COF ( *<Cn4&6!C 4har(N), 3!*n4&6!C Ear4har(U-), Primar@ me@(*<Cn4&6!C) )= 4reate 6able >1*<4& ( 4O3n3<*4O Bumeric(U,-), B1>nA&<H& Bumeric(N,-), BO>n>1*<4& Ear4har(V-), BO>n&16OF Ear4har(U-), 6>Pn>1*<4& 4har(U), Primar@ me@(4O3n3<*4O, B1>nA&<H&) )= 4riando o indice secundrio da (&*<4O 4riando a 6abela 4&6!COF

4riando a tabela >1*<4&

O *c: para o Parado$ no consegue e$ecutar a criao de indices re erenciais (ou .4onstraints/) ento para criar este tipo de #ndice crie'o atravs da janela de estrutura con orme mostrado anteriormente%

Observaes da $tili0ao do S+, com o d#ase


<n eli+mente o dBase no suporta a clusula Primar% Ce% que permite a criao dos #ndices muito menos a criao de chaves estrangeiras% cuanto as chaves estrangeiras no se preocupe pois o Delphi consegue manipular relacionamentos entre as tabelas mesmo que elas no estejem vinculadas% 4aso voc esteja utili+ando este tipo de base os passos para as cria7es das tabelas so os mesmos mas corte as clusulas Primar% Ce% necessrio criar os #ndices separadamente% &bra uma nova declarao *c:, idntica a anterior, e digite o seguinte na janela0
4reate <nde$ Pmn1nica on (asico (4O3n3<*4O)=

$;

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

O comando correto para este #ndice deveria ser . "reate QniDue #n?eK PP<Qnica on Hasico 1"O@<@#!"O24/ mas isto provoca um erro colocando que no poss#vel esta declarao, ento coloque a clusula QJ#]QE atravs da janela de estrutura% *e voc esqueceu de ativar o !elect Alias coloque ."reate #n?eK "o?<@isco on aHasico/?bfb 1"O@<@#!"O24/ &s outras declara7es so0
4reate <nde$ *<nBom3isco on (asico (BO>n3<*4O)= 4reate <nde$ Amn*ig4ategn(asico on (asico (*<Cn4&6!C)= 4reate <nde$ Pmn1nica on 4ategor (*<Cn4&6!C)= 4reate <nde$ Amn4od3iscon>usica on >usica (4O3n3<*4O)= 4riando o indice secundrio 4riando a chave estrangeira 4riando a chave primria 4riando a chave estrangeira

O comando correto para a criao da chave dupla da tabela >1*<4& seria . "reate #n?eK "BM<Qnica on Tusica 1"O@<@#!"O0 JQT< A#UA24/ mas novamente provocado um erro mostrando a impossibilidade de e$ecuo do comando, ento crie este #ndice atravs da janela de estrutura% I acilmente percebido que o DataBase Des#$op at que tenta colocar todas as bases de dados compat#veis com a linguagem *c:, mas in eli+mente ainda no oi nesta verso% Para as tabelas do tipo OF&4:!, <B6!F(&*!, *l(&*! e >* *c: *erver a criao das tabelas podem ser eitas tanto pelo modo de estrutura quanto pelas declara7es *c: mas lembre'se que a alterao das mesmas s) poder reali+ar'se atravs do modo de declara7es *c:% &qui vo alguns e$emplos destas declara7es0
4reate 6able >1*<4& ( 4O3n3<*4O Bumeric(U,-), B1>nA&<H& Bumeric(N,-), BO>n>1*<4& Ear4har(V-), 6>Pn>1*<4& 4har(U), 4onstraint Pmn1nica Primar@ me@(4O3n3<*4O, B1>nA&<H&), 4onstraint Amn4od3iscon>usica Aoreign me@ (4odn3isco) Fe erences 1*1&F<On&C!B3& (4odn 3isco) )= &:6!F 6&(:! >1*<4& &33 BO>n&16OF Ear4har(U-) 3FOP 6&(:! >1*<4&= 4riando a tabela >1*<4&

&diciona o campo Bomn&utor !limina a tabela >1*<4&

!ncerre o Database Des'top e retorne ao Delphi%

$G

Captulo I(
-rabal&ando com o 'en$
cualquer projeto precisa de um menu, ica mais prtico para o nosso usurio navegar dentro de um projeto quando este limitado por um menu principal, iniciaremos o nosso projeto no Delphi com a criao do >enu Principal do *istema%

0etendo a 0o na 0assa
& partir deste ponto, nossa aula se trans orma em receita de bolo, a ;nica coisa que voc precisa a+er e seguir as orienta7es passo a passo, no princ#pio pode parecer meio idiota, mas a inal o computador uma mquina idiota% (om, vamos ento metendo a mo na massa% &o iniciar o Delphi, oi criado automaticamente um novo projeto, vamos descart'lo e iniciar um novo% Para tanto0 M% Lembre'se0 no cap#tulo anterior criamos o diret)rio que abrigar o sistema a ser desenvolvido ' "3Z!#!>ETAZ"A@@#!"O ' aprendemos o que o Alias e estruturamos as nossas tabelas, se algum destes conceitos icaram dispersos eu lhe aconselho que retorne ao cap#tulo anterior N% 4rie um novo projeto digitando ile e JeA Application% (Fesponda negativamente quaisquer mensagem para gravar o projeto atual)%

Criando a janela do men$


& janela do menu principal e bem simples, como voc j deve ter visto em vrios aplicativos o menu o objeto que ica servindo de pano de undo para toda a aplicao, todo o trabalho e reali+ado com o au$#lio de suas chamadas, em conjunto com o menu teremos trs ormulrios gerenciadores que daremos o nome de0

<Tenu ' >enu principal propriamente dito= <!obre ' & janela .*obre o sistema%%%/= e <#nicio ' aanela plash que iniciar o nosso aplicativo%

Eamos criar inicialmente o nosso menu principal0 M% 4lique no boto (>ain >enu), locali+ado na Component Palette na pgina tandard, e clique dentro do objeto orm% (no se preocupe com a posio, pois este objeto icar invis#vel quando o aplicativo or e$ecutado)%

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Aoi criado neste momento o objeto 4ain4en1* derivado da classe de objeto -4ain4en1, a partir deste objeto vamos criar nosso menu0 N% 3 um duplo clique em cima do objeto, ou clique na propriedade #tems da Object (nspector aparecer o boto % 4lique neste boto% Observe a tela de propriedades do Object (nspector, neste momento vou me conter em alar das mais signi icativas, mas uturamente retomaremos o assunto0 "aption ' 3e ine o nome do item de menu, quaisquer nomes so vlidos, incluindo acentos, o caractere especial .p/ deve ser colocado uma ;nica ve+, ele causa o sublinhado da letra, tornando'a uma letra (em conjunto com a tecla Alt) de acesso a opo% Enable? ' 3e ine se o item est dispon#vel ou no para o usurio% Jame ' Bome interno do item (colocado automaticamente na escolha do "aption)% !Bort"ut ' 4ombinao de teclas, para um rpido acesso ao item (alm da letra escolhida com .p/)%

<nserindo os itens iniciais0 M% 3igite .p&rquivo/ na propriedade "aption, em seguida pressione a tecla !nter% N% 4lique no novo espao aberto, criado lateralmente, e digite .p4onsulta/ na propriedade "aption, em seguida pressione a tecla !nter% T% Proceda da mesma orma criando as op7es0 .pFelat)rio/ e .&up$#lio/% U% 4lique na opo ArDuiMo, aparecer um espao va+io abai$o, clique neste espao e digite .p6abela/ na propriedade "aption% &o ser dado Enter o Delphi criar mais um espao abai$o, digite .p4adastro/ na propriedade "aption% O% &bai$o do "a?astro, digite .'/ (sinal de menos) na propriedade "aption (o Delphi criar uma barra de separao) e altere a propriedade Enable? para .alse% V% Bo novo espao criado, ap)s a barra, digite .p*air/ na propriedade "aption e altere a propriedade !Bort"ut para Ctrl+D% `% 4lique na opo >abela, clique com o boto direito do mouse, aparecer um men1 p1lldo#n, clique na opo "reate !ubmenu% S% 3igite .p4ategoria/ na propriedade "aption%

6abela

4omplete os pr)$imos itens de modo que o menu ique0


4onsulta 4ategoria 4trlRH 43_s >;sica por 43_s Felat)rio Ceral 4apa do 43 &u$#lio *obre o sistema 4onte;do

&rquivo 4adastro *air

4on igura <mpressora 6)picos de &juda 4omo usar a &juda

*aia da janela 4en1 Desi>ner digitando &ltRAU, o menu j e$iste no objeto 6orm*% &ltere as seguinte propriedades para o objeto 6orm*0
Ealor *ingle @escrio !stilo da borda da janela= modo simples%

Proprie?a?e (order*t@le

$N

Borland
4aption 4olor Bame Gindo2s*tate

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

4ompact 3isc 3igital &udio cl>enu An>enu 2s>a$imi+ed

:abel escrito na tarja superior da janela% 4or da janela, cl>enu uma constante que guarda a cor padro da janela de inido pelo usurio no Gindo2s% Bome do objeto interno% >odo de abertura da janela, modo >a$imi+ado%

*alvando o ormulrio e o projeto0 M% *alve o Aormulrio nas op7es de menu ile e !aMe (ou pressione 4trlR*), o Delphi questionar o nome e o diret)rio, o diret)rio (con orme criado no cap#tulo anterior) o "3Z!#!>ETAZ"A@@#!"O e para o nome digite fTenu (note que o nome e$terno e o mesmo do nome interno di erenciado por .n/, isto acilitar a identi icao do ormulrio e da sua unidade)% N% *alve o Projeto digitando ile e !aMe Project, salve o projeto no diret)rio "3Z!#!>ETAZ"A@@#!"O com o nome "@@A%

4riando no menu uma linha de status0 T% 4lique no boto ( tat1sBar) na pgina "inAE da Component Pallete e clique em qualquer posio do objeto .F4en1% U% 4lique no objeto criado tat1sBar* em seguida clique na propriedade Panels, para alterar esta propriedade clique no boto , aparecer a janela da !tatus Har Panels E?itor, clique sobre o boto JeA e para a propriedade >eKt coloque .(em vindo ao sistema%%%/ e clique no boto Om%

O% &ltere tambm a propriedade 8ame do objeto para :inha*tatus

4aso voc esteje usando o Delphi *.0 crie a barra de status do seguinte modo0

M% 4lique no boto (Panel) na Component Pallete na pgina tandard e clique em qualquer posio do objeto .F4en1% N% 4lique no objeto criado tat1sBar* e altere as seguintes propriedades0
Proprie?a?e &lign &lignment Ealor al(ottom ta:e tausti @ @escrio &linhamento dentro do 6orm, todo no rodap &linhamento da "aption, justi icado g esquerda

$S

Borland
(evel<nner (evelOuter (orderGidth 4aption Bame Aont

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

bv:o2ered bv:o2ered M (em vindo ao sistema%%% :inha*tatus >* *ans *eri , !stilo da onte0 Bormal, 6amanho0 S, 4or0 &+ul >arinho NN

(orda T3 interna, tipo pressionado (orda T3 e$terna, tipo pressionado 6amanho da borda :abel do objeto Bome do objeto 6ipo de letra a ser mostrada no objeto, para alterar esta propriedade clique no boto &ltura do objeto

?eight

nserindo os C(digos niciais


Eamos inserir o c)digo para o objeto &inha tat1s, este objeto receber os conte;dos da propriedade Bint dos diversos objetos, ormando assim uma linha de ajuda on'line na parte in erior do menu% 4lique no boto !ditor% (-o>>le .orm$7nit) da peedBar, at voc alternar para o Code

&bai$o da declarao0 PriMate insira os c)digos0


priMate / Private declarations 0 proce?ure *ho2?int (*ender0 6Object)= public / P1blic declarations 0 en?4 Procedures ou Aun7es :ocais% 4abealho de uma procedure :ocal% Procedures ou Aun7es P;blicas% Ainal da seo de declarao%

&bai$o da diretiva de compilao0 79F (/@ T8


79F (/@ T8 3iretiva de compilao associando o nome do

recurso e$terno ao mesmo nome do objeto .orm.


proce?ure 6An>enu%*ho2?int (*ender0 6Object)= 4abealho da Procedure associado ao nome do begin objeto principal (6An>enu)% :inha*tatus%Panels%<temsJ-K%6e$t 0L &pplication%hint= &tribui o valor do hint da aplicaco ao en?4 #tem cria?o do objeto :inha*tatus%

4lique no boto (-o>>le .orm$7nit) da peedBar, at voc alternar para o .orm clique no objeto .F4en1 e na pgina !vents da Object (nspector, d um duplo clique no evento OnCreate% M% O Delphi criou a procedure .ormCreate a ser iniciada quando o objeto .F4en1 or criado% N% 3igite o seguinte comando abai$o do comando begin0

proce?ure 6An>enu%Aorm4reate (*ender0 6Object)= begin &pplication%On?int 0L *ho2?int= &tribui o valor da procedure *ho2?int ao OnHint da en?4 aplicao%

$9

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

4lique no boto (-o>>le .orm$7nit) da peedBar, at voc alternar para o .orm clique no objeto 4ain4en1* e entre no 4en1 Desi>ner, e para cada opo de >enu altere as propriedades hint e name do seguinte modo0
Hint 4adastro e sa#da do sistema% <n orma7es bsicas do sistema% 6ipos de categoria para os 43_s% <ncluso e manuteno dos 43_s% *a#da do sistema e retorno ao Gindo2s% Eeri icao e pesquisa dos 43_s cadastrados% :ocali+ao dos 43_s atravs de um iltro estabelecido% :ocali+a o 43 atravs de um t#tulo de uma m;sica% !miss7es em papel dos 43_s cadastrados% <mpresso dos 43_s por um intervalo de c)digo% <mpresso de capas para os 43_s% Eeri ica a impressora a qual ser destinado os relat)rios% Aormas de ajuda direta ao sistema% &juda direta com o responsvel pelo desenvolvimento% >anual On':ine direto% !$ibe os t)picos de ajuda do >anual On':ine% >ostra como utili+ar o &u$#lio On':ine% Jame &rquivoM 6abelaM <tem6abelaM 4adastroM *airM 4onsultaM <tem4onsultaM <tem4onsultaN FelatorioM <temFelatorioM <temFelatorioN 4on <mpressoraM &u$ilioM <tem&u$ilioM <tem&u$ilioN <tem&u$ilioT <tem&u$ilioU

Opo ?o Tenu &rquivo 6abela 4ategoria 4adastro *air 4onsulta 43_s 43_s por m;sica Felat)rio Ceral 4apa do 43 4on igura <mpressora &u$#lio *obre o sistema 4onte;do 6)picos de &juda 4omo usar a &juda

*aia do 4en1 Desi>ner, salve o ormulrio e o projeto% Fode o projeto, clicando no boto Fun, ou ainda, digite 9% da peedBar, ou no menu principal a opo Fun e

6este as op7es do menu, veja na linha de *tatus os hints in ormados, saia com Alt& ;%

proce?ure 6An>enu%*ho2?int (*ender0 6Object)= begin :inha*tatus%4aption 0L &pplication%hint= en?4

4aso voc esteje usando o Delphi *.0 troque a procedure !BoAHint para0
&tribui o valor do hint da aplicaco a Propriedade "aption do objeto :inha*tatus%

niciando os comandos do 'en$


4om o menu pronto, comearemos a codi icar os comandos que disponibili+amos ao nosso usurio0 &utomati+ando o 4omando !A#F0 Bo objeto .F4en1, clique na opo ArDuiMo e clique na opo !air% O Delphi criou o evento 4licD para o objeto !air%% 3igite o seguinte comando abai$o do begin0

proce?ure 6An>enu%*airM4licD (*ender0 6Object)= begin 4lose= proporciona o echamento do ormulrio ativo en?4

;0

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Colocando os comandos para o /$xlio


O Delphi implementa o au$#lio on'line de maneira prtica e e iciente, no ensinarei aqui como construir um arquivo %?:P, e$istem diversos aplicativos que j o a+em automaticamente e ica a seu critrio o modo de cri'lo, apenas mostrarei como implement'lo em seu projeto% 4lique na opo Project d Options/// e na pgina Application locali+e o seu arquivo com a opo Help file, aproveite tambm para nomear o projeto, com a opo >itle e colocar um #cone para o projeto, opo #con (clique no boto Loa? #con///) e ao trmino clique no boto OP%

&utomati+ando o 4omando "OJ>E_@O0 Bo objeto .F4en1, clique na opo AuKVlio e clique na opo "onte`?o% 3igite0

proce?ure 6An>enu% <tem&u$ilioN4licD(*ender0 6Object)= begin &pplication%?elp4ommand(?!:Pn4OB6!B6*, -)= en?4

4hama o arquivo de &juda

&utomati+ando o 4omando >cP#"O! @E A[Q@A0 Bo objeto .F4en1, clique na opo AuKVlio e clique na opo >Ypicos ?e Aju?a% 3igite0

proce?ure 6An>enu% <tem&u$ilioT4licD(*ender0 6Object)= const !mpt@*tring0 p4har L PP= begin &pplication%?elp4ommand(?!:PnP&F6<&:m!l, :ong<nt(!mpt@*tring))= en?4

4ria uma constante 6)picos do &juda

&utomati+ando o 4omando "OTO Q!AF A A[Q@A0 Bo objeto .F4en1, clique na opo AuKVlio e clique na opo "omo usar a Aju?a% 3igite0

proce?ure 6An>enu% <tem&u$ilioU4licD(*ender0 6Object)= begin &pplication%?elp4ommand(?!:Pn?!:POB?!:P, -)= en?4

4hama o au$#lio do Gindo2s

cuando echarmos a nossa aplicao e necessrio que tambm desativemos o au$#lio, no objeto .F4en1, clique na pgina de EMents e clique no evento @estroC% 3igite0

proce?ure 6An>enu%Aorm3estro@(*ender0 6Object)= begin &pplication%?elp4ommand(?!:Pnc1<6, -)= en?4

3esabilita o au$#lio

;%

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

*aia do 4en1 Desi>ner, salve o ormulrio e o projeto% Fode o projeto e teste as op7es do menu, saia com "trl&U ou utili+e o comando *air%

4aso o % no ative o au$#lio On':ine, provavelmente o seu menu est com a propriedade .orm t%le em modo fsT@# orm, coloque'a no modo fsJormal% *e mesmo assim ainda no uncionou, mude a propriedade +elpConte?t do ormulrio para %%

&s palavras'chaves para o comando ?elp4ommand so0


3ados <nteiro longo, contendo o n;mero do conte$to% <gnorado% Bormalmente passado -% <nteiro longo, contendo o n;mero do conte$to que oi designado como t)pico de conte;do% <nteiro longo, contendo o n;mero do conte$to% Ponteiro longo como uma string contendo o t)pico designado% Ponteiro longo como uma string contendo o t)pico designado% &o >ostra o au$#lio a partir de t)pico selecionado identi icado a partir do n;mero do conte$to de inido pela seo J>&PK do arquivo %?Pa >ostra o conte;do do primeiro t)pico de inido pela seo J>&PK do arquivo %?Pa 3etermina a chamada do t)pico determinado atravs do uso da tecla AM >ostra uma janela Pop'1p com um t)pico particular indenti icado pelo n;mero do conte$to de inido pela seo J>&PK do arquivo %?Pa >ostra um t)pico pesquisado em uma lista de palavras chaves% !sta palavra chave deve ser e$atamente o te$to procurado% >ostra um determinado t)pico atravs de uma lista de palavras chaves% *e a palavra chave no or encontrada posiciona na palavra ontica mais perto% >ostra o t)pico indenti icado pela palavra chave ou uma chave da tabela alternada%

4omando ?!:Pn4OB6!H6

?!:Pn4OB6!B6* ?!:Pn*!64OB6!B6*

?!:Pn4OB6!H6POP1P

?!:Pnm!l

?!:PnP&F6<&:m!l

?!:Pn>1:6<m!l

Ponteiro longo para uma estrutura de 6>1:6<m!l?!:P% !sta estrutura espec# ica de caracteres e palavras chaves% Ponteiro longo, contendo a macro para a e$ecuo Ponteiro longo para uma estrutura de 6>1:6<m!l?!:P% !sta estrutura espec# ica contm o tamanho e a posio da janela do help primrio ou a janela secundria para ser mostrado% <gnorado% Bormalmente passado -% <gnorado% Bormalmente passado -% <gnorado% Bormalmente passado -%

?!:Pn4O>>&B3 ?!:Pn*!6G<BPO*

!$ecuta um macro help% >ostra um help do 2indo2s com um m#nimo de mem)ria, variando o tamanho e a posio de acordo com o dado passado%

?!:PnAOF4!A<:! ?!:Pn?!:POB?!:P ?!:Pnc1<6

!$ecuta o Gin?elp mostrando o arquivo de au$#lio corrijido% >ostra o au$#lio de como usar o au$#lio% *olicita o echamento do au$#lio ativo%

;2

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Criando a janela 4-obre o -iste%a5


!m todo o sistema criado para o "indo#s" inclu#do uma janela .*obre o *istema/, por uma boa ra+oe todos os outros sistemas para o "indo#s" possuem uma, e quem vai querer quebrar esta maravilhosa tradio e criar um sistema sem uma janela destas b 4riar o primeiro ormulrio com o Delphi no uma tare a assim to di #cil, mas para perdemos o medo inicial vamos criar a Abo1tBo? (ou 4ai$a*obre), observe0

Criando e alterando os objetos


Para criar o ormulrio a partir do menu principal a opo ile e JeA///, aparecer a janela da 8e# (tems (mais in orma7es retorne ao "apVtulo ##) e clique na pgina .orms e no objeto entitulado Abo1t bo?% &ltere os seguintes objetos (locali+e'os atravs da Object (nspector)0 AboutHoK 1classe >AboutHoK20
Propriedade 4aption Bame Ealor *obre o sistema An*obre 3escrio :abel escrito na tarja superior da janela Bome interno do objeto

Program#con 1classe >#mage20


Propriedade Picture Ealor !scolha o (it>ap de sua pre erncia 3escrio Objeto imagem

Pro?uctJame 1classe >Label20


Propriedade 4aption Aont Ealor 433& >s *ans *eri , Begrito <tlico, MS, 4astanho 3escrio :abel do objeto 6ipo de letra a ser mostrada no objeto

Eersion 1classe >Label20


Propriedade 4aption Aont Ealor Eerso (eta 6este >s *ans *eri , <tlico, S, &+ul >arinho 3escrio :abel do objeto 6ipo de letra a ser mostrada no objeto

"opCrigBt 1classe >Label20


Propriedade 4aption Aont Ealor 4op@right
"

3escrio M,,O ' Bome da !mpresa :abel do objeto 6ipo de letra a ser mostrada no objeto

>s *ans *eri , Bormal, S, &+ul marinho

Propriedade 4aption Aont

Para conseguir um " pressione &:6RMSU e um q pressione &:6RMV,% "omments 1classe >Label20
Ealor 4ompact 3isc 3igital &udio ' 4adastro de 43_s >s *ans *eri , Bormal, S, Preto 3escrio :abel do objeto 6ipo de letra a ser mostrada no objeto

;$

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

!limine o objeto OPHutton (boto de Om), clique sobre ele e pressione 3elete, clique no objeto <!obre e clicD no objeto BitBtn , encontrado na Component Palette na pgina Additional, e clicD novamente no <!obre Altere as seguintes proprie?a?es0

Propriedade mind ?int *ho2?int Bame Gidth

Ealor bDOm Fetorna ao menu principal 6rue (utOm ,N

3escrio 3etermina a classe a ser utili+ada pelo boto, automaticamente ser alterado as propriedades0 "aption, IlCpB e To?alFesult &juda on'line para o objeto espec# ico >ostrar o conte;do da propriedade Bint sob a orma de uma cai$a de ajuda on'line Bome do Objeto :argura do objeto

3 uma organi+ada geral quanto a posio dos objetos para voc poder ter uma idia compare o desenho do seu ormulrio para ver se no icou altando nada0

*alve o ormulrio nas op7es de menu ile e !aMe (ou pressione 4trlR*), o Delphi questionar o nome e o diret)rio, o diret)rio o "3Z!#!>ETAZ"A@@#!"O e para o nome digite f!obre (note que novamente o nome e$terno e o mesmo do nome interno di erenciado por .n/)%

/ssociando o !orm 1Sobre o Sistema2 ao men$


Eamos associar o orm f!obre com o fTenu0 &utomati+ando o comando !OHFE O !#!>ETA 0 Bo objeto .F4en1, clique na opo AuKVlio e na opo !obre o !istema% O Delphi criou o evento "licO para o objeto item do menu #temAuKilio%% 3igite o seguinte comando abai$o do begin0

;;

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

proce?ure 6An>enu%<tem&u$ilioM4licD(*ender0 6Object)= begin An*obre%*ho2>odal= &bre o Objeto An*obre em modo >odal% en?=

&bai$o da diretiva de compilao0 79F (/@ T8

/2) 3.D.40 uses *obre= 1tili+a a 1nidade *obre e todos os objetos dependentes dela%

proce?ure 6An>enu%*ho2?int (*ender0 6Object)=

*aia do Code !ditor e salve o ormulrio e o projeto% Fode o projeto e teste o ormulrio *obre o *istema, o modo 4odal no permitir que voc clique em nenhum outro lugar at a inali+ao desta janela, volte para o menu com o boto Om%

Bote que no oi preciso colocar nenhum c)digo para que ao pressionar o boto Om o ormulrio osse echado, isto oi reali+ado graas a opo Pin?, no Delphi voc encontrar outros modelos de boto padro do tipo0 4ancela, *im, Bo entre outros%

Criando a janela Splash


& janela plash tida como a mais importante da aplicao% !sta janela aparece uma ;nica ve+ (no in#cio) durante a e$ecuo do seu sistema in ormando ao usurio para ter pacincia e aguardar tranq8ilamente enquanto o sistema carregado, os ormulrios so criados, etc% !$istem vrios tipos de janela plash% O tipo mais comum aquela que mostra o nome da aplicao, o autor, a verso, direitos autorais (4op@right) e uma imagem ou #cone que identi ica a aplicao% &travs da caracter#stica de herana dos objetos vamos obter acilmente esta janela0 M% Bo menu principal selecione a opo ile e JeA///, clique na pgina CDDA e na igura entitulada .F obre% Beste momento voc obteve uma c)pia da janela 6 obre o problema que a janela 6 plash ter menos objetos que a janela 6 obre, e por caracter#stica de herana o ilho sempre deve superar os pais nunca ao contrrio, ento necessrio que invertamos as duas janelas%

To?ifican?o o objeto <!obre


M% >odi ique a propriedade Jame do .F obre para Hor?er!tCle para bsJone% <!plasB e a propriedade

N% 4lique sobre objeto b1tOC e digite 4trlRH, acerte o tamanho da janela% T% *alve o ormulrio nas op7es de menu ile e !aMe As///, o Delphi questionar o nome e o diret)rio, o diret)rio o "3Z!#!>ETAZ"A@@#!"O e para o nome digite 6 plash%

;G

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Fecrian?o o objeto <!obre


M% 4lique no objeto .F obre* e note que automaticamente ele adquiriu as modi ica7es do objeto f!plasB% N% &umente o tamanho da janela de modo a que caiba novamente o boto de Om e digite 46F:RE, troque a propriedade "aption do B1tOC para dOP% T% >odi ique a propriedade Hor?er!tCle do 6orm para bs@ialog e a propriedade "aption para !obre o !istema% U% *alve o ormulrio nas op7es de menu ile e !aMe (ou pressione 46F:R*), o Delphi questionar o nome e o diret)rio, o diret)rio o "3Z!#!>ETAZ"A@@#!"O e para o nome digite f!obre (con irme a operao de sobescrita)%

Organizan?o o objeto f!plasB


M% & partir do menu principal clique em Project X Options///, clique na pgina .orms e envie o objeto .F plash (clicando sobre ele e clique no boto com o sinal de ,) que est na lista A1to9create 6orms para a lista Available 6orms (para no ocupar espao em mem)ria uma janela que s) ser utili+ada uma ;nica ve+, criaremos esta janela via comandos), clique sobre o boto OP% N% Bo menu principal selecione a opo EieA e Project !ource (estamos agora acessando o programa principal que controla todas os outros ormulrios ou 1nits)% T% &p)s o comando begin adicione as seguintes linhas0
An*plash 0L 6An*plash%4reate(&pplication)= An*plash%*ho2= An*plash%Fe resh= 4ria o orm como parte da aplicao% 4hama o orm de modo no modal% >ostra o orm e devolve o controle para a aplicao%

U% &ntes do comando Application/Fun4 adicione a linha0


An*plash%Aree= :ibera o orm da aplicao%

*aia do Code !ditor e salve o ormulrio e o projeto% Fode o projeto, qualquer problema compare com o c)digo abai$o0

program 433&= uses Amenu in PA>!B1%P&*P /.F4en10, A*obre in PA*O(F!%P&*P /.F obre0= /2) 3.)! 0 begin An*plash 0L 6An*plash%4reate(&pplication)= An*plash%*ho2= An*plash%Fe resh= &pplication%<nitiali+e= &pplication%?elpAile 0L P40k*istemak4ad3iscokCuia%hlpP= &pplication%4reateAorm(6An>enu, An>enu)= &pplication%4reateAorm(6An*obre, An*obre)= An*plash%Aree= &pplication%Fun=

;L

Borland
en?%

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Eoc pode mover o comando !plasB!creen/ ree4 para o evento On!BoA do orm .F4en1% <sto ar com que a janela !plasB s) desaparea quando o menu or ativado% <n eli+mente para os usurios do Delphi *.0 esta caracter#stica de herana no havia sido implementada ento, a+'se necessrio a construo da tela 6 plash atravs de uma c)pia da tela 6 obre com a utili+ao do comando !aMe As///%

Criando o acesso a 3ase de 2ados


I bem verdade que o nosso sistema se encontra na base Parado?, mas como escrevi no comeo do trabalho com o Delphi poss#vel modi icar o reposit)rio de dados sem precisar alterar uma s) linha do sistema produ+ido% Bo cap#tulo a respeito das tabelas tambm vimos a impossibilidade de algumas a7es produ+idas por clusulas !]L no serem bem vindas em base de dados no totalmente compat#veis com a estrutura do !]L, ento se a+ necessrio identi icar uma base padr;o de uma base !]L% Bo menu principal insira o objeto DataBase pgina Data Access, e altere as seguintes propriedades0
Propriedade &liasBame 3ata(aseBame Bame Ealor &lias3isco (ase3isco 3(3isco 3escrio Bome do *infnimo Bome do banco de dados Bome do objeto

, encontrado na Component Palette na

<nsira agora os c)digos que permitir a abertura e o echamento da base de dados0 4lique no boto (-o>>le .orm$7nit) da peedBar, at voc alternar para a Code !ditor e locali+e o procedimento .ormCreate associado ao evento OnCreate0

proce?ure 6An>enu%Aorm4reate(*ender0 6Object)= begin &pplication%On?int 0L *ho2?int= 3(3isco%4onnected 0L 6rue= <nicia o (anco de 3ados en?4

& partir do pr)$imo cap#tulo entraremos realmente no que o Delphi capa+ com tabelas, mas antes, necessrio que os conceitos ensinados anteriormente estejam bem i$ados, se alguma coisa deu errada, releia o cap#tulo, ou ento con ira o c)digo do An>enu0
unit >enu= interface uses Gindo2s, >essages, *@s1tils, 4lasses, Craphics, 4ontrols, Aorms, 3ialogs, >enus, 4om4trls, 3(6ables, 3(=

;N

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

tCpe 6An>enu L class(6Aorm) >ain>enuM0 6>ain>enu= &rquivoM0 6>enu<tem= 4onsultaM0 6>enu<tem= FelatorioM0 6>enu<tem= &u$ilioM0 6>enu<tem= 6abelaM0 6>enu<tem= 4adastroM0 6>enu<tem= BV0 6>enu<tem= *airM0 6>enu<tem= <tem6abelaM0 6>enu<tem= <tem4onsultaM0 6>enu<tem= <tem4onsultaN0 6>enu<tem= <temFelatorioM0 6>enu<tem= <temFelatorioN0 6>enu<tem= BMN0 6>enu<tem= 4on <mpressoraM0 6>enu<tem= <tem&u$ilioN0 6>enu<tem= <tem&u$ilioT0 6>enu<tem= <tem&u$ilioU0 6>enu<tem= BMU0 6>enu<tem= <tem&u$ilioM0 6>enu<tem= :inha*tatus0 6*tatus(ar= 3(3isco0 63atabase= proce?ure Aorm4reate(*ender0 6Object)= proce?ure *airM4licD(*ender0 6Object)= proce?ure <tem&u$ilioN4licD(*ender0 6Object)= proce?ure <tem&u$ilioT4licD(*ender0 6Object)= proce?ure <tem&u$ilioU4licD(*ender0 6Object)= proce?ure Aorm3estro@(*ender0 6Object)= proce?ure <tem&u$ilioM4licD(*ender0 6Object)= priMate proce?ure *ho2?int (*ender0 6Object)= public / P1blic declarations 0 en?= Mar An>enu0 6An>enu= implementation /2) 3.D.40 uses *obre= proce?ure 6An>enu%*ho2?int (*ender0 6Object)= begin :inha*tatus%Panels%<temsJ-K%6e$t 0L &pplication%hint= en?= proce?ure 6An>enu%Aorm4reate(*ender0 6Object)= begin &pplication%On?int 0L *ho2?int= 3(3isco%4onnected 0L 6rue= en?=

;S

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

proce?ure 6An>enu%*airM4licD(*ender0 6Object)= begin 3(3isco%4onnected 0L Aalse= 4lose= en?= proce?ure 6An>enu%<tem&u$ilioN4licD(*ender0 6Object)= begin &pplication%?elp4ommand(?!:Pn4OB6!B6*, -)= en?= proce?ure 6An>enu%<tem&u$ilioT4licD(*ender0 6Object)= const !mpt@*tring0 p4har L PP= begin &pplication%?elp4ommand(?!:PnP&F6<&:m!l, :ong<nt(!mpt@*tring))= en?= proce?ure 6An>enu%<tem&u$ilioU4licD(*ender0 6Object)= begin &pplication%?elp4ommand(?!:Pn?!:POB?!:P, -)= en?= proce?ure 6An>enu%Aorm3estro@(*ender0 6Object)= begin &pplication%?elp4ommand(?!:Pnc1<6, -)= en?= proce?ure 6An>enu%<tem&u$ilioM4licD(*ender0 6Object)= begin An*obre%*ho2>odal= en?= en?%

4aso o seu sistema no seja migrado para nenhum banco de dados no padro !]L (do tipo OF&4:!", *l(&*!",%%%) no e$iste nenhuma necessidade em se utili+ar o objeto @ataHase, mas a utili+ao ou no do objeto no a eta o tempo de acesso ao sistema, ento porque no prepar'lo para uma eventual mudanab

;9

Captulo (
3anela para as -abelas
6abelas primrias de in ormao requerem entradas de dados simples, no nosso caso temos a tabela de categoria, a criao de janelas para a sua manipulao de seus dados no um bicho de sete cabeas como voc ver a seguir%

&eabrindo o seu Projeto


*e assim que voc inali+ou o cap#tulo anterior voc saiu do Delphi, precisa agora reativar o projeto% Para tanto0 M% Bo menu principal clique em ile e Open///% N% O sistema desenvolvido encontrado no diret)rio "3Z!#!>ETAZ"A@@#!"O , com a e$tenso /@PF% Beste momento voc est pronto para o trabalho, vamos criar a nossa janela0 T% 4lique no menu principal a opo ile e JeA///, em 8e# (tems, mude a pgina para .orms e clique no objeto entitulado Database .orm, agora siga as telas0

%%

2% O tipo a ser criada% orm Options0 4reate a simple orm 1ma janela simples @ata!et Options0 4reate a orm using 66ables objects 1sando o objeto tabela (oto Be$t% & tabela a ser usada para a janela% @riMe or Alias name0 &lias3isco >able Jame0 categor%db (oto Be$t

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

$% 4ampos a serem inseridos (oto .YY. (oto Be$t

;% Aormao dos campos Eertical (oto Be$t

G%

Posio dos :abels :e t ' & esquerda (oto Be$t

L%

4ompleto Cera a tela como orm principal ' Bo O cue gerar0 Aorm e 3ata>odule (oto Ainish

*lterando as 6anelas Criadas


*e voc seguiu direito as orienta7es anteriores, ento voc est com um belo princ#pio de janela em suas mos% 3igo um belo princ#pio porque voc h de concordar comigo que a janela gerada no nenhum pouco amigvel para o nosso usurio, programando h um certo tempo com o Delphi descobri um padro de janela que meus usurios gostaram, mas voc poder uturamente tambm encontrar o seu pr)prio padro de janela, ento vamos a algumas altera7es0 *e voc est utili+ando o Delphi *.0, a ;nica di erena ser nos Data4od1les, no se preocupe coloque todas as instru7es em um ;nico ormulrio%

2ata0odules 7
1ma das principais novidades que acompanham o Delphi 2.0 a possibilidade de criao de Data4od1les, estas janelas especiais uncionam como uma espcie de reposit)rio de dados, no so visuali+veis em tempo de e$ecuo% I poss#vel colocar em um ;nico Data4od1le todo o modelo relacional e todos os outros ormulrios do sistema acessando'o% &cesse inicialmente o objeto Data4od1le* para as altera7es que se seguem%

G%

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

'odi!icando as -abelas e as ,igaes


Os objeto que contm as tabelas e as ligaees ?e tabela so objetos invis#veis quando o aplicativo est rodando portanto no se preocupe muito com a posio que ele ocupar% >abela no Delphi est contida no objeto (-able), encontrado na Component Palette na pgina Data Access, este objeto no a tabela em si, mas um ponteiro para a tabela, portanto voc poder usar duplica7es da mesma tabela, sem que isso a ete a integridade de seu banco de dados% &lterando as propriedades da -able0 M% &ltere na propriedade @ataHaseJame, nome do banco de dados Hase@isco, caso voc no encontre na lista o Hase@isco, abra o objeto .F4en1 e tente novamente% N% Eeri ique se a propriedade >ableJame est apontada para a tabela0 "A>EIOF/@H, retire o /@H (visando a compatibilidade com outras bases) T% 4oloque a propriedade #n?eK iel?James no nome do #ndice primrio da tabela% !#I<"A>EI % U% &ltere a propriedade Jame para 6ab4ategor, ou seja, 6ab R Bome da tabela e$terno (sem a sua e$tenso), isto acilitar a identi icao da -able e a qual Data o1rce que ela pertence%% O% Outra propriedade interessante da -able ActiMe, ela de ine se a tabela est ou no ativada para o uso% &lteraremos esta propriedade via c)digo, portanto no se preocupe muito com ela neste instante, o ideal e dei$'la 6alse, i% inativa% &s Ligaees ?a >abela no Delphi reali+ada atravs do objeto (Data o1rce), encontrado na Component Palette na pgina Data Access, este objeto a+ a ligao de sua tabela e$terna com os campos do ormulrio% &lterando as propriedades do Data o1rce0 M% Bote que a propriedade @ata!et est com o nome alterado (6ab4ategor), est propriedade de ine a table ou G1er% ( alemos nelas mais tarde) que ser ligada% N% &ltere a propriedade Jame para @s"ategor, ou seja, 3s R Bome da tabela e$terno (sem a sua e$tenso), como dito antes, isto acilitar a identi icao do Data o1rce e a qual -able ele pertence%

/lterando os campos da tabela


Os campos da tabela devero ser alterados para conterem as cr#ticas, lembre'se, os campos presentes no Data4od1le so apenas uma .mscara/ para os campos da tabela% 3 um duplo clique sobre o -abCate>or, ser aberta a janela do .ields!ditor% >arque o campo *<Cn4&6!C e altere as seguintes propriedades0
Ealor *igla 3escrio Bome do campo a ser mostrado na tela

Propriedade 3ispla@:abel

G2

Borland
Fequired !dit>asD

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

6rue Y&&=-=n

*e o campo ou no requerido para insero de dados na tabela 4ria uma mscara de edio para o campo, para alterar esta propriedade clique no boto

Outras propriedades importantes a serem levadas em considerao so0

Alignment0 &linhamento dentro do campo0 4entrali+ado, g esquerda ou g direita= @isplaC=i?tB0 6amanho do campo dispon#vel para insero de dados= iel?Jame0 Bome do campo na tabela, e$terno= Jame0 Bome do campo dentro do ormulrio, interno= Fea?OnlC0 *e um campo s) de leitura= !ize0 6amanho do campo na tabela= e Eisible0 4ampo ou no vis#vel%
Eeja mais observa7es sobre as mscaras no apndice !%

>arque o campo 3!*n4&6!C e altere apenas a propriedade @isplaCLabel para @escrio%

6roque a propriedade Bame do objeto Data4od1le* para 3>n>odelo%

Eeja como icou a viso inal do objeto D4F4odelo, segue abai$o0

Codificando o 2ata0odule
Eoc j deve ter notado que para o Delphi a escrita de c)digos bastante redu+ida e bem dividida entre os eventos e com a criao dos Data4od1les o c)digo ainda ica mais redu+ido, di erentemente para os usurios de Delphi *.0% 6odas as cr#ticas e controles para as tabelas icaro no Data4od1le enquanto que o ormulrio se preocupar com o manuseamento dos campos% 4)digo para e etivar as modi ica7es na tabela para as bases *c:, clique no boto (-o>>le .orm$7nit) da peedBar, at ter a viso novamente para o D4F4odelo, d um clique simples no objeto -abCate>or (marcando'o) e na Object (nspector, na pgina !vents, d um duplo clicD sobre o evento AfterPost0

proce?ure 63>n>odelo%6ab4ategor& terPost(3ata*et0 63ata*et)=

G$

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

begin if An>enu%3(3isco%<s*c:based tBen begin An>enu%3(3isco%4ommit= An>enu%3(3isco%*tart6ransaction= en?4 en?4

*e a base de dados padro *c: Cravando as altera7es da tabela Feinicia o modo de transa7es

O objeto que controla o banco de dados a+ parte da 1nit fTenu ento necessrio a+er uso desta 1nit, para tanto insira o seguinte c)digo (abai$o da diretiva de compilao)0
/2) 3.D.40 uses >enu=

Para as bases de ormato *c: e$istem trs declara7es bsicas0

M% *tart6ransaction ' <nicia um bloco de controle para as declara7es= N% 4ommit ' 6ermina o bloco de controle gravando as altera7es eitas nas tabelas= e T% Foll(acD ' 6ermina o bloco de controle cancelando quaisquer modi ica7es eitas nas tabelas%

Controlando a d$plicao dos Campos.C&ave


I aconselhvel no permitir que o usurio duplique os c)digos de categoria, para tanto0 M% 4rie um novo objeto -able com as mesmas propriedades do objeto -abCate>or (clique sobre o objeto e digite 4trlR4 e 4trlRE, elimine as re erncias aos eventos), alterando a propriedade Jame para >ab"ategor"onf/ N% Bo objeto -abCate>or (<FCA-!<, locali+e'o atravs da Object (nspector, d um duplo clicD sobre o evento OnEali?ate
proce?ure 63>n>odelo%6ab4ategor*ign4ategEalidate(*ender0 6Aield)= begin if 3*4ategor*tate in Jds!dit, ds<nsertK tBen Eeri ica se o modo de insero ou edio de dados if 6ab4ategor4on %Aindme@(J6ab4ategor*<Cn4&6!CK) then Pesquisa o campo digit%na tab%criada begin An4ateg%!dit*<Cn4&6!C%*etAocus= &ltera a posio do cursor para o objeto E?it!#I<"A>EI raise !$ception%4reate(P*igla da categoria duplicadoPrM-R 4aso j e$ista mostra P4licD no boto s:ocali+as em caso de d;vidaP)= mensagem de erro en?= en?=

Bote que e$iste uma re erncia para o objeto An4ateg (*er o ormulrio de 4ategoria) precisamos ento a+er uso de sua 1nit, para tanto coloque'a abai$o da diretiva de compilao0
/2) 3.D.40 uses >enu, \ >enu Principal do *istema ] 4ateg= \ 4adastro de 4ategorias ]

G;

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

& declarao rM-, unciona como um !nter dentro da mensagem, isto ar com que esta mensagem tenha duas linhas% O segundo objeto >able oi criado pois a primeira tabela estar em modo de edio ou insero de registros e no poder ser desposicionada para a veri icao, ento a veri icao se o registro e$iste ser eita neste segundo objeto% O comando raise impede que o registro duplicado seja adicionado na tabela, no modo run'time este comando provocar um erro de classe e?ception que travar o projeto, no se preocupe, digite A, e prossiga com os testes, quando o projeto or compilado e rodado atravs do /EUE o erro no travar o projeto mostrando somente a mensagem de inida% 1m ;ltimo detalhe para o Data4od1le que temos que prever que a cada novo registro o cursor deve se posicionar no primeiro campo do registro, para o in#cio da digitao0 M% >arque o objeto -abCate>or, e d um duplo clicD sobre o evento OnJeAFecor?0

proce?ure 63>n>odelo%6ab4ategorBe2Fecord(3ata*et0 63ata*et)= begin An4ateg%!dit*ign4ateg%*etAocus= &ltera a posio do cursor para o objeto E?it!ig<"ateg en?=

%inali0ando o "ata'od$le
*alve o Data4od1le com o nome de 3>>odelo% 4on ira o c)digo completo para o Data4od1le0
unit 3>>odelo= interface uses *@s1tils, Gindo2s, 4lasses, Craphics, 4ontrols, Aorms, 3ialogs, 3(, 3(6ables= tCpe 63>n>odelo L class(63ata>odule) 6ab4ategor*ign4ateg0 6*tringAield= 6ab4ategor3esn4ateg0 6*tringAield= 3*4ategor0 63ata*ource= 6ab4ategor0 66able= 6ab4ategor4on 0 66able= *tringAieldM0 6*tringAield= *tringAieldN0 6*tringAield= proce?ure 6ab4ategor& terPost(3ata*et0 63ata*et)= proce?ure 6ab4ategor*ign4ategEalidate(*ender0 6Aield)= proce?ure 6ab4ategorBe2Fecord(3ata*et0 63ata*et)= priMate / private declarations 0 public / p1blic declarations 0 en?= Mar 3>n>odelo0 63>n>odelo=

GG

Borland
implementation /2) 3.D.40

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

uses >enu, / 4en1 Principal do istema 0 4ateg= / Cadastro de Cate>orias 0 proce?ure 63>n>odelo%6ab4ategor& terPost(3ata*et0 63ata*et)= begin if An>enu%3(3isco%<s*c:based tBen begin An>enu%3(3isco%4ommit= An>enu%3(3isco%*tart6ransaction= en?= en?= proce?ure 63>n>odelo%6ab4ategor*ign4ategEalidate(*ender0 6Aield)= begin if 3*4ategor%*tate in Jds!dit, ds<nsertK tBen if 6ab4ategor4on %Aindme@(J6ab4ategor*<Cn4&6!CK) tBen begin An4ateg%!dit*<Cn4&6!C%*etAocus= raise !$ception%4reate(P*igla da categoria duplicadoPrM-R P4licD no boto s:ocali+as em caso de d;vidaP)= en?= en?= proce?ure 63>n>odelo%6ab4ategorBe2Fecord(3ata*et0 63ata*et)= begin An4ateg%!dit*ign4ateg%*etAocus= en?= en?%
4omandos e suas un7es, por ordem de apario0 Qses ' Aa+ o uso de determinada unidade de procedimentos e biblioteca de un7es% J3ata*ourceK/!tate ' 3e ine o estado em que se encontra determinado objeto @ata!ource% JObjetoK% !et ocus ' Posiciona o cursor no objeto de inido% raise ' 4ria um erro de classe e?ception que no permitir que qualquer outra ao prossiga at a mesma ser resolvida%

*lterando o $or%ul8rio
4om o Data4od1le conclu#do vamos atacar a janela que ser mostrada para o nosso usurio, chame objeto .orm2 (chame'o atravs da Project 4ana>er ' opo do menu EieA X Project Tanager)% &ntes de a+ermos quaisquer modi icao vamos inicialmente alterar o nome da janela, para tanto pressione a tecla .** (aparecer a Object (nspector para o objeto .orm2) altere a propriedade Jame para <"ateg%

GL

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Outra modi icao importante e trocar a re erncia do comando Qses abai$o da diretiva de compilao que estava re erenciado ao antigo nome do objeto Data4od1le (7nit*), troque'o para0
/2) 3.D.40 uses 3>>odelo= / )e6erencia ao Data4od1le 0

'odi!icando os ,abels e Campos


Os Labels, representados pelo objeto (&abel), encontrado na Component Palette na pgina tandard, so as etiquetas de cada campo que aparece a esquerda dos campos% &lterando as propriedades dos :abels0 M% &ltere a propriedade "aption de *<Cn4&6!C e 3!*n4&6!C para . d!igla3/ e .d@escrio3/, respectivamente% N% >odi ique a propriedade onte de ambos para >* *ans *eri , Begrito, S e 4astanho= e a propriedade Auto!ize para >rue% Para selecionar simultaneamente vrios objetos, marque o primeiro objeto, segure a tecla *?<A6 e marque os demais%

cualquer problema para dimensionar o tamanho de objetos use a tecla *?<A6 R

*etas%

cualquer problema para acertar a posio de objetos use a tecla 46F: R *etas%

1ma propriedade interessante a ocus"ontrol ela indicar um controle para a posio do cursor% !$%0 4aso seja digitado &:6R* o cursor se posicionar no objeto E?it!ig<"ateg ou 4aso seja digitado &:6R3 o cursor se posicionar no objeto E?it@es<"ateg% Os "ampos ?e E?io, representados pelo objeto (DB!dit), encontrado na Component Palette na pgina Data Controls, so os que recebero o conte;do dos campos da tabela% &lterando as propriedades do campo 4)digo0 M% >odi ique a propriedade onte (de ambos os campos) para >* *ans *eri , Bormal, S e a+ul marinho% N% Eeri ique as propriedades @ata!ource e @ata iel?, nome da ligao com @T< To?elo/@!"ategor e o nome do campo !ig<"ateg, respectivamente% T% & propriedade Jame, nome do campo, montada com !dit R Bome e$terno do campo% E?it!ig<"ateg% &lterando as propriedades do campo 3escrio0 U% Eeri ique as propriedades @ata!ource e @ata iel?, nome da ligao com @T<To?elo/@!"ategor e o nome do campo @es<"ateg, respectivamente%

GN

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

O% & propriedade Jame, nome do campo, montada com !dit R Bome e$terno do campo% E?it@es<"ateg%

Objeto "#Navigator
O objeto para o controle da tabela, representada pelo objeto (DB8avi>ator), encontrado na Component Palette na pgina Data Controls, e apresentada pfr uma barra de un7es que ligada ao Data o1rce controla a navegao dos campos, adio de novos registros, edio e e$cluso de registros, o cancelamento ou a con irmao de uma modi icao e a atuali+ao do banco de dados (quando em rede)0

&presentada pelos bot7es0 nbAirst (primeiro), nbPrior (anterior), nbBe$t (pr)$imo), nb:ast (;ltimo), nd<nsert (inserir), nd3elete (e$cluir), nb!dit (editar), nbPost (con irmar), nb4ancel (cancelar) e nbFe resh (atuali+ar dados)% &lterando as propriedades da barra de navegao0 M% 4on ira a propriedade @ata!ource veri icando para o nome da ligao com @T<To?elo/@!"ategor N% & propriedade "onfirm@elete ar com seja e$ibida uma mensagem, con irmando ou no a e$cluso% T% &ltere a propriedade Hints, clicando em modo0
Primeiro &nterior Pr)$imo Wltimo <nserir !$cluir !ditar 4on irmar 4ancelar &tuali+ar dados

, digite o nome de cada boto do seguinte

U% 4lique no boto Om e altere a propriedade !BoAHint para true, isto ar com que embai$o de cada boto da barra, sobreposto pelo cursor, seja mostrado uma cai$a como uma tarja amarela com a conte;do da propriedade Hint% O% Eoc poder de inir quais bot7es devero aparecer na barra utili+ando a propriedade EisibleHuttons, para tanto clique no sinal de R que aparece a esquerda da opo e de ina true ou false para os bot7es que sero ou no mostrados%

'odi!icando os Paineis
!$istem dois objetos Panel criados automaticamente0 o primeiro superior, abriga o objeto DB8avi>ator, o segundo ocupando o restante da janela, abriga um objeto do tipo *croll(o$, labels e campos%
GS

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

&lterando as propriedades do primeiro painel0 M% &ltere a propriedade Alignment, alinhamento da propriedade "aption do painel, para taLeft[ustifC% N% 4oloque na propriedade "aption o nome "ategoria% T% >odi ique a propriedade onte para >* *ans *eri , <tlico, MU e a+ul marinho%

&rrume a barra de navegao de modo que no cubra a descrio, se or o caso aumente o tamanho da janela% &lterando as propriedades do segundo painel0 M% &umente ou diminua o tamanho da janela e note que este painel diminue e aumenta com ela, isto se deve a propriedade Align estar no modo al"lient, altere esta propriedade (temporariamente) para alJone%

Para conseguir ver a tela de propriedades deste painel, clique em quaisquer das bordas, pois sobre este painel e$iste um outro objeto denominado crollBo? tambm no modo al"lient%

'odi!icando a 3anela
& janela est um pouco escondida atrs dos objetos painis criados, ap)s alterar a propriedade Align do segundo painel, estique um pouco a janela para bai$o e clique nela% &lterando as propriedades da janela0 M% Fetire as op7es biTinimize e biTaKimize da propriedade Hor?er#cons% N% &ltere na propriedade Hor?er!tCle para bs!ingle% T% >ude a propriedade "aption para >abela% U% *e voc no o e+, mude a propriedade Jame para <"ateg, ou seja An R Bome da tabela e$terno (sem a sua e$tenso), isto acilitar a identi icao entre o 6orm e sua 1nit% O% Eeri ique a propriedade Position (posio da janela) ela deve estar com o valor !creen"enter (centrali+ado)% V% *alve o ormulrio com o nome f"ateg e salve o projeto%

Criando o terceiro Painel


4riaremos agora um terceiro painel para comportar alguns bot7es

"rian?o e alteran?o o painel3


M% 4rie um objeto Panel, clique no objeto (Panel), encontrado na Component Palette na pgina tandard, e clique no objeto .FCate>, altere as seguintes propriedades0

G9

Borland
Propriedade &lign 4aption ?eight

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Ealor al(ottom UM

3escrio &linhamento dentro do 6orm, todo no rodap :abel do objeto &ltura do objeto

Os bot7es que criaremos aro duas un7es0 M%*air da janela e N%:ocali+ao rpida de um determinado registro%

"rian?o o primeiro boto3


M% >arque o objeto panel$ criado, clicD no objeto BitBtn Component Palette na pgina Additional, e clicD no panel$% N% &ltere as seguintes propriedades para o boto0
Propriedade mind Ealor bD4lose 3escrio 3etermina a classe a ser utili+ada pelo boto, automaticamente ser alterado as propriedades0 "aption, IlCpB e To?alFesult :abel do objeto 6ipo de letra a ser mostrada no objeto, para alterar esta propriedade clique no boto ?eight ?int :e t Bame *ho2?int Gidth NO Fetorna ao menu principal TMN (utAechar 6rue S, &ltura &juda on'line para o objeto espec# ico &linhamento a esquerda Bome do objeto >ostrar o conte;do da propriedade Bint sob a orma de uma cai$a de ajuda on'line 6amanho do objeto

, encontrado na

4aption Aont

pAechar >* *ans *eri , Bormal, S, Preto

"rian?o o segun?o boto3


M% 4rie um segundo boto, alterando as seguintes propriedades0
Propriedade 4aption Aont Cl@ph ?eight ?int :e t Bame *ho2?int Aont Gidth Ealor p:ocali+ar >* *ans *eri , Bormal, S, Preto J3iret)rio3elphiKk<>&C!*k(166OB*k A<B3%(>P NO :ocali+a determinado registro na tabela NU (ut:ocali+ar 6rue >* *ans *eri , Bormal, S, Preto S, 3escrio :abel do objeto 6ipo de letra a ser mostrada no objeto <magem a ser mostrada no objeto &ltura do objeto &juda on'line para o objeto espec# ico &linhamento a esquerda Bome do objeto >ostrar o conte;do da propriedade Bint sob a orma de uma cai$a de ajuda on'line 6ipo de letra a ser mostrada no objeto 6amanho do objeto

&lterando novamente as propriedades do segundo painel0 M% Fecoloque a propriedade Align do objeto Panel2 para al"lient e *alve o orm e o projeto%

L0

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

*eu trabalho inal deve ter icado deste modo0

Pro ra%ando no for%ul8rio


&gora vem a parte de c)digo% &o inal deste t)pico voc observar que o trabalho maior icou pfr conta de organi+ar e arrumar os objetos do que com o c)digo em si, i%e%, orientao a objetos%

Preservando as )reas de 'em(ria


4om o Delphi poss#vel trabalhar de duas maneiras, a primeira permitir que o Delphi crie todos os objetos em mem)ria aguardando simplesmente que estes sejam chamados, mas isto implica que a mquina 4lient deva ter uma boa quantidade de mem)ria para suportar os objetos que sero ali colocados, a segunda maneira e criarmos estes objetos via c)digo permitindo que o Delphi crie o m#nimo poss#vel, o problema que isto implica e na demora quanto da chamada de um ormulrio, em mdia O- segundos para ativar o ormulrioM% I pre er#vel trabalhar com o segundo modo uma ve+ que para entrar em determinado ormulrio o nosso usurio s) o ar uma ;nica ve+% <nicialmente retiraremos da rea de criao automtica o ormulrio de categoria e o ormulrio *obre o sistema, para tanto, a partir do menu principal clique em Project X Options///, clique na pgina .orms e envie no objetos .FCate> e .F obre (clique sobre o primeiro, segure a tecla !Bift e clique no segundo e no terceiro e em seguida clique no boto com o sinal de Y) que est na lista A1to9create 6orms para a lista Available 6orms, clique sobre o boto OP (processo semelhante oi reali+ado para o ormulrio <!plasB)%

!ste tempo com base em uma mquina USV 3HN com S >b de mem)ria%

L%

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

&ltere agora a instruo do ormulrio <Tenu, evento On"licO para o objeto #temAuKilio%, para criarmos o objeto <!obre e ap)s a sua chamada destru#'lo da rea de mem)ria0

proce?ure 6An>enu%<tem&u$ilioM4licD(*ender0 6Object)= begin AitB 6An*obre%4reate(*el ) do 4ria o ormulrio em mem)ria begin *ho2>odal= 4hama o ormulrio atravs da rea aberta Aree= :ibera a rea aberta en?= en?=

4)digo para ativar a (ase de dados e as tabelas quando no Data4od1le, retorne ao ormulrio <"ateg0 M% 4lique no boto !ditor% (-o>>le .orm$7nit) da peedBar, at voc alternar para o Code

proce?ure Aorm4reate(*ender0 6Object)= priMate / private declarations 0 public / p1blic declarations 0 proce?ure inicio= 4riando a chamada para um procedimento p;blico% en?4 Mar An4ateg0 6An4ateg= implementation

L2

Borland
/2) 3.D.40 uses A>enu, 3>>odelo=

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

/ 4en1 Principal do istema 0 / )e6erencia ao Data4od1le 0 <nicio do procedimento *e a base de dados padro *c: <nicia o modo de transa7es &tiva a 6abela Aa+ o cursor icar no ormato de *eta >ostra o ormulrio <"ateg

proce?ure 6An 4ateg%<nicio= begin if An>enu%3(3isco%<s*c:based tBen An>enu%3(3isco%*tart6ransaction= 3>n>odelo%6ab4ategor%Open= *creen%4ursor 0L cr3e ault= *ho2>odal= en?4

& propriedade cursor no e$emplo oi atribu#da a unidade !creen que atribui ao sistema o modelo do cursor, mas poss#vel tambm atribuir um determinado cursor a um objeto espec# ico, a propriedade pode ser alterada para os diversos tipos de cursores de ault do 2indo2s com as iguras que se seguem0

Bo necessrio colocar o comando "lose para o objeto but ecBar pois a propriedade Pin? ar isto automtico% 4)digo para encerrar as tabelas do Data4od1le quando or dada sa#da no ormulrio, observe que o usurio no deve poder estar inserindo ou editando registros0 M% Bo objeto .FCate>, locali+e'o atravs da Object (nspector, d um duplo clicD sobre o evento On"lose0

proce?ure 6An4ateg%Aorm4lose(*ender0 6Object= Mar &ction0 64lose&ction)= begin if 3>n>odelo%3*4ategor%*tate in Jds!dit, ds<nsertK tBen Eeri ica se o estado do objeto begin 3ata*ource !dio ou insero >essage3lg(P4ancele a edio (ou insero) da 4ategoria antes de echareP, mostra mensagem mt<n ormation, JmbOmK, -)= de in ormao &ction 0L caBone= 4ancela a sa#da da janela !$it= *ai da procedure en?4 *creen%4ursor 0L cr?ourClass= Aa+ o cursor virar uma ampulheta 6ab4ategor%4lose= Aecha a tabela if An>enu%3(3isco%<s*c:based tBen *e a base de dados padro *c:

L$

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

An>enu%3(3isco%4ommit= en?4

!ncerra o modo de transa7es gravando as altera7es no banco de dados

& uno Tessage@lg a+ parte da 1nit @ialogs ento necessrio a+er uso desta 1nit, para tanto insira o seguinte c)digo (abai$o da diretiva de compilao)0
/2) 3.D.40 uses A>enu, 3>>odelo, 3ialogs= / 4en1 Principal do istema 0 / )e6erencia ao Data4od1le 0 / 7tiliHado para o controle da 61n,;o 4essa>eDl> 0

4)digo para locali+ar determinado registro, observe que se o usurio no deve estar inserindo ou editando registros0 M% 3 um duplo 4licD sob o objeto B1t&ocaliHar0

proce?ure 6An4ateg%(ut:ocali+ar4licD(*ender0 6Object)= Mar 3eclarao de variveis ObjPesquisa0 !tring= 4ria a varivel ObjPesquisa do tipo *tring begin if 3>n>odelo%3*4ategor%*tate in Jds!dit, ds<nsertK tBen begin >essage3lg(P4ancele a edio (ou insero) da 4ategoria antes de locali+areP, mt<n ormation, JmbOmK, -)= !$it= en?4 ObjPesquisa 0L 3>n>odelo%6ab4ategor*ign4ateg%Ealue= &tribui a ObjPesquisa o valor do campo de tabela *ign4ateg if <nputcuer@(P!ntre com a sigla da categoriaP, P*iglaP,ObjPesquisa) tBen *olicita a digitao do c)digo a ser procurado if not 3>n>odelo%6ab4ategor%Aindme@(JObjPesquisaK) then Pesquisa o campo digitado na tabela >essage3lg(P*igla da 4ategoria no encontrada%P, 4aso no seja encontrado in orma mt<n ormation, JmbOmK, -)= en?=

& uno #nput]uerC tambm a+ parte da 1nit @ialogs/ O mtodo in?PeC a+ parte do Objeto >>able%

Criando %$nes 4lobais


1ma uno ou um procedimento global e uma srie de comandos comuns a um sistema como um todo, em linguagem Pascal quase que proibido (no proibido pois a linguagem permite) a utili+ao de um mesmo conjunto de comandos repetidas ve+es, note que para o nosso ormulrio temos os mesmos comandos em chamadas di erentes0
proce?ure 6An4ateg%Aorm4lose(*ender0 6Object= Mar &ction0 64lose&ction)= begin if 3>n>odelo%3*4ategor%*tate in Jds!dit, ds<nsertK tBen begin >essage3lg(P4ancele a edio (ou insero) da 4ategoria antes de fecBareP, mt<n ormation, JmbOmK, -)= &ction 0L caBone= !$it= en?= &qui &qui &qui

L;

Borland
%%% en?=

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

proce?ure 6An4ateg%(ut:ocali+ar4licD(*ender0 6Object)= Mar ObjPesquisa0 !tring= begin if 3>n>odelo%3*4ategor%*tate in Jds!dit, ds<nsertK tBen begin >essage3lg(P4ancele a edio (ou insero) da 4ategoria antes de localizar eP, mt<n ormation, JmbOmK, -)= !$it= en?= %%% en?=

&qui &qui &qui

Podemos ento retirar o trecho e criarmos uma uno isolada que criticar o estado da edio devolvendo a mensagem, modi icando o trecho di erente, icando desta maneira (no esquea de declarar a uno na rea PF<E&6!)0
priMate function 4ritica!dicao(&ntes3e0 *tring) 0 boolean= public proce?ure inicio= en?= 4ria a uno na rea particular

Mar %%% %%% %%% function 6An4ateg%4ritica!dicao(&ntes3e0 *tring) 0 boolean= Fecebe o tipo da mensagem begin if 3>n>odelo%3*4ategor%*tate in Jds!dit, ds<nsertK tBen Eeri ica o estado begin >essage3lg(P4ancele a edio (ou incluso) da categoria antes de P R &ntes3e, mt!rror, JmbOmK, -)= >onta e envia a mensagem Fesult 0L 6rue= 3evolve que enviou a mens% en? else Fesult 0L Aalse= 3evolve que no enviou a mens% en?= proce?ure 6An4ateg%Aorm4lose(*ender0 6Object= Mar &ction0 64lose&ction)= begin if 4ritica!dicao(P echarP ) then *ubstitui pela chamada a uno begin &ction 0L caBone= !$it= en?= %%% en?= proce?ure 6An4ateg%(ut:ocali+ar4licD(*ender0 6Object)= Mar ObjPesquisa0 !tring= begin if 4ritica!dicao(Plocali+arP ) then !$it= %%%

*ubstitui pela chamada a uno

LG

Borland
en?=

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Bote que j ganhamos uma certa vantagem, ao invs de termos que alterar em dois lugares di erentes s) teremos que alterar em um ;nico lugar, mas ainda no est per eito pois devemos lembrar que um sistema normalmente no composto por apenas uma tabela, sem contar a parte do cadastro, ento se seguirmos o mesmo padro de construo de ormulrios para outras tabelas continuaremos a repetir vrios comandos, ento vamos a+er que a nossa uno sirva para a critica de edio de qualquer tabela, para isto precisamos enviar tambm o Data o1rce que pesquisar o estado e uma outra varivel do tipo trin> para di+ermos de qual tabela estamos alando para cancelar a edio, v para o objeto An>enu e crie a seguinte uno (no esquea de declarar na rea P1(:<4)0
priMate proce?ure *ho2?int (*ender0 6Object)= public function 4ritica!dicao(3*Origem0 63ata*ource= 3ocue, &ntes3e0 *tring) 0 boolean= en?= Mar %%% %%% / .1n,;o Critica !di,;o )ecebeI D Ori>emI Data o1ce para investi>ar o estado Do@1eI 8ome real da -abela AntesDeI .1n,;o a e?ec1tar do tipo .echar5 &ocaliHar... DevolveI -r1e 9 e o Data o1rce estJ em estado de edi,;o o1 inser,;o .alse 9 e o Data o1rce estJ em estado de nave>a,;o 0 function 6An>enu%4ritica!dicao(3*Origem0 63ata*ource= 3ocue, &ntes3e0 *tring) 0 boolean= begin if 3*Origem%*tate in Jds!dit, ds<nsertK tBen begin >essage3lg(P4ancele a edio (ou incluso) P R 3ocue R P antes de P R &ntes3e, mt!rror, JmbOmK, -)= Fesult 0L 6rue= en? else Fesult 0L Aalse= en?=

&qui

&ltere agora o objeto .FCate> eliminando a uno "riticaE?icao e modi icando as chamadas0
priMate / comandos partic1lares 0 public proce?ure inicio= en?= !limine

Mar An4ateg0 6An4ateg= %%% %%% Elimine as linBas ?a funo %%% %%% proce?ure 6An4ateg%Aorm4lose(*ender0 6Object= Mar &ction0 64lose&ction)= begin if An>enu%4ritica!dicao(3>n>odelo%3*4ategor, P4ategoriaP, P echarP ) then

*ubstitua aqui

LL

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

begin &ction 0L caBone= !$it= en?= %%% en?= proce?ure 6An4ateg%(ut:ocali+ar4licD(*ender0 6Object)= Mar ObjPesquisa0 !tring= begin if An>enu%4ritica!dicao(3>n>odelo%3*4ategor, P4ategoriaP, locali+arP ) then !$it= %%% en?=

*ubstitua aqui

/lterando o 'en$ para receber o !orm$l)rio


&gora inalmente vamos rodar nosso projeto mas antes precisamos chamar o ormulrio atravs do menu principal para isto0 M% &bra o objeto <Tenu0 no menu principal escolha EieA e Project Tanager, marque o objeto .F4en1 e clique sobre o boto EieA form% N% 4lique em ArDuiMo, >abela e "ategoria, coloque o seguinte c)digo0
proce?ure 6An>enu%4ategoriaM4licD(*ender0 6Object)= begin *creen%4ursor 0L cr?ourClass= Aa+ do cursor uma ampulheta An4ateg 0L 6An4ateg%4reate(&pplication)= 4ria o ormulrio em mem)ria An4ateg%<nicio= 4hama o ormulrio atravs da rea aberta An4ateg%Aree= :ibera a rea aberta *creen%4ursor 0L cr3e ault= Aa+ do cursor uma seta en?=

T% O objeto .FCate> a+ parte da 1nit f"ateg ento necessrio a+er o uso desta 1nit, para tanto insira o seguinte c)digo (abai$o da diretiva de compilao)0
/2) 3.D.40 uses *obre, / Kanela do obre o istema 0 4ateg= / Cadastro da -abela de Cate>oria 0

U% *aia do Code !ditor e salve o ormulrio e o projeto% O% Fode o projeto e teste o ormulrio de categoria, insira algumas categorias, tente provocar o erro de duplicao, tente inserir um registro com o c)digo va+io e locali+ar um registro% V% *e alguma coisa deu errada, releia o cap#tulo, ou ento con ira todo o c)digo0
unit categ= interface uses *@s1tils, Gindo2s, >essages, 4lasses, Craphics, 4ontrols, *td4trls, Aorms, 3(4trls, 3(, >asD, !$t4trls, (uttons=

LN

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

tCpe 6An4ateg L class(6Aorm) *croll(o$0 6*croll(o$= :abelM0 6:abel= !dit*ign4ateg0 63(!dit= :abelN0 6:abel= !dit3esn4ateg0 63(!dit= 3(Bavigator0 63(Bavigator= PanelM0 6Panel= PanelN0 6Panel= PanelT0 6Panel= (utAechar0 6(it(tn= (ut:ocali+ar0 6(it(tn= proce?ure Aorm4lose(*ender0 6Object= Mar &ction0 64lose&ction)= proce?ure (ut:ocali+ar4licD(*ender0 6Object)= priMate / private declarations 0 public proce?ure inicio= en?= Mar An4ateg0 6An4ateg= implementation /2) 3.D.40 uses >enu, 3>>odelo, 3ialogs= / 4en1 Principal do istema 0 / )e6erencia ao Data4od1le 0 / 7tiliHado para o controle da 61n,;o 4essa>eDl> 0

proce?ure 6An4ateg%<nicio= begin if An>enu%3(3isco%<s*c:based tBen An>enu%3(3isco%*tart6ransaction= 3>n>odelo%6ab4ategor%Open= *creen%4ursor 0L cr3e ault= *ho2>odal= en?= proce?ure 6An4ateg%Aorm4lose(*ender0 6Object= Mar &ction0 64lose&ction)= begin if An>enu%4ritica!dicao(3>n>odelo%3*4ategor, P4ategoriaP, PAecharP ) tBen begin &ction 0L caBone= !$it= en?= *creen%4ursor 0L cr?ourClass= 3>n>odelo%6ab4ategor%4lose= if An>enu%3(3isco%<s*c:based tBen An>enu%3(3isco%4ommit= en?= proce?ure 6An4ateg%(ut:ocali+ar4licD(*ender0 6Object)= Mar ObjPesquisa0 !tring=

LS

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

begin if An>enu%4ritica!dicao(3>n>odelo%3*4ategor, P4ategoriaP, P:ocali+arP ) tBen !$it= ObjPesquisa 0L 3>n>odelo%6ab4ategor*ign4ateg%Ealue= if <nputcuer@(P!ntre com a *igla da categoriaP,P*iglaP,ObjPesquisa) tBen if not 3>n>odelo%6ab4ategor%Aindme@(JObjPesquisaK) tBen >essage3lg(P*igla da 4ategoria no encontrada%P,mt<n ormation,JmbOmK,-)= en?= en?%
4omandos e suas un7es, por ordem de apario0 J6abelaK/Open ' &tiva um objeto >able equivalente a ActiMe 3* >rue% JAormK/!BoATo?al ' &tiva o objeto orm, no permitindo que nenhum outro objeto orm anterior seja ativado, at que o mesmo seja desativado% EKit ' *ai da uno ou procedimento% J6abelaK/"lose ' 3esativa um objeto >able equivalente a ActiMe 3* alse % Ear ' 3e ine uma cadeia de variveis locais% #nput]uerC ' >ostra uma cai$a de dilogo para leitura e entrada de variveis do tipo !tring % J6abelaK% in?PeC ' Auno que reali+a uma pesquisa inde$ada no objeto >able, atravs do #ndice de inido, retorna -r1e se encontrou ou .alse se im de arquivo

L9

Captulo (I
-rabal&ando com janela Pai 5 %il&a
*e voc at agora no sentiu di iculdade em criar e entender o trabalho com tabelas livres, no sentir tambm di iculdade em criar o ormulrio para receber este caso, ao contrrio, aconselho que voc releia e re aa o cap#tulo anterior% !m nosso projeto, cada registro na tabela de m`sica s) e$istir se houver um correspondente na tabela bRsico, ento a tabela bRsico .pai/ (mestre) da tabela m`sica que sua . ilha/ (detalhe)% !sta teoria acima e$plicada no conceito de modelo relacional de dados (>!F)% O Delphi incorpora este modelo mesmo para banco de dados no'relacionais, caso estivssemos utili+ando o d(ase em nosso projeto%

Criando a janela auto%atica%ente


*e assim que voc inali+ou o cap#tulo anterior voc saiu do Delphi, reative o seu projeto% &gora que voc est pronto para o trabalho, vamos criar a nossa janela0 M% 4lique no menu principal a opo ile e JeA///, em 8e# (tems, mude a pgina para .orms e clique no objeto entitulado Database .orm, parece c)pia do cap#tulo anteriorb cuidado leia as instru7es abai$o0

%% O tipo a ser criada% orm Options0 4reate a master5detail orm 1ma janela mestre e detalhes @ata!et Options0 4reate a orm using 66ables objects 1sando o objeto tabela (oto Be$t%

2%

& tabela mestre a ser usada para a janela% @riMe or Alias name0 &lias3isco >able Jame0 basico%db (oto Be$t

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

$%

4ampos a serem inseridos (oto .YY. (oto Be$t

;% Aormao dos campos Eertical (oto Be$t

G% Posio dos :abels :e t ' & esquerda (oto Be$t

L%

& tabela detalhe a ser usada para a janela% @riMe or Alias name0 &lias3isco >able Jame0 musica%db (oto Be$t

N%

S% 4ampos a serem inseridos (oto .YY. (oto Be$t

Aormao dos campos Crid (oto Be$t

9%

%0%

N%

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras 4ompleto Cera a tela como orm principal ' Bo O cue gerar0 Aorm e 3ata>odule (oto Ainish

>ontagem da chave de ligao AMailable #n?eKes 0 Primar@ @etail iel?s 0 4O3n3<*4O Taster iel?s 0 4O3n3<*4O (oto &dd [oine? iel?s 4O3n3<*4O 'Y 4O3n3<*4O (oto Be$t

-obre os 2ata0odules
4omo eu disse no cap#tulo anterior poss#vel criar um ;nico Data4od1le abrangendo o modelo relacional completo, basta para isto voc a+er o ormulrio que est chamando o Data4od1le controlar o comando Open e Close das tabelas% Bo arei desta maneira pois isto ao mesmo tempo que simpli icaria o meu trabalho di icultaria o seu entendimento, que o de uma pessoa que estivesse aprendendo o Delphi neste momento, ento para este trabalho adotarei um Data4od1le para cada cadastro%

-rabal&ando com as -abelas


4hame o objeto Data4od1le* criado, a nossa primeira providncia ser a de alterar a propriedade Jame do objeto para @T<Hasico, observe que oi criado dois objetos -able, o primeiro est apontado para a tabela (&*<4O e o segundo para a tabela >1*<4&, note que para este segundo as propriedades Taster!ource e Taster iel?s esto .presas/ pelo primeiro objeto, este o relacionamento entre ambas% Eamos antes criarmos alguns pequenos detalhes0 4rie trs objetos -able , encontrado na Component Palette pgina Data Access, e um

objeto Data o1rce , encontrado na Component Palette pgina Data Access, e altere as seguintes propriedades0 Para o objeto >able% (a e$istente)0
Propriedade 3atabaseBame 6ableBame Bame Ealor (ase3isco (se este valor no estiver dispon#vel chame o objeto <Tenu) (&*<4O 6ab(asico 3escrio Bome do (anco de 3ados ou a locali+ao do diret)rio das tabelas Bome e$terno da tabela Bome do objeto Bome do campo inde$ado

<nde$AieldBames BO>n3<*4O

Para o objeto @ata!ource% (a e$istente)0


Propriedade 3ata*et Bame Ealor 6ab(asico 3*(asico 3escrio Bome da tabela vinculada Bome do objeto

Para o objeto >able2 (a e$istente)0


Propriedade 3atabaseBame 6ableBame Ealor (ase3isco >1*<4& 3escrio Bome do (anco de 3ados ou a locali+ao do diret)rio das tabelas Bome e$terno da tabela

N2

Borland
Bame >aster*ource >asterAields

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

6ab>usica 3*(asico 4O3n3<*4O

Bome do objeto Bome do campo inde$ado Bome do 3ata*ource >estre 4ampo de ligao da tabela >estre

<nde$AieldBames 4O3n3<*4O

Para o objeto @ata!ource2 (a e$istente)0


Propriedade 3ata*et Bame Ealor 6ab>usica 3*>usica 3escrio Bome da tabela vinculada Bome do objeto

Para o objeto >able$ (4riado)0


Propriedade 3atabaseBame 6ableBame Bame FeadOnl@ Ealor (ase3isco (&*<4O 6ab(asico4on 6rue 3escrio Bome do (anco de 3ados ou a locali+ao do diret)rio das tabelas Bome e$terno da tabela Bome do objeto Bome do campo inde$ado *omente para leitura

<nde$AieldBames BO>n3<*4O

Para o objeto >able; (4riado)0


Propriedade 3atabaseBame 6ableBame Bame >aster*ource >asterAields FeadOnl@ Ealor (ase3isco 4&6!COF 6ab4ategor 3*(asico *<Cn4&6!C 6rue 3escrio Bome do (anco de 3ados ou a locali+ao do diret)rio das tabelas Bome e$terno da tabela Bome interno da tabela Bome do campo inde$ado Bome do 3ata*ource >estre 4ampo de ligao da tabela >estre *omente para leitura

<nde$AieldBames *<Cn4&6!C

Para o objeto @ata!ource$ (4riado)0


Propriedade 3ata*et Bame Ealor 6ab4ategor 3*4ategor 3escrio Bome da tabela vinculada Bome do objeto

Para o objeto >ableG (4riado)0 Posicione'o ao lado do objeto D Cate>.


Propriedade 3atabaseBame 6ableBame Bame FeadOnl@ Ealor (ase3isco 4&6!COF 6ab4ategor4on 6rue 3escrio Bome do (anco de 3ados ou a locali+ao do diret)rio das tabelas Bome e$terno da tabela Bome do objeto Bome do campo inde$ado *omente para leitura

<nde$AieldBames *<Cn4&6!C

Os objetos na hora da e$ecuo do ormulrio icaro invis#veis, mas bom coloc'los em cantos estratgicos, isto evita a con uso%

& utilidade de cada objeto -able0

N$

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

6ab(asico ' 6abela mestre principal% 6ab(asico4on ' 6abela (&*<4O para reali+ar a validao do nome do 43% 6ab>usica ' 6abela utili+ada para mostrar as m;sicas cadastradas de cada disco% 6ab4ategor ' 6abela para mostrar a descrio da categoria% 6ab4ategor4on ' 6abela para validao da sigla da categoria%
4rie o objeto @1er% , encontrado na Component Palette pgina Data Access, que servir para calcular o c)digo automtico, calculando sempre o c)digo de maior valor, e altere as seguintes propriedades0
Ealor (ase3isco cr@4ontador *elect >a$(4O3n3<*4O) rom (&*<4O 3escrio Bome do (anco de 3ados ou a locali+ao do diret)rio das tabelas Bome do Objeto 4lusula *c:, selecione o maior valor do campo 4O3n3<*4O da tabela (&*<4O

Propriedade 3atabaseBame Bame *c:

O campo 4O3n3<*4O criado, servir apenas como uma chave de ligao entre a tabela (asico e >usica, ser uma chave interna do nosso sistema e sua alimentao se ar atravs deste objeto *c: criado pegando o maior valor e adicionando M%

-rabal&ando com os Campos


Precisamos inserir alguns campos, pois iremos precisar deles no trabalho com o c)digo e para o objeto DB<rid*, utili+e o .ields !ditor para inserir os campos que altam0 Para o objeto >abHasico0

4O3n3<*4O, Propriedade @isplaCLabel0 4)digo= BO>n3<*4O, Propriedade @isplaCLabel0 Bome= 6<Pn3<*4O, Propriedade @isplaCLabel0 6ipo e E?itTasO 0 Y&&&=-=n AO6n4&P&, Propriedade @isplaCLabel0 Aoto= e *<Cn4&6!C, Propriedade @isplaCLabel0 4ategoria e E?itTasO0 Y&&=-=n
Para o objeto >abTusica0

4O3n3<*4O, Propriedade Eisible0 Aalse% B1>nA&<H&, Propriedade @isplaCLabel0 Aai$a e @isplaC=i?tB0 N= BO>n>1*<4&, Propriedade @isplaCLabel0 >;sica e @isplaC=i?tB0 U-= e BO>n&16OF, Propriedade @isplaCLabel0 &utor= e 6>Pn>1*<4&, Propriedade @isplaCLabel0 6empo e E?itTasO 0 --k0--=-=n
Para o objeto ]rC"onta?or0

3e um duplo clique sobre o objeto aparecer a janela

iel?s E?itor, clique com o boto direito e no menu que aparecer clique na opo A?? iel?s/// e adicione o campo%

&ntes de iniciarmos a programao do Data4od1le compare como icou o Data4od1le e salve'o com o nome de @THasico0

N;

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Controlando o "ata'od$le
&gora alta o c)digo, note que a maior parte uma repetio daquilo que j vimos anteriormente0 &tivando as tabelas ao ser chamado Data4od1le0 M% 4lique no objeto D4Basico e na Object (nspector na pgina !vents d um duplo clique sobre o evento On"reate e altere'o do seguinte modo0

proce?ure 63>n(asico%3>n(asico4reate(*ender0 6Object)= begin if An>enu%3(3isco%<s*c:based tBen *e a base de dados padro *c: An>enu%3(3isco%*tart6ransaction= <nicia o modo de transa7es 6ab4ategor%Open= &tiva as tabelas 6ab4ategor4on %Open= 6ab>usica%Open= 6ab(asico%Open= 6ab(asico4on %Open= en?=

4)digo para encerrar as transa7es com a (ase de 3ados e echar as tabelas quando or encerrado o Data4od1le% M% 3igite AMM e locali+e o objeto D4FCate>, na Object (nspector, na pgina !vents, d um duplo clicD sobre o evento On@estroC0

proce?ure 63>n(asico%3>n(asico3estro@(*ender0 6Object)= begin 6ab(asico%4lose= Aecha as tabelas 6ab(asico4on %4lose= 6ab>usica%4lose= 6ab4ategor%4lose= 6ab4ategor4on %4lose= if An>enu%3(3isco%<s*c:based tBen *e a base de dados padro *c: An>enu%3(3isco%4ommit= !ncerra o modo de transa7es gravando as en?4 altera7es no banco de dados

:embre'se da utili+ao do objeto <Tenu, ento preciso declarar a unidade a qual ele pertence com o comando Q!E! (abai$o da diretiva de compilao)0
/2) 3.D.40

NG

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

uses >enu= / 4en1 Principal 0

Fepare que no in#cio desta Qnit tambm e$iste uma outra declarao Qses, ap)s a sesso interface, ento por que no colocar todas essas declara7es em um lugar s)b M o) O Delphi controlar (colocando ou removendo) as 1nits ali colocadas (dependendo dos objetos utili+ados) e No) 6odos os comandos declarados antes da declarao implementation (com e$ceo de eventos de criao do tipo on"reate), sero e$ecutados e objetos e units icaro em mem)ria esperando serem chamados, ento impraticvel colocar units que s) sero utili+adas em tempo de e$ecuo%

Contadores
O objeto G1er% reali+a consultas em modo *c:, no pr)$imo cap#tulo o utili+aremos para criarmos nossas consultas mas, neste momento ele ser utili+ado para veri icar qual o maior valor arma+enado no campo c)digo% & cada novo registro devemos criar tambm um novo 4O3n3<*4O (lembra do objeto @r%Contador)% &lm disso, precisamos nos posicionar no primeiro campo do cadastro, isto ser reali+ado em dois eventos distintos0 M% >arque o objeto -abBasico, e d um duplo clique sobre o evento onJeAFecor?0

proce?ure 6An(asico%6ab(asicoBe2Fecord(3ata*et0 63ataset)= begin An(asico%!ditBO>n3<*4O%*etAocus= Posiciona o cursor no objeto en?=

Observe que oi utili+ado o objeto <Hasico, ento preciso declarar a unidade a qual ele pertence com o comando Q!E! (abai$o da diretiva de compilao)0
/2) 3.D.40 uses (asico= / Cadastro do BJsico 0 >enu= / 4en1 Principal 0

N% 3igite AMM e d um duplo clique sobre o evento HeforePost0


proce?ure 6An(asico%6ab(asico(e orePost(3ata*et0 63ataset)= begin if 3*(asico%*tate L ds<nsert tBen Eeri ica se uma incluso na base begin cr@4ontador%&ctive 0L Aalse= 3esativa a cuer@ cr@4ontador%&ctive 0L 6rue= &tiva a cuer@ AitB cr@4ontador%AieldsJ-K ?o Observe os lembretes if <sBull tBen *e o valor do contador nulo 6ab(asico4O3n3<*4O%Ealue 0L M &tribui M ao campo 4O3n3<*4O else *eno 6ab(asico4O3n3<*4O%Ealue 0L &s<nteger R M= &tribui ao campo 4O3n3<*4O a adio en?= de M ao valor do contador campo en?=

O comando AitB utili+ado como mtodo de taquigra ia, para no escrevermos vrias ve+es o mesmo nome de um determinado objeto%

NL

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Porque no colocarmos todo o c)digo no evento onJeAFecor? b Por causa do controle multi'usurio, imagine, um indiv#duo A inicia a incluso de um 43, e um indiv#duo H tambm inicia outra incluso, como o c)digo do indiv#duo A ainda no oi gravado no banco, ser dado o mesmo c)digo para o indiv#duo H, isto no acontecer se o c)digo or calculado momentos antes de ser gravado o registro, com o caso do evento HeforePost% Para con irmarmos as altera7es para a base *c:, pressione novamente a tecla AMM e na pgina !vents, d um duplo clicD sobre o evento AfterPost0

proce?ure 63>n(asico%6ab(asico& terPost(3ata*et0 63ata*et)= begin if An>enu%3(3isco%<s*c:based tBen *e a base de dados padro *c: begin An>enu%3(3isco%4ommit= Cravando as altera7es da tabela An>enu%3(3isco%*tart6ransaction= Feinicia o modo de transa7es en?4 en?4

6alidando os Campos
Para no acontecer um duplicao dos nomes dos 43_s, utili+aremos para a cr#tica a mesma idia do que aconteceu com o ormulrio de 4ategoria0 M% >arque o objeto -abBasico8O4FD( CO, e d um duplo clique sobre o evento OnEali?ate0
proce?ure 63>n(asico%6ab(asicoBomn3iscoEalidate(*ender0 6Aield)= begin if 3*(asico%*tate in Jds!dit, ds<nsertK tBen *e o modo de insero ou edio if 6ab(asico4on %Aindme@(J6ab(asicoBO>n3<*4OK) then Pesquisa o campo digitado begin An(asico%!ditBO>n3<*4O%*etAocus= &ltera a posio do cursor raise !$ception%4reate(PBome do 43 duplicadoPrM-R 4aso j e$ista mostra mensagem P4licD no boto s:ocali+as em caso de d;vidaP)= de erro e impede o cadastro en?= en?=

Para que o nosso usurio escolha somente as categorias e$istentes0 M% >arque o objeto -abBasico (<FCA-!<, e d um duplo clique sobre o evento OnEali?ate0

proce?ure 63>n(asico%6ab(asico*ign4ategEalidate(*ender0 6Aield)= begin if 3*(asico%*tate in Jds!dit, ds<nsertK tBen if not (6ab4ategor4on %Aindme@(J6ab(asico*<Cn4&6!CK)) then Observe o comando JO> begin An(asico%!dit*<Cn4&6!C%*etAocus= raise !$ception%4reate(P*igla da categoria no e$istePrM-R P4licD no boto s:ocali+a 4ategorias em caso de d;vidaP)= en?= en?=

4om o Data4od1le o nosso trabalho j est conclu#do, salve o objeto e con irme o c)digo0
unit 3>(asico=

NN

Borland
interface

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

uses *@s1tils, Gindo2s, 4lasses, Craphics, 4ontrols, Aorms, 3ialogs, 3(, 3(6ables= tCpe 63>n(asico L class(63ata>odule) 6ab>usica4odn3isco0 6AloatAield= 6ab>usicaBumnAai$a0 6AloatAield= 6ab>usicaBomn>usica0 6*tringAield= 3*(asico0 63ata*ource= 6ab(asico0 66able= 6ab>usica0 66able= 3*>usica0 63ata*ource= 6ab(asico4on 0 66able= 6ab4ategor0 66able= 6ab4ategor4on 0 66able= 3*4ategor0 63ata*ource= 6ab(asico4odn3isco0 6AloatAield= 6ab(asicoBomn3isco0 6*tringAield= 6ab(asico6ipn3isco0 6*tringAield= 6ab(asicoAotn4apa0 6(lobAield= 6ab(asico*ign4ateg0 6*tringAield= cr@4ontador0 6cuer@= cr@4ontador>&HOA4O3n3<*4O0 6AloatAield= proce?ure 3>n(asico4reate(*ender0 6Object)= proce?ure 3>n(asico3estro@(*ender0 6Object)= proce?ure 6ab(asicoBe2Fecord(3ata*et0 63ata*et)= proce?ure 6ab(asico(e orePost(3ata*et0 63ata*et)= proce?ure 6ab(asico& terPost(3ata*et0 63ata*et)= proce?ure 6ab(asicoBomn3iscoEalidate(*ender0 6Aield)= proce?ure 6ab(asico*ign4ategEalidate(*ender0 6Aield)= priMate / private declarations 0 public / p1blic declarations 0 en?= Mar 3>n(asico0 63>n(asico= implementation /2) 3.D.40 uses (asico, / Cadastro do BJsico 0 >enu= / 4en1 Principal 0 proce?ure 63>n(asico%3>n(asico4reate(*ender0 6Object)= begin if An>enu%3(3isco%<s*c:based tBen An>enu%3(3isco%*tart6ransaction= 6ab4ategor%Open= 6ab4ategor4on %Open= 6ab>usica%Open= 6ab(asico%Open= 6ab(asico4on %Open=

NS

Borland
en?=

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

proce?ure 63>n(asico%3>n(asico3estro@(*ender0 6Object)= begin 6ab(asico%4lose= 6ab(asico4on %4lose= 6ab>usica%4lose= 6ab4ategor%4lose= 6ab4ategor4on %4lose= if An>enu%3(3isco%<s*c:based tBen An>enu%3(3isco%4ommit= en?= proce?ure 63>n(asico%6ab(asicoBe2Fecord(3ata*et0 63ata*et)= begin An(asico%!ditBO>n3<*4O%*etAocus= en?= proce?ure 63>n(asico%6ab(asico(e orePost(3ata*et0 63ata*et)= begin if 3*(asico%*tate L ds<nsert tBen begin cr@4ontador%&ctive 0L Aalse= cr@4ontador%&ctive 0L 6rue= AitB cr@4ontador%AieldsJ-K ?o if <sBull tBen 6ab(asico4O3n3<*4O%Ealue 0L M else 6ab(asico4O3n3<*4O%Ealue 0L &s<nteger R M= en?= en?= proce?ure 63>n(asico%6ab(asico& terPost(3ata*et0 63ata*et)= begin if An>enu%3(3isco%<s*c:based tBen begin An>enu%3(3isco%4ommit= An>enu%3(3isco%*tart6ransaction= en?= en?= proce?ure 63>n(asico%6ab(asicoBomn3iscoEalidate(*ender0 6Aield)= begin if 3*(asico%*tate in Jds!dit, ds<nsertK tBen if 6ab(asico4on %Aindme@(J6ab(asicoBO>n3<*4OK) tBen begin An(asico%!ditBO>n3<*4O%*etAocus= raise !$ception%4reate(PBome do 43 duplicadoPrM-R P4licD no boto s:ocali+as em caso de d;vidaP)= en?= en?= proce?ure 63>n(asico%6ab(asico*ign4ategEalidate(*ender0 6Aield)= begin if 3*(asico%*tate in Jds!dit, ds<nsertK tBen if not (6ab4ategor4on %Aindme@(J6ab(asico*<Cn4&6!CK)) tBen begin An(asico%!dit*<Cn4&6!C%*etAocus=

N9

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

raise !$ception%4reate(P*igla da categoria no e$istePrM-R P4licD no boto s:ocali+a 4ategorias em caso de d;vidaP)= en?= en?= en?%

*lterando a 6anela Criada


Eamos novamente alterar a janela criada, como j oi dito, vou usar um padro de janela que achei como ideal, mas voc poder, uturamente, tambm encontrar o seu pr)prio padro, ento vamos as altera7es, antes, lembre'se, preciso entender e compreender totalmente o cap#tulo anterior e o Data4od1le criado deve ter passado pela veri icao sem erros, para veri icar um objeto a partir do menu principal escolha as op7es Project X !CntaK "BecO% 3eve ocorrer um erro na clusula Qses in ormando que a unidade fHasico no e$iste nem o objeto <Hasico no oi encontrado, ento antes de qualquer passo chame o objeto orm2 e altere a propriedade Jame para <Hasico e salve o ormulrio com o nome de fHasico, pode novamente veri icar a unidade @THasico que desta ve+ no haver problemas% &proveite o objeto <Hasico para alterar a clusula uses logo abai$o da diretiva de compilao para0
/2) 3.D.40 uses 3>(asico= / )e6erLncia ao Data4od1le 0

Organi0ando os Panels
Eamos passar para as altera7es com objeto .FBasico% Os objetos da janela se encontram distribu#dos em trs objetos Panel, o primeiro (Panel*) guarda o objeto DB8avi>ator, o segundo (Panel2) guarda os labels e os campos do arquivo (&*<4O e o terceiro ( PanelM) guarda o objeto DB<rid* que controlar o arquivo >1*<4&% &ltere a propriedade Align do objeto PanelM, para alJone% &umente a janela do modo que todos os campos do objeto mestre apaream%

4oloque os objetos labelN e (ma>e.O-FCAPA a direita dos outros campos%

3epois de tudo arrumado altere a propriedade Auto!croll no objeto crollBo? para >rue depois para alse, isto ar com que a barra de rolagem vertical desaparea% 4rie um quarto objeto Panel para colocar os bot7es, con orme as instru7es do cap#tulo anterior, para acilitar o trabalho chame o objeto .FCate>, atravs do Project 4anaa>er, clique sobre o objeto PanelM e pressione Ctrl+C chame novamente o objeto .orm2 e pressione Ctrl+:, crie um terceiro boto e altere as seguintes propriedades0
Propriedade Ealor 3escrio

S0

Borland
4aption Aont Cl@ph ?eight ?int Bame *ho2?int Gidth

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

p>;sicas >* *ans *eri , Bormal, S, Preto J3iret)rio3elphiKk<>&C!*k(166OB *k433F<E!%(>P NO 4adastro e manuteno das m;sicas (ut>usica 6rue S,

:abel do objeto 6ipo de letra a ser mostrada no objeto <magem a ser mostrada no objeto &ltura do objeto &juda on'line para o objeto espec# ico Bome do objeto >ostrar o conte;do da propriedade Bint sob a orma de uma cai$a de ajuda on'line 6amanho do objeto

Feorgani+e os trs bot7es no objeto PanelN

'odi!icando os campos e ,abels


!$clua o label (objeto &abel*) e o campo (objeto !ditCODFD( CO) que a+ re erncia ao 4O3n3<*4O% >odi ique a onte dos campos e labels con orme descrito no cap#tulo anterior% &ltere as propriedades "aption dos &abels para0 .dJome3/, .d>ipo3/, ."atedgoria3/ e .d"apa3/ respectivamente &ltere a propriedade Auto!ize dos &abels para >rue >odi ique a propriedade !tretcB do objeto (ma>e.O-FCAPA para true, isto ar com que a imagem da capa ique sempre de acordo com o tamanho do objeto%

Organi0ando os Panels
Eamos organi+ar cada objeto Panel por partes0 Objeto Panel% >odi ique o objeto DB8avi>ator con orme descrito no cap#tulo anterior% Para a propriedade Hints, escreva novamente o au$#lio para cada boto ou, chame o ormulrio .FCate> e copie as descri7es da propriedade Hints com Ctrl+C e chame novamente o objeto 3(Bavigator e digite Ctrl+: dentro da propriedade% >odi ique tambm o objeto Panel* con orme descrito no cap#tulo anterior e altere a propriedade "aption para "@fs% Objeto Panel& &ltere as propriedades HeigBt e =i?tB para NMV do objeto (ma>e.O-FCAPA% 4rie um novo objeto &abel e altere as seguintes propriedades0
Ealor 3escrio

Propriedade

S%

Borland
4aption Aont Aocus4ontrol

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

p>;sicas0 >* *ans *eri , Begrito, S, 4astanho 3(CridM

:abel do objeto 6ipo de letra a ser mostrada no objeto 4ontrole do oco

&umente o objeto Panel2 de orma a caber os outros objetos, organi+e os objetos da seguinte orma0 Bome, 6ipo, 4ategoria e >;sicas, ao lado coloque a oto% 3ei$e o espao de um campo entre 4ategoria e >;sicas% Femova o objeto !dit-(PFD( CO e em seu lugar crie o objeto DBComboBo? , encontrado na Component Palette pgina Data Controls, e altere as seguintes propriedades0
Ealor 3>n(asico%3*(asico 6<Pn3<*4O >* *ans *eri , Bormal, S, &+ul >arinho *elecione o tipo &&&= &&3= &33= e 333 4ombo6<Pn3<*4O 6rue 3escrio 3ata*ource vinculado 4ampo de tabela 6ipo de letra a ser mostrada no objeto &juda on'line para o objeto espec# ico <tens que aparecero como op7es do 4O>(O (OH, coloque um em cada linha% Bome do objeto >ostrar o conte;do da propriedade Bint sob a orma de uma cai$a de ajuda on'line

Propriedade 3ata*ource 3ataAield Aont ?int <tems Bame *ho2?int

Bo objeto &abelM recoloque a propriedade Combo-(PFD( CO% Objeto Panel'

ocus"ontrol apontando para o objeto

>arque o objeto 3(CridM e altere as propriedades Align para al8one e Hor?er!tCle para bs in>le, pressione Ctrl+D marque o objeto !crollHoK e pressione Ctrl+:, acerte o objeto de orma que este caiba abai$o do objeto &abel* (>;sicas0)% !limine o objeto PanelM, clique sobre ele e pressione Del%

'odi!icando a 3anela
&ltere as propriedades Hor?er#cons, Hor?er!tCle e Position con orme descrito no cap#tulo anterior% >ude a propriedade "aption para "a?astro% &ltere a propriedade Align do objeto Panel2 para al"lient e acerte as posi7es no ormulrio% *alve o ormulrio e salve o projeto% Bo espao dei$ado entre os labels de 4ategoria e >;sica, crie o objeto DB-e?t , encontrado na Component Palette pgina Data Controls, que servir para mostrar o nome da categoria selecionada, altere as seguintes propriedades0
Ealor 3escrio

Propriedade

S2

Borland
3ata*ource 3ataAield Aont

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

3>n(asico%3*4ategor 3!*n4&6!C >* *ans *eri , Bormal, S, 4astanho

3ata*ource vinculado 4ampo de tabela 6ipo de letra a ser mostrada no objeto

4rie agora trs objetos Additional0

peedB1tton

, encontrado na Component Palette pgina

Para o objeto !pee?Hutton%0 Posicione'o ao abai$o do label 4apa .


Propriedade Cl@ph ?eight ?int Bame *ho2?int Gidth Ealor 3escrio J3iret)rio3elphiKk<>&C!*k(166 <magem a ser mostrada no objeto OB*k&B<>&6B%(>P NO 4)pia imagem da rea de tran erncia (utPaste 6rue NO &ltura do objeto &juda on'line para o objeto espec# ico Bome do objeto >ostrar o conte;do da propriedade Bint sob a orma de uma cai$a de ajuda on'line 6amanho do objeto

Para o objeto !pee?Hutton20 Posicione'o ao abai$o do objeto !ditCODFCA-!<


Propriedade Cl@ph Ealor 3escrio J3iret)rio3elphiKk<>&C!*k(166 <magem a ser mostrada no objeto OB*k:&B6!FB&%(>P (veja dica) NO Pesquisa determinada categoria (ut:oc4ateg 6rue NO &ltura do objeto &juda on'line para o objeto espec# ico Bome do objeto >ostrar o conte;do da propriedade Bint sob a orma de uma cai$a de ajuda on'line 6amanho do objeto

?eight ?int Bame *ho2?int Gidth

Para o objeto !pee?Hutton$0 Posicione'o ao lado do objeto B1t&ocCate>


Propriedade Cl@ph ?eight ?int Bame *ho2?int Gidth Ealor 3escrio J3iret)rio3elphiKk<>&C!*k(166 <magem a ser mostrada no objeto OB*k4F3A<:!N%(>P NO <nsere registro na tabela de categoria (ut<ns4ateg 6rue NO &ltura do objeto &juda on'line para o objeto espec# ico Bome do objeto >ostrar o conte;do da propriedade Bint sob a orma de uma cai$a de ajuda on'line 6amanho do objeto

& uno de cada boto est e$plicada na propriedade hint, para os objetos B1t&ocCate> e B1t(nsCate> iremos nos aproveitar dos ormulrios j constru#dos anteriormente% Provavelmente voc no ir encontrar o arquivo :&B6!FB&%(>P solicitado para o segundo boto, teremos de cri'lo0

S$

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

M% *alve o ormulrio e eche o projeto, locali+e (no diret)rio demos do Delphi) e abra o projeto J3iret)rio3elphiKk3!>O*k3(k>&*6&PPk>&*6&PP%3PF N% &travs do Project 4ana>er abra o ormulrio earchDl>% T% :ocali+e o objeto earchB1tton e clique na propriedade IlCpB% e nome proposto U% !scolha o boto !aMe/// e salve'o no diret)rio (J3iret)rio3elphiKk<>&C!*k(166OB*k e :&B6!FB&%(>P)%

O% Fetorne ao nosso projeto descartando quaisquer aviso para salvar o >&*6&PP%3PF%

-rabal&ando com 4rid7s


Aalemos agora de um objeto especial o Crid, especial por ser um dos objetos de todo o conjunto do Delphi o mais prtico e cil de usar, quem no se lembra no velho Clipper da uno ?bE?it1 2, quem no utili+ou seus recursos para mostrar registros ou reali+ar consultas com iltros especiais% O objeto <rid o .neto/ deste objeto com alguns recursos mais simpli icados, no total so trs os objetos <rids0 M% trin><rid ' 4omponente da unidade <rid sendo utili+ado para, de orma simpli icada, associar trin>s a uma grade contendo linhas e colunas, encontrado na Component Palette pgina Additional%

N% Dra#<rid ' 4omponente da unidade <rid que permite mostrar uma estrutura de dados e$istentes no ormato de linhas e colunas, encontrado na Component Palette pgina Additional% T% DB<rid ' 4omponente da unidade DB<rids que mostrar dados de um 3ata*et para um componente no ormato de linhas e colunas, encontrado na Component Palette pgina Data Controls% Por enquanto vou me deter a alar do objeto DB<rid, mais tarde voltaremos a alar dos outros, este objeto DB<rid vinculado, ao 3ata*ource, apresenta as seguintes propriedades (mais importantes, algumas ainda no mencionadas)0

3ata*ource0 Bome do objeto 3ata*ource vinculado= Aont0 6ipo da letra a ser mostrada no conte;do do objeto= Options0 srie de op7es de controle (se a opo -r1e or selecionada)0

?gE?iting0 permite a edio e adio dos dados= ?gAlAaCs!BoAE?itor0 O grid entra automaticamente em modo de edio, no havendo a necessidade de pressionar Enter ou 2 (depende que a propriedade ?gE?iting * >rue)= ?g>itles0 Eiabili+a o uso do t#tulo de cada campo= ?g#n?icator0 ?abilita o ponteiro de indicao da coluna= ?g"olumnFesize 0 & coluna pode ser redimensionada= ?g"olLines0 ?abilita a separao das colunas= ?gFoALines0 ?abilita a separao das linhas= ?g>abs0 1se o pressionamento das teclas -ab e hi6+-ab para se mover dentro das colunas= ?gFoA!elect0 *eleciona, com uma tarja a+ul, todas as colunas de uma linha=

S;

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

?gAlAaAs!BoA!election0 &s clulas do >rid so mostradas constantemente selecionadas, mesmo que este no detenha o oco% ?g"onfirm@elete 0 1se as teclas Ctrl+Del , para e$cluir dados= ?g"ancelOnEKit0 *e qualquer incluso estiver pendente e or dado sa#da no grid sem a validao dos dados, a incluso cancelada% Previne a incluso de registros invlidos ou em branco% >itle ont0 6ipo da letra a ser mostrada nos t#tulos do objeto%

Propriedade Aont ?int Options

Os campos no objeto DB<rid so adicionados e controlados atravs do .ields!ditor

O nosso objeto >rid mostrar apenas as m;sicas de cada 43, para tanto altere as seguintes propriedades0
Ealor >* *ans *eri , Begrito, S, 4astanho >;sicas deste 43 Jdg6itles, dg<ndicator, dg4ol:ines, dgFo2:ines, dgFo2*elect, dg&l2a@s*ho2*electionK 6rue 3escrio 6ipo de letra a ser mostrada no objeto &juda on'line para o objeto espec# ico Op7es de controle

*ho2?int

>ostrar o conte;do da propriedade Bint sob a orma de uma cai$a de ajuda on'line

Bo lhe aconselho usar este objeto para reali+ar altera7es em bases de dados (apesar de isto ser poss#vel) mais prtico utili+ar uma janela separada para reali+ar este trabalho, as idias icaro mais bem ordenadas, se cada ormulrio controlar uma ;nica entrada em tabela de cada ve+% *e voc est meio perdido com isto tudo, no se desespere, simplesmente compare os ormulrios para ver se no alta nada0

SG

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

%inalmente8 a programao
&gora alta apenas o c)digo, pelo tamanho do ormulrio e pelo n;mero de controles j d para pensarmos que precisamos programar linhas e linhas de c)digo, engano e o maior trabalho j oi eito, observe0 4riando o Data4od1le ao ser chamado ormulrio0 M% 4lique no boto !ditor%
public proce?ure inicio= en?4 Mar An(asico0 6An(asico= implementation /2) 3.D.40 proce?ure 6An(asico%<nicio= begin 3>n(asico 0L 63>n(asico%4reate(&pplication)= *creen%4ursor 0L cr3e ault= *ho2>odal= en?4 4rie o in#cio do procedimento 4ria o Data4od1le Aa+ o cursor icar no ormato de *eta >ostra o ormulrio <Hasico

(-o>>le .orm$7nit) da peedBar, at voc alternar para o Code

4riando a chamada para um procedimento p;blico%

4)digo para eliminar o Data4od1le, basicamente o mesmo trabalho reali+ado com o objeto <Hasico0 M% Bo objeto .FBasico, d um duplo clicD sobre o evento On"lose0

SL

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

proce?ure 6An(asico%Aorm4lose(*ender0 6Object= var &ction0 64lose&ction)= begin if An>enu%4ritica!dicao(3>n(asico%3*(asico, P43P, PAecharP) tBen :embra da Auno begin &ction 0L caBone= 4ancela a sa#da da janela !$it= *ai da procedure en?4 *creen%4ursor 0L cr?ourClass= Aa+ o cursor virar uma ampulheta 3>n(asico%Aree= !limina o Data4od1le en?4

:embre'se que a uno "riticaE?icao a+ parte da 1nit fTenu, ento preciso declarar esta unidade com o comando Q!E! (abai$o da diretiva de compilao)0
/2) 3.D.40 uses 3>(asico, / )e6erLncia ao Data4od1le 0 >enu= / 4en1 Principal do istema 0

4olocado para o uso da Auno 4ritica!dicao

Fepare que no in#cio desta Qnit e$iste uma declarao Qses, ap)s o comando interface% !nto por que no colocar todas essas declara7es em um lugar s)b M%O Delphi controlar (colocando ou removendo) estas 1nits ali colocadas (dependendo dos objetos utili+ados) e N%6odos os comandos declarados antes da declarao implementation (com e$ceo de eventos de criao% !$%0 on"reate), sero e$ecutados e objetos e units icaro em mem)ria esperando serem chamados, ento impraticvel colocar units que s) sero utili+adas em tempo de e$ecuo%

Cons$lta
4)digo para pesquisar os registros das tabelas, basicamente utili+aremos o mesmo trabalho reali+ado com o objeto <"ateg0 M% 3 um duplo clicD sob o objeto B1t&ocaliHar0

proce?ure 6An(asico%(ut:ocali+ar4licD(*ender0 6Object)= Mar ObjPesquisa0 *tring= begin if An>enu%4ritica!dicao(3>n(asico%3*(asico, P43P, P:ocali+arP) tBen !$it= ObjPesquisa 0L 6ab(asicoBO>n3<*4O%Ealue=

:embra da Auno

if <nputcuer@(PPesquisaP,P!ntre com o nome do 43 (ou parte)%P, ObjPesquisa) tBen 6ab(asico%AindBearest(JObjPesquisaK)= en?=

:embre'se que a uno #nput]uerC a+ parte da 1nit @ialogs, ento preciso declarar esta unidade com o comando Q!E! (abai$o da diretiva de compilao)0
/2) 3.D.40 uses 3>(asico, / )e6erLncia ao Data4od1le 0 >enu, / 4en1 Principal do istema 0 3ialogs= / <erente de 4ensa>ens 0

4olocado para o uso da Auno <nputcuer@

SN

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

3esta ve+ oi utili+ado o comando in?Jearest, este comando consulta por parte inicial do c)digo encontrado um c)digo igual ou maior que o pesquisado, no preciso ao usurio lembrar o nome completo como no comando in?PeC% Ateno0 o comando in?Jearest no retornar uma varivel boolean (6rue ou Aalse como resultado da pesquisa) ento no se a+ a necessidade de cr#ticas sobre o mesmo% *alvo e$ceo se o campo or tipo numrico ou tipo data ento utili+e este comando em conjunto com o comando >rC% Eeja no pr)$imo cap#tulo como% O c)digo para o boto que locali+ar um registro na tabela de categoria ser tratado no pr)$imo cap#tulo% Para inserir novos registros na tabela de categoria utili+aremos o ormulrio constru#do anteriormente, a ;nica di erena que desta ve+ devemos estar em modo de edio0 M% 3 um duplo clicD sobre o objeto B1t(nsCate>0

proce?ure 6An(asico%(ut<ns4ateg4licD(*ender0 6Object)= begin if not (3*(asico%*tate in Jds!dit, ds<nsertK) tBen begin >essage3lg(PEoc no est no modo de edioeP, mt<n ormation, JmbOmK, -)= e$it= en? *creen%4ursor 0L cr?ourClass= if An>enu%3(3isco%<s*c:based tBen An>enu%3(3isco%4ommit= AitB 6An4ateg%4reate(*el ) ?o begin <nicio= Aree= en?= if An>enu%3(3isco%<s*c:based tBen An>enu%3(3isco%*tart6ransaction= *creen%4ursor 0L cr3e ault= en?=

*e no estiver em estado de ediao ou incluso !nvia mensagem de erro

Aa+ o cursor virar uma ampulheta Cravamos as altera7es no banco de dados 4ria o ormulrio na rea de mem)ria 4hama o ormulrio !limina o ormulrio da mem)ria *e a base de dados padro *c: <nicia o modo de transa7es Aa+ o cursor icar no ormato de *eta

/2) 3.D.40 uses 3>(asico, / )e6erLncia ao Data4od1le 0 >enu, / 4en1 Principal do istema 0 3ialogs, / <erente de 4ensa>ens 0 4ateg= / Cadastro de Cate>orias 0

Bo esquea de declarar a Qnit deste ormulrio0

-rabal&ando com a )rea de -rans!er9ncia


Ba maioria dos aplicativos para Gindo2s comun encontrarmos os comandos Fecortar, 4opiar e 4olar, o amoso "ut)"opC)Paste, isto reali+ado utili+ando a rea de trans erncia do Gindo2s0 *o trs os comandos que a+em o trabalho na rea de trans erncia0

Objeto%"ut>o"lipboar?, envia o conte;do do objeto para rea de trans erncia= e

SS

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Objeto%"opC>o"lipboar?, a+ uma c)pia do conte;do do objeto na rea de trans erncia% Objeto%Paste rom"lipboar?, tra+ para o conte;do do objeto da rea de trans erncia=
Pr)$imo passo, o c)digo para o boto que permitir tra+er uma imagem arma+enada na rea de trans erncia do Gindo2s (*alva com o utilitrio Paint(rush, por e$emplo) para o campo da Aoto0 M% 3 um duplo clicD sobre o objeto B1tPaste0

proce?ure 6An(asico%(utPaste4licD(*ender0 6Object)= begin <mageAO6n4&P&%PasteArom4lipboard= en?4

:tili0ando o objeto Open"ialog


1m aluno uma ve+ me sugeriu uma outra maneira de colocar a igura, ao invs de se utili+ar da rea de trans erncia, poder#amos chamar o arquivo (%(>P) diretamente, isto reali+ado com o uso de um objeto OpenDialo> , encontrado na Component Palette pgina Dialo>, coloque'o no ormulrio e altere as seguintes propriedades0
Propriedade Ailter Bame Ealor &rquivos bitmapdo%(>P &bre(mp 3escrio *eleciona os tipos de arquivo que sero abertos Bome do Objeto

Pr)$imo passo, o c)digo para o boto que permitir tra+er uma imagem em arquivo %(>P para o campo da Aoto0 M% 3 um duplo clicD sobre o objeto B1tPaste0

proce?ure 6An(asico%(utPaste4licD(*ender0 6Object)= begin #f &bre(mp%!$ecute tBen <mageAotn&mostra%Picture%:oadAromAile( &bre(mp%AileBame )= en?4

Eeri ica se oi clicado em Om 4arrega o arquivo

apWn?ice

!scolha a maneira que mais lhe agrada% Outro objeto interessante o objeto !aMe@ialog, veja outras utili+a7es sobre eles no

Criando o !orm$l)rio para o cadastro das msicas


4onstruiremos o ormulrio para cadastrar as m;sicas, crie o ormulrio com base no ormulrio criado para a tabela de categoria e aa as seguintes altera7es0

&ltere a propriedade name do ormulrio para <TQ!#"A% 4hame o Data4od1le @THasico e crie mais um objeto --able, para
das m;sicas duplicadas e altere as seguintes propriedades0
Propriedade 3atabaseBame Ealor (ase3isco 3escrio

a+ermos as cr#ticas

Bome do (anco de 3ados ou a locali+ao do diret)rio das tabelas

S9

Borland
6ableBame Bame FeadOnl@

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

>1*<4& 6ab>usica4on 6rue

Bome e$terno da tabela Bome do objeto Bome do campo inde$ado *omente leitura

<nde$AieldBames 4odn3isco=BumnAai$a

Bo esquea de alterar o programa do Data4od1le para abrir e echar a nova tabela e coloque a cr#tica para a tabela de m;sica, evento OnEali?ate do objeto >abTusicaJum< aiKa0
proce?ure 63>n(asico%6ab>usicaBumnAai$aEalidate(*ender0 6Aield)= begin if 3*>usica%*tate in Jds!dit, ds<nsertK tBen begin 6ab>usica4on %!ditme@= 6ab>usica4on %Aield(@Bame(P4O3n3<*4OP)%&sAloat 0L 6ab>usica4odn3isco%Ealue= 6ab>usica4on %Aield(@Bame(PB1>nA&<H&P)%&sAloat 0L 6ab>usicaBumnAai$a%Ealue= if 6ab>usica4on %Cotome@ tBen begin An>usica%!ditBumnAai$a%*etAocus= raise !$ception%4reate(PAai$a do 43 duplicadaP)= en?= en?= en?=

Fepare no uso do comando IotoPeC ao invs do comando in?PeC0 ele oi utili+ado por se tratar de uma chave composta%

4oloque tambm a cr#tica para a tabela de m;sica, evento OnJeAFecor? do objeto

>abTusica0
proce?ure 63>n(asico%6ab>usicaBe2Fecord(3ata*et0 63ata*et)= begin An>usica%!ditB1>nA&<H&%*etAocus= en?=

1ma ;ltima cr#tica ser para con irmarmos as altera7es para a base *c:, pressione novamente a tecla AMM e na pgina !vents, d um duplo clicD sobre o evento AfterPost0
proce?ure 63>n(asico%6ab>usica& terPost(3ata*et0 63ata*et)= begin if An>enu%3(3isco%<s*c:based tBen *e a base de dados padro *c: begin An>enu%3(3isco%4ommit= Cravando as altera7es da tabela An>enu%3(3isco%*tart6ransaction= Feinicia o modo de transa7es en?4 en?4 3ei$e apenas o boto Aechar= Femova o :abel e o 3(!dit do campo 4O3n3<*4O= e >ude a propriedade do Border t%le para bs@ialog%

Observe e compare com o desenho do ormulrio abai$o0

90

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

&ltere inicialmente, a clusula uses para o @THasico, em seguida a propriedade de todos os campos e do 3(Bavigator para @T<Hasico/@!Tusica% & programao do ormulrio basicamente a mesma para as tabelas, ento ao invs de perder tempo e espao alando tudo de novo, observe o c)digo completo e note que a ;nica mudana est em prevenir para que o ormulrio no seja echado em tempo de edio ou insero e com o estado do cursor0

unit >usica= interface uses *@s1tils, Gindo2s, >essages, 4lasses, Craphics, 4ontrols, *td4trls, Aorms, 3(4trls, 3(, (uttons, >asD, !$t4trls= tCpe 6An>usica L class(6Aorm) *croll(o$0 6*croll(o$= :abelN0 6:abel= !ditBumnAai$a0 63(!dit= :abelT0 6:abel= !ditBomn>usica0 63(!dit= :abelU0 6:abel= !ditBomn&utor0 63(!dit= :abelO0 6:abel= !dit6mpn>usica0 63(!dit= 3(Bavigator0 63(Bavigator= PanelM0 6Panel= PanelN0 6Panel= PanelT0 6Panel= (utAechar0 6(it(tn= proce?ure Aorm*ho2(*ender0 6Object)= proce?ure Aorm4lose(*ender0 6Object= Mar &ction0 64lose&ction)= priMate / private declarations 0 public / p1blic declarations 0 en?= Mar An>usica0 6An>usica=

9%

Borland
implementation /2) 3.D.40 uses 3>(asico=

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

/ )e6erLncia ao Data4od1le 0 !vento On!BoA do objeto <Tusica

proce?ure 6An>usica%Aorm*ho2(*ender0 6Object)= begin *creen%4ursor 0L cr3e ault= en?=

proce?ure 6An>usica%Aorm4lose(*ender0 6Object= Mar &ction0 64lose&ction)= begin !vento On"lose do objeto <Tusica if An>enu%4ritica!dicao(3>n(asico%3*>usica, P>;sicaP, P echarP ) tBen begin &ction 0L caBone= e$it= en?= *creen%4ursor 0L cr?ourClass= en?= en?%

Bo preciso se preocupar com a gravao para o campo 4O3n3<*4O, isto ser eito automaticamente pelo Delphi, mantendo a integridade re erencial% *alve o ormulrio com o nome 641sica%

Eamos agora alterar o boto do ormulrio principal, objeto b1t41sica, que ser usado para chamar este segundo%
proce?ure 6An(asico%(ut>usica4licD(*ender0 6Object)= begin if 3>n(asico%3*(asico%*tate in Jds!dit, ds<nsertK tBen begin >essage3lg(P*alve a edio do 43 antes de !ditar as m;sicaseP,mt<n ormation, JmbODK, -)= !$it= en?= *creen%4ursor 0L cr?ourClass= if An>enu%3(3isco%<s*c:based tBen An>enu%3(3isco%4ommit= AitB 6An>usica%4reate(*el ) ?o 4riamos o ormulrio em mem)ria begin *ho2>odal 4hamaremos aqui o novo ormulrio Aree= !liminamos o Aormulrio en?= if An>enu%3(3isco%<s*c:based tBen An>enu%3(3isco%*tart6ransaction= *creen%4ursor 0L cr3e ault= en?=

/2) 3.D.40 uses 3>(asico, / )e6erLncia ao Data4od1le 0

Bo esquea de adicionar a propriedade uses

92

Borland
>enu, 3ialogs, 4ateg, >usica=

3elphi e 3elphi 4lient5*erver / 4en1 Principal do istema 0 / <erente de 4ensa>ens 0 / Cadastro de Cate>orias 0 / Cadastro de 4Osicas 0

Desvendando o Caminho das Pedras

Bo esquea tambm de retirar os objetos .F41sica e .FBasico da criao automtica, opo do menu principal clique em Options X Project///, qualquer d;vida consulte o cap#tulo anterior%

Criando novos Procedimentos 4lobais


Eamos criar mais alguns procedimentos globais, para a nosso primeiro procedimento note as chamadas aos ormulrios e$ternos .FCate> e .F41sica0
*creen%4ursor 0L cr?ourClass= if An>enu%3(3isco%<s*c:based tBen An>enu%3(3isco%4ommit= %%% %%% if An>enu%3(3isco%<s*c:based tBen An>enu%3(3isco%*tart6ransaction= *creen%4ursor 0L cr3e ault=

Os comandos listados se repetem tanto para o procedimento Hut#ns"ateg"licO e para o procedimento HutTusica"licO, chame o ormulrio <Tenu e crie o seguinte procedimento0
public proce?ure Prepara(6ipo0 boolean)= function 4ritica!dicao(3*Origem0 63ata*ource= 3ocue, &ntes3e0 *tring) 0 boolean= en?= Mar %%% %%% proce?ure 6An>enu%Prepara(6ipo0 boolean)= begin if tipo tBen begin *creen%4ursor 0L cr?ourClass= if 3(3isco%<s*c:based tBen 3(3isco%4ommit= en? else begin if 3(3isco%<s*c:based tBen 3(3isco%*tart6ransaction= *creen%4ursor 0L cr3e ault= en?= en?= &qui

*e o valor da varivel tipo recebida or verdadeiro Aa+ a primeira parte

*eno Aa+ a segunda parte

>odi ique agora ambos os procedimentos do objeto <Hasico0


proce?ure 6An(asico%(ut<ns4ateg4licD(*ender0 6Object)= begin %%% %%% An>enu%Prepara(6rue)= &qui AitB 6An4ateg%4reate(*el ) ?o

9$

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

begin <nicio= Aree= en?= An>enu%Prepara(Aalse)= en?=

&qui

proce?ure 6An(asico%(ut>usica4licD(*ender0 6Object)= begin %%% %%% An>enu%Prepara(6rue)= &qui AitB 6An>usica%4reate(*el ) ?o begin <nicio= Aree= en?= 6ab>usica%Fe resh= An>enu%Prepara(Aalse)= &qui en?=

1m segundo procedimento global pode ser criado veri icando os eventos AfterPost dos 3ata>odules DmFCate> e D4FBasico (este segundo em dois lugares)= observamos o mesmo procedimento0
if An>enu%3(3isco%<s*c:based tBen begin An>enu%3(3isco%4ommit= An>enu%3(3isco%*tart6ransaction= en?4

4riamos ento o seguinte procedimento no ormulrio .F4en10


public proce?ure Crava(anco proce?ure Prepara(6ipo0 boolean)= function 4ritica!dicao(3*Origem0 63ata*ource= 3ocue, &ntes3e0 *tring) 0 boolean= en?= Mar %%% %%% proce?ure 6An>enu%Crava(anco= begin if 3(3isco%<s*c:based tBen begin 3(3isco%4ommit= 3(3isco%*tart6ransaction= en?4 en?4 &qui

!mbutiremos os comandos puros aqui

&gora substitua os eventos nos dos 3ata>odules DmFCate> e D4FBasico= pela seguinte chamada ao procedimento
begin An>enu%Crava(anco= en?=

9;

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Fepare tambm que oi retirado das un7es que icaram no ormulrio An>enu as re erncias da base de dados ao ormulrio (eram <Tenu/@H@isco e icou simplesmente @H@isco)%

*lterando o 0enu para receber o for%ul8rio


&gora inalmente vamos rodar nosso ormulrio, para tanto precisamos cham'lo atravs do menu principal para isto0 M% 4hame novamente o ormulrio <Tenu0 no menu principal escolha EieA e Project Tanager, marque o objeto e clique sobre o boto EieA form% N% 4lique em ArDuiMo, "a?astro, coloque o seguinte c)digo0
proce?ure 6An>enu%4adastroM4licD(*ender0 6Object)= begin *creen%4ursor 0L cr?ourClass= 6rans orma o cursor em uma ampulheta An(asico 0L 6An (asico%4reate(&pplication)= 4ria o ormulrio em mem)ria An (asico%<nicio= 4hama o ormulrio atravs da rea aberta An (asico%Aree= :ibera a rea aberta *creen%4ursor 0L cr3e ault= 6rans orma o cursor em uma seta en?=

T% O objeto .FBasico a+ parte da 1nit fHasico ento necessrio a+er o uso desta 1nit, para tanto insira o seguinte c)digo (abai$o da diretiva de compilao)0
/2) 3.D.40 uses *obre, / Kanela do obre o istema ... 0 4ateg, / 7tiliHada para o cadastro de Cate>orias 0 (asico= / 7tiliHada para o cadastro de CDs 0

Bo esquea de retirar o ormulrio .FBasico da lista de ormulrios criados automaticamente% U% *aia do Code !ditor e salve o ormulrio e o projeto% O% Podemos agora salvar e testar o ormulrio completo, para incluir algumas imagens utili+e o PaintBr1sh do Gindo2s, ou outro utilitrio qualquer% V% *e alguma coisa deu errada, releia o cap#tulo, ou ento con ira todo o c)digo0
unit (asico= interface uses *@s1tils, Gindo2s, >essages, 4lasses, Craphics, 4ontrols, *td4trls, Aorms, 3(4trls, 3(, 3(Crids, (uttons, Crids, >asD, !$t4trls= tCpe 6An(asico L class(6Aorm) *croll(o$0 6*croll(o$= :abelN0 6:abel= !ditBomn3isco0 63(!dit=

9G

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

:abelT0 6:abel= :abelU0 6:abel= <mageAotn4apa0 63(<mage= :abelO0 6:abel= !dit*ign4ateg0 63(!dit= 3(Bavigator0 63(Bavigator= PanelM0 6Panel= PanelN0 6Panel= PanelU0 6Panel= (utAechar0 6(it(tn= (ut:ocali+ar0 6(it(tn= (ut>usica0 6(it(tn= :abelM0 6:abel= 4ombo6<Pn3<*4O0 63(4ombo(o$= 3(CridM0 63(Crid= 3(6e$tM0 63(6e$t= (ut:oc4ateg0 6*peed(utton= (ut<ns4ateg0 6*peed(utton= (utPaste0 6*peed(utton= / &bre(mp0 6Open3ialog= e vocL 1tiliHo1 o objeto OpenDialo> 0 proce?ure Aorm4lose(*ender0 6Object= Mar &ction0 64lose&ction)= proce?ure (ut:ocali+ar4licD(*ender0 6Object)= proce?ure (ut<ns4ateg4licD(*ender0 6Object)= proce?ure (utPaste4licD(*ender0 6Object)= proce?ure (ut>usica4licD(*ender0 6Object)= priMate / private declarations 0 public proce?ure inicio= en?= Mar An(asico0 6An(asico= implementation /2) 3.D.40 uses 3>(asico, >enu, 3ialogs, 4ateg, >usica= / )e6erLncia ao Data4od1le 0 / 4en1 Principal do istema 0 / <erente de 4ensa>ens 0 / Cadastro de Cate>orias 0 / Cadastro de 4Osicas 0

proce?ure 6An(asico%<nicio= begin 3>n(asico 0L 63>n(asico%4reate(&pplication)= *creen%4ursor 0L cr3e ault= *ho2>odal= en?= proce?ure 6An(asico%Aorm4lose(*ender0 6Object= Mar &ction0 64lose&ction)= begin if An>enu%4ritica!dicao(3>n(asico%3*(asico, P43P, PAecharP) tBen begin &ction 0L caBone= !$it=

9L

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

en?= *creen%4ursor 0L cr?ourClass= 3>n(asico%Aree= en?= proce?ure 6An(asico%(ut:ocali+ar4licD(*ender0 6Object)= Mar ObjPesquisa0 !tring= begin if An>enu%4ritica!dicao(3>n(asico%3*(asico, P43P, P:ocali+arP) tBen !$it= ObjPesquisa 0L 3>n(asico%6ab(asicoBomn3isco%Ealue= if <nputcuer@(PPesquisaP,P!ntre com o nome do 43 (ou parte)%P, ObjPesquisa) tBen 3>n(asico%6ab(asico%AindBearest(JObjPesquisaK)= en?= proce?ure 6An(asico%(ut<ns4ateg4licD(*ender0 6Object)= begin if not (3>n(asico%3*(asico%*tate in Jds!dit, ds<nsertK) tBen begin >essage3lg(PEoc no est no modo de edioeP,mt<n ormation,JmbOmK,-)= e$it= en?= An>enu%Prepara(6rue)= AitB 6An4ateg%4reate(*el ) ?o begin <nicio= Aree= en?= An>enu%Prepara(Aalse)= en?= proce?ure 6An(asico%(utPaste4licD(*ender0 6Object)= begin <mageAO6n4&P&%PasteArom4lipboard= en?= / O1 se vocL 1tiliHo1 o objeto OpenDialo> proce?ure 6An(asico%(utPaste4licD(*ender0 6Object)= begin #f &bre(mp%!$ecute tBen <mageAotn&mostra%Picture%:oadAromAile( &bre(mp%AileBame )= en?4 0 proce?ure 6An(asico%(ut>usica4licD(*ender0 6Object)= begin if 3>n(asico%3*(asico%*tate in Jds!dit, ds<nsertK tBen begin >essage3lg(P*alve a edio do 43 antes de !ditar as m;sicaseP,mt<n ormation, JmbODK, -)= !$it= en?=

9N

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

An>enu%Prepara(6rue)= AitB 6An>usica%4reate(*el ) ?o begin <nicio= Aree= en?= An>enu%Prepara(Aalse)= en?= en?%
4omandos e suas un7es, por ordem de apario0 AitB Jregistro ou objetoK ?o JcomandosK ' 4ria um mtodo de re erncia para o registro ou objeto% JtabelaK% in?Jearest ' reali+a uma pesquisa apro$imada na tabela%

9S

Captulo (II
-rabal&ando com cons$ltas
6odo um projeto pode ir por ralo abai$o caso o usurio no consiga uma maneira e ica+ e e iciente para locali+ar seus registros perdidos, as consultas as tabelas devem au$iliar o usurio na tare a de lembr'lo qual o c)digo correto para determinada categoria, e as consultas aos 43_s devem ser rpidas e prticas, seno, icaria muito mais prtico e cil pesquisar manualmente cada 43 tentando encontrar determinada m;sica do que acessar o computador para reali+ar tal tare a%

Criando consultas para tabelas


O nosso boto de Localizar (objeto butLocalizar) no ormulrio <"ateg, no nem um pouco amigvel com o usurio, ele solicita apenas um c)digo para locali+ar uma determinada categoria, mas se o nosso usurio no lembrar deste c)digob >aneira idntica acontece com o nosso boto de pesquisa no objeto <Hasico%

-rabal&ando com 4rid7s


O objeto @HIri? mostrado no cap#tulo anterior servir per eitamente para criarmos uma janela que permita ao usurio uma locali+ao mais rpida e prtica de um determinado registro, vamos ao trabalho0 <nicialmente 4lique no boto (Be2 Aorm) na peed Bar, ou no menu principal a 4lique no menu principal a opo ile e JeA///, em 8e# (tems, na pgina 8e# e clique no objeto entitulado .orm e altere as seguintes propriedades0
Ealor bs3ialog Pesquisa 4ategoria An*el4ate po*creen4enter 3escrio !stilo da borda do ormulrio :abel do objeto (6arja a+ul do ormulrio) Bome do objeto Posio da janela (centrali+ado)

Propriedade (order*t@le 4aption Bame Position

4rie para esta nova janela uma relao com o Data4od1le 3>n>odelo colocando'o na clusula Qses, abai$o da diretiva de compilao0

/2) 3.D.40 uses 3>>odelo= / )e6erLncia ao Data4od1le 0

4rie para esta nova janela os seguintes objetos0

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

@HJaMigator (encontrado na pgina Data Controls), altere as seguintes propriedades0


Propriedade 3ata*ource ?ints :e t *ho2?int Eisible(uttons 6op Gidth Ealor 3>n>odelo%3*4ategor 1m em cada linha0 Primeiro, &nterior, Pr)$imo e Wltimo S 6rue 3escrio 3ata*ource vinculado (caso esta opo no esteja dispon#vel abra o Data4od1le @T<To?elo) 6)picos para ajuda on'line do objeto espec# ico Posio a esquerda >ostrar o conte;do da propriedade Bint sob a orma de uma cai$a de ajuda on'line 3ist9ncia do topo :argura do objeto

JnbAirst, nbPrior, nbBe$t, nb:astK (ot7es vis#veis S MMT

@HIri? (encontrado na pgina Data Controls), altere as seguintes propriedades0


Propriedade 3ata*ource Aont :e t ?eight Options Ealor 3>n>odelo%3*4ategor >* *ans *eri , normal, S, a+ul marinho S MUO Jdg6itles, dg<ndicator, dg4ol:ines, dgFo2:ines, dgFo2*elect, dg&l2a2s*ho2*electionK >* *ans *eri , negrito, S, 4astanho US T`O 3escrio 3ata*ource vinculado 6ipo da letra a ser mostrada no conte;do do ?bIri? Posio g esquerda &ltura do objeto Op7es de e$ecuo para o objeto

6itleAont 6op Gidth

6ipo de letra a ser mostrada no t#tulo do ?bIri? 3ist9ncia do topo :argura do objeto

TasOE?it (encontrado na pgina Additional), altere as seguintes propriedades0


Propriedade Aont :e t Bame 6e$t Gidth 6op !dit>asD ,` M,, Yaa=-=n Ealor >* *ans *eri , normal, S, a+ul marinho OV !dt6recho 3escrio 6ipo de letra a ser mostrada no objeto &linhamento a esquerda Bome do objeto 4onte;do do objeto :argura do objeto 3ist9ncia do topo 4ria uma mscara de edio para o campo%

Label (encontrado na pgina tandard), altere as seguintes propriedades0


Propriedade 4aption Aocus Aont :e t 6op Ealor *igla0 !dt6recho >* *ans *eri , negrito, S, 4astanho S N-M 3escrio :abel do objeto 4ontrole para a posio do cursor 6ipo de letra a ser mostrada no objeto &linhamento a esquerda 3ist9ncia do topo

HitHtn (encontrado na pgina Additional), altere as seguintes propriedades0

%00

Borland
Propriedade mind

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Ealor bDOm

3escrio 3etermina a classe a ser utili+ada pelo objeto, automaticamente sero alteradas as propriedades0 "aption, IlCpB e To?alFesult :abel do objeto 6ipo de letra a ser mostrada no objeto &ltura do objeto &juda on'line para o objeto espec# ico &linhamento a esquerda Bome do objeto >ostrar o conte;do da propriedade Bint sob a orma de uma cai$a de ajuda on'line !spao entre o IlCpB e o Label 3ist9ncia do topo :argura do objeto

4aption Aont ?eight ?int :e t Bame *ho2?int *pacing 6op Gidth

pOm >* *ans *eri , normal, S, preto NO 4on irma a pesquisa MV (utOD 6rue TNUS S,

HitHtn (encontrado na pgina Additional), altere as seguintes propriedades0


Propriedade mind Ealor bD4ancel 3escrio 3etermina a classe a ser utili+ada pelo objeto, automaticamente sero alteradas as propriedades0 "aption, IlCpB e To?alFesult :abel do objeto 6ipo de letra a ser mostrada no objeto, altura do objeto, >ostrar o conte;do da propriedade Bint sob a orma de uma cai$a de ajuda on'line, dist9ncia do topo e tamanho do objeto &juda on'line para o objeto espec# ico &linhamento g esquerda Bome do objeto !spao entre o IlCpB e o Label :argura do objeto

4aption Aont, ?eight, *ho2?int, 6op e Gidth ?int :e t Bame *pacing Gidth

p4ancela idntica ao objeto HutOO

&bandona a pesquisa NSS (ut4ancela S S,

!pee?Hutton (encontrado na pgina Additional), altere as seguintes propriedades0


Propriedade Cl@ph ?int *ho2?int Bame :e t e 6op Ealor 3escrio J3iret)rio3elphiKk<>&C!*k(166 <magem a ser mostrada no objeto OB*kA3F&G!FM%(>P Pesquisa o c)digo selecionado na tabela 6rue (utPesquisa >odo que o objeto ique ao lado do objeto E?t>recBo &juda on'line para o objeto espec# ico >ostrar o conte;do da propriedade Bint sob a orma de uma cai$a de ajuda on'line Bome do objeto Posio esquerda e dist9ncia do topo

*alve o ormulrio com o nome f!el"ate e compare'o com o desenho abai$o0

%0%

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Programando no !orm$l)rio
O c)digo para este objeto no chega a ser um troo estranho, medonho e esquisito, na verdade at bem simples, basta apenas compreendermos o seu uncionamento, o objeto @HIri? ar todo o trabalho, mostrando ao usurio os registros cadastrados em uma tabela, a parte que nos resta e programar o objeto butPesDuisa de maneira quase idntica ao nosso antigo boto de pesquisa0 4)digo para o boto butPesDuisa, responsvel pela ativao da pesquisa0 M% 3 um duplo clique no objeto0

proce?ure 6An*el4ate%(utPesquisa4licD(*ender0 6Object)= <nicia o procedimento begin if (!dt6recho%6e$t L PP) tBen Eeri ica se oi digitado algo begin >essage3lg(PBo oi especi icado uma siglaeP, mt!rror, JmbOmK, -)= !$it= &bandona o procedimento en?= trC &tiva o comando 6r@ 3>n>odelo%6ab4ategor%AindBearest(J!dt6recho%6e$tK)= Aa+ a pesquisa na tabela eKcept 4aso acontea alguma alha on e$ception ?o >essage3lg(P*igla especi icada est invlidaeP,mt!rror, JmbOmK, -)= en?= en?= 6ermina o procedimento

O comando >rC oi utili+ado para prevermos qualquer possibilidade de erro durante a e$ecuo da pesquisa%

Enviando e recebendo vari)veis


!$istem duas maneira de dois ormulrios trocarem valores de variveis, ambas atravs da criao de variveis de inidas na seo public, a di erena est ou no na utili+ao do comando propertC%

%02

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Bo nosso antigo boto Localizar, enviamos para a uno #nput]uerC o c)digo da categoria corrente e a uno nos devolve o c)digo digitado, porque no a+ermos o mesmo0 4riando uma varivel de escrita e leitura M% E para o Code !ditor, e insira o trecho abai$o0

priMate Parte de procedimentos privados function Cet6recho0 !tring= Auno para enviar a varivel proce?ure *et6recho(Be26recho0 !tring)= Procedimento para receber o trecho public Parte de procedimentos p;blicos v4ria0 (oolean= 4ria uma varivel p;blica propertC 4amp6recho0 !tring rea? Cet6recho Arite *et6recho= <niciali+a um varivel en?=

O comando PropertC declara uma varivel da seguinte maneira, a sub'opo Fea? envia um string atravs da uno <et-recho, e a sub'opo =rite recebe o valor enviado atravs da varivel para o procedimento et-recho% N% 3eclarando o procedimento e a uno0
function 6An*el4ate%Cet6recho0 !tring= begin if v4ria tBen begin Fesult 0L 3>n>odelo%6ab4ategor*<Cn4&6!C%Ealue= 3>n>odelo%Aree= en?4 en?= proce?ure 6An*el4ate%*et6recho(Be26recho0 !tring)= begin if v4ria tBen begin 3>n>odelo 0L 63>n>odelo%4reate(&pplication)= 3>n>odelo%6ab4ategor%Aindme@(JBe26rechoK)= en?= en?= <n#cio da uno Eeri ica se o Data4od1le no e$istia &tribui ao resultado da uno o valor do campo *<Cn4&6!C

<n#cio do procedimento *e o 3ata>odule no estiver criado 4ria o 3ata>odule :ocali+a o valor da string enviada

/lterando o !orm$l)rio !Categ


3evemos agora mudar o c)digo do ormulrio <"ateg para ativarmos a pesquisa, lembre'se que o Data4od1le o mesmo e a tabela tambm, ento no e$iste a necessidade de enviarmos ou tra+ermos uma varivel com a sigla da 4ategoria, porm lembremos do boto de cancelar, precisamos ento, caso o ormulrio no saia atravs do boto de OO, retornamos ao registro anterior0 4hame o ormulrio <"ateg atravs do objeto Project 4ana>er, clique no objeto b1t&ocaliHar0 M% 3 um duplo clique no objeto0

proce?ure 6An4ateg%(ut:ocali+ar4licD(*ender0 6Object)= &qui permanece o mesmo Mar >arcaFeg0 6(ooDmarD= 4ria uma varivel de marca begin if An>enu%4ritica!dicao(3>n>odelo%3*4ategor, P4ategoriaP, Plocali+arP ) tBen

%0$

Borland
!$it=

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

AitB 3>n>odelo%6ab4ateg ?o begin >arcaFeg 0L Cet(ooD>arD= An*el4ate 0L 6An*el4ate%4reate(&pplication)= An*el4ate%v4ria 0L Aalse= if not An*el4ate%*ho2>odal L mrOD tBen Coto(ooD>arD(>arcaFeg)= An*el4ate%Aree= Aree(ooDmarD(>arcaFeg)= en?4 en?=

*alva a posio do registro 4ria o ormulrio de consulta *eta a varivel p;blica 4aso a sa#da do ormulrio no seja o boto Om Fetorna ao registro marcado !limina o ormulrio de consulta :ibera a varivel de marca

Os comandos de HooOTarO so todos aplicados a tabela por isso oi utili+ado em conjunto com um comando AitB para a simpli icao do c)digo%

& varivel declarada objPesDuisa no mais necessria%

Bo necessrio criticar o comando in?PeC pois o c)digo retornado pela varivel e pego diretamente do arquivo% Bo esquea que o objeto <!el"ate a+ parte da 1nit f!el"ate ento necessrio a+er o uso desta 1nit, para tanto altere o seguinte c)digo (abai$o da diretiva de compilao)0
/2) 3.D.40 uses >enu, 3>>odelo, 3ialogs, *el4ate= / 4en1 Principal do istema 0 / )e6erencia ao Data4od1le 0 / 7tiliHado para o controle da 61n,;o 4essa>eDl> 0 / eleciona Cate>oria 0

/lterando o !orm$l)rio !#asico


Eamos inalmente tornar ;til o objeto b1t&ocCate> (boto para locali+ar a categoria)% M% 4hame o ormulrio <Hasico e d um duplo clique no objeto b1t&ocCate>

proce?ure 6An(asico%(ut:oc4ateg4licD(*ender0 6Object)= begin if not (3>n(asico%3*(asico%*tate in Jds!dit, ds<nsertK) tBen begin >essage3lg(PEoc no est no modo de edioeP, mt<n ormation, JmbOmK, -)= !$it= en?= An*el4ate 0L 6An*el4ate%4reate(&pplication)= An*el4ate%v4ria 0L 6rue= An*el4ate%4amp6recho 0L !dit*<Cn4&6!C%6e$t= if An*el4ate%*ho2>odal L mrOD tBen !dit*<Cn4&6!C%6e$t 0L An*el4ate%4amp6recho= An*el4ate%Aree= en?= 4ria o ormulrio de consulta *eta a varivel p;blica &tribui a vriavel declarado o valor do campo da tela (dispara a uno !et>recBo) !$ecuta o objeto <!el"ate dispara o procedimento Iet>recBo !limina o ormulrio de consulta

%0;

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Bote que para esse caso no queremos locali+ar uma categoria, mas sim atribuir ao objeto !dit4O3n4&6!C ao valor do An*el4ate%4amp6recho locali+ado Bo esquea que o objeto <!el"ate a+ parte da 1nit f!el"ate ento necessrio a+er o uso desta 1nit, para tanto altere o seguinte c)digo (abai$o da diretiva de compilao)0
/2) 3.D.40 uses 3>(asico, >enu, 3ialogs, 4ateg, >usica, *el4ate= / )e6erLncia ao Data4od1le 0 / 4en1 Principal do istema 0 / <erente de 4ensa>ens 0 / Cadastro de Cate>orias 0 / Cadastro de 4Osicas 0 / eleciona Cate>oria 0

*alve o ormulrio, retire'o da rea de ormulrios auto'create, e$ecute e teste o projeto% *e alguma coisa deu errada, releia o cap#tulo, ou ento con ira o c)digo para a <!el"ate0

unit *el4ate= interface uses Gindo2s, >essages, *@s1tils, 4lasses, Craphics, 4ontrols, Aorms, 3ialogs, !$t4trls, 3(4trls, (uttons, *td4trls, Crids, 3(Crids= tCpe 6An*el4ate L class(6Aorm) 3(BavigatorM0 63(Bavigator= 3(CridM0 63(Crid= !dt6recho0 6>asD!dit= :abelM0 6:abel= (utOm0 6(it(tn= (ut4ancela0 6(it(tn= (utPesquisa0 6*peed(utton= proce?ure (utPesquisa4licD(*ender0 6Object)= priMate Ee4ria 0 boolean= function Cet6recho0 *tring= proce?ure *et6recho(Be26recho0 *tring)= public propertC 4amp6recho0 !tring rea? Cet6recho Arite *et6recho= en?= Mar An*el4ate0 6An*el4ate= implementation /2) 3.D.40 uses 3>4ateg= / )e6erLncia ao Data4od1le 0 function 6An*el4ate%Cet6recho0 !tring= begin %0G

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

if v4ria tBen begin Fesult 0L 3>n>odelo%6ab4ategor*<Cn4&6!C%Ealue= 3>n>odelo%Aree= en?= en?= proce?ure 6An*el4ate%*et6recho(Be26recho0 !tring)= begin if v4ria tBen begin 3>n>odelo 0L 63>n>odelo%4reate(&pplication)= 3>n>odelo%6ab4ategor%Aindme@(JBe26rechoK)= en?= en?= proce?ure 6An*el4ate%(utPesquisa4licD(*ender0 6Object)= begin if (!dt6recho%6e$t L PP) tBen begin >essage3lg(PBo oi especi icado uma siglaeP, mt!rror, JmbOmK, -)= !$it= en?= trC 3>n>odelo%6ab4ategor%AindBearest(J!dt6recho%6e$tK)= eKcept on e$ception ?o >essage3lg(P*igla especi icada est invlidaeP,mt!rror, JmbOmK, -)= en?= en?= en?%
4omandos e suas un7es, por ordem de apario0 PropertC JvarivelK0 J6ipoK rea? J unoK Arite JprocedimentoK ' 3eclara as propriedades para uma varivel do tipo leitura (rea?) e do tipo escrita (Arite)% Fesult ' constante utili+ada para o retorno de uma uno% >rC Jdeclara7esK ' palavra reservada para marcar a primeira parte de um bloco de e$ceo% EKcept Jbloco de e$ceoK ' caso alguma declarao dentro de um bloco de proteo trC acontea erro este bloco e$ecutado% On Jtipo de e$ceoK ?o JdeclaraoK ' em conjunto com o bloco trC///eKcept de ine o c)digo para e$ecutar um bloco de e$ceo%

Criando consultas para o cadastro


&credito que voc deve ter achado estranho o t#tulo das consultas do menu (43_s e >;sicas por 43_s), como j mencionei antes devemos permitir ao nosso usurio consultas geis pelos arquivos, seno no valer a pena veri icar no computador onde est determinada m;sica, seria mais prtico procur'la manualmente%

%0L

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Cons$ltas S+,
O objeto @1er% , utili+ado anteriormente para trabalhar como um contador, mais poderoso do que se imagina, utili+ando'o bem nos podemos dar poderes ao nosso usurio que ele jamais imaginou que osse poss#vel, e voc ver que trabalhar com iltros pode'se trans ormar em uma agradvel surpresa%

Reali0ando Cons$ltas com %iltros


Os iltros so reali+ados para re inar determinados registros dentro de um ou mais arquivos, mostrarei de orma simples como utili+'lo, observe o ormulrio a seguir0

Eamos criar um ormulrio idntico a este que servir para a montagem dos iltros0 <nicialmente 4lique no boto (Be2 Aorm) na peed Bar, ou no menu principal a 4lique no menu principal a opo ile e JeA///, em 8e# (tems, na pgina 8e# e clique no objeto entitulado .orm e altere as seguintes propriedades0
Ealor bs3ialog 3e ine Ailtros AnAiltro po*creen4enter 3escrio !stilo da borda do objeto :abel do objeto Bome do objeto Posio do objeto

Propriedade (order*t@le 4aption Bame Position

4rie para esta nova janela os seguintes objetos0

% Parte ' montagem do iltro


Panel (encontrado na pgina tandard) ' servir para guardar o bloco de montagem do iltro, ajuste seu tamanho para caber os outros objetos e coloque branco para a propriedade "aption% &ntes de criar os outros objetos sempre marque este objeto%

%0N

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

$ objetos Label (encontrados na pgina propriedades0


Propriedade 4aption Aont Ealor 4ampo, 4ritrio e 4omparao (respectivamente) >* *ans *eri , Begrito, S, 4astanho 3escrio Bome do objeto

tandard) ' altere as seguintes

6ipo de letra a ser mostrada no objeto

"omboHoK (encontrado na pgina tandard) ' que arma+enar o nome dos campos do arquivo, altere as seguintes propriedades0
Propriedade Bame Aont <tems *t@le 6e$t Ealor 4(4ampo >* *ans *eri , Bormal, S, &+ul >arinho Bome= 6ipo e 4ategoria (um em cada linha) cs3rop3o2n 3escrio Bome do objeto 6ipo de letra a ser mostrada no objeto 4onte;do do objeto !stilo do objeto 6e$to a ser mostrado para o 4ombo quando nada or selecionado

"omboHoK (encontrado na pgina tandard) ' que arma+enar os critrios de pesquisa, altere as seguintes propriedades0
Propriedade Bame Aont <tems *t@le 6e$t Ealor 4(4riterio >* *ans *eri , Bormal, S, &+ul >arinho *= ,= += ,* = +* = +, e @entro ?e cs3rop3o2n 3escrio Bome do objeto 6ipo de letra a ser mostrada no objeto 4onte;do do objeto (coloque um em cada linha) !stilo do objeto 6e$to a ser mostrado para o 4ombo quando nada or selecionado

E?it (encontrado na pgina tandard) ' que arma+enar o conte;do a ser comparado, altere as seguintes propriedades0
Propriedade Bame Aont 6e$t Ealor !dit4ompara >* *ans *eri , Bormal, S, &+ul >arinho 3escrio Bome do objeto 6ipo de letra a ser mostrada no objeto 6e$to a ser mostrado para o campo

!pee?Hutton (encontrado na pgina Additional) ' boto que con irmar a condio para o iltro escolhida, altere as seguintes propriedades0
Propriedade Cl@ph ?int *ho2?int Bame Ealor 3escrio J3iret)rio3elphiKk<>&C!*k(166 <magem a ser mostrada no objeto OB*k4OPl%(>P 4on irma os dados digitados 6rue (ut!nvia &juda on'line para o objeto espec# ico >ostrar o conte;do da propriedade hint sob a orma de uma cai$a de ajuda on'line Bome do objeto

!pee?Hutton (encontrado na pgina Additional) ' este boto servir para chamar a tela de consulta a tabela, icando originalmente invis#vel, sendo ativado caso o campo escolhido seja a .sigla da categoria/, altere as seguintes propriedades0
%0S

Borland
Propriedade Cl@ph ?int *ho2?int Bame Eisible

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Ealor

3escrio

J3iret)rio3elphiKk<>&C!*k(166 <magem a ser mostrada no objeto (consulte o cap%V, OB*k:&B6!FB&%(>P criao do objeto (ut:oc4ateg sobre a imagem) Pesquisa 4ategoria 6rue (ut4onsulta Aalse &juda on'line para o objeto espec# ico >ostrar o conte;do da propriedade hint sob a orma de uma cai$a de ajuda on'line Bome do objeto Objeto deve ser mostrado

2 Parte ' servir para guardar o iltro montado e esconder o iltro em linguagem pura *c:, ajuste seu tamanho para caber os outros objetos
IroupHoK (encontrado na pgina tandard) ' servir para guardar os blocos montados do iltro, ajuste seu tamanho para caber os outros objetos, altere as seguintes propriedades0
Propriedade 4aption Aont Ealor Ailtro 4ompleto >* *ans *eri , Begrito, S, 4astanho 3escrio :abel do objeto 6ipo de letra a ser mostrada no objeto

E?it (encontrado na pgina tandard) ' que mostrar ao usurio o iltro por ele criado, ele ocupar toda a rea interna do objeto <ro1pBo?, altere as seguintes propriedades0
Propriedade (order*t@le 4olor 4tlT3 Aont Bame FeadOnl@ Ealor bsBone cl(tnAalse (mesma cor do objeto <ro1pBo?) Aalse >* *ans *eri , Bormal, S, 4astanho AiltroEe 6rue 3escrio !stilo da borda 4or do objeto Possui desenho em T3 6ipo de letra a ser mostrada no objeto Bome do objeto Objeto apenas para leitura, no permitida alterao do seu conte;do%

E?it (encontrado na pgina tandard)' que montar o nosso iltro em linguagem pura *c:, ele icar invis#vel em modo de e$ecuo, altere as seguintes propriedades0
Propriedade Bame Eisible Ealor Ailtro*c: Aalse 3escrio Bome do objeto *e o objeto icar vis#vel

$ Parte ' bot7es de controle


HitHtn (encontrado na pgina Additional) ' boto que servir para clusula .! ' 6ipo0 7m e O1tro/, icar inicialmente desabilitado em modo de e$ecuo, altere as seguintes propriedades0
Propriedade Bame Cl@ph Ealor (ut! 3escrio Bome do objeto

J3iret)rio3elphiKk<>&C!*k(166 <magem a ser mostrada no objeto

%09

Borland
Aont ?int *ho2?int 4aption !nabled

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

OB*kAO:3F3O4%(>P >* *ans *eri , Bormal, S, Preto 1m .e/ Outro 6rue p! Aalse 6ipo de letra a ser mostrada no objeto &juda on'line para o objeto espec# ico >ostrar o conte;do da propriedade hint sob a orma de uma cai$a de ajuda on'line :abel do Objeto ?abilitao para o uso

HitHtn (encontrado na pgina Additional)' boto que servir de .Ou ' 6ipo0 7m o1 O1tro/, icar inicialmente desabilitado em modo de e$ecuo, altere as seguintes propriedades0
Propriedade Bame Cl@ph Aont ?int *ho2?int 4aption !nabled Ealor (utOu 3escrio Bome do objeto

J3iret)rio3elphiKk<>&C!*k(166 <magem a ser mostrada no objeto OB*kAOB6(O:3%(>P >* *ans *eri , Bormal, S, Preto 1m .ou/ Outro 6rue Opu Aalse 6ipo de letra a ser mostrada no objeto &juda on'line para o objeto espec# ico >ostrar o conte;do da propriedade hint sob a orma de uma cai$a de ajuda on'line :abel do Objeto ?abilitao para o uso

HitHtn (encontrado na pgina Additional) ' boto que servir para limpar o iltro, icar inicialmente desabilitado em modo de e$ecuo, altere as seguintes propriedades0
Propriedade Bame Cl@ph Aont ?int *ho2?int 4aption !nabled Ealor (ut:impar 3escrio Bome do objeto

J3iret)rio3elphiKk<>&C!*k(166 <magem a ser mostrada no objeto OB*k4:!&F%(>P >* *ans *eri , Bormal, S, Preto &paga o iltro e$istente 6rue p:impar Aalse 6ipo de letra a ser mostrada no objeto &juda on'line para o objeto espec# ico >ostrar o conte;do da propriedade hint sob a orma de uma cai$a de ajuda on'line :abel do Objeto ?abilitao para o uso

HitHtn (encontrado na pgina Additional) ' boto que servir para con irmar o iltro, ele icar inicialmente desabilitado em modo de e$ecuo, altere as seguintes propriedades0
Propriedade mind Ealor bDOm 3escrio 3etermina a classe a ser utili+ada pelo objeto, automaticamente sero alteradas as propriedades0 "aption, IlCpB e To?alFesult Bome do objeto 6ipo de letra a ser mostrada no objeto &juda on'line para o objeto espec# ico >ostrar o conte;do da propriedade hint sob a orma de uma cai$a de ajuda on'line :abel do Objeto ?abilitao para o uso

Bame Aont ?int *ho2?int 4aption !nabled

(utOm >* *ans *eri , Bormal, S, Preto 4on irma o iltro editado 6rue pOm Aalse

%%0

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

HitHtn (encontrado na pgina Additional) ' boto que servir para abandonar o iltro, altere as seguintes propriedades0
Propriedade mind Ealor bD4&B4!: 3escrio 3etermina a classe a ser utili+ada pelo objeto, automaticamente sero alteradas as propriedades0 "aption, IlCpB e To?alFesult Bome do objeto 6ipo de letra a ser mostrada no objeto &juda on'line para o objeto espec# ico >ostrar o conte;do da propriedade hint sob a orma de uma cai$a de ajuda on'line :abel do Objeto

Bame Aont ?int *ho2?int 4aption

(ut4ancela >* *ans *eri , Bormal, S, Preto 4ancela o iltro editado 6rue p4ancelar

Programando o !orm$l)rio
&ntes de prosseguirmos salve o ormulrio com o nome de Ailtro% O c)digo para este objeto simples requer apenas que voc compreenda que o ormulrio deve a+er% !ste ormulrio servir de base para a montagem de um iltro que ser mostrado por um db<rid constru#do no segundo ormulrio, devemos devolver o c)digo que completar a e$ecuo de um objeto @1er% colocado no segundo% !$%0 *!:!46 o AFO> (&*<4O G?!F! Jcondio criada no ormulrioK 0 4)digo para o boto butEnMia, quando or con irmado os dados digitados0 M% 3 um duplo clique no objeto0

proce?ure 6AnAiltro%(ut!nvia4licD(*ender0 6Object)= Mar Bome4ampo 0 !tring= begin case cb4ampo%<tem<nde$ of - / 8ome 0 0 Bome4ampo0L PBO>n3<*4OP= M / -ipo 0 0 Bome4ampo0L P6<Pn3<*4OP= N / Cate>oria 0 0 Bome4ampo0L P*<Cn4&6!CP= en?=

4ria uma varivel para arma+enar o nome real do campo *eleciona o nome do campo correto para o *c:

if (cb4riterio%<tem<nde$ L V) tBen se o 4ritrio escolhido or .3entro de/ Ailtro*c:%6e$t 0L Ailtro*c:%6e$t R P(P R Bome4ampo comando .:<m!/ em *c: R P P R P:iDe PPtP R !dit4ompara%6e$t R PtPP)P else Ailtro*c:%6e$t 0L Ailtro*c:%6e$t R P(P R Bome4ampo caso contrrio atribui o valor R P P R cb4riterio%6e$t R PPPP R !dit4ompara%6e$t R PPP)P= escolhido .Y, Z , YL, ZL e ZY/ AiltroEe%6e$t 0L AiltroEe%6e$t R cb4ampo%6e$t R P P R cb4riterio%6e$t R P P R !dit4ompara%6e$t= cb4ampo%<tem<nde$ 0L 'M= cb4riterio%<tem<nde$ 0L 'M= !dit4ompara%6e$t 0L PP= cb4ampo%!nabled 0L Aalse= cb4riterio%!nabled 0L Aalse= !dit4ompara%!nabled 0L Aalse= &certa o iltro Feseta os trs campos envolvidos

3esabilita os campos de edio

%%%

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

(ut4onsulta%Eisible 0L Aalse= (ut!%!nabled 0L 6rue= (utOu%!nabled 0L 6rue= (utOD%!nabled 0L 6rue= (ut:impa%!nabled 0L 6rue= en?= ?abilita os bot7es

caso o sistema que voc desenvolver tenha campos do tipo 3ata altere a linha do critrio para o seguinte0
if (cb4riterio%<tem<nde$ L V) tBen 4ritrio s3entro des if cb4ampo%<tem<nde$ in Jn;mero do campos dataK tBen E os campos 3ata Ailtro*c:%6e$t 0L Ailtro*c:%6e$t R P(P R Bome4ampo R P P R 4ondio para este tipo de cmp P:iDe PPtP R Aormat3ate6ime(P>>5335llP,*tr6o3ate(!dit4ompara%6e$t)) R PtPP)P else Ailtro*c:%6e$t 0L Ailtro*c:%6e$t R P(P R Bome4ampo R P P R 4ondio comum para o :<m! P:iDe PPtP R !dit4ompara%6e$t R PtPP)P else &s outras condi7es if cb4ampo%<tem<nde$ L in Jn;mero do campos dataK then E os campos 3ata Ailtro*c:%6e$t 0L Ailtro*c:%6e$t R P(P R Bome4ampo R P P R cb4riterio%6e$t R PPPP R Aormat3ate6ime(P>>5335llP,*tr6o3ate(!dit4ompara%6e$t)) R PPP)P else 4ondi7es para outros campos Ailtro*c:%6e$t 0L Ailtro*c:%6e$t R P(P R Bome4ampo R P P R cb4riterio%6e$t R PPPP R !dit4ompara%6e$t R PPP)P=

%%%o resto icar idntico% Bo esquea no comando Q!E! colocar a biblioteca !CsQtils para a uno ormat@ate>ime 4)digo para o boto butE, quando ser escolhida .e/ uma outra condio0 M% 3 um duplo clique no objeto0

proce?ure 6AnAiltro%(ut!4licD(*ender0 6Object)= begin AiltroEe%6e$t 0L AiltroEe%6e$t R P ! P= Ailtro*c:%6e$t 0L Ailtro*c:%6e$t R P &nd P= cb4ampo%!nabled 0L 6rue= cb4riterio%!nabled 0L 6rue= !dit4ompara%!nabled 0L 6rue= (ut:impa%!nabled 0L 6rue= (ut!%!nabled 0L Aalse= (utOu%!nabled 0L Aalse= (utOD%!nabled 0L Aalse= en?=

&ltera os iltros ?abilita os campos de edio

3esabilita os bot7es

4)digo para o boto butOu, quando ser escolhida .ou/ uma outra condio0 M% 3 um duplo clique no objeto0

proce?ure 6AnAiltro%(utOu4licD(*ender0 6Object)= begin AiltroEe%6e$t 0L AiltroEe%6e$t R P Ou P= Ailtro*c:%6e$t 0L Ailtro*c:%6e$t R P Or P=

&ltera os iltros

%%2

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras ?abilita os campos de edio

cb4ampo%!nabled 0L 6rue= cb4riterio%!nabled 0L 6rue= !dit4ompara%!nabled 0L 6rue= (ut:impa%!nabled 0L 6rue= (ut!%!nabled 0L Aalse= (utOu%!nabled 0L Aalse= (utOD%!nabled 0L Aalse= en?=

3esabilita os bot7es

4)digo para o boto butLimpa, quando or limpo os iltros0 M% 3 um duplo clique no objeto0

proce?ure 6AnAiltro%(ut:impa4licD(*ender0 6Object)= begin cb4ampo%<tem<nde$ 0L 'M= cb4riterio%<tem<nde$ 0L 'M= !dit4ompara%6e$t 0L PP= AiltroEe%6e$t 0L PP= Ailtro*c:%6e$t 0L P*elect o rom (asico 2here P= cb4ampo%!nabled 0L 6rue= cb4riterio%!nabled 0L 6rue= !dit4ompara%!nabled 0L 6rue= (ut!%!nabled 0L Aalse= (utOu%!nabled 0L Aalse= (utOD%!nabled 0L Aalse= (ut:impa%!nabled 0L Aalse= en?=

<nicia todas as condi7es

?abilita os campos de edio

3esabilita os bot7es

cuando o ormulrio or criado iniciado o iltro0 M% *elecione o objeto < iltro na tela de eventos d um duplo clicD sobre a opo On4reate0

proce?ure 6AnAiltro%Aorm4reate(*ender0 6Object)= begin AiltroEe%6e$t 0L PP= Ailtro*c:%6e$t 0L P*elect o rom (&*<4O 2here P= en?=

:impa o iltro vis#vel <nicia o iltro escondido

4aso o campo escolhido seja .*igla da 4ategoria/ necessrio habilitar o boto de consulta0 M% *elecione o objeto "H"ampo na tela de eventos d um duplo clique na opo On"Bange0

proce?ure 6AnAiltro%4(4ampo4hange(*ender0 6Object)= begin 4(4riterio%*etAocus= if cb4ampo%<tem<nde$ L N tBen (ut4onsulta%Eisible 0L >rue else (ut4onsulta%Eisible 0L alse= en?=

3esvia o oco para o pr)$imo campo *e o campo seleciona or *<Cn4&6!C 6orna vis#vel o objeto (ut4onsulta *eno 6orna invis#vel o objeto (ut4onsulta

4)digo para o objeto Hut"onsulta que ar a consulta de categoria0 M% 3 um duplo clique no objeto0

proce?ure 6AnAiltro%(ut4onsulta4licD(*ender0 6Object)=

%%$

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

begin if cb4ampo%<tem<nde$ L N tBen begin An*el4ate%4amp6recho 0L !dit4ompara%6e$t= if An*el4ate%<nicio L mrOD then !dit4ompara%6e$t 0L An*el4ate%4amp6recho= en?= en?=

*e o campo or *<Cn4&6!C !nvia o campo Eeri ica se oi retornado Om 6rans ere o campo

Per umaria para o objeto "H"riterio quando selecionado um critrio ser o controle trans erido para o campo seguinte0 M% *elecione o objeto na tela de eventos e d um duplo clique na opo On"Bange0

proce?ure 6AnAiltro%4(4riterio4hange(*ender0 6Object)= begin !dit4ompara%*etAocus= en?=

3esvia o oco para o pr)$imo campo

Becessitamos agora criar uma varivel comum que devolver o c)digo *c: para a tela secundria0 6rans ira para a janela do "o?e E?itor0 M% &p)s o comando PF<E&6! digite0
<nicia uma uno Particular <nicia uma varivel p;blica s) de leitura

priMate function Cet*c:0 6!dit= public propertC *c:*tring 0 6!dit rea? Cet*c:= en?= Mar AnAiltro0 6AnAiltro= implementation \[F o%3A>] uses *el4ate= function 6AnAiltro%Cet*c:0 6!dit= begin Fesult 0L Ailtro*c:= en?=

1tili+ao das bibliotecas *eleciona 4ategoria

!nvia como resultado para a varivel o iltro escondido

*alve o ormulrio, teste o projeto% *e alguma coisa deu errada, releia o cap#tulo, ou ento con ira o c)digo para a < iltro0

unit A iltro= interface uses Gin6@pes, GinProcs, 4lasses, Craphics, Aorms, 4ontrols, (uttons, *td4trls, !$t4trls= tCpe 6AnAiltro L class(6Aorm)

%%;

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

PanelM0 6Panel= 4(4ampo0 64ombo(o$= 4(4riterio0 64ombo(o$= !dit4ompara0 6!dit= (ut!nvia0 6*peed(utton= Croup(o$M0 6Croup(o$= :abelM0 6:abel= :abelN0 6:abel= :abelT0 6:abel= (ut4ancela0 6(it(tn= (ut!0 6(it(tn= (utOu0 6(it(tn= :abelU0 6:abel= AiltroEe0 6!dit= Ailtro*c:0 6!dit= (utOD0 6(it(tn= (ut:impa0 6(it(tn= (ut4onsulta0 6*peed(utton= proce?ure (ut!nvia4licD(*ender0 6Object)= proce?ure (ut!4licD(*ender0 6Object)= proce?ure (utOu4licD(*ender0 6Object)= proce?ure (ut:impa4licD(*ender0 6Object)= proce?ure Aorm4reate(*ender0 6Object)= proce?ure 4(4ampo4hange(*ender0 6Object)= proce?ure (ut4onsulta4licD(*ender0 6Object)= proce?ure 4(4riterio4hange(*ender0 6Object)= priMate function Cet*c:0 6!dit= public propertC *c:*tring 0 6!dit read Cet*c:= en?= Mar AnAiltro0 6AnAiltro= implementation \[F o%3A>] uses *el4ate= function 6AnAiltro%Cet*c:0 6!dit= begin Fesult 0L Ailtro*c:= en?= proce?ure 6AnAiltro%(ut!nvia4licD(*ender0 6Object)= Mar Bome4ampo 0 !tring= begin case cb4ampo%<tem<nde$ of - / 8ome 0 0 Bome4ampo0L PBO>n3<*4OP= M / -ipo 0 0 Bome4ampo0L P6<Pn3<*4OP= N / Cate>oria 0 0 Bome4ampo0L P*<Cn4&6!CP= en?= if (cb4riterio%<tem<nde$ L V) tBen

%%G

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Ailtro*c:%6e$t 0L Ailtro*c:%6e$t R P(P R Bome4ampo R P P R P:iDe PPtP R !dit4ompara%6e$t R PtPP)P else Ailtro*c:%6e$t 0L Ailtro*c:%6e$t R P(P R Bome4ampo R P P R cb4riterio%6e$t R PPPP R !dit4ompara%6e$t R PPP)P= AiltroEe%6e$t 0L AiltroEe%6e$t R cb4ampo%6e$t R P P R cb4riterio%6e$t R P P R !dit4ompara%6e$t= cb4ampo%<tem<nde$ 0L 'M= cb4riterio%<tem<nde$ 0L 'M= !dit4ompara%6e$t 0L PP= cb4ampo%!nabled 0L Aalse= cb4riterio%!nabled 0L Aalse= !dit4ompara%!nabled 0L Aalse= (ut4onsulta%Eisible 0L Aalse= (ut!%!nabled 0L 6rue= (utOu%!nabled 0L 6rue= (utOD%!nabled 0L 6rue= (ut:impa%!nabled 0L 6rue= en?= proce?ure 6AnAiltro%(ut!4licD(*ender0 6Object)= begin AiltroEe%6e$t 0L AiltroEe%6e$t R P ! P= Ailtro*c:%6e$t 0L Ailtro*c:%6e$t R P &nd P= cb4ampo%!nabled 0L 6rue= cb4riterio%!nabled 0L 6rue= !dit4ompara%!nabled 0L 6rue= (ut:impa%!nabled 0L 6rue= (ut!%!nabled 0L Aalse= (utOu%!nabled 0L Aalse= (utOD%!nabled 0L Aalse= en?= proce?ure 6AnAiltro%(utOu4licD(*ender0 6Object)= begin AiltroEe%6e$t 0L AiltroEe%6e$t R P Ou P= Ailtro*c:%6e$t 0L Ailtro*c:%6e$t R P Or P= cb4ampo%!nabled 0L 6rue= cb4riterio%!nabled 0L 6rue= !dit4ompara%!nabled 0L 6rue= (ut:impa%!nabled 0L 6rue= (ut!%!nabled 0L Aalse= (utOu%!nabled 0L Aalse= (utOD%!nabled 0L Aalse= en?= proce?ure 6AnAiltro%(ut:impa4licD(*ender0 6Object)= begin cb4ampo%<tem<nde$ 0L 'M= cb4riterio%<tem<nde$ 0L 'M=

%%L

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

!dit4ompara%6e$t 0L PP= AiltroEe%6e$t 0L PP= Ailtro*c:%6e$t 0L P*elect o rom (&*<4O 2here P= cb4ampo%!nabled 0L 6rue= cb4riterio%!nabled 0L 6rue= !dit4ompara%!nabled 0L 6rue= (ut!%!nabled 0L Aalse= (utOu%!nabled 0L Aalse= (utOD%!nabled 0L Aalse= (ut:impa%!nabled 0L Aalse= en?= proce?ure 6AnAiltro%Aorm4reate(*ender0 6Object)= begin AiltroEe%6e$t 0L PP= Ailtro*c:%6e$t 0L P*elect o rom (asico 2here P= en?= proce?ure 6AnAiltro%4(4ampo4hange(*ender0 6Object)= begin 4(4riterio%*etAocus= if cb4ampo%<tem<nde$ L N tBen (ut4onsulta%Eisible 0L >rue else (ut4onsulta%Eisible 0L alse= en?= proce?ure 6AnAiltro%(ut4onsulta4licD(*ender0 6Object)= begin if cb4ampo%<tem<nde$ L N tBen begin An*el4ate%4amp6recho 0L !dit4ompara%6e$t= if An*el4ate%<nicio L mrOD tBen !dit4ompara%6e$t 0L An*el4ate%4amp6recho= en?= en?= proce?ure 6AnAiltro%4(4riterio4hange(*ender0 6Object)= begin !dit4ompara%*etAocus= en?= en?%

Bo oi colocado nenhum comando que j no tenha sido visto anteriormente

Criando o !orm$l)rio 4erente do %iltro


4riado o ormulrio anterior, a idia agora a seguinte, que conter um objeto db<rid para mostrar todos os campos de clicado o boto iltrar, ser disparado o ormulrio anterior, ativar5desativar o iltro atravs do peedB1tton (cadeado), ou registro selecionado 0 criaremos um outro ormulrio determinada tabela, quando or ao retornar o usurio poder ainda ser poss#vel editar um

%%N

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Eamos criar um ormulrio idntico a este que servir para o gerenciamento do iltro0 <nicialmente 4lique no boto (Be2 Aorm) na peed Bar, ou no menu principal a 4lique no menu principal a opo ile e JeA///, em 8e# (tems, na pgina 8e# e clique no objeto entitulado .orm e altere as seguintes propriedades0
Ealor bs3ialog 4onsulta aos 3iscos An4on3isc po*creen4enter 3escrio !stilo da borda do objeto :abel do objeto Bome do objeto Posio do objeto

Propriedade (order*t@le 4aption Bame Position

4rie para esta nova janela os seguintes objetos0 >able (encontrado na pgina Data Access) ' 6abela que se alternar com a quer@, altere as seguintes propriedades0

Propriedade 3atabaseBame 6ableBame Bame

Ealor &lias3isco (&*<4O%3(A 6ab(asico

3escrio Bome do &lias ou a locali+ao do diret)rio das tabelas Bome e$terno da tabela Bome do objeto Bome do campo inde$ado

<nde$AieldBames BO>n3<*4O

@ata!ource (encontrado na pgina Data Access) ' Posicione'o ao lado do objeto -abBasico% , altere as seguintes propriedades0
Propriedade 3ata*et Bame Ealor 6ab(asico 3*(asico 3escrio Bome da tabela vinculada Bome do objeto

]uerC (encontrado na pgina Data Access) ' cuer@ que se alternar com a tabela, altere as seguintes propriedades0
Propriedade 3atabaseBame Ealor &lias3isco 3escrio Bome do &lias ou a locali+ao do diret)rio das tabelas

%%S

Borland
*c: Bame

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

*!:!46 o AFO> (&*<4O cr@(asico

4omando *c: para consulta Bome do objeto

@HJaMigator (encontrado na pgina Data Controls) ' (arra de navegao que servir para andar sobre os registro, lembre'se no deve ser permitida manuteno nos mesmos0
Propriedade 3ata*ource Eisible(uttons ?ints *ho2?int Ealor 3*(asico Primeiro= &nterior= Pr)$imo= Wltimo 6rue 3escrio 3ata*ource associado &juda on'line que ser mostrado sobre cada boto (coloque um em cada linha) >ostrar o conte;do da propriedade hint sob a orma de uma cai$a de ajuda on'line

JnbAirst, nbPrior, nbBe$t, nb:astK (ot7es vis#veis

!pee?Hutton (encontrado na pgina Additional) ' boto que servir para ativar ou desativar o iltro, altere as seguintes propriedades0
Propriedade Bame Cl@ph ?int *ho2?int Croup<nde$ Ealor (ut&tiva3esativa 3escrio Bome do objeto

J3iret)rio3elphiKk<>&C!*k(166 <magem a ser mostrada no objeto OB*k:O4mOP!B%(>P &tiva53esativa o iltro 6rue M &juda on'line para o objeto espec# ico >ostrar o conte;do da propriedade hint sob a orma de uma cai$a de ajuda on'line Pertence a um grupo de bot7es, esta propriedade a+ com que o boto permanea em estado de pressionamento% Permite que um grupo de bot7es no tenha nenhum boto em estado de pressionamento%

&llo2&ll1p

6rue

HitHtn (encontrado na pgina Additional) ' boto que servir para montagem do iltro, altere as seguintes propriedades0
Propriedade 4aption Aont Cl@ph ?int Bame *ho2?int Ealor Ailptrar >* *ans *eri , Bormal, S, Preto 3escrio :abel do objeto 6ipo de letra a ser mostrada no objeto

J3iret)rio3elphiKk<>&C!*k(166 <magem a ser mostrada no objeto OB*kA<B3%(>P >ontagem do Ailtro (utAiltrar 6rue &juda on'line para o objeto espec# ico Bome do objeto >ostrar o conte;do da propriedade hint sob a orma de uma cai$a de ajuda on'line

HitHtn (encontrado na pgina Additional) ' boto que servir para editar o campo selecionado no grid, altere as seguintes propriedades0
Propriedade 4aption Aont Cl@ph ?int Bame *ho2?int Ealor p!ditar >* *ans *eri , Bormal, S, Preto 3escrio :abel do objeto 6ipo de letra a ser mostrada no objeto

J3iret)rio3elphiKk<>&C!*k(166 <magem a ser mostrada no objeto OB*kAO:3F3O4%(>P !dita campo selecionado (ut!ditar 6rue &juda on'line para o objeto espec# ico Bome do objeto >ostrar o conte;do da propriedade hint sob a orma de

%%9

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

uma cai$a de ajuda on'line

HitHtn (encontrado na pgina Additional) ' boto que servir para editar o iltro, altere as seguintes propriedades0
Propriedade mind Ealor bD4lose 3escrio 3etermina a classe a ser utili+ada pelo objeto, automaticamente sero alteradas as propriedades0 "aption, IlCpB e To?alFesult Bome do objeto 6ipo de letra a ser mostrada no objeto :abel do Objeto

Bame Aont 4aption

(utAechar >* *ans *eri , Bormal, S, Preto pAechar

?bIri? (encontrado na pgina Data Controls) ' Objeto Crid que mostrar os campos, altere as seguintes propriedades0
Propriedade 3ata*ource Ealor 3*3ocum 3escrio 3etermina a classe a ser utili+ada pelo objeto, automaticamente sero alteradas as propriedades0 "aption, IlCpB e To?alFesult Bome do objeto 6ipo de letra a ser mostrada para os campos

Bame Aont Options 6itleAont

dbCrid(asico >* *ans *eri , Bormal, S, &+ul >arinho

dg6itles, dg<ndicator, dg4ol:ines, Op7es do Crid dgFo2:ines, dgFo2*elect >* *ans *eri , Begrito, S, 4astanho 6ipo de letra a ser mostrada para o t#tulo dos campos

Programando o !orm$l)rio
&ntes de prosseguirmos salve o ormulrio com o nome de 4on3isc% !ste ormulrio mostrar os dados iltrados no objeto db<rid, para iltrar os dados utili+aremos o objeto @1er%, tudo o que temos a a+er controlar quando o iltro est ativo (objeto Data o1rce aponta para o objeto @1er%) ou quando o iltro no est ativo (objeto Data o1rce aponta para o objeto t-able) 4)digo para quando o ormulrio iniciado, abertura das tabelas0 M% Eire para o "o?eE?itor e insira o seguinte c)digo abai$o0

priMate / Private declarations 0 public proce?ure <nicio= en?= Mar An4on3isc0 6An4on3isc= implementation /2) 3.D.40 uses Ailtro,

3eclara um procedimento p;blico

1tili+a a 1nit para a montagem do iltro

%20

Borland
!dt3isc=

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

1tili+a a 1nit para a edio do registro

proce?ure 6An4on3isc%<nicio= begin 6ab(asico%Open= *ho2>odal= en?4

<nicia a tabela >ostra o ormulrio em modo modal

4)digo para o boto Ailtrar, quando or solicitada a edio do iltro% M% 3 um duplo clique no objeto but iltrar0

proce?ure 6An4on3isc%(utAiltrar4licD(*ender0 6Object)= begin if (ut&tiva3esativa%3o2n tBen Eeri ica se o boto de prender o iltro begin est pressionado% >essage3lg(P3esative a iltragem antes de editar os iltros%%%P, mt<n ormation, JmbOmK, -)= e$it= en?4 if AnAiltro%*ho2>odal L mrOD tBen begin cr@(asico%*c:%4lear= cr@(asico%*c:%&dd(AnAiltro%*c:*tring%6e$t)= en?4 en?4 4hama o iltro e se or retornado Om :impa a cuer@ &diciona o novo iltro na cuer@

4)digo para o boto !ditar, quando or marcado um registro para visuali+ao geral% M% 3 um duplo clique no objeto butE?itar0

proce?ure 6An4on3isc%(ut!ditar4licD(*ender0 6Object)= begin if (ut&tiva3esativa%3o2n tBen An!dt3isc%<nicio(cr@(asico4O3n3<*4O%Ealue) else An!dt3isc%<nicio(6ab(asico4O3n3<*4O%Ealue)= en?=

Eeri ica se e$iste iltro preso 4hama a edio atravs da cuer@ 4hama a edio atravs da t6able

4)digo para o boto &tiva ou 3esativa o iltro, para prender ou liberar o iltro% M% 3 um duplo clique no objeto butAtiMa@esatiMa0

proce?ure 6An4on3isc%(ut&tiva3esativa4licD(*ender0 6Object)= begin if not (ut&tiva3esativa%3o2n tBen *e o iltro no estiver ativo 3*(asico%3ataset 0L 6ab(asico 4oloca o 3ata*ource apontado para o t6able else trC 4lusula para um bloco de e$ceo cr@(asico%4lose= 3esativa a cuer@ cr@(asico%Open= &tiva a cuer@ 3*(asico%3ataset 0L cr@(asico= 4oloca o 3ata*ource apontado para a cuer@ eKcept 4aso de alguma coisa errada com o iltro 3*(asico%3ataset 0L 6ab(asico= 4oloca o 3ata*ource apontado para o t6able raise= 4omplemento do comando >rC///eKcept///raise en?= en?=

*alve o ormulrio% 4om certe+a ser mostrado um erro para a chamada da unit <E?t@isc%

%2%

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Editando os registros
O ormulrio que editar os registro no ser montado passo a passo, pois muito simples de ser constru#do, ao invs disto darei apenas algumas dicas a respeito da criao do mesmo0 M% 4opie o ormulrio <Hasico, renomeando'o para <E?t@isc= N% Femova os objetos ?bJaMigator, ]uerC e as tabelas tab"ateg"onf e tabHasico"onf, das tabelas restante, entre no iel?sE?itor de cada uma e remova os campos= T% Fetire todo o c)digo e proteja as tabelas com a opo )eadOnl% P -r1e= U% Fetire todos os bot7es, dei$ando apenas o boto para Aechar o ormulrio= O% <nsira os seguintes procedimentos0
a% Procedure <B<4<O, nas declara7es public ( procedure <nicio(var 4od3isco0 <nteger)= ) proce?ure 6An!dt3isc%<nicio(var 4od3isco0 <nteger)= begin 6ab(asico%Open= &bre as tabelas 6ab>usica%Open= 6ab4ateg%Open= 6ab(asico%Aindme@(4od3isco)= Posiciona a tabela (asico no 4od3isco enviado *ho2>odal= en?4 b% Procedure Aorm4lose, no evento On"lose do objeto An!dt3isc proce?ure 6An!dt3isc%Aorm4lose(*ender0 6Object= var &ction0 64lose&ction)= begin 6ab(asico%4lose= Aecha as tabelas 6ab>usica%4lose= 6ab4ateg%4lose= en?=

V% *alve e compile o ormulrio com o nome fE?t@isc% &gora sim, voc pode compilar o projeto e rodar o projeto, para uma con erncia inal a# vai o c)digo completo do ormulrio <"on@isc%

unit Acondisc= interface uses Gin6@pes, GinProcs, >essages, 4lasses, Craphics, 4ontrols, Aorms, 3ialogs, 3(, 3(6ables, Crids, 3(Crids, *td4trls, (uttons, !$t4trls, 3(4trls= tCpe 6An4on3isc L class(6Aorm) 3(CridM0 63(Crid= 3*(asico0 63ata*ource= (utAiltrar0 6(it(tn= (utAechar0 6(it(tn= cr@(asico0 6cuer@= 3(BavigatorM0 63(Bavigator=

%22

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

6ab(asico0 66able= (ut!ditar0 6(it(tn= (ut&tiva3esativa0 6*peed(utton= 6ab(asico4O3n3<*4O0 6*mallintAield= 6ab(asicoBO>n3<*4O0 6*tringAield= 6ab(asico6<Pn3<*4O0 6*tringAield= 6ab(asico4O3n4&6!C0 6*tringAield= cr@(asico4O3n3<*4O0 6*mallintAield= cr@(asicoBO>n3<*4O0 6*tringAield= cr@(asico6<Pn3<*4O0 6*tringAield= cr@(asico4O3n4&6!C0 6*tringAield= proce?ure (utAiltrar4licD(*ender0 6Object)= proce?ure (ut!ditar4licD(*ender0 6Object)= proce?ure (ut&tiva3esativa4licD(*ender0 6Object)= priMate / Private declarations 0 public procedure <nicio= en?= Mar An4on3isc0 6An4on3isc= implementation /2) 3.D.40 uses Ailtro, / Chama a monta>em do .iltro 0 !dt3isc= / !dita o Disco 0 proce?ure 6An4on3isc%<nicio= begin 6ab(asico%Open= *ho2>odal= en?= proce?ure 6An4on3isc%(utAiltrar4licD(*ender0 6Object)= begin if (ut&tiva3esativa%3o2n tBen begin >essage3lg(P3esative a iltragem antes de editar os iltros%%%P, mt<n ormation, JmbOmK, -)= e$it= en?= if AnAiltro%*ho2>odal L mrOD tBen begin cr@(asico%*c:%4lear= cr@(asico%*c:%&dd(AnAiltro%*c:*tring%6e$t)= en?= en?= proce?ure 6An4on3isc%(ut!ditar4licD(*ender0 6Object)= begin if (ut&tiva3esativa%3o2n tBen An!dt3isc%<nicio(cr@(asico4O3n3<*4O%Ealue) else An!dt3isc%<nicio(6ab(asico4O3n3<*4O%Ealue)=

%2$

Borland
en?=

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

proce?ure 6An4on3isc%(ut&tiva3esativa4licD(*ender0 6Object)= begin if not (ut&tiva3esativa%3o2n tBen 3*(asico%3ataset 0L 6ab(asico else trC cr@(asico%4lose= cr@(asico%Open= 3*(asico%3ataset 0L cr@(asico= eKcept 3*(asico%3ataset 0L 6ab(asico= raise= en?= en?= en?%

Captulo (III
Relat(rios
& parte impressa do Delphi ica a critrio de trs mtodos0 utili+ar a erramenta Feport!mitB, com a unit Printer ou com a utili+ao da erramenta ]uicOFeport (dispon#vel no Delphi *.0 a partir de compra de terceiro, mas dispon#vel gratuitamente com o Delphi 2.0)% O Delphi o erece um gerador de relat)rios bastante poderoso, chamado Feport!mitB% 4om este utilitrio, voc pode criar relat)rios associados aos diversos bancos que o Delphi se comunica%

1rabalhando co% o &eport-%ith


O Feport!mitB possui alguns relat)rios padr7es, tais como relatYrios coluna?os (mostra os dados em ormas de colunas), referWncia cruza?a entre tabelas (mostra os dados tipos uma
%2;

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

planilha, associando duas ou mais tabelas), etiDuetas (gera etiquetas em ormatos padro), relatYrios em mo?o ?e pRgina (mostra os registros de uma determinada tabela um por pgina)% &travs do Feport*mith, e poss#vel gerar relat)rios com as seguintes caracter#sticas0 4ombinao de dados entre vrias tabelas= Ordem e grupo livre de dados atravs de determinados campos= <nsero de cabealhos e rodaps= Aun7es de soma, mdia, m$imo e m#nimo= 4riao de cai$as de dilogo para insero de in orma7es, iltragem dos dados= 4riao de relat)rios do tipo master5details= !$ecuo de macros durante o relat)rio= e &cesso as mais variadas bases de dados, entre elas0

(ases de 3ados que o Feport*mith permite acesso &ccess (trieve 3(N d(ase !$cel Ao$Pro <BCF!* <n ormi$ <nter(ase OF&4:! Parado$ Faima &*5U-*c: *erver *c:(ase *@base 6eradata &rquivo %6H6 1ni @ Gatcom *c: qualquer base com driver O3(4

O Feport!mitB um produto separado do Delphi, mas ao comprar o Delphi, voc adquiriu automaticamente a licena para usar o Feport!mitB bem como a distribuio livre do seu Fun'6ime%

Criando relat(rio com o ReportSmit&


<nicie o Feport!mitB atravs do #cone , ou da opo do menu principal do Delphi, >ools X Feport!mitB, dependendo da con igurao da seo Options, ser mostrada a tela para o in#cio de um novo relat)rio% 4ancele quaisquer opo que aparea e ative no menu principal ile X "onnections///, lembra'se do Alias pois aqui precisamos criar uma cone$o para a nossa base de dados, pressione o boto JeA e in orme Jame0 3isco&PP, >Cpe0 3(&*!(<3&P<) e @ata ile PatB0 40k*<*6!>&k4&33<*4O, pressione o boto !aMe e OP% Bo menu principal opo ile X JeA///, escolha a opo "olumnar Feport, clique no boto !tCle e escolha o estilo do relat)rio que mais lhe agrade e caso voc deseje pode marcar o estilo escolhido como de ault atravs da opo Qse As @efault clique no boto OP, e clique no boto OP e a seguinte tela ser mostrada0

%2G

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

>ables ' &diciona, remove ou altera tabelas ou cria linDs entre elas% !elections ' 4ria, edita e e$clui critrios de seleo% !orting ' &diciona, remove ou reordena dados a serem organi+ados% @eriMe? fiel?s ' 4ria e organi+a dados calculados para outras colunas do relat)rio, baseado em comandos *c: ou na linguagem de macro Feport(asic% Feport Mariables ' 4ria, edita ou e$clui variveis do relat)rio% !stas variveis podem ser criadas para atender a critrios da clusula !elections servindo de comunio entre o Feport!mitB e o Delp i% @atabase grouping ' Crupos de dados e critrios de seleo% !]L ' Permite a edio de declarao *c: para o relat)rio corrente%

M% Pressione o boto >ables% N% Ba cai$a de dilogo >ables, pressione o boto A?? table/// T% Bo combo "onnections3 selecione a cone$o @iscoAPP e selecione a tabela Hasico/@H e pressione o boto OP, repita a operao para tabela "ategor/@H, con irme e retorne a tela anterior% U% Pressione o boto A?? neA linO/// O% O relacionamento entre Hasico e "ategor atravs do campo !#I<"A>EI , marque a opo #nclu?e unmatcBe? recor?s (inclua os registros no correspondentes) do lado de HA!#"OK@H, con irme e retorne a tela anterior% V% *elecione a tabela HA!#"OK@H e pressione o boto >able columns/// `% *elecione o campo O><"APA e marque a opo EKclu?e from report (retire do relat)rio), con irme e retorne a tela anterior%

%2L

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

S% Pressione o boto Feport Mariables e crie as variveis0 "o?#nicial e "o? inal ambas com a opo >Cpe igual a Jumber e a opo EntrC igual a >Cpe'in% ,% Pressione o boto !elections e clique no boto amarelo marcado com %/ e escolha a opo A?? selection criteria e marque o seguinte critrio0 ?ata fiel? HA!#"OK@H/"O@<@#!"O is betAeen report Mariable "o?#nicial an? report Mariable "o? inal% M-% 4lique no boto !orting, marque o campo "O@<@#!"O e clique no boto #nsert into sort list (insira para a lista de ordenao)% MM% 4lique no boto !]L e compare a declarao criada0
*!:!46 P(&*<4O$3(P%P4O3n3<*4OP, P(&*<4O$3(P%PBO>n3<*4OP, P(&*<4O$3(P%P6<Pn3<*4OP, P(&*<4O$3(P%*<Cn4&6!CP, P4&6!COF$3(P%P*<Cn4&6!CP, P4&6!COF$3(P%P3!*n4&6!CP AFO> P40k*<*6!>&k4&33<*4Ok(&*<4O%3(P (&*<4O$3( :!A6 aO<B P40k*<*6!>&k4&33<*4Ok4&6!COF%3(P 4&6!COF$3( OB (P(&*<4O$3(P%P*<Cn4&6!CP L P4&6!COF$3(P%P*<Cn4&6!CP ) G?!F! (((P(&*<4O$3(P%P4O3n3<*4OP (!6G!!B ZZ4od<nicialYY &B3 ZZ4odAinalYY))) OF3!F (l P(&*<4O$3(P%P4O3n3<*4OP

MN% 4on irme o relat)rio pressionando o boto @one% <n orme os dados iniciais e inais e aguarde a gerao do relat)rio%

Organi0ando os campos do relat(rio


&credito que a esta altura voc tem um belo in#cio de relat)rio nas mos, agora teremos que alterar alguns campos que no icaram direito0 M% *elecione os campos *<Cn4&6!C (tanto o t#tulo quanto o detalhe) e pressione @EL% N% *elecione o detalhe do campo BO>n3<*4O e pressione o boto direito do mouse, selecione a opo iel? HeigBt e marque a opo "an IroA (redimensione a varivel con orme o tamanho) e "an !BrinO (corte os caracteres no imprim#veis)% T% 6roque os t#tulos de cada campo para0 4)digo, Bome, 6ipo e 4ategoria% (basta clicar duas ve+es sobre cada t#tulo)% U% 6roque o t#tulo do relat)rio para0 "a?astro ?e "@fs% O% Bo menu selecione a opo #nsert d iel?///, selecione !Cstem iel?s, e selecione o campo Print @ate)>ime, pressione o boto #nsert e clique em qualquer posio da seo Hea?er% V% 4ompare agora o relat)rio gerado0

%2N

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

*alve o relat)rio gerado com o nome de F4&3&*6%FP6

/ssociando o relat(rio ao aplicativo


& parte di #cil j oi reali+ada agora resta chamar o relat)rio atravs do nosso menu principal% 4hame o ormulrio menu e insira o objeto Feport , encontrado na Component Palette pgina Dialo>s, este objeto reali+a o trabalho de con igurao da impressora% M% 4lique na opo .4on igura <mpressora/ chamando o evento on4licD= N% <nsira o comando
proce?ure 6A>enu%4on iura<mpressoraM4licD(*ender0 6Object)= begin Printer*etup3ialogM%!$ecute= en?=

4riaremos agora uma janela simples de dilogo, onde selecionaremos um c)digo inicial e inal para os c)digos do 43% <nicialmente 4lique no boto (Be2 Aorm) na peed Bar, ou no menu principal a 4lique no menu principal a opo ile e JeA///, em 8e# (tems, na pgina 8e# e clique no objeto entitulado .orm e altere as seguintes propriedades0
Ealor bs3ialog <mprime 4adastro Ceral An3gCeral po*creen4enter 3escrio !stilo da borda do objeto :abel do objeto Bome do objeto Posio do objeto

Propriedade (order*t@le 4aption Bame Position

4rie para esta nova janela os seguintes objetos0 Label (:ocali+ado na pgina !tan?ar?) ' crie trs objetos labels0
Ealor JMK% <n orme o 4)digo dos 43_s a imprimir= JNK% <nicial0 e JTK% Ainal0 JMK% >* *ans *eri , Begrito, S, &+ul >arinho e JN,TK% >* *ans *eri , Begrito, S, 4astanho 3escrio :abel do objeto 6ipo de letra a ser mostrada no objeto

Propriedade 4aption Aont

%2S

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

HitHtn (:ocali+ado na pgina A??itional) ' crie dois bot7es para con irmar ou cancelar a emisso do relat)rio0
Propriedade mind Ealor bDOD e bD4ancel 3escrio 3etermina a classe a ser utili+ada pelo objeto, automaticamente sero alteradas as propriedades0 "aption, IlCpB e To?alFesult :abel do objeto

4aption

pOm e p4ancelar

E?it (:ocali+ado na pgina !tan?ar?) ' dois objetos de edio para insero do c)digo inicial e inal0
Propriedade 6e$t Aont >* *ans *eri , Bormal, S, &+ul >arinho Ealor 3escrio 6e$to a ser apresentado inicialmente para o objeto 6ipo de letra a ser mostrada no objeto

4ompare com o ormulrio abai$o0

Programando o !orm$l)rio
&ntes de prosseguirmos salve o ormulrio com o nome de 3gCeral% Para selecionarmos os c)digos inicial e inal, precisamos a+er uma pequena programao no ormulrio0 4)digo para criar os dois campos que enviaro os c)digos (lembra'se do cap#tulo E<< ' Fe erente a 4onsultas)0 M% &lterne para o "o?eE?itor e insira o seguinte c)digo abai$o0

priMate function Cet4od<nicial0 !tring= <niciali+a as un7es function Cet4odAinal0 !tring= public propertC 4amp<nicial0 !tring rea? Cet4od<nicial= 4ria tipo caractere as variveis, propertC 4ampAinal0 !tring rea? Cet4odAinal= apenas como sa#da en?= Mar An3gCeral0 6An3gCeral= implementation

%29

Borland
/2) 3.D.40

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

function 6An 3gCeral%Cet4od<nicial0 !tring= begin Fesult 0L !ditM%6e$t= en?= function 6An 3gCeral%Cet4odAinal0 !tring= begin Fesult 0L !ditN%6e$t= en?=

!nvia como resultado o conte;do do objeto !ditM

!nvia como resultado o conte;do do objeto !ditN

Por incr#vel que parea isto tudo, agora chame o objeto >enu, insira o objeto Feport , encontrado na Component Palette pgina Data Access, este objeto reali+a o trabalho de con igurao da impresso% M% 4lique na opo .Felat)rio d Ceral/ chamando o evento on4licD= N% <nsira o comando
proce?ure 6An>enu%CeralM4licD(*ender0 6Object)= begin if An3gCeral%*ho2>odal L mrOm tBen 4hama e veri ica se a 3gCeral retornou Om AitB FeportM ?o Para o objeto FeportM%%% begin FeportBame 0L PF4&3&*6%FP6P= &ltera a propriedade Bome do Felat)rio <nitialEalues%4lear= !limina os valores iniciais <nitialEalues%&dd(PX4od<nicialLZPRAn3gCeral%4amp<nicialRPYP)= *eta o valor 4od<nicial do relat)rio com o valor do 4amp<nicial do ormulrio 3gCeral <nitialEalues%&dd(PX4odAinalLZPRAn3gCeral%4ampAinalRPYP)= *eta o valor 4odAinal do relat)rio com o valor do 4ampAinal do ormulrio 3gCeral Fun= <nicia o relat)rio en?= en?=

*alve e e$ecute o sistema, in orme trechos di erentes para o relat)rio% 4aso voc queira que o Feport*mith no e$ecute imediatamente o relat)rio mostrando antes uma prvia na tela modi ique a propriedade do objeto Feport% ' Previe# para -r1e% Eoc descobrir que o Feport!mitB uma poderosa e simples erramenta para a concepo de relat)rios, o ;nico problema seria com relat)rios que se precise imprimir uma ;nica ou poucas olhas, como um recibo ou um ormulrio pr'impresso, voc descobrir que ele lento para estas tare as, e$istem duas solu7es para este caso usar a biblioteca Printers ou usar a impresso livre do ormulrio como veremos a seguir%

mprimindo atrav;s do %orm$l)rio


Para o nosso pr)$imo relat)rio, precisamos apenas imprimir a capa de um 43, se voc relembra a oto oi arma+enada em um campo do tipo (:O( chamado AO6n4&P&, no arquivo (&*<4O% & idia simples, construir um ormulrio em branco, sem borda, este ser chamado atravs do menu principal e solicitado a in ormao do c)digo do 43 a imprimir, neste ormulrio

%$0

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

ter os objetos de acesso a 6abela ( -able e Data o1rce) associado ao objeto 3(<mage encontrado na Component Palette na pgina Data Controls, con orme a igura abai$o0

<nicialmente 4lique no boto (Be2 Aorm) na peed Bar, ou no menu principal a 4lique no menu principal a opo ile e JeA///, em 8e# (tems, na pgina 8e# e clique no objeto entitulado .orm e altere as seguintes propriedades0
Ealor bsBone An4apa po*creen4enter JK clGhite 3escrio !stilo da borda do ormulrio :abel do objeto (6arja a+ul do ormulrio) Bome do objeto Posio da janela (centrali+ado) !limine todos os bot7es da janela 4or de undo

Propriedade (order*t@le 4aption Bame Position (order<cons 4olor

4rie para esta nova janela os seguintes objetos0 >able (:ocali+ado na pgina @ata Access) , altere as seguintes propriedades0
Ealor (ase3isco (&*<4O%3( 4O3n3<*4O 6ab(asico 6rue 3escrio Bome do &lias ou a locali+ao do diret)rio das tabelas Bome e$terno da tabela Bome do campo inde$ado Bome do objeto *omente para leitura

Propriedade 3atabaseBame 6ableBame <nde$AieldBames Bame FeadOnl@

@ata!ource (:ocali+ado na pgina @ata Access) , altere as seguintes propriedades0


Propriedade 3ata*et Bame Ealor 6ab(asico 3*(asico 3escrio Bome da tabela vinculada Bome do objeto

%$%

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

?b#mage (:ocali+ado na pgina @ata "ontrols) , altere as seguintes propriedades0


Propriedade 3ata*ource 3ataAield ?eight *trech Gidth Ealor 3*(asico AO6n4&P& UO` 6rue USM 3escrio Bome do 3ata*ource vinculado Bome do campo na tabela :argura *e o tamanho da imagem deve acompanhar o tamanho do objeto &ltura do objeto

O tamanho da imagem oi colocada em UO` $ USM pois em impressoras padro !pson este, ap)s impresso, o tamanho da capa do 43% I necessrio que voc aa os ajustes necessrios para se adaptar ao padro de sua impressora%

4resa o tamanho do ormulrio em conjunto ao tamanho do objeto imagem%

*alve o ormulrio com o nome de 4apa%

Criando o C(digo
O c)digo para este ormulrio e sua chamada a partir do menu principal bem mais simples que o reali+ado anteriormente, veri ique0 Para o menu principal 4)digo para criar a chamada0 M% 4hame o ormulrio >enu, e clique na opo .4apa do 43/ 0

proce?ure 6An>enu%4apado43M4licD(*ender0 6Object)= Mar Bum430 !tring= begin Bum43 0L <nput(o$(P<n ormeP, P!ntre com o c)digo do 43 para imprimir0P, PP)= if Bum43 L PP tBen begin >essage3lg(PBo oi in ormado um c)digo para a impressoP, mt<n ormation, JmbODK, -)= e$it= en?= An4apa%<nicio(Bum43)= en?=

O c)digo para este evento bem simples0 cria uma varivel caracter e solicita a entrada de seu valor atravs da uno #nputHoK, caso no seja retornado nenhum valor cancela a impresso ao contrrio chama o procedimento .inicio/ do ormulrio .An4apa/ enviando o valor in ormado%

Bo se esquea de colocar a unidade 4apa no comando Qses%

Para o ormulrio An4apa 4)digo para solicitar e permitir a impresso0

%$2

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

M% 4hame o ormulrio An4apa, e alterne para o modo do "o?e E?itor 0


proce?ure 6An4apa%<nicio(Bumero0 !tring)= begin 6ab(asico%Open= if not 6ab(asico%Aindme@(J*tr6oAloat(Bumero)K) tBen >essage3lg(P4)digo do 43 ine$istente eP, mt!rror, JmbODK, -) else begin *ho2= if >essage3lg(P4on irma a impresso da 4apa bP, mt4on irmation, mbOD4ancel, -) L mrOD tBen An4apa%Print= en?= 6ab(asico%4lose= 4lose= en?=

O c)digo para este evento novamente bem simples0 abre a tabela e pesquisa a e$istncia do c)digo enviado, caso encontre mostra a capa do 43 e solicita a con irmao do relat)rio, e imprime ao inal echa a tabela e o ormulrio% Bo se esquea de declarar o procedimento nas declara7es Public% (proce?ure <nicio(Bumero0 !tring)=)

1rabalhando co% o .uic#&eport


O cuicDFeport um produto ornecido pela c*3 (cuicD *o t 3evelopment) em verso Aree2are para o Delphi 2.0 e verso *hare2are para o Delphi *.0, pode'se di+er que o primeiro gerador de relat)rios totalmente orientado a objetos, o c)digo inal gerado pelo cuicD e incorporado ao e$ecutvel no havendo a necessidade de se carregar arquivos e$ternos (como o caso do Feport *mith), os objetos do cuicD so ormados pela seguinte banda0

Os objetos contidos nesta banda so0 cuicDFeport

O componente cuicDFeport e o responsvel pelo controle do relat)rio% *eu trabalho trans ormar o ormulrio do Delphi em um relat)rio% Para uma prvia do relat)rio (em modo de construo) basta simplesmente dar um duplo clicD sobre o objeto mas lembre'se que os c)digos para os eventos no sero e$ecutados% 4omponente responsvel pelo controle principal do relat)rio% 4oloque'o em um ormulrio que servir de base para o relat)rio e utili+e os comandos Print ou Previe#% cF(and
%$$

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

1ma banda uma simples diviso do relat)rio% um relat)rio ser dividido em di erentes partes para a impresso, tais como0 3etalhe, 4abealho de Pgina, Fodap, Crupos, etc% &lguns tipos de bandas so impressas automaticamente, enquanto que outros tipos necessitam dos objetos ]FIroup ou ]F@etailLinO para seu controle% I poss#vel tambm utili+ar'se de m;ltiplas bandas de um mesmo tipo% cFCroup

Os grupos podem ser ormados com o au$#lio deste componente, se utili+a de cabealho e rodap para o controle do grupo% I poss#vel criar no m$imo M- n#veis (a proprieade &evel varia de - a ,) sendo que os n#veis mais bai$os dominam a impresso dos mais altos% cF3etail:inD O componente cF3etail:inD usado para criar di erentes tipos de detalhes% cF:abel

6e$tos esttico no relat)rio so ormados pelo componente cF:abel bastando para isso modi icar a propriedade "aption% I poss#vel tambm modi icar a propriedade 4aption durante a gerao do relat)rio cF>emo O componente cF>emo e usado para imprimir multiplas linhas de um campo% cF3(6e$t !ste componente responsvel pela impresso dos campos dos arquivos% cF3(4alc 4omponente utili+ado para reali+ar clculos bsicos durante a gerao do relat)rio cF*@s3ata

<mprime vrias in orma7es sobre o sistema tais como0 n;mero da pgina, data, hora ou t#tulo do relat)rio% cF*hape 1tili+ado para desenhar simples iguras geomtricas% cFPrevie2 !ste objeto responsvel pela modi icao no Previe2 padro do relat)rio%
%$;

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Eamos agora reali+ar um e$emplo simples e prtico com o cuicD, criando o mesmo relat)rio proposto com o Feport !mitB, deste modo acredito, que voc pode comparar a acilidade de ambos os geradores% M% <nicialmente 4lique no boto (Be2 Aorm) na peed Bar, ou no menu principal a 4lique no menu principal a opo ile e JeA///, em 8e# (tems, na pgina 8e# e clique no objeto entitulado .orm e altere a propriedade name para <Felato e salve o ormulrio como fFelato% N% 4oloque os seguintes objetos e aa as seguintes altera7es0 ]uerC (:ocali+ado na pgina @ata Access) , altere as seguintes propriedades0
Propriedade Ealor 3escrio Bome do &lias ou a locali+ao do diret)rio das tabelas 3atabaseBame (ase3isco *c:

*elect (%4odn3isco, (%Bomn3isco, (%6ipn3isco, 4lusula de consulta 4%3esn4ateg rom (asico as ( le t join 4ategor as 4 on ((%*ign4ateg L 4%*ign4ateg) 2here (%4odn3isco (et2een 04od-M and 04od-N order b@ (%4odn3isco &certe ambos os campos para @ata>Cpe como As loat cr@(asico Par9metro da consulta Bome do objeto

Params Bame

@ata!ource (:ocali+ado na pgina @ata Access) , altere as seguintes propriedades0


Propriedade 3ata*et Bame Ealor cr@(asico 3*(asico 3escrio Bome da tabela vinculada Bome do objeto

]uicOFeport (:ocali+ado na pgina ]Feport)


Ealor 3s(asico cr4on ere 4adastro de 43us 3escrio Bome do 3ata*ource vinculado Bome do objeto 6#tulo do Felatorio

Propriedade 3ata*ource Bame Feport6itle

Para o Objeto ]rHan? (:ocali+ado na pgina ]Feport)


Ealor rbPage?eader bd4abecalho clBav@ 3escrio 6ipo da banda (4abealho de Pgina) Bome do objeto 4or da (anda

Propriedade (and6@pe Bame 4olor

Para o Objeto ]r!Cs@ata (:ocali+ado na pgina ]Feport), crie'o clicando dentro do objeto b?"abecalBo
Ealor 6rue 6rue qrsFeport6itle &rial, MU, Begrito, (ranco ta4enter 3escrio &linha considerando a banda 3imensiona automaticamente o tamanho 6ipo do dado a ser mostrado Aonte do objeto &linhamento do objeto

Propriedade &lign6o(and &uto*i+e 3ata Aont &lignment

%$G

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Para o Objeto ]r!Cs@ata (:ocali+ado na pgina ]Feport), crie'o clicando dentro do objeto b?"abecalBo
Ealor 6rue 6rue qrs3ate6ime &rial, S, Bormal, (ranco taFightausti @ 3escrio &linha considerando a banda 3imensiona automaticamente o tamanho 6ipo do dado a ser mostrado Aonte do objeto &linhamento do objeto

Propriedade &lign6o(and &uto*i+e 3ata Aont &lignment

Para o Objeto ]rHan? (:ocali+ado na pgina ]Feport)


Ealor rb4olumn?eader bd4ab4oluna clBav@ bd4abecalho 3escrio 6ipo da banda (4abealho de 4oluna) Bome do objeto 4or da (anda (anda de depndencia

Propriedade (and6@pe Bame 4olor :inD(and

Para o Objeto ]rLabel (:ocali+ado na pgina ]Feport), crie'o clicando dentro do objeto b?"ab"oluna
Ealor 4)digo &rial, MN, Begrito, (ranco 3escrio :abel do objeto Aonte do objeto

Propriedade 4aption Aont

Para o Objeto ]rLabel (:ocali+ado na pgina ]Feport), crie'o clicando dentro do objeto b?"ab"oluna
Ealor Bome &rial, MN, Begrito, (ranco 3escrio :abel do objeto Aonte do objeto

Propriedade 4aption Aont

Para o Objeto ]rLabel (:ocali+ado na pgina ]Feport), crie'o clicando dentro do objeto b?"ab"oluna
Ealor 6ipo &rial, MN, Begrito, (ranco 3escrio :abel do objeto Aonte do objeto

Propriedade 4aption Aont

Para o Objeto ]rLabel (:ocali+ado na pgina ]Feport), crie'o clicando dentro do objeto b?"ab"oluna
Ealor 4ategoria &rial, MN, Begrito, (ranco 3escrio :abel do objeto Aonte do objeto

Propriedade 4aption Aont

Para o Objeto ]rHan? (:ocali+ado na pgina ]Feport)


Ealor rb3etail bd3etalhe bd4ab4oluna 3escrio 6ipo da banda (4abealho de 4oluna) Bome do objeto (anda de depndencia

Propriedade (and6@pe Bame :inD(and

Para o Objeto ]r@b>eKt (:ocali+ado na pgina ]Feport), crie'o clicando dentro do objeto b?@etalBe

%$L

Borland
Propriedade &uto*i+e 3ata*ource 3ataAield

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Ealor 6rue 3s(asico 4odn3isco

3escrio 3imensiona automaticamente o tamanho 3ata*ource vinculado 4ampo vinculado

Para o Objeto ]r@b>eKt (:ocali+ado na pgina ]Feport), crie'o clicando dentro do objeto b?@etalBe
Ealor 6rue 3s(asico Bomn3isco 3escrio 3imensiona automaticamente o tamanho 3ata*ource vinculado 4ampo vinculado

Propriedade &uto*i+e 3ata*ource 3ataAield

Para o Objeto ]r@b>eKt (:ocali+ado na pgina ]Feport), crie'o clicando dentro do objeto b?@etalBe
Ealor 6rue 3s(asico 6ipn3isco 3escrio 3imensiona automaticamente o tamanho 3ata*ource vinculado 4ampo vinculado

Propriedade &uto*i+e 3ata*ource 3ataAield

Para o Objeto ]r@b>eKt (:ocali+ado na pgina ]Feport), crie'o clicando dentro do objeto b?@etalBe
Ealor 6rue 3s(asico 3esn4ateg 3escrio 3imensiona automaticamente o tamanho 3ata*ource vinculado 4ampo vinculado

Propriedade &uto*i+e 3ata*ource 3ataAield

4riaremos um relat)rio simples com cabealho ((d4abecalho), <mpresso das linhas detalhe (bd3etalhe) e rodap (bdFodape), a ordem de disposio das bandas no importa, o objeto cuicDFeport responsvel por este controle% &o inal acerte a tela de modo que ique semelhante a esta0

T% Por mais incr#vel que isto possa parecer nosso relat)rio est pronto, precisamos somente mudar a chamada a partir do objeto An>enu (aproveitaremos o objeto An3gCeral criado para o uso com o Feport !mitB) chame novamente o objeto <Tenu e clique na opo .Felat)rio d Ceral/ chamando o evento on4licD=

%$N

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

U% <nsira o comando
proce?ure 6An>enu%CeralM4licD(*ender0 6Object)= begin if An3gCeral%*ho2>odal L mrOm tBen 4hama e veri ica se a 3gCeral retornou Om AitB AnFelato ?o Para o objeto AnFelato begin cr@(asico%ParamsJ-K%&sAloat 0L *tr6oAloat(An3gCeral%4amp<nicial)= !nvia os par9metros cr@(asico%ParamsJ-K%&sAloat 0L *tr6oAloat(An3gCeral%4ampAinal)= cr@(asico%Open= &bre a cuer@ cr4on ere%Previe2= 4hama o relat)rio em tela cr@(asico%4lose= Aecha a cuer@ en?= en?=

Poderiamos icar criando .n/ tipos de relat)rios di erentes mas o melhor mtodo que voc d uma olhada no diret)rio J3iret)rio de <nstalao do DelphiKk3emoskcuicDFpt e e$ecute o projeto ]r?emo/?pr% cualquer outra re erncia pode ser encontrada no documento =or? que acompanha o produto, o arquivo ]rTanual/?oc% O usurio do Delphi *.0 pode icar se perguntando porque adquirir ou aprender a utili+ar um outro gerador de relat)rio quando o Delphi j tra+ gratuitamente o Feport!mitBb O problema que acontece se restringe a distribuio de um sistema em Delphi que utili+e relat)rios gerados com o Feport!mitB este e$ige um run'time para e$ecutar (distribu#do gratuitamente tanto na verso M%- quanto na verso N%-) ocupando mais espao na mquina cliente% Becessariamente, no ser preciso enquanto voc estiver na ase de .desenhando/ o ormulrio e$ecutar o sistema para ver como icou, simplesmente d um duplo clique no objeto e o relat)rio ser automaticamente gerado% Obs% 4uidado que os eventos criados do ormulrio no sero e$ecutados%

Captulo I9
'$ltimdia
!ste cap#tulo oi inserido apenas para sanar quaisquer d;vidas e$istentes quanto ao desenvolvimento de aplica7es que envolvam multim#dia com o Delphi, a primeira parte no a+ parte do desenvolvimento do projeto piloto iniciado%

O :ue ; %ulti%dia 7
>ultim#dia e uma associao que decorre com o uso de imagens, sons e movimentos, os trs tipos de arquivos que se utili+am deste ormato de aplicao so0 M% tipo &E< ' inclui as produ7es de v#deo%

%$S

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

N% tipo ><3 ' arquivos para a produo de m;sica utili+ando a inter ace de <nstrumentos >usicais 3igitali+ados, ou ormato ><3<% T% tipo G&E ' mais comuns, inclui o registro de sons utili+ando a tecnologia >icroso tPs G&E!%% O problema principal que ocorre quanto a aplica7es multim#dia o espao #sico ocupado, por e$emplo, arquivos do tipo &E<, comparando um ilme de apenas um minuto ou menos pode ocupar cerca de O>b ou at mesmo M->b de espao em disco%

"elp&i and '$ltimedia


O objeto 6>ediaPla@er , encontrado na Component Pallet% na pgina %stem, permite o acesso aos arquivos multim#dia% O controle e$tremamente simples% 3e ato, cil criar aplica7es que envolvam som ou imagens em movimento com apenas uma ou duas linhas de c)digo% &travs deste objeto voc tem acesso e controle a rotinas mais internas atravs da >4< (4edia Control (nter6ace)% !ssas rotinas podem ser programadas para acessar toda a possibilidade do mundo multim#dia% 4om este objetos estas rotinas se tornam e$tremamente simples e intuitivas para seu uso, como veremos a seguir%

Objeto -'ediaPla<er
Para criar uma simples aplicao multim#dia crie um novo projeto, e arraste o objeto para o ormulrio, automaticamente criado uma barra de tare as multim#dia, con orme a igura abai$o0

4lique no objeto e altere a propriedade .ile8ame para 40kG<B3OG*k4?<>!*%G&E esta propriedade associa a arquivos tipo &E<, ><3< ou G&E! altere tambm a propriedade A1toOpen para -r1e, esta propriedade inicia automaticamente o arquivo% 3epois de completos estes simples passos voc j pode rodar o programa% Pressione o boto verde para ouvir o som do arquivo selecionado% >as de repente voc no ouviu nada, no se desespere a causa pode ser um destes problemas M% Eoc entrou com o nome do arquivo invlido% N% *eu sistema de multim#dia no est correto% T% & propriedade A1toOpen no est tr1e%

Fesultados idnticos ocorrem com arquivos ><3< ou &E<%

%$9

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Colocando as propriedade em modo R$ntime


3ependendo das circunst9ncias pre er#vel que o arquivo no esteja sempre aberto mas apenas quando o usurio clicar em um determinado boto% <sto pode ser obtido acilmente modi icando a propriedade A1toOpen para .alse e no evento On4licD do boto insira o seguinte comando0
proce?ure 6AormM%(uttonM4licD(*ender0 6Object)= begin >ediaPla@erM%Open= en?=

Podemos tambm alterar o arquivo a qual queremos ouvir, para isto insira o objeto Open3ialog , encontrado na Component Palette na pgina Dialo>s, e um objeto BitBtn con orme a igura abai$o0

Para o evento on4licD do objeto !eleciona insira o seguinte c)digo0


proce?ure 6AormM%*eleciona4licD(*ender0 6Object)= begin >ediaPla@erM%4lose= if Open3ialogM%!$ecute tBen begin >ediaPla@erM%AileBame 0L Open3ialogM%AileBame= >ediaPla@erM%Open= en?= en?=

1m ajuste pode ser eito para permitir que o objeto seleo tenha acesso apenas as e$tens7es &E< , G&E, or ><3% Podendo ser colocado de duas maneiras di erentes, na propriedade .ilter do objeto Open@ialog%0 M% &rquivos >ultim#dia (o%avi= o2av= o%mid) d o%avi=o%2av=o%mid N% &rquivo &E< (o%avi) d o%avi &rquivo G&E! (o%2av) d o%2av &rquivo ><3< (o%><3) d o%mid

&s barras ( d ) so utili+adas para dividir duas se7es0 .ilter 8ame e .ilter%

Pes=$isando vari)veis em modo R$n-ime


1ma amostra muito simples de um programa multim#dia, e um tanto poderoso que quase qualquer pessoa capa+ de a+e'lo, pois o programa um pouco robusto, e no aconselho a

%;0

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

tentativa por programadores ine$perientes, para as in orma7es aqui necessitadas preciso ter um controle total das capacidades multim#dia%

&ntes de iniciarmos vamos a+er uma pequena observao, principalmente relativo a dois pontos0 Para alguns programadores que procuram coisas ;teis, as in orma7es aqui presentes contm o essencial para trans orm'los em programadores multim#dia% Outra observao seria a respeito de alguns controles a arquivos multim#dia% 3 uma olhada no arquivo J3iret)rio3elphiKk*O1F4!kF6:kG<Bk>>*l*6!>%P&*, uma biblioteca de un7es que contm todas as chamada de acesso a bai$o n#vel de comandos Gindo2s para aplica7es multim#dia% &s tcnicas de acessos esto contidas no pr)prio documento% 4om estes dois pontos rescos em nossa mente, podemos iniciar o nosso estudo sobre os aspectos do objeto -4ediaPla%er% 3 uma olhada na Objeto (nspector na pgina de !ventos do objeto -4ediaPla%er voc encontrar dois mtodos0 O evento OnClic' que ocorre quando pressionado qualquer boto do controle% Por inst9ncia, atravs do par9metro enviado B1tton poss#vel saber se o boto pressionado oi o OnPla%% 1m segundo evento consiste no On8oti6% por conter a mensagem mmF4ci8oti6% que so as chamadas do Gindo2s para o inicio ou o termino de uma e$ecuo, com seus eventuais erros% &mbos os eventos sero discutidos nos pr)$imos pargra os% I poss#vel identi icar o boto pressionado atravs do evento On4licD, aqui esto todos os tipos gerados pelo -4PBtn-%pe0

btPla@0 cuando pressionado o boto verde, <niciar% btPause0 cuando pressionado o boto amarelo, Pausa% bt*top0 cuando pressionado o boto vermelho, Parar% bt(acD0 cuando pressionado o boto a+ul, &vana a imagem% bt*tep0 cuando pressionado o boto a+ul, Fetorna a imagem% btBe$t0 cuando pressionado o boto a+ul, &vano rpido%

%;%

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

btPrev0 cuando pressionado o boto a+ul, Fetorno rpido% btFecord0 cuando pressionado o boto vermelho, Cravao% bt!ject0 cuando pressionado o boto a+ul, Fetirar%
<nicialmente vamos determinar qual oi o tipo de boto pressionado, para tanto, crie para o evento OnClic' o seguinte c)digo0
proce?ure 6AormM%>ediaPla@erM4licD(*ender0 6Object= (utton0 6>P(tn6@pe= var 3o3e ault0 (oolean)= begin case (utton of btPla@0 !ditM%6e$t 0L P6ocandoP= btPause0 !ditM%6e$t 0L PPausadoP= bt*top0 !ditM%6e$t 0L PParadoP= btBe$t0 !ditM%6e$t 0L PPr)$imoP= btPrev0 !ditM%6e$t 0L P&nteriorP= bt*tep0 !ditM%6e$t 0L P&vanandoP= bt(acD0 !ditM%6e$t 0L PFetornandoP= btFecord0 !ditM%6e$t 0L PCravandoP= bt!ject0 !ditM%6e$t 0L PFetirandoP= en?= en?=

Para encontrar o que aconteceu com o processo, necessitamos do evento On8oti6%% &qui esto as mensagens enviadas pelo sistema operacional0

mcinBoti @n*uccess ul0 4omando completado com $ito mcinBoti @n*uperseded0 4omando suspenso por outra uno mcinBoti @n&borted0 Auno corrente oi interrompida mcinBoti @nAailure0 &lgum erro ocorreu%
O Delphi no reconhece estas diretivas de mensagem, mas ele converte para constantes do tipo0

nv*uccess ul indicando o $ito% nv*uperseded indicando que est suspenso, provavelmente por causa de uma pausa% nv&borted messages indicando que oi pressionado o boto parar, ou causa devido
echamento do arquivo%

ao

4licD no evento On8oti6% e coloque o seguinte c)digo0


proce?ure 6AormM%>ediaPla@erMBoti @(*ender0 6Object)= Mar *0 !tring= 6otal0 <nteger begin case >ediaPla@erM%Boti @Ealue of nv*uccess ul0 begin <nc(6otal)= * 0L PmcinBoti @n*uccess ul P R <nt6o*tr(6otal)= en?= nv*uperseded0 * 0L PmcinBoti @n*upersededP= nv&borted0 * 0L PmcinBoti @n&bortedP= nvAailure0 * 0L PmcinBoti @nAailureP= else * 0L PBo consigo identi icar a mensagemP= en?= !ditN%6e$t 0L *= if (>ediaPla@erM%Boti @Ealue L nv*uccess ul) an? (>ediaPla@erM%>ode L mp*topped) tBen

%;2

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

!ditM%6e$t 0L P&rquivo inali+adoP= en?=

!stes eventos veri icam os acontecimentos mais signi icativos que ocorreram com o dispositivo >4<% O modo corrente com que o dispositivo >4< especi icado tambm pode ser utili+ado pelo objeto -4ediaPla%er% &qui uma listagem dos valores mais comuns designados0

mcin>odenBotnFead@ mcin>oden*top mcin>odenPla@ mcin>odenFecord mcin>oden*eeD mcin>odenPause mcin>odenOpen


!stes valores so auto'e$plicativos% Por e$emplo, o modo do campo i$ado em mcin>oden*top, o dispositivo est parado% *e i$ado em mcin>odenPla@, o dispositivo est tocando% 4rie uma nova procedure Private chamada !etTo?e, e insira o seguinte c)digo0
proce?ure 6AormM%*et>ode= begin !ditU%6e$t 0L >ediaPla@erM%AileBame= case >ediaPla@erM%>ode of mpBotFead@0 !ditT%6e$t 0L Pmcin>odenBotnFead@P= mp*topped0 !ditT%6e$t 0L Pmcin>oden*topP= mpPla@ing0 !ditT%6e$t 0L Pmcin>odenPla@P= mpFecording0 !ditT%6e$t 0L Pmcin>odenFecordP= mp*eeDing0 !ditT%6e$t 0L Pmcin>oden*eeDP= mpPaused0 !ditT%6e$t 0L Pmcin>odenPauseP= mpOpen0 !ditT%6e$t 0L Pmcin>odenOpenP= else begin !ditM%6e$t 0L P3ispositivo <nativoP= !ditN%6e$t 0L P*em messagensP= !ditT%6e$t 0L PBo identi icadoP= !ditU%6e$t 0L PBo h arquivo selecionadoP= en?= en?= en?=

Para a chamada desta rotina clicD no objeto -timer e chame o evento On-imer e insira o seguinte c)digo0
proce?ure 6AormM%6imerM6imer(*ender0 6Object)= begin *et>ode= en?=

4om a propriedade (nterval deste objeto i$ada em M---, signi ica que a cada M--milisegundos ser disparada a rotina de veri icao que in ormar o estado para o objeto -4ediaPla%er% !$ecute o projeto e atente para os seguintes detalhes0

%;$

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

6oda a ve+ que or usado um boto da barra multim#dia, ser disparado o evento on4licD marcando deste modo o tipo de boto pressionado= &s mensagens da mmn>ciBoti @ ocorrem durante toda a e$ecuo da aplicao, tente utili+ar os bot7es Pausa e Parar no meio de uma e$ecuo% cuando or selecionar um novo arquivo, a aste um pouco a janela de dilogo e observe como esto os campos edit.

Observe e estude tambm o arquivo J3iret)rio3elphiKk*O1F4!kE4:k>P:&l!F %P&* ele a unidade principal de criao do objeto -4ediaPla%er%

Inserindo o %ulti%dia para o -iste%a


cue tal se alm de cadastrarmos os nossos 43_s pudessemos ouv#'los, adicione um opo do menu principal do sistema que chamar o seguinte ormulrio%

"esenvolvimento do C" Pla<er


<nicialmente, crie um novo objeto seguintes propriedades0
Ealor bs3ialog 43 Pla@er AnPla@er po*creen4enter

orm baseado na template HlanO form e altere as


3escrio !stilo da borda do ormulrio :abel do objeto (6arja a+ul do ormulrio) Bome do objeto Posio da janela (centrali+ado)

Propriedade (order*t@le 4aption Bame Position

4rie para esta nova janela os seguintes objetos0 , encontrado na Component Pallet% na pgina %stem, e altere as
3escrio (ot7es que icaro vis#veis Bome do objeto

6>ediaPla@er seguintes propriedades0


Propriedade Eisible(uttons Bame Ealor

JbtPla@,btPause,bt*top,btBe$t,bt Prev,bt!jectK 43

66imer , encontrado na Component Pallet% na pgina %stem, servir para controlar o tempo das m;sicas% Panel propriedades0
Proprie?a?e &lign &lignment

, encontrado na Component Pallete na pgina tandard, e altere as seguintes


Ealor al(ottom ta:e tausti @ @escrio &linhamento dentro do 6orm, todo no rodap &linhamento da "aption, justi icado g esquerda

%;;

Borland
(evel<nner (evelOuter (orderGidth 4aption Bame Aont

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

bv:o2ered bv:o2ered M <nsira o 43 :inha*tatus >* *ans *eri , !stilo da onte0 Bormal, 6amanho0 S, 4or0 &+ul >arinho NN

(orda T3 interna, tipo pressionado (orda T3 e$terna, tipo pressionado 6amanho da borda :abel do objeto Bome do objeto 6ipo de letra a ser mostrada no objeto, para alterar esta propriedade clique no boto &ltura do objeto

?eight

Panel propriedades0
Proprie?a?e &lign (evel<nner (evelOuter (orderGidth ?eight 4aption

, encontrado na Component Pallete na pgina tandard, e altere as seguintes


Ealor al6op bv:o2ered bvFaise N O@escrio &linhamento dentro do 6orm, todo no topo (orda T3 interna, tipo pressionado (orda T3 e$terna, tipo pressionado 6amanho da borda &ltura do objeto :abel do objeto

4rie quatro objetos Label dentro do objeto PanelN, para os dois primeiros altere a propriedade "aption para >rilBa3 e Posio3 respectivamente para os outros dois altere a propriedade Jame para Lbl>racO e Lbl>ime, altere a propriedade ont de todos para >* *ans *eri , !stilo da onte0 Bormal, 6amanho0 S, 4or0 4astanho% 4ompare o desenho do ormulrio a seguir0

cuanto ao programa vou e$plic'lo na integra, acompanhe a listagem colocando os procedimentos nos locais indicados0
unit Apla@er= interface uses *@s1tils, Gin6@pes, GinProcs, >essages, 4lasses, Craphics, 4ontrols, Aorms, 3ialogs, *td4trls, !$t4trls, >Pla@er, >>*@stem= tCpe 6AnPla@er L class(6Aorm) 430 6>ediaPla@er=

%;G

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

6imerM0 66imer= :inha*tatus0 6Panel= PanelN0 6Panel= :abelM0 6:abel= :abelN0 6:abel= :bl6racD0 6:abel= :bl6ime0 6:abel= proce?ure 6imerM6imer(*ender0 6Object)= proce?ure 43Post4licD(*ender0 6Object= (utton0 6>P(tn6@pe)= proce?ure 43Boti @(*ender0 6Object)= proce?ure Aorm4reate(*ender0 6Object)= priMate 6rilha4orrente0 b@te= Ainal6rilha4orrente0 :ongint= 6rilha:idas0 boolean= 43Pla@ing, 43Paused0 boolean= 6am6rilha0 arraC JM%%M--K of :ong<nt= function 43Pos(*ender06Object= 6rilha, >in, *ec0 b@te)0 :ongint= proce?ure <nit43(*ender06Object)= proce?ure Feset43(*ender06Object)= public / P1blic declarations 0 en?= Mar AnPla@er0 6AnPla@er= implementation /2) 3.D.40 const >ode*tr0 arraCJ6mp>odesK of stringJM-K L (PBo :idoP, PParadoP, P6ocandoP, PCravandoP, PPesquisandoP, PPausadoP, P&bertoP)= / Criado 9 Calc1la a posi,;o 0 function 6AnPla@er%43Pos(*ender06Object= 6rilha, >in, *ec0 b@te)0 :ongint= Mar i0 integer= begin result 0L -= for i 0L M to (6rilha ' M) ?o begin <nc(Fesult, mcin>*An*econd(6am6rilhaJiK))= <nc(Fesult, mcin>*An>inute(6am6rilhaJiK) o V-)= en?= <nc(Fesult, *ec)= <nc(Fesult, >in o V-)= en?= / Criado 9 (nicialiHa os drivers de CD 0 proce?ure 6AnPla@er%<nit43(*ender06Object)= Mar i 0 integer= begin if not 6rilha:idas tBen begin

%;L

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

:inha*tatus%4aption 0L P:endo as trilhasP= :inha*tatus%1pdate= for i 0L M to 43%6racDs ?o 6am6rilhaJiK 0L 43%6racD:engthJiK= 6rilha:idas 0L 6rue= en?= en?= / Criado 9 )eseta o 6orm1lJrio 0 proce?ure 6AnPla@er%Feset43(*ender06Object)= begin / &impa para trilha 0 0 6rilha4orrente 0L M= :bl6racD%4aption 0L P-P= :bl6ime%4aption 0L P--0--P= / 4odi6ica a cor para vermelho 0 :bl6racD%Aont%4olor 0L clFed= :bl6ime%Aont%4olor 0L clFed= / Para o CD Pla%er 0 43%*top= / Coloca a posicao da trilha para a inicial 0 43%*tartPos 0L mcin>aDen6>*A(M, -, -, -)= 43Pla@ing 0L Aalse= 43Paused 0L Aalse= en?= / !vento -imer do Objeto -imer* 0 proce?ure 6AnPla@er%6imerM6imer(*ender0 6Object)= Mar 6rilha, >inutes, *econds 0 b@te= str>inuto, str*egundo0 *tring= Pos0 :ong<nt= begin / Acerta o estado da linha 0 if 43Paused tBen :inha*tatus%4aption 0L PPausadoP else :inha*tatus%4aption 0L >ode*trJ43%>odeK= case 43%>ode of mp*topped0 begin / (nicialiHa o CD para ser lido 0 if not 6rilha:idas tBen <nit43(43)= / 8o caso de ser Contin1o1s Pla% 0 if 43Pla@ing an? (not 43Paused) tBen begin 43%*tartPos 0L mcin>aDen6>*A(M, -, -, -)= 43%Pla@= 43%!nabled(uttons 0L JbtPause, bt*top, btBe$t, btPrev, bt!jectK= en?= en?=

%;N

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

mpOpen0 begin 6rilha:idas 0L Aalse= Feset43(43)= en?= mpPla@ing0 begin Pos 0L 43%Position= 6rilha 0L mcin6>*An6racD(Pos)= >inutes 0L mcin6>*An>inute(Pos)= *econds 0L mcin6>*An*econd(Pos)= 6rilha4orrente 0L 6rilha= / ConstrQi os min1tos e se>1ndos para mostrar 0 str>inuto 0L <nt6o*tr(>inutes)= str*egundo 0L <nt6o*tr(*econds)= i :ength(str>inuto) Z N then str>inuto 0L P-P R str>inuto= i :ength(str*egundo) Z N then str*egundo 0L P-P R str*egundo= / 4ostra os &abels 0 :bl6racD%4aption 0L <nt6o*tr(6rilha)= :bl6ime%4aption 0L str>inuto R P0P R str*egundo= en?= en?= en?= / !vento PostClic' do Objeto CD 0 proce?ure 6AnPla@er%43Post4licD(*ender0 6Object= (utton0 6>P(tn6@pe)= begin case (utton of btPla@0 begin / 4odi6ica a cor para AH1l 4arinho 0 :bl6racD%Aont%4olor 0L clBav@= :bl6ime%Aont%4olor 0L clBav@= 43Pla@ing 0L 6rue= 43Paused 0L Aalse= 1pdate= en?= btPause0 begin / 4odi6ica a cor para )o?o 0 :bl6racD%Aont%4olor 0L clPurple= :bl6ime%Aont%4olor 0L clPurple= 43Pla@ing 0L Aalse= 43Paused 0L 6rue= 1pdate= en?= bt*top0 Feset43(43)= bt!ject0 begin 6rilha:idas 0L Aalse= Feset43(43)= en?= en?=

%;S

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

6imerM6imer(6imerM)= en?= / !vento On8oti6% do Objeto CD 0 proce?ure 6AnPla@er%43Boti @(*ender0 6Object)= begin 6imerM6imer(6imerM)= en?= / !vento OnCreate do Objeto .FPla%er 0 proce?ure 6AnPla@er%Aorm4reate(*ender0 6Object)= begin 43Pla@ing 0L Aalse= 43Paused 0L Aalse= 6rilha:idas 0L Aalse= en?= en?%

*alve o ormulrio com o nome de PlaCer e aa a chamada a partir do menu principal do seu sistema, bom divertimento%

%;9

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Captulo 9
Novos Componentes
1ma das maiores vantagens do Delphi sobre os demais concorrentes o ato da gerao de novos componentes (de novos objetos)% O e$emplo a seguir pretende colocar uma lu+ sobre o assunto mostrando os passos bsicos para o desenvolvimento de componentes, estes passos so0 4riando propriedades e mtodos= 4ontrole ao acesso as propriedades= Propriedades de leitura e escrita= !nviando e recebendo mensagens atravs dos componentes%

Criando Co%ponentes
4omponentes so como blocos de construo para as aplica7es Delphi% Eoc poder construir uma aplicao simplesmente adicionando estes blocos e modi icando os eventos, propriedades ou mtodos% 6odos os componentes possuem duas propriedades em comum0 8ame e -a>% &lguns componentes esto distribu#dos na Component Pallete% >as alguns componentes (-Application, -4en1, -4en1(tem, e - creen) so dispon#veis apenas atravs de seu c)digo% Eoc pode criar novos componentes utili+ando os seguintes passos0 M% 3erivando os novos componentes de um componente j e$istente% N% >odi icando um componente% T% Fegistrando um componente% O componente criado como uma 1nit separada de um projeto, podendo ser ormado por uma ou mais 1nitRs% &p)s voc criao do componente, compilao e instalao dentro da paleta de componentes% Para usar o componente, selecione'o da Component Pallete e adicione'o ao ormulrio%

/ Classe -Component
Eoc criar um novo componente utili+ando diretamente o Code !ditor, para isso voc usar a Component !?pert% Ba verdade todos os componentes criados sero derivados de

%G0

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

componentes j e$istentes, mesmo que voc deseje criar um componente sem eventos ou propriedades ele ser herdado de uma classe j e$istente a -Component% & -Component uma classe inicial de componentes, sob ela que oi eita a rvore de componentes Delphi, por e$emplo, a classe -Control, possuem mais de `- componentes descendentes, tais como0 -BitBtn, -B1tton, -Chec'Bo?, -ColorDialo>, -ComboBo?, -.orm, -.ontDialo>, -<ro1pBo?, -+eader, -(ma>e, -&abel, -&istBo?, -4ain4en1 e -4ediaPla%er% ! voc ainda pode derivar mais alguns descendentes daqui%

:m Componente Simples
Eamos criar agora um novo componente, para tanto abra um novo projeto e selecione ile

d JeA/// selecione a pgina JeA e o item % *er mostrada a janela da Component !?pert% <n orme os seguintes par9metros con orme o desenho abai$o0

4lique no boto Om para aceitar a entrada% & Component !?pert criar automaticamente o seguinte c)digo para a chamada da 1nitM0
unit 1nitM= interface uses Gindo2s, >essages, *@s1tils, 4lasses, Craphics, 4ontrols, Aorms, 3ialogs= tCpe 4ust4ompM L class(64omponent) priMate / Private declarations 0 protecte? / Protected declarations 0 public / P1blic declarations 0 publisBe? / P1blished declarations 0 en?= proce?ure Fegister=

%G%

Borland
implementation

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

proce?ure Fegister= begin Fegister4omponents(P4ustomP, J4ust4ompMK)= en?= en?%

/dicionando o Componente a Pal&eta


Por incr#vel que parea mas voc terminou de construir seu primeiro componente, e bem verdade que ele no a+ absolutamente nada alm de abrigar as ;nicas propriedades padr7es e$istentes em qualquer componente0 8ame e -a>% >as j estamos no comeo% *alve o componente como "ust, selecionando ile X !aMe, dentro do diret)rio de instalao do Delphi na pasta Lib% Para instalar o componente selecione "omponent X #nstall/// aparecer a seguinte janela dilogo0

4lique no boto A??/// e ser mostrada a janela dilogo A?? To?ule% 1se o boto HroAse para locali+ar o arquivo "ust/PA!, note que ele ser remetido a &istBo? #nstalle? units0 e caminho do componente (se voc salvou'o em outro diret)rio) ser colocado no !earcB PatB% Para novos componentes crie um diret)rio embai$o do Delphi entitulado Lib2, pois se voc sempre colocar cada novo componente no diret)rio Lib, caso voc precise copiar apenas os seus componentes, di icilmente os distinguir dos componentes padr7es do Delphi%

%G2

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

:embre'se que o !earcB PatB um campo te$to limitado em NOO posi7es ento tambm no adianta para cada componente novo colocar um diret)rio separado, pois acilmente voc estourar o tamanho do campo !earcB PatB% Ainalmente clique no boto Om e a "OTPL#H/@"L ((iblioteca padro de componentes) ser recompilada% &o trmino da compilao, note que oi criada uma nova pgina na Component Pallete (4ustom) e adicionado o novo componente (4ustom4ompM)% Para testar seu novo componente crie um novo ormulrio insira o componente C1stomComp*% Observe atravs da Object (nspector as propriedades do seu novo componente0 8ame e -a>%

Criando Propriedades
Para o nosso componente vamos adicionar uma propriedade que arma+enar um valor inteiro, para isto chame novamente a unit do componente e insira os c)digos abai$o da declarao priMate0
tCpe 4ust4ompM L class(64omponent) priMate 3emoProp0<nteger=

&gora criaremos uma propriedade aonde o valor ser lido e escrito atravs desta varivel para tanto insira os c)digos abai$o da declarao publisBe?0
publisBe? propertC 3emoProp0 <nteger rea? 3emoProp Arite 3emoProp= en?=

& seo Public (p;blica) abriga as variveis, procedimentos ou un7es que podem ser lidos e e$ecutados por quaisquer outras units que utili+em (atravs clusula Qses) a unit em questo j a seo PublisBe? (Publicado) utili+ada para inserir propriedades ou eventos aos componentes% *alve o componente e recompile a biblioteca atravs das op7es "omponent X Febuil? LibrarC///, ao trmino da recompilao, note que para o componente oi criada uma nova propriedade de inida como @emoProp que arma+ena o valores inteiros%

';todos de /cesso
& propriedade criada pode disparar um procedimento ou uma uno para e$ecutar determinadas a7es (por e$emplo, colocando um intervalo vlido para a varivel criada)% Primeiro, escreva a seguinte uno para a uno rea? do comando propertC0
function 4ust%Cet3emoProp0 integer= begin Fesult 0L 3emoProp= en?=

!screva o procedimento para a uno Arite do comando propertC0


proce?ure 4ust%*et3emoProp(val0 integer)=

%G$

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

begin if val Y ,, tBen begin 3emoProp 0L 3emoProp= raise e$ception%create(PEalor no pode ser maior que ,,P)= en? else 3emoProp 0L val= en?=

3eclare a uno Iet@emoProp e o procedimento !et@emoProp na seo priMate, con orme o e$emplo abai$o0
priMate 3emoProp0<nteger= function Cet3emoProp0 integer= proce?ure *et3emoProp(val0 integer)=

! para a seo publisBe? troque as propriedades0


publisBe? propertC 3emoProp0 <nteger rea? Cet3emoProp Arite *et3emoProp=

*alve o componente e recompile a biblioteca atravs das op7es "omponent X Febuil? LibrarC///, note que a propriedade no mais permitir valores superiores a 99%

Criando novos tipos


3e modo semelhante aos j descritos uma propriedade pode abrigar uma lista de tipos de inidos, para tanto na seo tCpe de ina o conjunto que abrigar os tipos0
tCpe 63irecao L (dr4ima, dr(ai$o, dr:ado)=

Ba seo priMate crie uma nova varivel com base no tipo de inido0
priMate 3emoProp0<nteger= BovaProp063irecao=

! inalmente na seo publisBe? de ina a propriedade0


publisBe? propertC 3emoProp0 <nteger rea? Cet3emoProp Arite *et3emoProp= propertC BovaProp0 63irecao rea? BovaProp Arite BovaProp=

*alve o componente e recompile a biblioteca atravs das op7es "omponent X Febuil? LibrarC///, teste a nova propriedade%

Pensando e% Objetos
>as para que devemos criar novos componentesb Para aliviarmos os . uturos/ trabalhos% :embra'se quando voc copiava aqueles pequenos pedaos de rotinas (do tipo0 clculo de 4PA54C4, clculo de atorial, um cabealho de relat)rio%%%) os objetos servem e$atamente para guardamos estes .pequenos pedaos/ de blocos de programao, ou se voc pre erir o termo serve para encapsularmos estes c)digos%

%G;

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Constr$indo $m Objeto
cuando or construir objetos lembre'se que ele deve servir g vrios aplicativos, nunca construa um objeto que servir apenas a um ;nico aplicativo ( perda de tempo)% 6odo o sistema (pelo menos for =in?oAs) necessita de uma janela !obre o !istema ento vamos trans ormar a janela sobre criada no "apVtulo #E em um objeto prtico que sirva a qualquer sistema, inicie um novo projeto e crie um novo componente, para tanto abra um novo projeto e selecione ile d JeA/// selecione a pgina 8e# e o item Component% *er mostrada a janela da Component !?pert% <n orme os seguintes par9metros0 "lass Jame0 *obre3lg Ancestor tCpe0 64omponent Palette Page0 3ialogs 4lique no boto Om para aceitar a entrada% &s altera7es propropostas no objeto esto documentadas com o onte0
unit *obre3lg= / !ste objeto permite a cria,;o de 1ma Scai?a sobreS padr;o para diversos aplicativos. 0 interface uses *@s1tils, Gin6@pes, GinProcs, >essages, 4lasses, Craphics, 4ontrols, Aorms, 3ialogs, *obre= tCpe 6*obre3lg L class(64omponent) priMate AProductBame, AEersion, A4op@right, A4omments0 string= public function !$ecute0 (oolean= publisBe? propertC BomeProduto0 string rea? AProductBame Arite AProductBame= propertC Eersao0 string rea? AEersion Arite AEersion= propertC 3ireitos0 string rea? A4op@right Arite A4op@right= propertC 4omentario0 string rea? A4omments Arite A4omments= en?= const PFO4!**OFn<B6!:nTSV L TSV= PFO4!**OFn<B6!:nUSV L USV= PFO4!**OFn<B6!:nP!B6<1> L OSV= PFO4!**OFn<B6!:nSV- L SV-= PFO4!**OFn><P*nFM--- L M---= PFO4!**OFn><P*nFN--- L N---= PFO4!**OFn><P*nFT--- L T---= PFO4!**OFn><P*nFU--- L U---= PFO4!**OFn&:P?&nNM-VU L NM-VU= PFO4!**OFnPP4nV-M L V-M=

%GG

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

PFO4!**OFnPP4nV-T L V-T= PFO4!**OFnPP4nV-U L V-U= PFO4!**OFnPP4nVN- L VN-= Mar *obre3lg0 6*obre3lg= proce?ure Fegister = implementation proce?ure Fegister = begin Fegister4omponents(P3ialogsP, J6*obre3lgK)= en?= function 6*obre3lg%!$ecute0 (oolean= Mar Os<n o0 6O*E!F*<OB<BAO= *@s<n o0 6*l*6!><BAO= >em*tat0 6>!>OFl*6&61*= 3isDBo0 <nteger= begin 55 4ria a janela em mem)ria An*obre 0L 6An*obre%4reate(&pplication)= trC AitB An*obre ?o begin $$ Coloca as propriedades nas variaveis do 6orm1lario ProductBame%4aption 0L BomeProduto= Eersion%4aption 0L Eersao= 4op@right%4aption 0L 3ireitos= 4omments%4aption 0L 4omentario= 4aption 0L P*obre P R BomeProduto= Os<n o%d2O*Eersion<n o*i+e 0L si+eo (6O*E!F*<OB<BAO)= CetEersion!$(Os<n o)= $$ :ers;o do "indo#s case Os<n o%d2Plat orm<d of E!FnP:&6AOF>nG<BTNs 0 GinEersion%4aption 0L PGindo2s T%MP= E!FnP:&6AOF>nG<BTNnG<B3OG* 0 GinEersion%4aption 0L PGindo2s ,OP= E!FnP:&6AOF>nG<BTNnB6 0 GinEersion%4aption 0L PGindo2s B6P= en?= 3osEersion%4aption 0L ormat(Ptd%td Eer 0 tdP, JOs<n o%d2>ajorEersion,Os<n o%d2>inorEersion,:OGOF3(Os<n o%d2(uildBumber)K)= $$ Pe>a o processador Cet*@stem<n o(*@s<n o)= case *@s<n o%d2Processor6@pe of PFO4!**OFn<B6!:nTSV 0 4P1%4aption 0L ormat(Ptd tsP,J*@s<n o%d2BumberO Processors, P<ntel S-TSVPK)= PFO4!**OFn<B6!:nUSV 0 4P1%4aption 0L ormat(Ptd tsP,J*@s<n o%d2BumberO Processors, P<ntel S-USVPK)= PFO4!**OFn<B6!:nP!B6<1> 0 4P1%4aption 0L ormat(Ptd tsP,J*@s<n o%d2BumberO Processors, P<ntel PentiumPK)= PFO4!**OFn><P*nFM--0 4P1%4aption 0L

%GL

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

ormat(Ptd tsP,J*@s<n o%d2BumberO Processors, P><P* FM---PK)= PFO4!**OFn><P*nFN--0 4P1%4aption 0L ormat(Ptd tsP,J*@s<n o%d2BumberO Processors, P><P* FN---PK)= PFO4!**OFn><P*nFT--0 4P1%4aption 0L ormat(Ptd tsP,J*@s<n o%d2BumberO Processors, P><P* FT---PK)= PFO4!**OFn><P*nFU--0 4P1%4aption 0L ormat(Ptd tsP,J*@s<n o%d2BumberO Processors, P><P* FU---PK)= PFO4!**OFn&:P?&nNM-VU 0 4P1%4aption 0L ormat(Ptd tsP,J*@s<n o%d2BumberO Processors, P&:P?& NM-VUPK)= PFO4!**OFnPP4nV-M 0 4P1%4aption 0L ormat(Ptd tsP,J*@s<n o%d2BumberO Processors, PPo2er P4 V-MPK)= PFO4!**OFnPP4nV-T 0 4P1%4aption 0L ormat(Ptd tsP,J*@s<n o%d2BumberO Processors, PPo2er P4 V-TPK)= PFO4!**OFnPP4nV-U 0 4P1%4aption 0L ormat(Ptd tsP,J*@s<n o%d2BumberO Processors, PPo2er P4 V-UPK)= PFO4!**OFnPP4nVN0 4P1%4aption 0L ormat(Ptd tsP,J*@s<n o%d2BumberO Processors, PPo2er P4 VN-PK)= en?= >em*tat%d2:ength 0L si+eo (6>!>OFl*6&61*)= Clobal>emor@*tatus(>em*tat)= Aree>emor@%4aption 0L ormat(P6ot0 td m( 3isp0 td m(P, J6runc(>em*tat%d26otalPh@s5M-NU),6runc(>em*tat%d2&vailPh@s5M-NU)K)= 3isDBo 0L T= Aree3isD%4aption 0L PP= AreeFesources%4aption 0L PP= repeat if 3isDBo Z ` tBen Aree3isD%4aption 0L Aree3isD%4aption R ormat(Pts0 td >( P, J4hr(3isDBo R Ord(P&P)' M),6runc(3isDAree(3isDBo)5M-NU5M-NU)K) else AreeFesources%4aption 0L AreeFesources%4aption R ormat(Pts0 td >( P, J4hr(3isDBo R Ord(P&P)' M),6runc(3isDAree(3isDBo)5M-NU5M-NU)K)= inc(3isDBo)= until 3isDAree(3isDBo) L 'M= Program<con%Picture%Craphic 0L &pplication%<con= Fesult 0L (*ho2>odal L <3Om)= en?= finallC An*obre%Aree= en?= en?= en?%

Para esta primeira etapa do nosso objeto note que tudo gira em torno do procedimento EKecute (o nome se deve apenas a uma questo de padroni+ao com os outros objetos da palheta Dialo>s), atravs deste procedimento todos as outras variveis so iniciadas, resta'nos agora a criao do ormulrio, crie um novo ormulrio, A>EJghO0 Bo aproveite o ormulrio <!obre j criado pois este uma herana do ormulrio <!plasB, crie'o con orme o desenho abai$o0

%GN

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

Para os objetos dentro do painel0 altere a propriedade "aption0 Bome do Produto, Eerso, 3ireitos Fesevados e 4omentrio e a propriedade Jame0 ProductBame, Eersion, 4op@right, 4omments% Para os objetos ora do painel0 altere os objetos Labels da esquerda a propriedade "aption (!$0 1surio, 4ompanhia) e os da direita a propriedade Jame (!$0 1serBame, 4ompan@Bame)

& propriedade Jame para todos os componentes, na ordem que eles aparecem so0
>ipo 6<mage 6:abel 6:abel 6:abel 6:abel 6Aorm Objeto ProductBame :abelM :abelT :abelO :abel` PanelM >ipo 6:abel 6:abel 6:abel 6:abel 6:abel 6Panel Objeto Eersion 1serBame GinEersion 4P1 Aree3isD >ipo 6:abel 6:abel 6:abel 6:abel 6:abel Objeto 4op@right :abelN :abelU :abelV AreeFesources >ipo 6:abel 6:abel 6:abel 6:abel 6:abel

Objeto Program<con 4omments 4ompan@Bame 3osEersion Aree>emor@ An*obre

*alve a janela com o nome de !obre e o componente como !obre@lg e compile a biblioteca e instale o componente0 obreDl>.PA , teste o componente da seguinte orma0 M% Femova do projeto o ormulrio <!obre e retire sua chamada da clusula Qses= N% 4oloque o componente no ormulrio <Tenu e acerte as suas propriedades= T% <nsira a chamada ao componente na opo de !obre o !istema0
proce?ure 6An>enu%<tem&u$ilioM4licD(*ender0 6Object)= begin *obre3lg%!$ecute= en?=

U% 4ompile e rode o sistema%

%GS

Borland

3elphi e 3elphi 4lient5*erver

Desvendando o Caminho das Pedras

(em'vindo ao mundo dos objetos%

%inalmente
I acilmente reconhecido que este novo ambiente da Borland possui um poder um tanto ilimitado, tanto na criao de sistemas como no desenvolvimento de aplica7es de multim#dia resta' nos (a n)s desenvolvedores) dei$armos a imaginao luir e iniciar tudo aquilo que sempre desejamos, espero que lhe tenha ajudado ao menos a trilhar o caminho das pedras%

%G9

Você também pode gostar