Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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.
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=
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
, 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
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
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=
' 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
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
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
' 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
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
5,
if not !a(le,.2of then repeat g seus comandos para a ta(ela h !a(le,.De3t until !a(le,.2ofE
96