Você está na página 1de 20

Borland

SUMRIO

INTRODUO..............................................................................................................3
Delphi, como Soluo para Desenvolvedores...................................................................................................3

APNDICE A.................................................................................................................7
Documentao...................................................................................................................................................7 Hardware/Software requeridos..........................................................................................................................7

APNDICE B.................................................................................................................8
Converso de Campos....................................................................................................................................... !ipos de Dados para o "nter#ase..................................................................................................................$

APNDICE C...............................................................................................................10
%plicao r&pida com o '()eto *uer+............................................................................................................,-

APNDICE D...............................................................................................................12
"mprimindo um .ormul&rio............................................................................................................................,/

APNDICE E...............................................................................................................14
!ra(alhando com 0&scaras............................................................................................................................,1

APNDICE F...............................................................................................................16
!ra(alhando com "mportao e 23portao...................................................................................................,4

APNDICE G..............................................................................................................19
Do5e melhores dicas para o Delphi................................................................................................................,$

ii

I !"#$%&'#
#em6vindo ao Delphi, o mais novo produto de alta performance da Borland. Delphi 7 um produto 8nico em sua cate9oria com(inando c:di9os totalmente compil&veis, ferramentas visuais e tecnolo9ia para a composio de (ases de dados escal&veis, possui facilidades para um r&pido desenvolvimento em plataforma Windows; e aplica<es Client/Server. 2ste tra(alho ser& seu 9uia para uma r&pida aprendi5a9em no desenvolvimento de sistemas que 9erencie (ancos de dados. ' Delphi 7 encontrado em dois produtos= Delphi Client/Server, de alta performance e facilidade para o desenvolvimento de aplica<es e suporte a (ancos de dados do tipo Cliente/Servidor. Delphi Desktop, de alta performance e facilidade para o desenvolvimento de aplica<es e suporte a (ancos de dados locais, permitindo total porta(ilidade > verso Client/Server.

%presento6lhes a se9uir al9umas informa<es detalhadas para um perfeito desenvolvimento visual, sendo que ao final de cada cap?tulo pr&tico 7 e3i(ido o c:di9o fonte completo se9uido de um resumo dos principais comandos mostrados. %o final deste estudo voc@ encontrar& ap@ndices que lhe a)udaro a resolver pequenos pro(lemas do dia6a6dia.

Delphi( )#*# S#+%&'# ,-"- D./. 0#+0.$#"./


0uitas ve5es nos per9untamos, e somos questionados, no porque de adotar o Delphi como a lin9ua9em para o desenvolvimento de sistemas A "nicialmente, 7 necess&rio conhecer que o Delphi oferece um r&pido caminho para o desenvolvimento de aplica<es nos am(ientes= Bindows;, Bindows $C; e Bindows D!;E #ancos de dados do tipo Cliente/Servidor= 'racle;, "nformi3;, "nter#ase, S+#ase; e 0icrosoft S*F Server;E %lta performance, em sistemas cr?ticosE #ase de Dados locais e aplica<es do tipo networGE %m(iente 9r&fico, visual e multim?dia.

0as o que 7 poss?vel fa5er com ele A H poss?vel criar, dentre outros, os se9uintes tipos de aplica<es em Delphi = Is&6lo como a lin9ua9em de desenvolvimento para (ancos do tipo Cliente/ServidorE %m(iente hetero9@neo para captura e envio de informa<es em diversos tipos de arquivos de dadosE Im pacote corporativo de aplica<es inteli9entes e interpretadores de dados. "ncorporando DFFJs e 2K2Js e3ternosE Lacotes multim?dia com desenho e animaoE Men7ricos utilit&rios do Bindows;E Criao de (i(liotecas NDFFO para leitura por outras aplica<es.

0as porque arriscar em um am(iente novo quando e3iste no mercado lin9ua9ens mais difundidas A Do mundo inteiro Delphi foi testado, e em ,C meses de vida produ5iu os se9uintes resultados=
3

Delphi est& sendo utili5ado no momento por mais de ,.C-- lu9ares incluindo as maiores corpora<es, consultores e or9ani5a<es de treinamentoE 2leito pela #+te 0a9a5ines como #est of Comde3 %wardE P&rios livros escritosE Mrupos de discusso e peri:dicos com dicas de desenvolvimento na BorldBi(e NConsulte >s listas da "nterDet atrav7s da palavra DELPHIOE De5enas de (i(liotecas e ferramentas para o suporte em DelphiE De5enas de arti9os em pu(lica<es do mundo inteiro, tais como PC Week, InfoWorld, Computer Reseller News, PC Ma a!ine, Windows Sour"es e muitas outras.

Lor tudo aqui e3posto fica claro que este no produto demonstra uma inovao para uma criao em alta performance de aplica<es. !odos os recursos que voc@ precisar& para o desenvolvimento de seus produtos esto a9ora dispon?veis.

d8vida.

Sempre que voc@ locali5ar este s?m(olo si9nifica que e3iste uma nota que lhe a)udar& em caso de

A,1 $2). A

D#)%*. !-&'#
% documentao inclu?da com o Delphi Client/Server=

Delphi #ser$s %uide Delphi Component Writer$s %uide Delphi Data&ase 'pli"ation Developer$s %uide S() )inks #ser$s %uide InterBase #ser$s %uide InterBase )an ua e Referen"e InterBase Data Definition ReportSmith Creatin Reports

!oda a documentao 7 encontrada em forma de livros e modo on6line Npara o se9undo caso fa56se necess&ria a instalao do %CQ'#%!; Qeader /.- que acompanha o produtoO.

3-"$4-".5S#6!4-". ".7%."2$#/
' Delphi Client/Server requer=

Windows *+,- ou superior

4. me a&/tes de espa0o livre para a instala01o m2nima 9. me a&/tes de espa0o livre para a instala01o "ompleta
um pro"essador 3.*34 ou maior 5634 re"omendado7

8 me a&/tes de R'M

Lara instalar, rode o pro9rama "DS!%FF.2K2 direto do CD Q'0 ou do disquete e prossi9a com as instru<es. Sero inclu?das informa<es adicionais no arquivo Q2%D02.!K! normalmente instalado no diret:rio RD2FLH". %l9uns e3emplos de aplica<es esto contidas no diret:rio RD2FLH"RD20'S.

A,1 $2). B

C# 0."/'# $. C-*,#/
H poss?vel, com o D8)P9I, criarmos um mesmo sistema que rode em diferentes tipos de (ases, atrav7s de um 8nico ALIAS. Lara isto precisamos que a definio, tamanho e nome dos campos e ta(elas se)am necessariamente os mesmos. %(ai3o est& a converso para quatro (ases l:9icas de dados=
Sintaxe SQL 6 para InterBase, :R'C)8 , Informi; entre outras. BDE Lgico 6 % chamada do campo interna ao D8)P9I. Paradox 6 #ases do tipo Parado;+ dBASE 6 #ases do !ipo .D#..
Sinta3e S*F S0%FF"D! "D!2M2Q D2C"0%FN3,+O DI02Q"CN3,+O .F'%!N3,+O CH%Q%C!2QNnO P%QCH%QNnO D%!2 #''F2%D #F'#Nn,,O #F'#Nn,/O #F'#Nn,3O #F'#Nn,1O #F'#Nn,CO !"02 !"02S!%0L 0'D2T %I!'"DC #T!2SNnO #D2 F:9ico fld"D!,4 fld"D!3/ fld#CD fld.F'%! fld.F'%! fldSS!Q"DM fldSS!Q"DM fldD%!2 fld#''F fldst020' fldst#"D%QT fldst.0!020' fldst'F2'#U fldstMQ%LH"C fld!"02 fld!"02S!%0L fld.F'%!, fldst0'D2T fld"D!3/, fldst%I!'"DC fld#T!2SNnO Larado3 Short Fon9 "nte9er #CD Dum(er Dum(er %lpha %lpha Date Fo9ical 0emo #inar+ .ormatted memo 'F2 Mraphic !ime !imestamp 0one+ %utoincrement #+tes d#%S2 Dum(er N4,,-O Dum(er N/-,1O D/% Dum(er N3,+O .loat N3,+O Character Character Date Fo9ical 0emo #inar+ Do %presenta 'F2 Do %presenta Do %presenta Do %presenta .loat N/-,1O Do %presenta Do %presenta
; ;

3 V preciso Ndefault= espec?fico para o driverO + V escala Ndefault= -O n V tamanho em (+tes Ndefault= -O ,6C V #F'# su(tipo Ndefault= ,O

Tipos de Dados para o InterBase


' "nter#ase suporta al9uns tipos de dados S*F, mas no suporta diretamente dados do tipo TIME ou TIMESTAMP. % lista a(ai3o cont7m os tipos de dados dispon?veis para as declara<es S*F no "nter#ase=
o!e #F'# Ta!an"o Pari&vel Preci#$o Do apresenta De#cri%$o '()eto do tipo (in&rio lar9o, poss?vel 9uardar dados 9randes, tais como 9r&ficos, te3tos e vo5 di9itali5ada. !amanho fi3o de caracteres ou tipo de strin9. ' nome tam(7m pode apresentar = &'A(A&TE(. !am(7m inclui todas as informa<es so(re a hora. 2specifica6se por preciso o n8mero de d?9itos a serem 9ravados e por escala o n8mero de casas decimais, e3emplo D2C"0%FN,-,3O 7 i9ual ao formato= ppppppp.eee. Itili5ado para valores cient?ficos, com ,C d?9itos de preciso. Lreciso simples, com 7 d?9itos de preciso. Campo do tipo lon9o.

CH%QNnO D%!2 D2C"0%F Npreciso, escalaO

n Caracteres 41 (its vari&vel

, at7 3/747 , )an ,-- at7 ,, )an C$1, Lreciso= , at7 ,C e escala de , at7 ,C ,,7 3 ,-63- at7 ,,7 3 ,-33,1 3 ,-63 at7 3,1 3 ,-3 6/.,17.1 3.41 at7 /.,17.1 3.41 Lreciso= , at7 ,C e escala de , at7 ,C 63/.74 at7 3/.747 , at7 3/747

D'I#F2 LQ2C"S"'D .F'%! "D!2M2Q

41 (its 3/ (its 3/ (its

DI02Q"C Npreciso, escalaO

vari&vel

2specifica6se por preciso o n8mero de d?9itos a serem 9ravados e por escala o n8mero de casas decimais, e3emplo DI02Q"CN,-,3O 7 i9ual ao formato= ppppppp.eee. Campo m7dio. !amanho vari&vel de caracteres ou tipo de strin9. ' nome tam(7m pode apresentar = )A(*I + &'A( ou )A(*I + &'A(A&TE(.

S0%FF"D! P%QCH%QNnO

,4 (its n Caracteres

A,1 $2). C

A,+2)-&'# "8,2$- )#* # O9:.!# ;%."<


Lara no ficar quaisquer d8vidas so(re o o()eto t*uer+ , vamos utili5&6lo para a demonstrao de uma pequena aplicao, neste e3emplo, utili5aremos a (ase de dados encontrada no diret:rio &-.DELP'I.DEM/S.DATA utili5aremos as ta(elas= Customer, :rders, Parts e Items. % id7ia 7 mostrar um formul&rio com o nome do cliente li9ado a um +rid com todas as encomendas pertencentes a este cliente. Conforme a fi9ura a(ai3o=

Lara comear, coloque em um novo formul&rio um o()eto tTa0le e um o()eto tQ1er2. ' o()eto tTa0le efetuar& a li9ao com a ta(ela de Clientes N!a(ela CustomerO, enquanto que o tQ1er2 ir& e3trair os detalhes da encomenda N!a(elas :rders, Parts e ItemsO apropriados a cada cliente. 's dados esto em uma ta(ela Parado;, pelo que na propriedade DataBa#e a!e 7 colocado o nome do diret:rio que cont7m os dados Nou defina o nome do %lias= D#DemosO. % li9ao 7 completada atrav7s da definio das propriedades Ta0le a!e e Index a!e, e se alternarmos a propriedade Acti3e para true vemos os dados reais, mesmo durante a fase de construo do formul&rio. Se os re9istros contendo os detalhes dos pedidos estivessem todos em uma 8nica ta(ela, a )uno poderia ser facilmente reali5ada pela definio das propriedades Ma#terSo1rce e Ma#ter4ield de um se9undo o()eto ta(ela, mas, uma ve5 que necessitamos de dados de mais de uma ta(ela N :rders e Produ"tsO, esta t7cnica simples no funciona. ' controle de consulta recupera um con)unto diferente de re9istros para cada cliente, e3traindo dados das duas ta(elas li9adas. ' Delphi oferece duas t7cnicas para fa5er isto= Ima delas envolve o uso de vari&veis Calculadas para uma das tr@s ta(elas em questoE uma outra Nmais simplesO envolve > atri(uio de um valor > propriedade SQL do o()eto tQ1er2, ou se)a, uma instruo SQL apropriada. Deste e3emplo, vamos fa5er colocando al9um c:di9o no evento /nData&"ange do o()eto DataSo1rce. Fem(re6se que este evento 7 chamado sempre que o re9istro corrente 7 alterado. "nsira a se9uinte instruo na propriedade SQL do o()eto tQ1er2=
S2F2C! 'rders.'rderDo, "tems.*t+, Larts.Description, Larts.FistLrice 56

.Q'0 'rders, "tems, Larts BH2Q2 'rders.'rderDo V "tems.'rderDo %DD "tems.LartDo V Larts.LartDo %DD 'rders.CustDo V =CustDoE

Qepare no c:di9o SQL na vari&vel <CustNo, v& para a propriedade Para!# do o()eto tQ1er2 e coloque para a vari&vel CustDo criada o Data t27e como =loat, est& vari&vel ser& passada para o SQL atrav7s do evento /nData&"ange do o()eto DataSo1rce, insira o se9uinte c:di9o=
7roced1re !.orm,.DataSource/DataChan9eNSender= !'()ectE .ield= !.ieldOE 0egin *uer+,.CloseE *uer+,.LaramsW-X.%s.loat =V !a(le,CustDo.PalueE *uer+,.'penE endE

seqY@ncia=

Qelem(rando no Delphi os dados fluem da (ase de dados para o formul&rio na se9uinte


#ase de Dados o()eto DataSet Nt!a(le ou t*uer+O o()eto DataSource o()eto Campo

' o()eto DataSo1rce 7 necess&rio, pois os o()etos de campo no podem li9ar6se diretamente aos o()etos do DataSet, mas apenas atrav7s de um o()eto DataSo1rce. Lor conse9uinte, para cada o()eto DataSet tam(7m 7 colocado no formul&rio um o()eto DataSo1rce. .inalmente, so adicionados o()etos de cai3a de edio de te3to, um o()eto +rid para as linhas da encomenda e um o()eto d(Davi9ator li9ado a ta(ela de Customer, rode o pro)eto. o()eto +rid est& li9ado ao o()eto tQ1er2 Natrav7s do o()eto DataSo1rceO, ento este se atuali5a automaticamente com os novos resultados das consultas.

55

A,1 $2). D

I*,"2*2 $# %* F#"*%+8"2#
Lara imprimir um formul&rio no tem nenhum se9redo, e3iste o comando PRIN> relacionado a formul&rios, o pro(lema se inicia quando o formul&rio ultrapassa as dimens<es da tela do seu monitor, ou se)a, a lar9ura e altura dele 7 maior que a tela. Di9amos um formul&rio qualquer que tenha a propriedade Hor5Scroll#ar.Qan9e V 74 e PertScroll#ar.Qan9e V ,-- Nisto corresponde a uma folha de papel tamanho %1O. ' pro9rama a(ai3o resolve e3atamente este pro(lema, imprimindo somente o()etos= Tla0el, TEdit, TMe!o, TDBText, TDBEdit e TDBMe!o, utili5a a (i(lioteca Printers para fa5er o servio, coloque um (oto qualquer no formul&rio que dese)e imprimir e para o evento onClicG, di9ite os se9uintes comandos=
7roced1re !form,.Speed#utton,ClicGNSender= !'()ectOE 3ar C = arra+W-../CCX of charE CFen, ScaleK, ScaleT, "nd = "nte9erE .ormat = BordE DC = HDCE 0Comp = !memoE Q = !QectE 0egin Lrinter.#e9inDocE DC =V Lrinter.Canvas.HandleE ScaleK =V MetDeviceCapsNDC, F'ML"K2FSKO div Li3elsLer"nchE ScaleT =V MetDeviceCapsNDC, F'ML"K2FSTO div Li3elsLer"nchE 8or "nd =V - to ComponentCount 6, do i8 NComponentsW"ndX i# !CustomFa(elO or NComponentsW"ndX i# !Custom2ditO t"en 0egin 0Comp =V !0emoNComponentsW"ndXOE i8 N0Comp.visi(leO t"en 0egin Lrinter.Canvas..ont =V 0Comp..ontE DC =V Lrinter.Canvas.HandleE Q =V 0Comp.#oundsQectE Q.!op =V NQ.!op Z PertScroll#ar.LositionO [ ScaleTE Q.Feft =V NQ.Feft Z Hor5Scroll#ar.LositionO [ ScaleKE Q.#ottom =V NQ.#ottom Z PertScroll#ar.LositionO [ ScaleTE Q.Qi9ht =V NQ.Qi9ht Z Hor5Scroll#ar.LositionO [ ScaleTE i8 Nnot NComponentsW"ndX i# !CustomFa(elOO and N0Comp.#orderSt+le V (sSin9leO t"en Lrinter.Canvas.Qectan9leNQ.Feft, Q.!op, Q.Qi9ht, Q.#ottomOE .ormat =V D!\F2.!E i8 NComponentsW"ndX i# !2ditO or NComponentsW"ndX i# !Custom0asG2ditO t"en .ormat =V .ormat or D!\S"DMF2F"D2 or D!\PC2D!2Q el#e 0egin i8 0Comp.BordBrap t"en .ormat =V D!\B'QD#Q2%]E i8 0Comp.%li9nment V taCenter t"en .ormat =V .ormat or D!\C2D!2QE i8 0Comp.%li9nment V taQi9htUustif+ t"en .ormat =V .ormat or D!\Q"MH!E Q.#ottom =V Q.#ottom Z Lrinter.Canvas..ont.Hei9ht Z ,E endE CFen =V 0Comp.Met!e3t#ufNC,/CCOE Q.Feft =V Q.Feft Z ScaleK Z ScaleKE Draw!e3tNDC, C, CFen, Q, .ormatOE endE 59

endE Lrinter.2ndDocE CloseE endE

Se voc@ conhece um pouco de Pas"al ?+. no acredito que voc@ teve dificuldades em interpretar o pro9rama, se voc@ no conhece aqui vo al9umas dicas= "nicialmente foi declarado uma s7rie de vari&veis que sero utili5adas posteriormente. 2 ento iniciado o o()eto de impresso Printer atrav7s do comando=
Lrinter.#e9inDocE

' o()eto imprime atrav7s de uma su(classe conhecida por Canvas. 2sta classe e que torna poss?vel a criao de toda a interface 9r&fica do Delphi N2ste o()eto parte de um encapsulamento da Bindows HDCO. Ima forma simples de se imprimir seria utili5ar os se9uintes comandos=
Lrinter.#e9inDocE Lrinter.Canvas.!e3t'utN-, -, ^2st& imprimindo...JOE Lrinter.2ndDocE

0as, para se o(ter uma c:pia fiel do formul&rio 7 preciso fa5er mais do que isto, inicialmente e chamada a propriedade handle Nesta fa5 uma chamada a Bindows MD" chamando fun<es da %L" para requerer o modo de desenho dos o()etos envolvidosO, pr:3imo passo 7 verificar o tipo de escala Nem pi3elsO da lar9ura e altura da )anela a ser impressa. %9ora resta verificar o()eto a o()eto Ndo tipo )a&el ou do tipo 8ditO e enviar suas caracter?sticas para os dados da classe Canvas e imprim?6los. Fem(re6se o padro de impresso do Bindows; 7 emitir a lista9em somente quando a mesma estiver completa e isto s: acontecer& no comando =
Lrinter.2ndDocE

Ima outra sa?da para a impresso de seus relat:rios pode ser conse9uida atrav7s da utili5ao de in8meras (i(liotecas prontas que fa5em o acesso ao o()eto >Printer. 2ntre elas e3istem a QeportLrint; Nda e3rona De#ign#O que pode ser adquirido uma verso de demonstrao atrav7s da internet atrav7s do se9uinte endereo= ftp.primenet.com/users/)/)9unGel /delphi/rprinter.5ip

53

A,1 $2). E

T"-9-+=- $# )#* M8/)-"-/


%(riremos aqui este ap@ndice para esclarecermos a respeito de campos mascarados no Delphi, al9uns campos podem possuir uma mascara para edio atrav7s da propriedade Mask8dit, encontrada para os o()etos !Date.ield, !Date!ime.ield, !Strin9.ield, !!ime.ield e o o()eto. Lara montar uma m&scara, utili5a6se a propriedade EditMa#: o(servando o limite de dados que o campo poder& arma5enar. H utili5ada (asicamente para a validao ou a formatao da entrada de um determinado campo. % m&scara para os campos pode restrin9ir o uso de determinados caracteres ou formatos v&lidos, mostrando automaticamente uma )anela de no aceitao da m&scara. % validao ocorre caracter a caracter. Ise o evento :n@alidate para validar uma entrada completa. % m&scara (asicamente consiste de tr@s campos, separados por ponto e v?r9ula. % primeira parte e a m&scara propriamente dita. % se9unda parte determina se os caracteres fi3os devem ser ou no salvos com a m&scara Ne3= /, 6, N, ...O. % terceira parte da m&scara representa o caracter em (ranco, podendo ser su(stitu?do por outro Ne3= \, _, ...O. 2stes so os caracteres especiais utili5ados com a m&scara=
Caracter ` a b ba R F l % a C c $ c = / Itili5ao na m&scara Causa a di9itao da m&scara fique parada no primeiro caracter, fa5endo com que os caracteres di9itados que se movam. 23= `E-E\ !odos os caracteres di9itados sero convertidos para mai8sculas. 23= aaaaE-E\ !odos os caracteres di9itados sero convertidos para min8sculas. 23= baaaE-E\ %nula o uso dos caractes a e b. 23= aaaabaaaaE-E\ Itili5ado para marcar determinado caracter no especial como fi3o. 23= `RN$$$RO---6----E-E\ Qequer somente caracteres alfa(7ticos o(ri9at:rios para a posio, do tipo %6S, a65. 23= FFFE,E\ Lermite somente caracteres alfa(7ticos para a posio, mas no6o(ri9at:rios, do tipo %6S, a65. 23= lll E,E\ Qequer somente caracteres alfanum7ricos o(ri9at:rios para a posio, do tipo %6S, a65, -6$. 23= %%%E,E\ Lermite somente caracteres alfanum7ricos para a posio, mas no6o(ri9at:rios, do tipo %6S, a65, -6$. 23= aaaE,E\ Qequer um caracter o(ri9at:rio para a posio. 23= CCCE,E\ Lermite o uso de qualquer caracter para a posio, limitando apenas o n8mero de caracteres utili5ados. 23= cccE,E\ Qequer somente caracteres num7ricos o(ri9at:rios para a posio, do tipo -6$. 23= ---E,E\ Lermite somente caracteres num7ricos para a posio, no6o(ri9at:rios, do tipo -6$. 23= $$$E,E\ Lermite somente caracteres num7ricos para a posio e o uso dos sinais de 6 ou Z, no6o(ri9at:rios. 23= cccE,E\ Itili5ado como separador de horas, minutos e se9undos. Itili5ado como separador de dia, m@s e ano.

54

23emplos de 0&scaras=
Ti7o !elefone C2L Hora M;#cara `RN$$$RO---6----E,E\ -----R6$$$$E-E\ `$-=--=-- aFFE-E\ Entrada -4,3 733C73-,C-/,---13L0 4or!ata%$o N-4,O3 733C73-,C6-/,-=--=13 L0 Sa<da N-4,O3 7633C73-,C-///=--=13

55

A,1 $2). F

T"-9-+=- $# )#* I*,#"!-&'# . E>,#"!-&'#


% importao e e3portao de arquivos no Delphi pode ser reali5ada sem pro(lemas quando se tratar de ta(elas em formatos padro para o Delphi NLarado3, d#ase, 'racle, S+(ase, 'D#C, etcO o quase pro(lema era se tratando de e3portao para arquivos no formato .!K!, quase porque ele ser& resolvido a partir deste aplicativo. ,. Crie um novo pro)eto. Mrave a unidade padro como 8Ex7I!7 e o pro)eto como Ex7I!7. /. Coloque os se9uintes o()etos e faa as se9uintes altera<es= Lara o '()eto Ta0le NFocali5ado na p&9ina Data Acce##O
Pro7riedade# Data#aseDame !a(leDame &on8ig1ra%$o D(Demos 20LF'T22

Lara o '()eto /7enDialog5 NFocali5ado na p&9ina Dialog#O


Pro7riedade# Default23t .ilter &on8ig1ra%$o !K! %rquivo !e3tod[.!K!

Lara o '()eto Sa3eDialog5 NFocali5ado na p&9ina Dialog#O


Pro7riedade# Default23t .ilter &on8ig1ra%$o !K! %rquivo !e3tod[.!K!

Lara o '()eto B1tton NFocali5ado na p&9ina StandardO


Pro7riedade# Caption Dame &on8ig1ra%$o e23porta #ut23porta

Lara o '()eto B1tton NFocali5ado na p&9ina StandardO


Pro7riedade# Caption Dame &on8ig1ra%$o e"mporta #ut"mporta

' maior tra(alho da codificao ficaria por conta de criar )anelas de Salvar e %(rir mas todo esse tra(alho 7 reali5ado pelos o()etos /7enDialog e Sa3eDialog. ' resto do c:di9o 7 (em simples ve)amos= Lara o evento /n&lic: do o()eto #ut23porta

7roced1re !.orm,.#ut23portaClicGNSender= !'()ectOE 3ar %rq= !e3t.ileE 0egin i8 SaveDialo9,.23ecute t"en 0egin Screen.Cursor =V crHourMlassE =it" !a(le, do 0egin 'penE .irstE i8 not 2'. t"en 56

0egin %ssi9n.ileN%rq, SaveDialo9,..ileDameOE QeBriteN%rqOE re7eat BriteFnN%rq,.ield#+DameNf2mpDofO.%sStrin9 Z fdf Z .ield#+DameNfFastDamefO.%sStrin9 Z fdf Z .ield#+DameNf.irstDamefO.%sStrin9 Z fdf Z .ield#+DameNfLhone23tfO.%sStrin9 Z fdf Z .ield#+DameNfHireDatefO.%sStrin9 Z fdf Z .ield#+DameNfSalar+fO.%sStrin9 Z f[fOE ne3tE 1ntil 2'.E Close.ileN%rqOE endE closeE endE Screen.Cursor =V crDefaultE endE endE

"nicialmente vamos e3portar o arquivo Nno caso 2mplo+eeO, o funo do comando A##ign4ile e iniciar um o()eto de arquivo te3to Ndeterminada pelo tipo de vari&vel Text4ileO e o comando (e>rite prepara o o()eto iniciado para a 9ravao. Fem(re6se que um arquivo te3to s: pode rece(er lo9icamente te3to definido pelos comandos >rite Ninsere um te3to em determinado arquivo e o cursor de 9ravao permanece na posioO e >riteLn Ninsere um te3to em determinado arquivo e o cursor de 9ravao inicia uma nova linhaO ento o 8nico tra(alho ser& de percorrer o nosso arquivo com o comando (e7eat. Lara o evento /n&lic: do o()eto #ut"mporta

7roced1re !.orm,.#ut"mportaClicGNSender= !'()ectOE 3ar %rq= !e3t.ileE !e3to= StringE "= "nte9erE 81nction 0ontaPariavel= StringE 3ar monta= Strin9E 0egin monta =V ffE incN"OE ="ile !e3toW"X ba f[f do 0egin i8 !e3toW"X V fdf t"en (reaGE monta =V monta Z !e3toW"XE incN"OE endE result =V montaE endE 0egin i8 'penDialo9,.23ecute t"en 0egin Screen.Cursor =V crHourMlassE !a(le,.'penE %ssi9n.ileN%rq, 'penDialo9,..ileDameOE QesetN%rqOE i8 not 2'.N%rqO t"en re7eat QeadFnN%rq,!e3toOE =it" !a(le, do 0egin "nsertE i =V -E 57

.ield#+DameNf2mpDofO.%sStrin9 =V 0ontaPariavelE .ield#+DameNfFastDamefO.%sStrin9 =V 0ontaPariavelE .ield#+DameNf.irstDamefO.%sStrin9 =V 0ontaPariavelE .ield#+DameNfLhone23tfO.%sStrin9 =V 0ontaPariavelE .ield#+DameNfHireDatefO.%sStrin9 =V 0ontaPariavelE .ield#+DameNfSalar+fO.%sStrin9 =V 0ontaPariavelE LostE endE 1ntil 2'.N%rqOE Close.ileN%rqOE !a(le,.CloseE Screen.Cursor =V crDefaultE endE endE

Pamos a9ora importar o arquivo Nno caso 2mplo+eeO, o funo do comando A##ign4ile e inicar um o()eto de arquivo te3to Ndeterminada pelo tipo de vari&vel Text4ileO e o comando (e#et prepara o o()eto iniciado para a 9ravao. 's comandos de leitura so (ead NF@ um caractere de determinado arquivoO e (eadLn NF@ uma linha de determinado arquivoO ento o tra(alho a9ora ser& de separar em pedaos a linha lida isto 7 reali5ado na funo Monta)aria3el que ler& pedaos demarcados do arquivo e3portado.

58

A,1 $2). G

D#?. *.+=#"./ $2)-/ ,-"- # D.+,=2


Deste 8ltimo ap@ndice do tra(alho reservei uma coisa especial, pesquisei em todos os documentos tipo >ips A >ri"ks NDicas e !ruquesO e encontrei um documento que falava so(re as on5e melhores dicas para o Delphi. %utor= Laul Hardin9 ,---14./4-1_Compuserve.Com Nal9umas foram alteradasO ,. Como fa5er para o computador soar o (eep=
messa9e#eepN-OE

/. Como pausar um pro9rama por determinado n8mero de se9undos=


var DumSec= Small"ntE Start!ime= Fon9"ntE (e9in Start!ime =V DowE repeat %pplication.Lrocess0essa9esE until Dow a Start!ime Z DumSec [ N,//1/4-/4-OE endE

3. Como mostrar o mouse como uma ampulheta Ne depois retorn&6lo ao normalO=


tr+ Screen.Cursor =V crHourMlassE g 2screva o ao a e3ecutar aqui h finall+ Screen.Cursor =V crDefaultE endE %pplication.Lrocess0essa9esE

1. Como controlar o pressionamento da tecla b2ntera=


procedure !.orm,.2dit]e+LressNSender= !'()ectE var ]e+= CharOE g atrav7s do evento on]e+Lress do formul&rio de controle... h (e9in g se a ivar ]e+j retornar o c:di9o c,3 corresponde a b2ntera, c$ corresponde a tecla !%# h if ]e+ V c,3 then (e9in ]e+ =V c- g Suprime o som h g escreva aqui os seus comandos h endE endE

C. Como modificar a cor do te3to dentro de um campo D#Mrid dependendo do conte8do=


procedure !.orm,.D#MridDrawDataCellNSender= !'()ectE const Qect= !QectE .ield= !fieldE State= !MridDrawStateOE (e9in if !a(le,Client.%sStrin9 V ^KKKKJ then (e9in D#Mrid.Canvas.#rush.Color =V clQedE D#Mrid.Canvas..ont.Color =V clSilverE D#Mrid.Canvas..illQectNQectOE g Desenha o pano de fundo h D#Mrid,.Canvas.!e3t'utNQect.FeftZ/, Qect.!opZ,, .ield.%sStrin9OE endE endE

4. Como chamar um outro pro9rama Ntipo o notepad do Bindows;O a partir de um aplicativo Nde tr@s maneiras diferentes= normal, ma3imi5ado e minimi5adoO=
Bin23ecN^C=RwindowsRnotepad.e3eJ, SB\SH'BD'Q0%FOE Bin23ecN^C=RwindowsRnotepad.e3eJ, SB\SH'B0%K"0"S2DOE Bin23ecN^C=RwindowsRnotepad.e3eJ, SB\SH'B0"D"0"S2DOE

7. Como varrer uma ta(ela inteira=


!a(le,..irstE

5,

if not !a(le,.2of then repeat g seus comandos para a ta(ela h !a(le,.De3t until !a(le,.2ofE

. Como interceptar as teclas de funo=


procedure !.orm,..orm]e+DownNSender= !'()ectE var ]e+= BordE Shift= !ShiftStateOE (e9in if ]e+ V P]\.C then Show0essa9eN^Poc@ pressionou a .CJOE endE g pode ser usado da P]\., a P]\.,/ h

$. Como os valores de campos de uma ta(ela para outra=


g 2ste e3emplo copia apenas ta(elas de mesma estrutura h var Dum= Small"ntE (e9in for Dum =V - to !a(ela'ri9em..ieldCount 6 , do (e9in !a(elaDestino."nsertE !a(elaDestino..ieldsWDumX.%ssi9nN!a(ela'ri9em..ieldsWDumXOE !a(elaDestino.LostE endE endE

,-. Como verificar se um campo inteiro 7 par ou ?mpar=


function !estaLaraLarN!esta"nteiro = "nte9erO = (ooleanE (e9in if N!esta"nteiro div /O V N!esta"nteiro//O then result =V !rue else result =V .alseE endE

,,. Como verificar se uma strin9 cont7m um inteiro=


function "s"nte9erN!estaStrin9= Strin9O = (ooleanE (e9in tr+ Str!o"ntN!estaStrin9OE e3cept 'n 2Convert2rror do result =V .alseE else result =V !rueE endE endE

,/. Como su(trair datas=


function Su(DataNData2mprestimo= !Data!imeO = "nte9erE (e9in result =V Date 6 Data2mprestimoE endE

96