Vous êtes sur la page 1sur 92

Introduo Programao Com Delphi

Edberto Ferneda
.

Parte

I
Ambiente Integrado de Desenvolvimento IDE

O Ambiente DELPHI
O ambiente de desenvolvimento do Delphi possui as caractersticas IDE (Integrated Developer Environment Ambiente Integrado de Desenvolvimento).

O DEL !I possui um con"unto de #erramentas $ue permitem #acilitar e agili%ar a constru&'o de programas( permitindo uma melhor intera&'o entre o programador e o computador. )eus principais componentes s'o* +anela rincipal +anela OBJECT INSPECTOR +anela FORM DESIGNER +anela CODE EDITOR

anela Prin!ipal
A "anela principal controla o #uncionamento do Delphi. , atrav-s dessa "anela $ue mantemos o Delphi aberto( $ue identi#icamos $ual pro"eto est. ativo( $ue e/ecutamos os comandos de compila&'o( entre outras #uncionalidades. Esta "anela pode ser dividida em tr0s partes* Menu Principal* cont-m as op&1es de utili%a&'o do DEL !I2 Barra de Ferramentas* cont-m bot1es $ue agili%am determinadas #un&1es do DEL !I2

Paleta de Componentes* cont-m diversas p.ginas de componentes $ue podem ser utili%ados na constru&'o do pro"eto.

A Janela Principal: dividida em trs partes.

"enu Prin!ipal
Assim como toda aplica&'o 3indo4s( no menu principal est'o presentes os comandos de abertura( cria&'o( compila&'o( con#igura&'o do ambiente e chamadas a #erramentas au/iliares como( por e/emplo( o Image Editor. 1# $ile Abrir( salvar( #echar e imprimir pro"etos e ar$uivos( e acrescentar novos #ormul.rios ou nits ao pro"eto $ue est. aberto.
Comando New New Appli ation New Form New Data Mod!le Open Reopen Save Save A" Save Pro#e t A" Save All Clo"e Clo"e All $"e $nit Add to Pro#e t Remove From Pro#e t Print E%it Descri!"o Abre a cai/a de di.logo #e$ Items $ue cont-m novos itens $ue podem ser criados. 5ria um novo pro"eto contendo um novo #ormul.rio( uma o ar$uivo .DP%. 5ria e adiciona um novo #ormul.rio ao pro"eto. 5ria e adiciona um novo #ormul.rio do tipo DataModule ao pro"eto. Abre uma cai/a de di.logo para carregar um pro"eto( um #ormul.rio ou uma nit no Code Editor. Apresenta um menu contendo uma lista dos 6ltimos pro"etos e m7dulos utili%ados. 8rava o ar$uivo ativo com o seu nome atual. 8rava o ar$uivo ativo com um novo nome. 8rava o pro"eto corrente com um novo nome. 8rava todos os ar$uivos abertos( tanto o pro"eto como seus m7dulos. 9echa uma nit e:ou 9ormul.rio ativo. 9echa todos os ar$uivos. Adiciona uma nit ; cl.usula uses do m7dulo ativo. Adiciona um ar$uivo ( nit:9ormul.rio) ao pro"eto. <emove um ar$uivo do pro"eto. Envia o ar$uivo ativo para a impressora. 9echa o pro"eto aberto e #inali%a a e/ecu&'o do Delphi. nit e

%# Edit 5omandos para manipular te/tos e componentes em tempo de pro"eto.

O Ambiente DELPHI

Comando $ndelete &$ndo' Redo C!t Cop( Pa"te Delete Sele t All Align To Grid Bring To Front Send To Ba ) Align Si*e S ale Ta+ Order Creation Order ,o ) Control" Add to inter-a e

Descri!"o Des#a% a 6ltima a&'o e#etuada. <everte um comando ndo. <emove um item selecionado e o coloca no Clipboard. 5oloca uma copia do item selecionado no Clipboard( permanecendo o item original. 5opia o conte6do do Clipboard na "anela Code Editor ou no #ormul.rio. <emove o item selecionado. )eleciona todos os componentes no #ormul.rio. Alinha o componente selecionado ; grade do #ormul.rio. =ove o componente selecionado para a #rente de outro componente. =ove o componente selecionado para tr.s de outro componente. Alinha os componentes selecionados. Altera o tamanho dos componentes selecionado. Altera o tamanho de todos os componentes do #ormul.rio. Altera a ordem (tabula&'o) dos componentes do #ormul.rio ativo. =odi#ica a ordem em $ue os componentes n'o visuais ser'o criados. >uando acionado( n'o permite $ue componentes se"am movidos (arrastados) de suas posi&1es De#ine um novo m-todo( evento ou propriedade para um componente Active&

&# 'ear!h Locali%a te/to( erros( ob"etos( units( vari.veis e smbolos no Code Editor.
Comando Find Find In File Repla e Sear . Again In remental Sear . Go to ,ine N!m+er Find Error Brow"e S(m+ol Descri!"o rocura por um te/to especi#icado e marca a primeira ocorr0ncia encontrada no Code Editor rocura por um te/to especi#icado e apresenta cada ocorr0ncia em uma "anela abai/o do Code Editor. rocura por um te/to especi#icado e o substitui por um novo te/to. <epete a procura. rocura por um te/to movendo o cursor diretamente ; pr7/ima ocorr0ncia do te/to digitado na barra de status. =ove o cursor para uma determinada linha. rocura pelo erro de e/ecu&'o mais recente. rocura por um determinado smbolo.

(# )ie* Apresenta (ou esconde) di#erentes elementos do ambiente Delphi e abre "anelas do depurador de c7digo (de+!gger).
Comando Pro#e t Manager Pro#e t So!r e O+#e t In"pe tor Alignment Palette Descri!"o =ostra a "anela do Pro'ect Manager. Apresenta o ar$uivo de pro"eto (.D <) no Code Editor. =ostra o (b'ect Inspector. =ostra uma "anela contendo op&1es para alinhamento de componentes no #ormul.rio (Alignment Palette). O Ambiente DELPHI 3

Brow"er Brea)point" Call Sta ) /at .e" T.read" Mod!le" Component ,i"t /indow ,i"t Toggle Form0$nit $nit" Form" T(pe ,i+rar( New Edit /indow SpeedBar Component Palette

=ostra o (b'ect Bro$ser. Apresenta uma "anela contendo uma lista dos brea)points atualmente de#inidos (Brea)points *ist). Apresenta uma lista da se$?0ncia atual das rotinas chamadas por um programa (Call +tac)). Apresenta uma "anela para visuali%ar o conte6do de vari.veis durante a e/ecu&'o de um programa (,atc- *ist). Apresenta um "anela de status dos t-reads (.-read +tatus). =ostra uma "anela contendo os m7dulos da aplica&'o. (Modules). Apresenta uma lista de todos os componentes (Components). Apresenta uma lista das "anelas abertas (,indo$ list). Alterna entre o #ormul.rio e sua nit correspondente. =ostra as nits $ue #a%em parte do pro"eto. =ostra os #ormul.rios $ue #a%em parte do pro"eto. =ostra a "anela ./pe *ibrar/ $ue permite e/aminar e criar in#orma&1es de tipo para controles Active&. Abre uma nova "anela para o Code Editor. Esconde:mostra a @arra de 9erramentas (+peedBar0. Esconde:=ostra a aleta de 5omponentes.

+# Pro,e!t ermite adicionar ou remover novos m7dulos em um pro"eto( bem como compil.Alo2
Comando Add to Pro#e t Remove -rom Pro#e t Import T(pe ,i+rar( Add To Repo"itor( Compile B!ild All S(nta% C.e ) In-ormation /e+ Deplo(ment Option" /e+ Deplo( Descri!"o Adiciona um ar$uivo ao pro"eto. <emove um ar$uivo do pro"eto. Importa uma biblioteca de tipos para um pro"eto. Adiciona um pro"eto ao (b'ect %epositor/. 5ompila todos m7dulos $ue #oram alterados desde a 6ltima compila&'o. 5ompila todos os ar$uivos do pro"eto. 5ompila o pro"eto sem passar pelo processo de lin)1edi23o. =ostra in#orma&1es sobre o pro"eto 5on#igura um controle Active& ou ActiveForm para ser e#etivamente utili%ado em seu servidor 3eb. Ap7s con#igurar e compilar o pro"eto( utili%e este comando para $ue o controle ActiveB ou Active9orm se"a utili%ado pelo servidor 3eb. Apresenta a "anela de op&1es do pro"eto (Pro'ect (ptions).

Option"

-# .un Apresenta op&1es de e/ecu&'o e depura&'o do pro"eto.


Comando R!n Parameter" Regi"ter A tive4 $nregi"ter A tive4 Server" Step Over Descri!"o 5ompila e e/ecuta a aplica&'o. Especi#ica parCmetros de iniciali%a&'o da aplica&'o. <egistra o pro"eto no 3indo4s. Disponvel >uando #or um pro"eto Active&. <emove o pro"eto do registro 3indo4s. Disponvel $uando #or um pro"eto Active&. E/ecuta um programa linha por linha( sem passar pelas O Ambiente DELPHI 4

pro ed!re" ou -!n tion". Tra e Into Tra e To Ne%t So!r e ,ine R!n To C!r"or S.ow E%e !tion Point Program Pa!"e Program Re"et Add /at . E/ecuta um programa linha por linha( passando inclusive pelas pro ed!re" e -!n iton". E/ecuta um programa parando a cada pr7/ima linha e/ecut.vel. E/ecuta a aplica&'o a partir da locali%a&'o do cursor na "anela Code Editor. osiciona o cursor no ponto de e/ecu&'o. )uspende temporariamente a e/ecu&'o de um programas. 9inali%a a e/ecu&'o do programa e libera a mem7ria. Abre a "anela ,atc- Properties onde podem ser de#inidas as vari.veis $ue ser'o visuali%adas durante a e/ecu&'o do programa. Abre o Edit Brea)point onde podem ser de#inidos brea)points (pontos de parada do programa). Abre a "anela Evaluate1Modi2/ onde podeAse calcular ou alterar o valor de uma e/press'o.

Add Brea)point Eval!ate0Modi-(

/# Component ermite a cria&'o ou instala&'o de novos componentes no DEL !I.


Comandos New Component In"tall Component Import A tive4 Control Create Component Template In"tall Pa )age" Con-ig!re Palette Descri!"o Abre o Component E3pert para criar uma novo componente. nit b.sica para um

Instala um componente em um pac)age (pacote) novo ou ". e/istente. Adiciona bibliotecas de controles Active& em um pro"eto Delphi. ersonali%a um componente e salvaAo na aleta de 5omponentes Especi#ica os pac)ages (pacotes) re$ueridos pelo pro"eto. Abre a "anela de con#igura&'o de componentes e paletas.

0# Database ossui #erramentas $ue permitem criar( modi#icar e visuali%ar 5onsultas e Dabelas de @anco de Dados.
Comandos E%plore Descri!"o Abre o Database E3plorer ou o +4* E3plorer( dependendo da vers'o do Delphi. Ambos permitem criar( visuali%ar e alterar dados e Alias. O +4* Monitor permite visuali%ar chamadas #eitas atrav-s de liga&1es )>L (+4* *in)s) ; um servidor remoto atrav-s do OD@5. O Form ,i5ard permite gerar #acilmente #ormul.rios $ue apresentam dados de um banco de dados Inter@ase( arado/( d@A)E( ou Oracle.

S5, Monitor

Form /i*ard

1# 2ools ermite visuali%ar e alterar con#igura&1es de ambiente( modi#icar a lista de programas e/ternos ao Delphi.
Comandos Environment Option" Repo"itor( Descri!"o 5on#igura o ambiente e personali%a a apar0ncia da 5omponentes. aleta de

Apresenta a "anela (b'ect %epositor/ para a con#igura&'o das p.ginas de componentes apresentados no comando #e$ do menu O Ambiente DELPHI 5

File. Con-ig!re Tool" Pa )age Colle tion Editor Apresenta a "anela .ools (ptions para adicionar ou remover programas do menu Dools. 5ria e edita cole&1es de pac)ages (pacotes). As cole&1es de pacotes s'o uma #orma conveniente de agrupar pacotes para distribui&'o a outros programadores. 5ria e edita ar$uivos de resource (.<E))( icones( bitmaps( e cursores para serem usados em aplica&1es Delphi. 5ria( visuali%a( modi#ica e consulta tabelas em #ormato arado/( d@A)E( e )>L.

Image Editor Data+a"e De")top

13# 4or5groups 5on#igura o controle de vers1es em pro"etos envolvendo v.rios programadores. O controle de vers1es do Delphi - #eito pelo Inter"olv P6CS 6er"ion Manager 789.
Comandos Brow"e P6CS Pro#e t" Manage Ar .ive Dire torie" Descri!"o Apresenta a "anela P6C+ Pro'ect na $ual pode ser #eita todas as tare#as re#erentes ao controle de vers1es. >uando a "anela P6C+ est. aberta( apresenta a "anela Arc-ive Directories $ue permite adicionar( remover ou criar diret7rios para o P6C+ 6ersion Control arma%enar in#orma&1es $ue comp1e um pro"eto. ermite salvar o pro"eto corrente em um diret7rio de controle de vers'o. Apresenta a "anela Data Directories para con#igurar a locali%a&'o de diret7rios p6blicos e privados.

Add Pro#e t to 6er"ion Control Set Data Dire torie"

11# Help A"uda do DEL !I.


Comando Content" Descri!"o )elecione uma das p.ginas (5onte6do( Indice ou Locali%ar). A p.gina Conte7do apresenta uma lista de t7picos organi%ada hierar$uicamente. A p.gina 8ndice apresenta os t7picos listados em ordem al#ab-tica. A p.gina *ocali5ar procura um te/to especi#icado. Abre a "anela 9elp posicionada na op&'o 8ndice( descrita anteriormente. Apresenta um resumo as novas caractersticas e e/tens1es do Delphi E.F em rela&'o ;s vers1es anteriores. 9ornece in#orma&1es sobre as principais caractersticas do ambiente Delphi e os #undamentos de programa&'o. Descreve a sinta/e e a semCntica da linguagem de programa&'o (b'ect Pascal. 9ornece in#orma&1es para tare#as avan&adas. 9ala sobre aplica&1es de banco de dados( componentes personali%ados e aplica&1es Internet e Intranet. E/plica como trabalhar com C(M e Active&. <e#er0ncia completa da G5L( tipos( rotinas( vari.veis e constantes. Abre seu 3eb @ro4ser e posiciona no "ite da @orland. Liga&'o direta para o "ite da @orland $ue se re#ere ao Delphi Liga&'o a "ite" de programas e servi&os. 9ornece in#orma&1es sobre suporte t-cnico. Apresenta os direitos autorais e in#orma&'o sobre a vers'o utili%ada. ossui tamb-m liga&'o para o "ite da @orland. O Ambiente DELPHI 6

:e(word Sear . /.at;" New Getting Started $"ing O+#e t Pa" al Developing Appli ation"

O+#e t and Component Re-eren e Borland <ome Page Delp.i <ome Page Borland Program" and Servi e" A+o!t=

6arra de $erramentas
A barra de #erramentas cont-m as principais op&1es do menu principal e - utili%ada para acessar os comandos de #orma mais r.pida. O con"unto de bot1es da barra de #erramentas pode ser personali%ada pressionandoAse o bot'o direito do mouse sobre ela e escolhendoAse a op&'o Properties no menu.

Paleta de Componentes
5omponentes s'o programas $ue representam os bot1es( os 5ombo@o/es( as tabelas. Etc. 5ada p.gina apresenta um con"unto de cones $ue representam as classes cu"os ob"etos $ue ser'o utili%ados nos #ormul.rios das aplica&1es. ara adicionar componentes em um #ormul.rio basta seleciona o componente e em seguida posicionaAlo no #ormul.rio. Os componentes podem ser Gisuais ou H'oAGisuais. Os componentes visuais s'o a$ueles $ue podem ser redimensionados e aparecem no #ormul.rio $uando o pro"eto est. sendo e/ecutado. Os componentes H'oAGisuais s'o visveis apenas em tempo de edi&'o e n'o podem ser redimensionados. Dodo componente Delphi - um ob"eto $ue pertence a uma classe pr-Ade#inida. Em sua maioria um componente possui Propriedades( M:todos e Eventos. Propriedades s'o dados relativos a um determinado componente( e $ue determinam suas caractersticas visuais e seu estado. or e/emplo( o tamanho de um bot'o( se uma tabela est. aberta ou #echada. Eventos s'o trechos de programas (procedures) $ue s'o e/ecutados em resposta a uma determinada a&'o. Essa a&'o pode ser o cli$ue do mouse sobre um bot'o da inter#ace( a e/clus'o de um registro em uma tabela( o #echamento de um #ormul.rio( etc. M:todos s'o procedimentos ou #un&1es $ue e/ecutam uma determinada opera&'o. Os m-todos est'o associados a um determinado ob"eto e s'o declarados na classe $ue este ob"eto pertence. or e/emplo( e/istem m-todos para abrir tabelas( #echar #ormul.rios( e/cluir registros( etc.

O Ob,e!t Inspe!tor
A "anela Ob"ect Inspector cont-m propriedades e eventos dos componentes inseridos em um #ormul.rio e tamb-m do pr7prio #ormul.rio. A "anela do Ob"ect Inspector possui um 5ombo@o/ e est. dividida em duas p.ginas.

O Ambiente DELPHI

A Janela (BJEC. I#+PEC.(%: propriedades e eventos

A p.gina Propertie" (Propriedades) permite $ue se altere os valores das propriedades dos componentes contidos no #ormul.rio ou ainda as propriedades do pr7prio #ormul.rio. +. na p.gina Event" (Eventos) estabelecemAse a&1es a serem tomadas pelo componente a partir de um evento associado ao mouse( teclado( sistema operacional( etc. O 5ombo@o/ e/istente no Ob"ect Inspector mostra o componente atualmente selecionado no #ormul.rio e apresenta uma lista com todos os componentes e/istentes no #ormul.rio.

O $orm Designer
Im #ormul.rio (9O<=) - a "anela onde o desenvolvedor constr7i sua aplica&'o. A partir de um #ormul.rio - $ue se estabelece a intera&'o usu.rioAcomputador( atrav-s de bot1es( r7tulos e outros componentes( estabelecendoAse #un&1es( m-todos ou eventos $ue ser'o ativados. Os componentes s'o dispostos na .rea 6til do 9O<=.

O Ambiente DELPHI

A Janela F(%M: inter2ace.

E/istem $uatro tipos de #ormul.rios* #ormal* - o 9O<= padr'o2 MDIForm: os 9O<=) do tipo =DI (=ultiple Document Inter#ace)( podem conter outros 9O<=) do tipo MDIChild2 MDIC-ild: s'o 9O<=) $ue sempre est'o subordinados a um 9O<= MDIForm2 +ta/(n.op: s'o 9O<=) $ue sempre #icam visveis na tela.

O Code Editor
A "anela 5ode Editor (Editor de 57digo)( - onde se desenvolve o programa #onte. , neste editor $ue se encontra a estrutura sint.tica propriamente dita da Linguagem. 5abe ressaltar( no entanto( $ue boa parte do c7digo escrito - gerado automaticamente. Ho topo do editor de c7digo encontraAse um controle de m6ltiplas p.ginas( onde cada p.gina corresponde a um m7dulo do programa (Init). 8eralmente as Inits est'o relacionadas aos #ormul.rios da aplica&'o. A cada ve% $ue se adiciona um novo #ormul.rio na aplica&'o( o Delphi adiciona tamb-m uma nova p.gina ao editor de c7digo.

O Ambiente DELPHI

A Janela C(DE EDI.(%: c;digo 2onte

O Ambiente DELPHI

10

11

6ibliote!a de Classes
or ser uma linguagem de programa&'o orientada a ob"etos o DEL !I possui uma biblioteca de classes denominada de 6C* <6isual Component *ibrar/0( para au/iliar na constru&'o de programas. A biblioteca de classes do DEL !I pode ser visuali%ada no @ro4ser (comando View|Browser do menu principal). Ho DEL !I e/istem as classes visveis e as no visveis. As classes n"o=vis>veis o#erecem controles especiali%ados $ue n'o s'o possveis ou necess.rios atrav-s da inter#ace visual. As classes n'o visveis mais comuns s'o a .Application( a .+creen e a .Printer.

Classes 7o8)is9veis
2Appli!ation
>uando se inicia um pro"eto em DEL !I( automaticamente - criada uma vari.vel Appli ation $ue - do tipo TAppli ation. Esta classe permite a intera&'o de sua aplica&'o com o 3indo4s. A atribui&'o de valores ;s propriedades do TAppli ation pode ser #eita apenas em tempo de e/ecu&'o( ou durante o desenvolvimento do pro"eto na op&'o do menu Pro#e t A Option". Os principais m:todos da classe TAppli ation s'o* %un<0* #a% com $ue a aplica&'o se"a e/ecutada. Este comando - colocado automaticamente no c7digo #onte do pro"eto (ve"a em 6iew A Pro#e t So!r e). 9elpCommand<0* carrega o ar$uivo de .elp da aplica&'o. Algumas das principais propriedades da classe TAppli ation s'o* MainForm* cont-m o #ormul.rio principal da aplica&'o2 .itle* cont-m o ttulo da aplica&'o $ue ser. apresentado para $uando estiver minimi%ada2 9elpFile* arma%ena o nome do ar$uivo de <elp da aplica&'o2 Icon* cont-m o cone $ue representa a aplica&'o.

2'!reen
>uando se inicia um pro"eto em DEL !I( automaticamente - criada uma vari.vel S reen $ue - do tipo TS reen. Esta classe cont-m as caractersticas da tela na $ual a aplica&'o est. rodando. Algumas das principais propriedades da classe TS reen s'o* Cursor * cont-m o cursor $ue est. em uso2

Cursors* cont-m a lista dos cursores disponveis para a aplica&'o2 Fonts* cont-m a lista de #ontes disponveis para a aplica&'o2 Forms* cont-m a lista de #ormul.rios da aplica&'o2 9eig-t* cont-m a altura da tela (em pi/els)2 ,idt-* cont-m a largura da tela (em pi/els).

2Printer
>uando se inicia um pro"eto em DEL !I( automaticamente - criada uma vari.vel Printer $ue - do tipo TPrinter. Esta classe cont-m as caractersticas da impressora $ue est. sendo utili%ada pelo 3indo4s( al-m de permitir a impress'o. Os principais m:todos da classe TPrinter s'o* BeginDoc<0* inicia um processo de impress'o. EndDoc<0* #inali%a um processo de impress'o. Abort<0* aborta o processo de impress'o.

#e$Page<0* inicia a impress'o em uma nova p.gina. Algumas das principais propriedades da classe TPrinter s'o* Printers* cont-m a lista de impressoras instaladas no 3indo4s. PrinterInde3* cont-m o ndice da impressora ativada. (rientation* cont-m a orienta&'o do papel. Page9eig-t* cont-m a altura da p.gina de impress'o. Page,idt-* cont-m a largura da p.gina de impress'o. Page#umber* cont-m o n6mero da p.gina $ue est. sendo impressa.

.itle* cont-m o ttulo da p.gina impressa. ara a impress'o de dados utili%ando o TPrinter - necess.rio utili%ar a classe .Canvas.

Componentes
As classes vis>veis s'o a$uelas $ue podem ser manipuladas atrav-s da aleta de 5omponentes( ou se"a( s'o os pr7prios componentes A paleta de componentes - a biblioteca de classes $ue #ornece recursos para o desenvolvimento visual em DEL !I. Os componentes G5L ( Visual Component Library) representadas na aleta de 5omponentes est'o separados em p.ginas. Os componentes visuais podem ter sua #orma e tamanho alteradas no #ormul.rio( al-m das propriedades e eventos $ue podem ser alterados no (b'ect Inspector. Eles aparecem durante a e/ecu&'o do aplicativo e/atamente como #oram de#inidos durante a constru&'o do #ormul.rio.

'2A7DA.D
A p.gina )tandard possui os componentes de inter#ace mais comuns para a constru&'o de aplica&1es 3indo4sJK:HD.

Biblioteca de la!!e!

12

P?gina +tandard: componentes mais comuns MainMenu 5ria uma barra de menus em um #ormul.rio. ara de#inir as op&1es do menu( adicione o componente =ain=enu no #ormul.rio e d0 um duploAclicL sobre ele para abrir o Menu Designer. PopupMenu 5ria um menu popup $ue aparece $uando o usu.rio clica o bot'o direito do mouse. ara de#inir as op&1es do menu e( adicione o componente opup=enu no #ormul.rio e d0 um duploAclicL sobre ele para abrir o Menu Designer. Label Apresenta um te/to $ue o usu.rio n'o poder. selecionar ou manipular. dit Apresenta um campo de edi&'o onde o usu.rio poder. digitar uma 6nica linha de te/to. Memo Apresenta uma .rea de edi&'o onde o usu.rio poder. digitar diversas linha de te/to. Button 5ria um bot'o $ue o usu.rio escolhe para iniciar uma determinada a&'o. Che!"Bo# <epresenta uma in#orma&'o do tipo )im:H'o. 8eralmente - utili%ado para representar um grupo de op&1es $ue n'o s'o mutuamente e/clusivas( podendoAse selecionar mais de uma op&'o de um mesmo grupo. $adioButton Apresenta uma in#orma&'o do tipo )im:H'o. , geralmente utili%ado para representar um grupo de op&1es mutuamente e/clusivas( podendo o usu.rio escolher apenas uma op&'o de um mesmo grupo. ListBo# Apresenta uma lista de op&1es. ComboBo# Apresenta um campo de edi&'o onde o usu.rio digita in#orma&1es diretamente em uma linha de te/to( ou escolher a partir de uma lista previamente de#inida. %!rollBar 9ornece uma #orma de alterar a .rea visvel de uma lista ou um #ormul.rio. &roupBo# ermite de#inir uma .rea para criar um grupo de componentes relacionados. $adio&roup ermite criar uma .rea contendo um agrupamento de componentes <adio@utton. Panel ermite cria uma .rea $ue podeAse agrupar diversos tipos de componentes. utili%ar o anel para criar barra de #erramentas ou linhas de status. odeAse ainda

ADDI2IO7AL
Ha p.gina Additional encontramAse outros componentes de inter#ace.

P?gina Additional: componentes especiali5ados BitBtn Biblioteca de la!!e! 13

5ria um bot'o $ue pode conter( al-m do te/to( uma #igura bitmap. %peedButton 5ria um bot'o $ue pode conter um te/to e uma #igura. Este tipo de bot'o - #re$?entemente utili%ado em grupos( em uma barra de #erramentas. Mas" dit Apresenta um campo de edi&'o onde o usu.rio digita uma 6nica linha de te/to( similar ao componente Edit. A di#eren&a - $ue o =asLEdit #ornece uma #orma de especi#icar um #ormato particular( tal como 5E ( n6mero de tele#one( etc. %trin'&rid 5ria uma tabela $ue pode ser usada para apresentar te/tos divididos em colunas e linhas. Draw&rid 5ria uma tabela $ue pode ser usada para apresentar diversos tipos de dados em #orma de tabela. Ima'e Apresenta #iguras bitmap( icon( etc. em um #ormul.rio. %hape Desenha #iguras geom-tricas no #ormul.rio. Bevel 5ria linhas e cai/as tridimensionais no #ormul.rio. %!rollBo# 5ria uma .rea $ue apresenta automaticamente barras de rolagem (scrollbars) $uando necess.rio. Che!"ListBo# Apresenta um lista similar ao List@o/( e/ceto $ue cada item possui tamb-m um 5hecL@o/. %plitter Im componente )plitter pode ser colocado entre dois componentes para permitir ao usu.rio alterar o tamanho desses componentes em tempo de e/ecu&'o. %tati!(e#t Este componente possui um te/to n'o edit.vel( como o componente Label. A di#eren&a - podeA se de#inir uma moldura ao redor do te/to. Chart Este componente desenha gr.#icos em um #ormul.rio utili%ando uma pe$uena planilha como #onte de dados

4I7&%
Os p.gina de componente 3inEM #ornece a maioria dos controles encontrados na inter#ace 3indo4s JK:HD.

P?gina ,in@A: aplicativos com a aparncia do ,indo$s BC1#.. (abControl 9ornece uma .rea contendo uma 6nica p.gina de in#orma&'o e um con"unto eti$uetas (Label). Pa'eControl De#ine m6ltiplas paginas ou se&1es de in#orma&'o em uma mesma "anela. ossui eti$uetas para acessar cada uma dessas p.ginas. Ima'eList 5ole&'o de imagens do mesmo tamanho $ue podem ser re#erenciadas atrav-s de um ndice. Este componente - usado para se gerenciar e#icientemente um grande con"unto de #iguras (cones ou bitmaps). $i!h dit De#ine uma .rea de te/to $ue suporta a de#ini&'o de tipos di#erentes de letras (#ontes)( al-m de Biblioteca de la!!e! 14

propriedades de #ormata&'o tais como alinhamento( tabula&1es( etc. (ra!"Bar De#ine um determinado valor atrav-s do deslocamento de um apontador sobre um r-gua. odeA se con#igurar a orienta&'o como vertical ou hori%ontal. Pro'ressBar @arra retangular $ue - preenchida da es$uerda para a direita( como a$uela mostrada $uando se copia ar$uivos no 3indo4s E/plorer. 9ornece um retorno visual sobre o progresso de uma opera&'o. )pDown Incrementa e decrementa valores atrav-s de uma seta para cima e uma para bai/o.. *ot+ey 5ria e apresenta combina&1es de teclas $ue poder'o ser usadas como teclas de atalho. ,nimate Apresenta um vdeo .AGI (Audio Gideo Interleaved). ossui alguns vdeos pr- de#inidos como a$ueles $ue s'o apresentados pelo 3indo4s JK $uando se e/clui ou copia um ar$uivo( por e/emplo.. Date(imePi!"er Apresenta um calend.rio para a sele&'o de data. O usu.rio pode digitar( selecionar atrav-s de um calend.rio ou atrav-s de setas para cima e para bai/o. (reeView ermite apresentar in#orma&1es atrav-s de uma estrutura hier.r$uica. ListView 9ornece di#erentes #ormas de apresentar in#orma&1es sob #orma de lista. *eaderControl Apresenta um cabe&alho $ue pode ser dividido colunas contendo te/tos ou n6meros. odeAse con#igurar o comportamento de cada uma dessas colunas para $ue( como um bot'o( e/ecute uma #un&'o especi#ica $uando o usu.rio clicar sobre ele. %tatusBar De#ine uma .rea para apresentar o estado atual de alguma opera&'o( mensagens de erro ou de alerta( avisos( etc. (oolBar Agrupa um con"unto de bot1es e outros componentes( organi%andoAos em colunas e a"ustando automaticamente seus tamanhos e posi&1es. CoolBar Apresenta uma cole&'o de linhas (5ool@and) $ue podem ser movimentados pelo usu.rio em tempo de e/ecu&'o.

':'2E"
A p.gina )Nstem possui controles especiali%ados $ue interagem com o )istema Operacional ou com algumas caractersticas de !ard4are.

P?gina +/stem: Intera!"o com o +istema (peracional (imer Dimer - um componente n'oAvisual $ue dispara um evento em determinada hora ou repetidamente ap7s um determinado intervalo de tempo. PaintBo# Apresenta uma .rea onde - permitido apresentar e editar #iguras. Este componente - utili%ado em aplica&1es de desenho. MediaPlayer Apresenta um painel de controle para apresentar e gravar in#orma&1es multimdia. Biblioteca de la!!e! 15

-leContainer 5ria uma .rea (b'ect *in)ing and Embedding (OLE) em um #ormul.rio. DdeClientConv DDE - uma antiga tecnologia para implementa&'o de comunica&'o. ara novos pro"etos deveAse utili%ar OLE. O componente DDE5lient5onv #ornece ;s aplica&1es a habilidade de estabelecer uma convers'o DDE com uma aplica&'o servidora DDE. Este componente deve trabalhar em con"unto com um componente DDE5lientItem para $ue sua aplica&'o se"a uma aplica&'o cliente DDE completa. DdeClientItem O componente DDE5lientItem de#ine o item da convers'o DDE. Itili%e este componente "unto com o componente DDE5lient5onv para implementar uma aplica&'o cliente DDE. Dde%erverConv Este componente #ornece ; aplica&'o a habilidade de estabelecer uma convers'o DDE com um aplica&'o cliente. Ao utili%ar este componentes( sua aplica&'o ser. uma servidor DDE. Este componente - utili%ado em con"unto com o componente DDE)erverItem para $ue sua aplica&'o se"a um servidor DDE completa. Dde%erverItem O componente DDE)erverItem de#ine o t7pico de uma convers'o DDE com outra aplica&'o. Este componente - utili%ado em con"unto com um componente DDE)erver5onv.

I72E.7E2
Os componentes da p.gina Internet permitem implementar aplica&1es $ue utili%em algum tipo de servi&o Internet.

Pagina Internet: Componentes para aplica!Des Internet Client%o!"et Acrescente este componente a um #ormul.rio ou Data =odule da sua aplica&'o para torn.Ala uma aplica&'o cliente D5 :I . O componente 5lient)ocLet de#ine uma cone/'o a um servidor D5 :I ( gerencia a abertura e a #inali%a&'o de uma cone/'o. %erver%o!"et Acrescente este componente a um #ormul.rio ou Data =odule para tornar sua aplica&'o um servidor D5 :I . O componente )erver)ocLet recebe as re$uisi&1es D5 :I de outras m.$uinas e estabelece tais cone/1es $uando re$uisitadas. .ebDispat!her 5onverte um Data =odule em um 3E@ =odule e permite $ue o servidor de aplica&'o 3eb responda ;s mensagens !DD . Pa'eProdu!er 5onverte um se$?0ncia !D=L em uma a string de comando !D=L $ue pode ser interpretada por uma aplica&'o cliente( por e/emplo( um @ro4ser. /uery(ableProdu!er =onta um se$?0ncia de comandos !D=L para gerar uma apresenta&'o tabular de registros provenientes de um ob"eto >uerN. Data%et(ableProdu!er =onta uma se$?0ncia de comandos !D=L para gerar uma apresenta&'o tabular de registros provenientes de um ob"eto Data)et. F(P 5ontrole ActiveB $ue #ornece acesso #.cil aos servi&os Internet File .rans2er Protocol (9D ) para trans#er0ncia de ar$uivos e dados entre uma m.$uina remota e uma local. Biblioteca de la!!e! 16

*(ML 5ontrole ActiveB $ue implementa um visuali%ador !D=L( com ou sem recupera&'o autom.tica de documentos !D=L e #ornece interpretador !D=L( assim como uma vis'o de uma p.gina !D=L. O componente !D=L pode ainda ser usado como um interpretador !D=L n'oAvisual para analisar ou processar documentos !D=L. *((P 5ontrole ActiveB $ue implementa o rotocolo 5liente !DD ( permitindo aos usu.rios recuperarem documentos !DD diretamente( sem possibilidade de navega&'o. 00(P 5ontrole ActiveB $ue permite ;s aplica&1es acessarem o leitura e escrita de mensagens no servidor de ne$s rotocolo ##.P( possibilitando

P-P 5ontrole ActiveB $ue recupera correios eletrOnicos de servidores IHIB ou outro servidor $ue suporta o protocolo O E. %M(P 5ontrole ActiveB $ue permitem as aplica&1es acessarem a servidores de correio eletrOnico )=D e a capacidade de enviar mensagens. (CP 5ontrole ActiveB $ue implementa o protocolo D5 servidoras( #ornecendo #.cil acesso aos seus servi&os. para aplica&1es cliente e aplica&1es

)DP 5ontrole ActiveB $ue #ornece #.cil acesso aos servi&os do protocolo DP (ID ). Implementa o 3in)ocL para cliente e servidor( e representa um ponto de comunica&'o utili%ando servi&os ID . ode ainda ser usado para enviar e receber dados ID .

DA2A ACCE''
De uma #orma geral( os componentes da p.gina Data Access representam e d'o acesso aos dados arma%enadas #isicamente.

P?gina DataAcess: Componentes de acesso a Banco de Dados Data%our!e Age como um condutor entre um componente Dable( >uerN( )tored roc e componentes de apresenta&'o de dados tais como D@8rid( D@Edit( etc. (able <ecupera dados de um tabela atrav-s do @DE( #ornecendoAos a um ou mais componentes Data)ource. /uery Itili%a declara&1es )>L para recuperar dados de uma tabela atrav-s do @DE( #ornecendoAos a um ou mais componentes do Data)ource. %toredPro! , utili%ado $uando uma aplica&'o cliente deve e/ecutar um procedimento arma%enado no servidor de banco de dados. , constitudo de um grupo de instru&1es arma%enados como se #osse uma tabela( e e/ecuta uma tare#a $ue se repete com #re$?ente no servidor( retornando alguns resultados para a aplica&'o cliente. Database 5on#igura uma cone/'o a um banco de dados( especialmente um banco de dados remoto. %ession 9ornece controles a grupos de componentes Data@ase $ue podem ser associados a ele. Im componente )ession de#ault - automaticamente criado para cada aplica&'o de @anco de Dados. A cria&'o manual de componentes )ession - necess.ria somente na cria&'o de aplica&1es multithread $ue utili%am de banco de dados. Biblioteca de la!!e! 17

Bat!hMove 5opia a estrutura de uma tabela ou os seus dados. ode ser usado para copiar tabelas inteiras de um determinado #ormato para outro. )pdate%/L ermite utili%ar o recurso de cac-ed updates com um Data)et de apenas leitura. or e/emplo( poderia se utili%ar um componente Ipdate)>L para possibilitar a atuali%a&'o de um Data)ets abilitando a atuali%a&'o de Data)ets de apenas leitura. Provider 9ornece dados de uma aplica&'o multiAtiered servidora para um Data)et de uma aplica&'o cliente (5lientData)et). ClientData%et , utili%ado como se #osse um componente Data)et na parte cliente de um aplica&'o multiAtiered. $emote%erver Em uma aplica&'o cliente( #ornece a cone/'o a uma servidor de dados remoto. $eport ermite $ue uma aplica&'o utili%e relat7rios desenvolvidos em geradores de relat7rios independentes tal como o <eport)mith( $ue era distribudo "untamente com a vers'o M.F do Delphi.

DA2A CO72.OL'
A p.gina Data 5ontrols #ornecem componentes $ue permitem construir #ormul.rios para trabalhar diretamente com dados (campos) $ue est'o arma%enados em tabelas de banco de dados.

P?gina DataControls: Componentes de inter2ace para Banco de Dados DB&rid ermite visuali%ar e editar dados de #orma tabular( como uma planilha. odeAse determinar as colunas $ue ser'o visuali%adas( o #ormato( a ordenamento( etc. DB0avi'ator 5on"unto de bot1es $ue permitem #a%er todas as opera&1es necess.rias para a manuten&'o uma tabela de banco de dados. DB(e#t Apresenta o valor de um campo do registro corrente de uma tabela. DB dit Apresenta uma cai/a de edi&'o onde podeAse visuali%ar ou alterar o valor de um campo no registro corrente de uma tabela. DBMemo ermite visuali%ar e editar campos do tipo =E=O. DBIma'e ermite visuali%ar e editar imagens bitmap arma%enadas no campo de uma tabela. DBListBo# ermite visuali%ar e editar um campo cu"a lista de possveis valores prov-m de uma lista #i/a de valores pr-Ade#inidos. DBComboBo# 5omponente to tipo 5ombo( $ue permite visuali%ar e editar um campo de uma tabela cu"a lista de possveis valores prov-m de uma lista previamente de#inida. DBChe!"Bo# Apresenta ou edita um campo booleano de uma tabela. DB$adio&roup Biblioteca de la!!e! 18

8rupo de bot1es do tipo <adio@utton $ue apresenta um con"unto de valores $ue podem ser arma%enados em um campo de uma tabela. DBLoo"upListBo# Apresenta um campo de uma tabela cu"a lista de possveis valores prov-m de um campo de outra tabela. DBLoo"upComboBo# 5omponente do tipo 5ombo( $ue permite visuali%ar e editar um campo de uma tabela cu"a lista de possveis valores prov-m de um campo de outra tabela. DB$i!h dit 5ontrole de edi&'o $ue permite apresentar e editar campos memo #ormatados. DBCtrl&rid ermite apresentar e editar dados de #orma tabular( sendo $ue cada c-lula pode conter v.rios campos de um mesmo registro. DBChart Este componente desenha gr.#icos em um #ormul.rio utili%ando uma tabela de banco de dados como #onte de dados..

DECI'IO7 C;6E
Os componentes da p.gina Decision 5ube (disponveis somente na vers'o 5lient:)erver) acrescenta recursos para an.lise multidimensional de dados atrav-s de re#er0ncia cru%ada entre tabelas de banco de dados( utili%ando as poderosas caracterstica da linguagem )>L.

P?gina DecisionCube: An?lise multidimensional de dados De!isionCube Im dep7sito de dados multidimensional. De!ision/uery 9orma especiali%ada de >uerN usada para de#inir dados em um Decision 5ube. De!ision%our!e De#ine o pivO atual de um componente Decision8rid ou um componente Decision8raph. De!isionPivot @ot1es utili%ados para abrir ou #echar dimens1es ou campos de um Decision5ube. De!ision&rid Apresenta dados multidimensionais de #orma tabular. De!ision&raph Apresenta campos de um Decision8rid como um gr.#ico dinCmico $ue se altera $uando suas dimens1es s'o modi#icadas.

<.EPO.2
Os componentes da p.gina ><eport permitem construir relat7rios atrav-s da de#ini&'o de da de#ini&'o de #ai/as( ttulos( cabe&alhos( sum.rios( grupos( etc. odeA se gerar relat7rios a partir de $ual$uer tipo de Data)ource* Dable( >uerN( etc. Durante a montagem do relat7rio - possvel visuali%aAlo atrav-s do revie4.

P?gina 4%eport: Componentes para a constru!"o de relat;rios

Biblioteca de la!!e!

19

/ui!"$ep 9ormul.rio b.sico para a constru&'o de relat7rios( onde s'o colocados todos componentes do relat7rio. , um componente visual $ue possui o tamanho do papel selecionado (AP( Legal( etc.). Im relat7rio - criado desenhandoAse #ai/as e outros componentes sobre um >uicL<ep conectado a um Data)et. /$%ubDetail 9a% a liga&'o de Data)ets adicionais em um relat7rio. Dipicamente - utili%ado para construir relat7rios do tipo =aster:Detail. /$Band Adicione um componente ><@and em seu relat7rio e con#igure a propriedade @andDNpe para especi#icar o seu comportamento durante a gera&'o do relat7rio. /$ChildBand 9ai/as #ilhas (5hild @ands) s'o usadas como e/tens1es das #ai/as regulares de um relat7rio. /$&roup De#ine o inicio e o #inal de um grupo de registros con#orme determinado atributo. , utili%ado para a de#ini&'o das Q$uebrasR de um relat7rio. /$Label Imprime um te/to ou outra in#orma&'o $ue n'o prov-m de um banco de dados. /$DB(e#t , uma vers'o do componente ><Label $ue imprime o valor de campos calculados e campos te/to( incluindo campos string( num-rico( data e memo. /$ #pr Imprime campos de banco de dados( c.lculos e te/tos est.ticos. /$%ysData Imprime in#orma&1es do sistema( tais como data( hora( n6mero da p.gina( etc. /$Memo Imprime uma grande $uantidade de te/to $ue n'o prov-m de um campo de banco de dados ode ser te/to est.tico ou podeAse alterar durante a gera&'o do relat7rio.. /$$i!h(e#t ermite imprimir no relat7rio um te/to #ormatado. /$DB$i!h(e#t ermite imprimir no relat7rio o te/to #ormatado arma%enado em um campo de uma tabela. /$%hape Apresenta #iguras simples tais como retCngulos( crculos e linha em um relat7rio. /$Ima'e Apresenta uma #igura em um relat7rio. /$DBIma'e Imprime imagens arma%enadas em campos de banco de dados. /$Composite$eport /$Preview De#ine uma .rea para a visuali%a&'o de relat7rios( no #ormato em $ue iriam ser impressos. /$Chart ermite a impress'o de diversos tipos gr.#icos.

DIALO='
Os componentes da p.gina Dialogs implementam as cai/as de di.logo do 3indo4s JK:HD. 5ai/as de di.logo #ornecem uma inter#ace consistente para opera&1es com ar$uivo( tais como abertura( grava&'o e impress'o.

Biblioteca de la!!e!

20

P?gina Dialogs: Cai3as de di?logo '? prontas. -penDialo' Apresenta uma cai/a de di.logo para abertura de ar$uivos( comum nas aplica&1es 3indo4s JK:HD. %aveDialo' Apresenta uma cai/a de di.logo para gravar ar$uivos( comum nas aplica&1es 3indo4s JK:HD -penPi!tureDialo' Apresenta uma cai/a de di.logo para abertura de ar$uivos gr.#icos( onde o usu.rio pode visuali%ar a imagem arma%enada no ar$uivo selecionado. %avePi!tureDialo' Apresenta uma cai/a de di.logo para grava&'o de ar$uivos gr.#icos. Id0ntica ao )aveDialog( e/ceto $ue possui uma .rea onde - apresentado a imagem $ue ser. gravada. FontDialo' Apresenta uma cai/a de di.logo $ue permite especi#icar o tipo de letra (#onte)( seu tamanho e estilo. ColorDialo' Apresenta a cai/a de di.logo para sele&'o de cores. PrintDialo' =ostra uma cai/a de di.logo $ue permite especi#icar in#orma&1es de impress'o( tais como as p.ginas a serem impressas( o n6mero de c7pias( etc. Printer%etupDialo' =ostra uma cai/a de di.logo $ue permite a con#igura&'o da impressora. FindDialo' Apresenta uma cai/a de di.logo $ue permite especi#icar uma )tring de pes$uisa. $epla!eDialo' =ostra uma cai/a de di.logo $ue permite especi#icar uma )tring de pes$uisa e uma )tring para substitui&'o.

4in &#1
ossui componentes de inter#ace no padr'o 3indo4s E.1. Estes componentes servem para manter a compatibilidade com as aplica&1es desenvolvidas em Delphi 1.F (3indo4s E.1).

P?gina ,in@.E: Compatibilidade com o ,indo$s @.E

'A"PLE'
Os componentes da p.gina )amples s'o e/emplos de componentes personali%ados. O c7digo #onte destes componentes est'o disponveis no diret7rio DEL !I ES)OI<5ES)A= LE) (instala&'o De#ault).

P?gina +amples: Alguns e3emplos de componentes. &au'e @arra retangular $ue - preenchida da es$uerda para a direita. 9ornece um retorno visual sobre o Biblioteca de la!!e! 21

progresso de uma opera&'o. Color&rid Apresenta uma tabela de cores. %pinButton )emelhante ao componente IpDo4n. Ima di#eren&a - $ue o componente )pin@utton permite de#inir uma #igura para os bot1es. %pin dit )emelhante ao componente IpDo4n. Ima di#eren&a - $ue ". apresenta um campo onde apresentada a in#orma&'o. Dire!tory-utline Apresenta a .rvore de diret7rios do disco( semelhante ao $ue - apresentado pelo 3indo4s:HD E/plorer. Calendar Implementa&'o de um calend.rio. IB Vent,lerter

A!tive>
Os componentes na p.gina ActiveB s'o ob"etos completos apresentados como e/emplos. ara utili%aAlos deveAse primeiro abrir um #ormul.rio ActiveB em um pro"eto ActiveB. Ap7s posicionar um componente em um #ormul.rio ActiveB( cli$ue o bot'o direito do mouse para ser apresentadas as propriedades e outros comandos.

P?gina Active&: E3emplos da utili5a!"o de componentes Active& Chart1# ermite criar gr.#icos personali%ados. )elecione as propriedades para apresentar um painel de controle $ue permite de#inir valores( apar0ncia e algumas outras caractersticas. V%%pell 6isual +peller( um corretor ortogr.#ico personali%ado. F2Boo" Formula (ne. ermite implementar uma planilha de c.lculo. VtChart ermiteAse criar gr.#icos ED. VtChart Pinnacle Frap-( permite gerar gr.#icos MD.

Biblioteca de la!!e!

22

Parte

II
Programao Orientada a Ob,etos POO

Orientao a Ob,etos
O termo Qorientado a ob"etosR tem sido t'o usado e abusado $ue o seu sentido concreto se perdeu. Dem caracteri%ado desde modelos de administra&'o a m-todos de autoAa"uda. =uitos produtos de so#t4ares $ue alegam ser orientados a ob"etos n'o o s'o. Ts ve%es possuem alguns recursos baseados em ob"etos( outras ve%es nem isso. Doda essa con#us'o de conceitos #e% com $ue ningu-m ho"e soubesse mais o $ue realmente vem a ser orientado a ob"etos. A linguagem utili%ada pelo Delphi (Ob"ect ascal) - uma orientada a ob"etos. ara melhor entender o Delphi - importante compreender os conceitos da programa&'o orientada a ob"etos ( OO). Apesar de ser um assunto muito badalado( o conceito de OO n'o - novo. Dem $uase trinta anos de idade. 9oi introdu%ido pela primeira ve% na linguagem )imulaAUV. Desde ent'o surgiram v.rias outras linguagens com esses conceitos como )mallDalL Ei##el. 5WW( a mais popular( na verdade - uma linguagem hbrida. , uma e/tens'o do 5 com suporte a classes e ob"etos( mas permite $ue se desenvolva programas sem classes ou ob"etos.

&

Por?ue ;sar Ob,etos@


As vantagens de se usar ob"etos como blocos para a constru&'o de aplica&1es s'o muitas. odeAse citar* +implicidade: Os ob"etos escondem a comple/idade do c7digo. odeAse criar uma comple/a aplica&'o gr.#ica usando bot1es( "anelas( barras de rolagem( etc.. sem conhecer detalhes do c7digo #onte utili%ado para cri.Alos. %eutili5a!"o de c;digo: Im ob"eto( depois de criado( pode ser reutili%ado por outras aplica&1es( Der suas #un&1es estendidas e serem usados como blocos #undamentais em sistemas mais comple/os.

Elementos do "odelo Orientado a Ob,etos


Os autores divergem $uanto ;s caractersticas $ue #a%em uma linguagem ser orientada a ob"etos( mas a maioria concorda $ue o paradigma se baseia em $uatro princpios b.sicos* abstra&'o( encapsulamento( heran&a e polimor#ismo.

Abstrao
, o processo de e/trair as caractersticas essenciais de um ob"eto real. A abstra&'o essencial para se ter um modelo #iel da realidade. O con"unto de caractersticas resultante da abstra&'o #orma um tipo abstrato de dado( com in#orma&1es sobre estado e comportamento. A abstra&'o nem sempre produ% os mesmos resultados. Depende do conte/to onde utili%ado. Ou se"a( a abstra&'o de um ob"eto por uma pessoa pode ser di#erente na vis'o de outra. or e/emplo( para um mecCnico( um carro - caracteri%ado pela marca(

modelo( pot0ncia( etc. +. um usu.rio comum o caracteri%a pela cor( marca modelo( pre&o. E #inalmente( para o DED<AH( um carro - totalmente caracteri%ado pela placa( propriet.rio( marca( modelo( cor e n6mero de chassi.

En!apsulamento
, o processo de combinar tipos de dados e #un&1es relacionadas em um 6nico bloco de organi%a&'o e s7 permitir o aceso a eles atrav-s de m-todos determinados. or e/emplo( e/iste um n6mero determinado de coisas $ue se pode #a%er com um tocaA#itas. odeAse avan&ar( voltar( gravar( tocar( parar( interromper e e"etar a #ita. Dentro do tocaA#itas( por-m( h. varias outras #un&1es sendo reali%adas como acionar o motor( deslig.Alo( acionar o cabe&ote de grava&'o( liberar o cabe&ote( e outras opera&1es mais comple/as. Essas #un&1es s'o escondidas dentro do mecanismo do toca #itas e n'o temos acesso a elas diretamente. >uando apertamos o QplaNR o motor - ligado e o cabe&ote de reprodu&'o acionado( mas n'o precisamos saber como isso #eito para usar o toca #itas. Ima das principais vantagens do encapsulamento - esconder a comple/idade do c7digo. Outra( - proteger os dados( permitindo o acesso a eles apenas atrav-s de m-todos. Dessa maneira evitaAse $ue seus dados se"am corrompidos por aplica&1es e/ternas.

Herana
, o aproveitamento e e/tens'o das caractersticas de uma classe ". e/istente. E/istem muitos e/emplos de heran&a na nature%a. Ho reino animal( os mam#eros herdam a caracterstica de terem uma espinha dorsal por serem uma subclasse dos vertebrados. Acrescentam a essa caracterstica( v.rias outras( como Der sangue $uente( amamentar( etc. Os roedores herdam todas as caractersticas dos vertebrados e mam#eros e acrescentam outras( e assim por diante. Em programa&'o( a heran&a ocorre $uando uma classe aproveita a implementa&'o (estrutura de dados e m-todos) de uma outra classe para desenvolver uma especiali%a&'o dela. , #ormada ent'o uma hierar$uia de classes( onde cada nvel uma especiali%a&'o do nvel anterior( $ue - mais gen-rico.

PolimorAismo
, a propriedade de se utili%ar um mesmo nome para #a%er coisas di#erentes. or e/emplo( mandar algu-m correr pode produ%ir resultados di#erentes dependendo da situa&'o. )e a pessoa estiver parada e em p-( ir. obedecer ; ordem simplesmente correndo. )er a pessoa estiver no volante de um carro( o resultado ser. o aumento da press'o do p- no acelerador. Em programa&'o( uma mesma mensagem poder. provocar um resultado di#erente( dependendo dos argumentos $ue #oram passados e do ob"eto $ue o receber.. or e/emplo* o envio de uma instru&'o Qdesenhe()X para uma subclasse de QpolgonoR( poder. desenha um triCngulo( retCngulo( pent.gono( etc. dependendo da classe $ue a receber.

O ?ue B um Ob,eto@
Ob"etos s'o a base da tecnologia orientada a ob"etos. 5onsistem de modelos (abstra&1es) de ob"etos reais( com seus estados e seus comportamentos. >ual$uer ob"eto real pode ser abstrado( #iltrandoAse seus estados e comportamentos.
O"ienta#$o a Ob%eto! 25

(b'eto 5arro 8ato 5aneta DocaA#itas

Estado

Comportamento acelera( d.

Gelocidade atual( marcha( cor( troca marchas( modelo( marca partida( #reia.

nome( ra&a( com #ome( com mia( dorme( se estica( brinca( pregui&a ca&a. cor( nvel da tinta escreve( coloca mais tinta ligado( sentido da #ica( tocando( grava( toca( avan&a( volta( para( gravando pausa( e"eta( liga.

Em programa&'o( o estado de um ob"eto - representado por vari.veis( e seu comportamento - implementado com m-todos (procedimentos). Os m-todos s'o o 6nico meio de mudar o estado das vari.veis. or e/emplo( para mudar o estado do tocaA#itas para ligado( - necess.rio utili%ar o m-todo liga().

Dudo o $ue o ob"eto de so#t4are sabe (seu estado) e tudo o $ue ele pode #a%er (comportamento) - determinado pelas suas vari.veis e m-todos. Gamos representar o modelo de um autom7vel atrav-s de um ob"eto de so#t4are. As vari.veis indicam o seu estado atual* Velocidade = 77 Km/h( marcha = 4 e cor = vermelho. DPartida()( acelera()( trocaMarcha() e reia() s'o m-todos $ue podem mudar o estado das vari.veis (velocidade e marcha). O ob"eto $ue vamos construir se chamar. errari.

O"ienta#$o a Ob%eto!

26

Im ob"eto so%inho n'o tem muita utilidade. Im carro so%inho( sem motorista( na garagem( s7 serve de en#eite. ara se conseguir alguma #uncionalidade dos ob"etos( necess.rio $ue ha"a uma intera&'o com outros ob"etos. )7 assim se pode construir modelos de comportamento mais comple/o. Ob"etos de so#t4are se comunicam entre si atrav-s de mensagens. Ho e/emplo do autom7vel( o ob"eto motorista envia uma mensagem para o ob"eto errari! invocando o m-todo trocaMarcha()! com o parCmetro " ($uintaAmarcha). 5om esta in#orma&'o( o m-todo dese"ado - e/ecutado( provocando a mudan&a das vari.veis do ob"eto errari.

ara reali%ar a mudan&a acima em Delphi (Ob"ect ascal)( dentro do c7digo do ob"eto motorista haveria uma linha do tipo* errari.trocaMarcha(") , assim $ue o Ob"ect ascal representa a invoca&'o do m-todo de um ob"eto. O primeiro nome ( errari) - o ob"eto. Ap7s o ponto( vem uma vari.vel (atributo:propriedade) ou m-todo.

O"ienta#$o a Ob%eto!

27

O ?ue so Classes@
5lasses s'o prot7tipos utili%ados para construir ob"etos. As caractersticas de estado e comportamento do ob"eto errari( ilustrado nos e/emplos anteriores( s'o caractersticas de $ual$uer autom7vel $ue sai da #.brica. Essas caractersticas s'o de#inidas nas classes. A #igura abai/o representa uma classe. Observe a semelhan&a com o diagrama $ue utili%amos para representar os ob"etos. A classe n'o - um ob"eto pois n'o possui um estado( nem um comportamento espec#ico. Ela n'o - algo $ue e/iste e $ue possua estados.

ara produ%ir todos os autom7veis $ue saem da #.brica( poderamos de#inir uma classe chamada #$tom%vel. Esta classe teria a declara&'o das vari.veis $ue ser'o utili%adas para arma%enar a cor( velocidade e marcha( al-m da implementa&'o dos m-todos $ue cada autom7vel deve ter.

Os ob"etos s'o instCncias das classes. >uando criamos um ob"eto( di%emos $ue instanciamos uma classe. 5ada instCncia - uma entidade individual e pode ent'o receber valores para as suas vari.veis e modi#ic.Alas atrav-s de m-todos. 5om a classe #$tom%vel( podemos criar agora v.rios autom7veis com as mesmas caractersticas b.sicas. or e/emplo( se errari( $sca( porsche s'o instCncias de #$tom%vel( todos possuem uma velocidade( uma posi&'o de marcha e uma cor(
O"ienta#$o a Ob%eto! 28

e podem dar partida( acelerar( #reiar e trocar marcha. Porsche pode ser vermelho e estar a 1JE Ym:h( en$uanto $sca pode ser preto e estar parado. A grande vantagem de se usar classes - a reutili%a&'o do c7digo. Doda a estrutura de um ob"eto - de#inida na classe( $ue depois - utili%ada $uantas ve%es #or necess.rio para criar v.rios ob"etos.

Herana
H'o bastasse a reutili%a&'o do c7digo proporcionado pelas classes( na cria&'o de ob"etos( a OO vai mais longe e de#ine meios de permitir em uma classe( a reutili%a&'o do c7digo de outras classes. As caractersticas cor( velocidade( marcha( etc. podem estar de#inidas em uma classe chamada de Geculo =otori%ado( $ue declara m-todos trocaMarcha()( dPartida()( acelera()( etc. Esses m-todos e var.veis podem ser herdadas pelas classes #$tom%vel( Motocicleta e &aminh'o $ue s'o veculos motori%ados.

Desta maneira( est. #ormada uma hierar$uia de classes. Geculo =otori%ado superclasse de #$tom%vel( &aminh'o e Motocicleta( $ue por sua ve%( s'o subclasses de Vec$lo Motori(ado. O c7digo - escrito uma 6nica ve% e usado por v.rias classes di#erentes. 5ada classe herda caractersticas de sua superclasse( mas n'o est. limitada ; implementa&'o o#erecida nela. A subclasse - uma especiali%a&'o da superclasse e pode de#inir novas vari.veis( novos m-todos e at- sobrepor m-todos de#inidos na superclasse. #$tom%vel( por e/emplo( pode acrescentar novos m-todos como a)rirPorta() e a)rirMala(). Motocicleta deve sobrepor o m-todo acelera()( trocaMarcha()( dPartida() e reia() com uma
O"ienta#$o a Ob%eto! 29

implementa&'o espec#ica para motos. &aminh'o pode acrescentar novas vari.veis capacidadeDe&arga( n6meroDeEi/os( etc. para caracteri%ar melhor os ob"etos $ue ser'o produ%idos.

Delphi e a POO
ara se de#inir uma classe no DEL !I deveAse empregar a seguinte sinta3e*
t*pe classe = class(superclasse) atributos mtodos end;

atributos* seguem as regras das declara&1es de vari.veis2 m3todos* seguem as regras das declara&1es de subprogramas (-!n tion e pro ed!re). Ho DEL !I* A classe m'e - denominada .(b'ect. Esta classe deve ser utili%ada $uando a classe n'o tiver bem de#inida sua classe m'e. A de#ini&'o de uma classe deve ser #eita na .rea de inter2ace de uma #I..

5onvencionaAse iniciar o nome de uma classe com a letra .. A de#ini&'o da classe .Pessoa( em DEL !I( seria*
t*pe TPessoa = class(TObject) Nome : string; Endereo : string; proced$re Atualizar ados (Nome! Endereo : string); end;

Ho entanto esta de#ini&'o n'o est. completa( pois deveAse de#inir o Guali2icador de acesso permitido para cada atributo ou m-todo.

<ualiAi!adores de A!esso
Ho DEL !I podeAse de#inir o tipo de acesso $ue uma classeAob"eto ter. sobre os atributos ou m-todos de outra classeAob"eto. Os principais $uali#icadores de acesso em DEL !I s'o* Private* as declara&1es #eitas nesta .rea n'o podem ser acessadas por outras classesAob"etos2 Prote!ted* as declara&1es #eitas nesta .rea s7 podem ser acessadas pelas classes #ilhas da classeAob"eto2 Publi!* as declara&1es #eitas nesta .rea podem ser acessadas por $ual$uer outra classeAob"eto. )endo assim( uma de#ini&'o mais completa da sinta3e de uma classe( em DEL !I -*

O"ienta#$o a Ob%eto!

30

classe = class(superclasse) private "declara#es pri$ati$as% protected "declara#es protegidas% public "declara#es p&blicas% end;

Ima nova de#ini&'o para a classe .Pessoa poderia ser*


classe = pessoa(TObject) private Nome: 'tring; Endereco: 'tring; protected "declara#es protegidas% public proced$re Atualiza ados( Nome! Endereco: 'tring); end;

De#inindoAse os atributos Home e Endere&o como private eles s7 podem ser alterados pelo m-todo Atuali%arDados( $ue por sua ve% poder. ser acessado por $ual$uer outra classeAob"eto. Ho entanto esta de#ini&'o n'o est. completa. Ima classeAob"eto em DEL !I precisa ser criada ou destruda atrav-s de Construtores e Destrutores.

Construtores e Destrutores
>uando uma nova classe - de#inida em DEL !I - necess.rio declarar construtores. Im construtor permite criar a instCncia de uma classe( ou se"a( um ob"eto. 5onvencionaAse chamar um construtor pelo nome de Create. Im construtor denotado pela palavra Constru!tor. Ao contr.rio dos construtores( os destrutores s'o utili%ados para liberar a instCncia da classe. Ao destrutor convencionaAse o nome de De"tro(. Im destrutor - denotado pela palavra Destru!tor. )endo assim( uma nova de#ini&'o para a classe .Pessoa poderia ser*
t*pe TPessoa = class(TObject) private Nome : string; Endereco : string; public proced$re Atualizar ados(Nome! Endereco : string); protected constr$ctor (reate; destr$ctor end; estro);

O on"tr! tor Create #oi colocado na .rea prote ted. Isto signi#ica $ue ele s7 pode ser acessado pelas subclasses da classe D essoa. Deste modo( a classe D essoa nunca
O"ienta#$o a Ob%eto! 31

poderia ser um ob"eto( pois seu construtor n'o pode ser acessado por outras classesA ob"etos. oderamos considerar esta de#ini&'o como de#initiva. Ho entanto( #alta agora a implementa!"o dos m-todos Atuali%arDados e 5reate.

Implementao de Classes
A implementa&'o das classes deve ser #eita na .rea de implementation de uma IHID( e segue as regras normais da linguagem Durbo ascal. A seguir - apresentada a implementa&'o completa da classe .Pessoa.
$nit Pessoas; inter ace t*pe TPessoa = class(TObject) protected Nome : string; Endereco : string; constr$ctor (reate; destr$ctor p$)lic proced$re Atualizar ados (Nome! Endereco: string); end; implementation constr$ctor TPessoa*(reate; )egin inherited (reate; Nome := +,; Endereco := +,; end; destr$ctor TPessoa* estro); )egin inherited end; proced$re TPessoa*Atualizar ados(Nome! Endereco: string); )egin +el *Nome := Nome; +el *Endereco := Endereco; end; end* estro); estro):

Dr0s detalhes importantes devem ser notados na implementa&'o da classe D essoa* o constructor Create e as cl.usulas in-erited e sel2.

O"ienta#$o a Ob%eto!

32

Constru!tor Create
Ho constructor Create podem ser omitidos as iniciali%a&1es dos atributos. Eles devem aparecer apenas $uando dese"aAse iniciali%ar um atributo com um determinado valor.

Inherited
A cl.usula in-erited( no on"tr! tor Create( indica $ue o m-todo Create #oi herdado da classeAm'e (no caso( TO+#e t).

'elA
A cl.usula sel2( na pro ed!re At!ali*arDado"( indica $ue o atributo re#erenciado - o da classe( e n'o a vari.vel passada como parCmetro.

O"ienta#$o a Ob%eto!

33

Ob,e!t Pas!al
A linguagem Ob"ect ascal - proveniente da linguagem ascal( $ue durante a d-cada de ZF #e% grande sucesso comercial atrav-s do Durbo ascal. A estrutura b.sica da linguagem( a maioria de seus comandos e sua sinta/e elegante ainda permanecem. or-m( com a evolu&'o para a programa&'o orientada a ob"etos( a #orma de se trabalhar com a linguagem e algumas de suas caractersticas #oram sendo alteradas. assouAse do Durbo ascal V para o Durbo ascal para 3indo4s( $ue n'o #e% o mesmo sucesso. 5om o Delphi( a linguagem ascal assume outra ve% o lugar de desta$ue $ue sempre mereceu. Agora com o nome Ob"ect ascal( muitas de suas caractersticas( $ue muitos pensam ser #ruto de atuali%a&1es posteriores( na verdade ". #a%iam parte da linguagem padr'o( ideali%ada e concebida pelo seu criador( HiLlaus 3irth.

ComentCrios
5omo ponto inicial( voc0 deve saber como #a%er coment.rios em seu programa ascal. O Delphi suporta tr0s tipos de coment.rios*
, (oment-rios utilizando c.a$es (. (oment-rios usando parente e asterisco .) // (oment-rios no estilo (//

)ariCveis
A linguagem Ob"ect ascal re$uer $ue se declare todas as vari.veis( antes de se iniciar uma pro ed!re( -!n tion ou program. Isto signi#ica $ue o c7digo escrito em Ob"ect ascal( obedece a uma estrutura um pouco mais rgida do $ue em outras linguagens*
Proced$re 0oo; Var 1! ): integer; 2: double; /egin 3 := 4; 5nc(1); ) := 6; 77 *** end;

A linguagem Ob"ect ascal( di#erentemente das linguagem 5 e 5WW( n'o consideram mai6sculas e min6sculas como #ormas di#erentes. or e/emplo( & e 3 se re#erem a uma mesma vari.vel.

Di!a

A utili%a&'o de letras =AI[)5ILA) e min6sculas pode ser 6til para dar clare%a aos nomes de vari.veis( procedures( #unctions( etc. or e/emplo( a seguinte declara&'o Procedure estaprocedurenao2a5nadaH - di#cil de ler. 9icaria bem melhor da seguinte #orma* Procedure EstaProcedure#aoFa5#adaH Hote como a Ob"ect ascal permite voc0 agrupar mais de uma vari.vel de mesmo tipo "untas em uma mesma linha*
1! ): 5nteger;

Ima caracterstica implementada a partir da vers'o M.F do Delphi( permite se iniciali%ar vari.veis globais na pr7pria declara&'o.
Var 5: integer = 48; P: Pointer = Nil; ': 'tring = +Alo mamae9,; : ouble = :*4;4<=>

A iniciali%a&'o pr-via de vari.veis - permitida apenas para vari.veis globais e n'o a$uelas $ue s'o locais a uma pro ed!re ou -!n tion.

Constantes
As constantes s'o de#inidas ap7s a cl.usula const( similar ; linguagem 5( como no e/emplo abai/o*
const 2loat AdecimalNumber = :*4;; const int i = 48; const c.ar ?Error'trng = @Perigo! perigo! perigo9A;

A di#eren&a entre as constantes entre 5 e Ob"ect ascal - $ue em ascal n'o - preciso declara o tipo de uma constante. O compilador Delphi aloca automaticamente o espa&o apropriado para a constante baseado em seu valor.
&onst AdecimalNumber = :*4;; i = 48; Error'tring = +Perigo! perigo! perigo9,;

Opcionalmente podeAse especi#icar o tipo de uma constante.


&onst AdecimalNumber: double = :*4;; i: 5nteger = 48; Error'tring: string = +Perigo! perigo! perigo9,;

A linguagem Ob"ect ascal permite o uso de algumas #un&1es nas declara&1es de constantes e vari.veis. Estas #un&1es incluem 0rd()( &hr()( 1r$nc()( 2o$nd()( 3igh()( 4o5() e +i(e0 ().

Ob%ect Pa!cal

35

1*pe A = arra)B4**6C o2 integer; &onst D: Eord = 'izeo2(F)te); Var 5: integer = G; H: 'mall5nt = ord(+a,); I: Iong5nt = Trunc(:*4;4<>); 3: '.ort5nt = Joud(6*4=G6G); F4: b)te = Kig.(A); F6: b)te = IoE(A); (: (.ar = (.r(;L);

)e durante a e/ecu&'o de um programa tentarAse alterar o valor de uma constante( o Delphi apresenta um erro de compila&'o.

Operadores
Os operadores s'o smbolos $ue habilitam a manipula&'o de todos os tipos de dados. Em Ob"ect ascal os operadores est'o de#inidos basicamente em* operador de atri+!i23o( operadores aritm>ti o"( operadore" l?gi o"( operadore" rela ionai"( etc.*

Operador de Atribuio
O operador de atribui&'o - utili%ado para alterar o conte6do das vari.veis. atribuir um valor a uma vari.vel utili%aAse o operador 6=.
P5 := :*4;4<; Mens := +Pressione ON para sair,

ara

Operador de Comparao
O Ob"ect ascal utili%a o operador = para reali%ar compara&1es l7gicas entre duas e/press1es ou dois valores.
i *** 3 = O then

Operadores LDgi!os
O ascal utili%a as palavras and( or e not como operadores l7gicos.
7 (condio1) and (condio2) then FazIsso 8hile (condio1) or (condio2) do FazAquilo 7 not (condio) then

FacaAlgumaCoisa; (perador Atribui&'o 5ompara&'o +>mbolo

6= =
Ob%ect Pa!cal 36

Di#eren&a =enor =aior =enor ou igual =aior ou igual

e l7gico o$ l7gico not l7gico

9: 9 : 9= := and or not

Operadores AritmBti!os
De #orma geral( os operadores aritm-ticos s'o os mesmos e/istentes em outras linguagens de programa&'o. A di#eren&a - $ue o ascal possui di#erentes operadores de divis'o. O operador div (divis'o inteira) trunca automaticamente o resultado #inal da divis'o.
(perador Adi&'o )ubtra&'o =ultiplica&'o Divis'o <eal Divis'o Inteira <esto da Divis'o Ateno +>mbolo

; < . / div mod

Ise o operador de divis'o correto para os tipos de e/press1es $ue se est. trabalhando. O compilador ir. apresentar um erro ao dividir dois n6meros de ponto #lutuante utili%ando o operador inteiro div ou dois inteiros utili%ando o operador /.

Operadores de In!remento e De!remento


Os operadores de incremento e decremento geram um c7digo mais otimi%ado para a adi&'o e subtra&'o de vari.veis inteiras. Os comando 7nc() e Dec() reali%am a adi&'o e a subtra&'o. odeAse utili%ar estes operadores como um ou dois parCmetros.
*** var P5nt: 5nteger; )egin P5nt := 48; 5nc(P5nt) V7nt 6= V7nt ; = 5nc(P5nt! :) ec(Pint! <) end* 77 Produz resultado idQntico a

77 R idQntico a V7nt 6= V7nt ; > 77 R idQntico a Vint 6= Vint < "

2ipos de Dados
A de#ini&'o de tipos de dados corretos para as vari.veis - muito importante( pois al-m de permitirem a economia de mem7ria( eles tem( em muitos casos( de ter compatibilidade com os seus respectivos tipos de dados do 3indo4s.
Ob%ect Pa!cal 37

2ipos de Dados 7;"E.ICO' I72EI.O'


.ipo @Nte )hortInt 3ord )mallInt Longint .aman-o <em b/tes0 1 1 M M P Dom>nio F..MKK A1MZ..1MV F..UKKEK AEMVUZ..EMVUZ AM1PVPZEUPZ..M1PVPZEUPV

Os tipos inteiros gen-ricos s'o CA%DI#A* e I#.EFE%. O tipo Cardinal representa um inteiro sem sinal e o tipo Integer representa um inteiro com sinal. O tamanho e #ormato do tipo Integer e do tipo Cardinal variam de acordo com as di#erentes implementa&1es da linguagem Ob"ect ascal( mas geralmente s'o a$ueles resultam em opera&1es inteiras mais e#icientes para uma determinada 5 I ou )istema Operacional.
.ipo 5ardinal Integer 5ardinal Integer .aman-o <em b/tes0 M M P P Dom>nio AEMVUZ.. EMVUV F.. UKUEU F.. M1PVPZEUPV AM1PVPZEUPZ.. M1PVPZEUPV

2ipos de dados 7;"E.ICO' .EAI' e "OEDA


.ipo )ingle <eal Double E/tended 5omp 5urrencN .aman-o <em b/tes0 P U Z 1F Z Z Dom>nio 1.K \ 1FAPK .. E.P \ 1FEZ M.J \ 1FAEJ .. 1.V \ 1FEJ K.F \ 1FAEMP .. 1.V \ 1FEFZ E.P \ 1FAPJEM .. 1.1 \ 1FPEJM AMUE1F .. MUEA1F AJMMEEVMFEUZKPVV.KZFZ.. JMMEEVMFEUZKPVV.KZFV

O tipo C!rren ( - o tipo =OEDA. Ele tem precis'o de $uatro casas decimais e compatvel com os bancos de dados $ue representam dinheiro.

2ipos de dados 6OOLEA7O'


.ipo @oolean @Nte@ool 3ord@ool Long@ool .aman-o <em b/tes0 1 1 M P Arma5enamento 1 bNte 1 bNte uma palavra uma palavra dupla

A e/ist0ncia de diversos tipos l7gicos $ue arma%enam a mesma coisa (D<IE ou 9AL)E) d.Ase pela necessidade de compatibili%a&'o com os tipos do 3indo4s.
Ob%ect Pa!cal 38

2ipos de Dados Cara!ter


.ipo 5har Ansi5har 3ide5har .aman-o <em b/tes0 1 1 M Arma5enamento 1 caracter AH)I 1 caracter AH)I 1 caracter Inicode

AnsiC-ar* , o padr'o de caracteres AH)I de 1 bNte $ue todos n7s conhecemos. ,ideC-ar* , um tipo de M bNtes surgido com o Delphi M para representar um caracter Inicode. C-ar* , id0ntico ao Ansi5har.

2ipos de Dados 'tring


.ipo )hort)tring Ansi)tring )tring 3ide)tring .aman-o <em b/tes0 MKK at- E 8b MKK ou at- E 8b at- 1(K 8b Arma5enamento AH)I5har AH)I5har AH)I5har 3ide5har

O tipo Ansi)tring - padr'o. >uando - declarada uma vari.vel como +127?@ assumido Ansi)tring. Este tipo surgiu com o Delphi M para #acilitar a manipula&'o de strings $ue e/cediam o tamanho de MKK caracteres ()hort)tring). As vari.veis declaradas com este tipo s'o alocadas dinamicamente e s7 ocupam mem7ria en$uanto est'o sendo utili%adas e a medida $ue v'o aumentando de tamanho( o seu espa&o em mem7ria - realocado automaticamente.

2ipo PChar
O tipo 5har permite tamb-m $ue voc0 manipule strings. >uando voc0 utili%a uma vari.vel com o tipo char( o Delphi assume $ue todo o gerenciamento de aloca&'o e libera&'o de mem7ria ser. reali%ado pelo c7digo do programa. As vari.veis do tipo 5har possuem como delimitador de #im de string o caracter especial ]F.

2ipo )ariant
O tipo de dados variant - um tipo 6nico $ue pode manipular di#erentes tipos de dados. O tipo variant pode manipular strings( inteiros( reais( entre outros. or-m uma vari.vel do tipo variant n'o poder. manipular tipos de dados dinCmicos( como( por e/emplo( os ponteiros (pointer) e as classes de dados (os ob"etos). E/emplo

Ob%ect Pa!cal

39

*** Var P4! P6! P:: Pariant; /egin P4 := 4688; P6 := +Forland P: := :*4;4<; P4 := P4 / P6 / P:; end* elp.i,;

Hote $ue para o mesmo tipo #oram atribudos tr0s di#erentes tipos. ortanto( deveAse tomar cuidado $uando reali%ar opera&1es envolvendo este tipo de dado. Ho e/emplo acima( o conte6do da vari.vel G1 ser. igual a ^1MFF@orland DelphiE.1P1KX. Ge"a $ue neste caso o compilador ir. converter todos as vari.veis envolvidas na opera&'o para o tipo )tring e reali%ar uma concatena&'o.

2ipos DeAinidos pelo ;suCrio


H6mero inteiros( strings e ponto #lutuante #re$?entemente n'o s'o su#icientemente ade$uados para representar vari.veis nos problemas do mundo real. Heste casos deveAse criar tipos comple/os para melhor representar vari.veis de um determinado problema. Em ascal( os tipos de#inidos pelo usu.rio geralmente s'o da #orma de registros (records) ou ob"etos.

ArraFs
A linguagem Ob"ect ascal permite criar arraNs (matri%es) de $ual$uer tipo. e/emplo( uma vari.vel declarada como ArraN com oito n6meros inteiros*
Var A: Arra)B8**=C o2 integer;

or

A declara&'o de arraNs em ascal possui uma propriedade $ue di#ere de outras linguagens* A arraN n'o precisa iniciar com um determinado n6mero.
Var A: Arra)B6G**:8C o2 integer;

.e!ords
O tipo record permite $ue se agrupe em uma 6nica vari.vel( um con"unto de tipos de dados di#erentes. A aplica&'o deste tipo de dado - bastante semelhante ao conceito de registro( ou se"a( ou se"a( uma vari.vel do tipo record - composta por v.rios campos. 2ecord - tipo estruturado em ascal( e$uivalente ao str$ct do 5.

Ob%ect Pa!cal

40

{ Pascal } 1*pe M)Jec = record 5:integer; :double; end

/. & ./ t)pede2 struct " int i; double d; %M)Jec;

>uando se trabalha com records( utili%aAse o caracter ponto para acessar cada campo.
... var N: M)Jec /egin N*i := 6:; N*d := :*;; end;

Pointers
O tipo de dado ointer - uma vari.vel $ue arma%ena um endere&o de mem7ria( e n'o um valor( como estamos acostumados a trabalhar. Im e/emplo de vari.vel do tipo pointer - o tipo char( mostrado anteriormente. E/istem duas #ormas de implementa&'o para o tipo pointer* pointer tipados e pointers n'o tipados. Ima vari?vel pointer - tipada $uando se conhece o tipo de dado $ue est. arma%enado no endere&o de mem7ria contido na vari.vel pointer.
*** var PP4: S5nteger; )egin ?e5(PP4); 77 Aloca memTria para a $ari-$el PP4 77 apontada pela $ari-$el PP4 Dispose(PP4); 77 Iibera memTria Uue 2oi alocada para PP4 end* PP4S := 4>>G; 77 Atribui $alor ao endereo de memTria

Ima vari?vel pointer n"o=tipada - uma vari.vel $ue arma%ena um endere&o de mem7ria $ue n'o se conhece o tipo de conte6do deste endere&o.
*** var PP6: Pointer; )egin @etMem(PP6! 488); 77Aloca 488 b)tes para PP6 77memTria apontado pela $ari-$el PP6 AreeMem(PP6); end* 77 Iibera memTria alocada para PP6 +trP&op*(PP6! + elp.i :,) 77Atribui $alor ao endereo de

, muito comum a utili%a&'o de vari.veis do tipo record "untamente com o pointer para a implementa&'o de listas (pilhas( #ilas( .rvores( gra#os( etc.).

Ob%ect Pa!cal

41

Ob,etos
odeAse di%er $ue um ob"eto - um record $ue cont-m -!n tion" e pro ed!re".
t*pe Tobjeto0il.o = class( TObjetoPai ) P: 5nteger; proced$re 0azNada; end;

Estruturas de De!iso
Ho Ob"ect ascal e/istem dois comandos para tomar decis1es durante a e/ecu&'o de um programa. )'o as instru&1es 7A e &#+B.

O !omando I$
A instru&'o I9 permite controlar a e/ecu&'o de outras instru&1es (ou bloco de instru&1es) do programa( dependendo do valor de uma vari.vel ou e/press'o booleana. >uando a e/press'o booleana tem o valor Drue( a instru&'o (ou bloco) $ue segue a palavra D!EH - e/ecutada. >uando a e/press'o booleana tem o valor 9alse( a instru&'o (ou bloco) $ue segue a palavra EL)E - e/ecutada.
7A expresso booleana 13B? instruo; 7A expresso booleana 13B? instruo1 B4+B instruo2; 7A expresso booleana 13B? /B@7? instruo; *** instruo; B?D B4+B /B@7? instruo; *** instruo; B?D; e%pre""3o +ooleana* constante( vari.vel ou e/press'o boleana. in"tr!23o* Ateno $ual$uer instru&'o ascal( inclusive outra instru&'o I9.

)e uma instru&'o i2 possui v.rias condi&1es (e/press1es booleanas) estas devem vir entre par0ntesis.
i (1==) and ()=G) then ***

Ob%ect Pa!cal

42

O Comando CA'E
O comando 5A)E - e$uivalente a uma s-rie de comandos I9. )e a vari.vel de controle - igual a uma das constantes de uma lista( a instru&'o ou bloco de instru&1es associada ; lista - e/ecutada. )e a vari.vel de controle n'o - igual a nenhuma das constantes( a declara&'o case n'o ter. nenhum e#eito e o computador passa para ; instru&'o seguinte do programa.
&#+B varivel controle 0A constante1: instruo1; constante2: instruo2; *** B4+B instruo1; B?D; vari@vel1 ontrole* on"tante"* - uma vari.vel do tipo inteiro( caracter ou de#inido pelo usu.rio( mas n'o pode ser do tipo real. pode ser um 6nico valor( v.rios valores isolados separados por vrgula ou uma #ai/a de valores( indicadas pelo valor mnimo e m./imo separados por dois pontos #inais (..).

Estruturas de .epetio
Ha linguagem ascal est'o disponveis tr0s estruturas de repeti&'o $ue #ornecem uma grande #le/ibilidade na representa&'o de um processo repetitivo. Im loop e/ecuta uma instru&'o (ou bloco de instru&1es) repetidamente. As tr0s estruturas de repeti&'o em ascal s'o representadas pelas palavras reservadas 9O<( 3!ILE e <E EAD.

O Comando $O.
O comando 9O< - usado para repetir v.rias ve%es a mesma instru&'o ou bloco de instru&1es. Durante a e/ecu&'o( uma vari.vel usada como ndice assume uma s-rie de valores( desde um dado valor inicial at- um valor #inal. Ha #orma 9O<ADO( o ndice assume valores crescentes2 na #orma 9O<ADO3HDO( o ndice assume valores decrescentes. A #orma geral da declara&'o - a seguinte*
A02 !ndice := inicial 10 "inal D0 instruo

A02 !ndice := inicial 10 "inal D0 /B@7? instruo1; instruo2; *** B?D;

Ob%ect Pa!cal

43

A02 !ndice := inicial /B@7? instruo1; instruo2; *** B?D; Andi e*

ODNTO "inal

O Andi e - uma vari.vel ordinal. O Andi e pode ser do tipo inteiro( caracter( bNte ou de#inido pelo usu.rio. H'o pode ser uma vari.vel real. Galor inicial da vari.vel ndice. Galor #inal da vari.vel ndice. >ual$uer instru&'o ascal.

ini ial* -inal* in"tr!23o*

As vari.veis ordinais possuem uma propriedade chamada QordemR. Em outra palavras( #a% sentido #alar em n6mero inteiro QseguinteR ou no caracter QanteriorR. O n6mero inteiro $ue vem depois de U - V2 o caracter $ue precede = - L. As vari.veis reais n"o s'o ordinais. H'o #a% sentido #alar no n6mero real QseguinteR( por$ue entre dois n6meros reais $uais$uer sempre e/iste outro n6mero real. , importante notar $ue se ini ial #or maior ou igual a -inal( as instru&1es contidas no loop do tipo 9O<ADO ser'o simplesmente ignoradas. O mesmo acontecer. em um loop do tipo 9O<ADO3HDO se ini ial #or menor $ue -inal.
Ateno

O valor do Andi e s7 - de#inido no interior do loop. Depois $ue o programa sai de um loop A02<10 ou A02<D08?10( a vari.vel usada como Andi e tem um valor inde#inido. )e o valor dessa vari.vel #or usada depois de o programa sair do loop( o programa ir. se comportar de #orma imprevisvel.

O Comando .EPEA2
A instru&'o <E EAD #a% com $ue uma instru&'o (ou bloco de instru&1es) se"a e/ecutada repetidas ve%es( at- $ue uma certa condi&'o se"a satis#eita. Observe $ue na #orma composta da declara&'o( as palavras @E8IH e EHD n'o s'o usadas para delimitar as declara&1es $ue #a%em parte do loop2 este sempre come&a pela palavra <E EAD e termina na palavra IHDIL.
2BPB#1 instruo VNT5I condio;

2BPB#1 instruo1; instruo2; *** C?174 condio; ondi23o in"tr!23o - uma e/press'o booleana. - $ual$uer instru&'o ascal.

Ob%ect Pa!cal

44

5omo a ondi23o - veri#icada no #inal do loop( todo loop do tipo <E EAD e/ecutado pelo menos uma ve%. )e a ondi23o nunca assume o valor .rue( o loop s7 p.ra se o programa #or interrompido do manualmente.

O Comando 4HILE
O loop 3!ILE - semelhante ao loop <E EAD. A principal di#eren&a est. no #ato de $ue o loop <E EAD - sempre e/ecutado pelo menos uma ve%2 o loop 3!ILE pode n'o ser e/ecutado nenhuma ve%.
8374B condio D0 instruo* 8374B condio D0 /B@7? instruo1; instruo2; ### B?D; ondi23o in"tr!23o - uma e/press'o booleana. - uma instru&'o ascal. Ha #orma composta do loop 3!ILE n'o preciso colocar um ponto e vrgula depois da 6ltima instru&'o.

Pro!edimentos e $unGes
rocedimentos (procedures) e 9un&1es (2unctions) s'o partes do programa $ue podem e/ecutar uma tare#a espec#ica $uando chamamos de um dos m7dulos do programa. Ap7s a e/ecu&'o do procedimento ou #un&'o( o controle da e/ecu&'o retorna ao m7dulo do programa $ue e/ecutou a chamada. Os procedimentos e #un&1es s'o e/ecutados de #orma bastante semelhante( por-m( uma #un&'o retorna um valor de retorno( en$uanto $ue um procedimento apenas e/ecuta um bloco de comandos.
Proced$re Jeajusta'alario; )egin i 'alario W L88 then 'alario := 'alario ? 4*8< else 'alario := 'alario ? 4*48; end; A$nction Kou$eJeajuste: Foolean )egin i 'alario W L88 then result := 2alse else result := true; end;

Hote $ue na implementa&'o da #un&'o - necess.rio indicar o tipo de retorno da #un&'o. ara a #un&'o retornar o valor dese"ado( deveAse utili%ar a vari.vel de sistema %esult.

Ob%ect Pa!cal

45

)egin 5hile 'alario X L88 do Jeajusta'alario; end;

)egin i end; Kou$eJeajuste then '.oEMessage(+Jeajuste,);

Pro!edimentos e $unGes !om ParHmetros


A linguagem ascal permite se utili%e parCmetros na implementa&'o de procedimentos e #un&1es. O ascal permite passagem de parCmetros por valor ou por re#er0ncia. Os parCmetros passados podem ter um tipo b.sico ou um tipo de#inido pelo usu.rio ou arra(" a+erta" ($ue ser. visto mais adiante). Im parCmetro pode tamb-m ser constante( caso seu valor n'o se"a alterado durante a e/ecu&'o da procedure ou da #unction.

Passagem de ParImetros por 6alor


A passagem de parCmetros por valor - a #orma padr'o do ascal. >uando um parCmetro - passado por valor( signi#ica $ue uma copia local da$uela vari.vel criada e a #unction ou procedure opera sobre essa c7pia.
*** var m: +tring; proced$re Mens(s: string ); )egin s := +Mensagem: +/ s; '.oEMessage( s ); end; )egin 77 5nicio do Programa Principal

m := +teste de passagem de parametros,; Mens( m ); end*

Ho e/emplo acima( na chamada da proced$re Mens( apenas o valor contido na vari.vel m - passado para a vari.vel s da procedure. Desta #orma( a proced$re ir. operar com a vari.vel s( sem a#etar o conte6do da vari.vel m.

Passagem de ParImetros por %e2erncia


assar um parCmetro por re#er0ncia signi#ica $ue a #un&'o ou procedimento poder. alterar o valor da vari.vel enviada na sua chamada. ara passar uma vari.vel por re#er0ncia utili%a a palavra var na lista de parCmetros da procedure ou #unction.

Ob%ect Pa!cal

46

proced$re (.angeMe($ar 1: 4ong7nt); )egin 1 := 1 / 6; end; )egin z := 48 (.angeMe( z ); end*

Ho e/emplo acima( o endere&o de mem7ria da vari.vel 3 ser. o mesmo endere&o da vari.vel 5( utili%ada na chamada da procedure. Desta #orma( toda a altera&'o reali%ada na vari.vel 3 ser. re#letida na vari.vel 5. Assim sendo( ap7s a chamada da proced$re &hangeMe( ( ) a vari.vel 5( $ue inicialmente continha o valor 1F( ter. o valor 1M.

ParImetros Constantes
)e o valor de um parCmetro n'o vai ser alterado durante a e/ecu&'o da procedure ou #unction( podeAse declaraAlo como constante atrav-s da cl.usula conts. A palavra const previne $ual$uer modi#ica&'o de valor e tamb-m gera um c7digo otimi%ado.
proced$re ApresentaMensagem(const Mens: +tring);

ParImetros com Arra/s Abertas


Atrav-s deste tipo de parCmetro - possvel passar um n6mero vari.vel de argumentos para procedures ou #unctions. odeAse passar arraNs cu"os elementos possuem o mesmo tipo ou podeAse passar arraNs constantes de tipos di#erentes. O e/emplo abai/o declara uma #un&'o $ue recebe uma arraN aberta com elementos inteiros.
$nction TesteArra)(A: Arra) o2 integer): integer;

odeAse passar vari.veis( constantes ou e/press1es para a #un&'o acima.


var i! Jez: 5nteger; const j = 6: )egin i := G; Jez := TesteArra)( B i! <8! j! G> C ); ***

ara se trabalhar com uma arraN aberta dentro da procedure ou #unction podeAse utili%ar as #un&1es 3igh()( 4o5() e +i(e0 () para se obter in#orma&1es sobre a arraN.
Ob%ect Pa!cal 47

A linguagem Ob"ect ascal suporta tamb-m um arraN de constantes $ue permite passar dados de tipos di#erentes para uma #unction ou procedure.
proced$re TesteArra)(onstante( A: arra* o const );

A #un&'o acima pode ser chamada da seguinte maneira*


TesteArra)(onstante(B+Maceio,!>8!<*L!Y3!:*4;4<>!True!+s,C);

;nits
As Inits s'o m7dulos de programa onde s'o agrupados os procedimentos e #un&1es $ue comp1em a aplica&'o Delphi. Ima Init - composta de .reas pr-Ade#inidas.
$nit Vnit4; inter ace $ses DindoEs! Messages! ')sVtils! (lasses! Zrap.ics! (ontrols! 0orms! ialogs; t*pe T0orm4 = class(T0orm) private $ %rivate declarations & p$)lic $ %ublic declarations & end; var 0orm4: T0orm4; implementation $'( )#*F+& end*

A Irea ;nit
Hesta .rea encontraAse o incio da Init( determinada pela palavra nit( seguida pelo seu identi#icador (nome). O nome da unit ser. gerado pelo Delphi e ter. o mesmo nome $ue o ar$uivo arma%enado em disco. Isto -. inicialmente o Delphi gera automaticamente o nome da Init. Ao ser gravado no disco( a Init assume o nome dado ao ar$uivo.

Ob%ect Pa!cal

48

A Irea InterAa!e
A .rea de inter#ace encontraAse sempre ap7s a .rea da Init e antes da .rea de implementation. Esta .rea - utili%ada para reali%ar as declara&1es de vari.veis( constantes( tipos( procedimentos e #un&1es( etc. As declara&1es posicionadas nesta .rea poder'o ser compartilhadas por outras Inits ou pelo m7dulo principal da aplica&'o. Hesta .rea somente poder'o aparecer declara&1es( nunca aparecer. linhas de comando.

A Irea Implementation
Hesta .rea ser. encontrado basicamente a implementa&'o dos procedimentos e #un&1es. ode ainda conter declara&1es de vari.veis( constantes( tipos( etc. $ue n'o poder'o ser compartilhados por outras Inits( nem pelo pr7prio m7dulo principal da aplica&'o. Isto eX( os dados declarados na .rea implementation s'o dados locais( somente visveis dentro da Init na $ual #oram declarados.

Ireas Op!ionais
A Jrea Initiali5ation
Esta .rea( $uando e/istente( deve conter linhas de comando respons.veis pela iniciali%a&'o de vari.veis( ob"etos( etc.( declarados dentro da Init. A e/ecu&'o desta .rea - reali%ada antes da e/ecu&'o do m7dulo principal da aplica&'o e ocorre uma 6nica ve%.

A Jrea Finali5ation
Esta .rea deve aparecer ap7s a .rea Initiali%ation e deve conter linhas de comandos relativas a desaloca&'o de mem7ria de vari.veis do tipo ointer ou Ob"etos. A e/ecu&'o desta .rea - reali%ada s sua aplica&'o est. sendo encerrada.

A !lCusula ;ses
A cl.usula uses serve para $ue possamos tornar acessveis as vari.veis( constantes( procedimentos e #un&1es declarados na .rea Inter2ace de uma determinada nit. A cl.usula uses deve aparecer dentro da Init na $ual dese"aAse manipular dados declarados #ora do se escopo.
program Prog; $ses Vnit6; const a = b; )egin end* $nit Vnit6; inter ace $ses Vnit4; const b = c; implementation end*

Ob%ect Pa!cal

49

$nit Vnit4; inter ace const c = 4; implementation const d = 6; end*

%e2erncia Circular
A cl.usula uses pode aparecer na .rea inter2ace ou na .rea implementation( sem inter#erir em desempenho ou tamanho da aplica&'o. or-m( e/iste um caso em $ue se torna obrigat7rio a declara&'o da cl.usula uses dentro da .rea implementation da Init. Isto acontece $uando duas Inits #a%em re#er0ncia entre si. Este processo conhecido como %e2erncia Circular.
Cnit VnAcessa 7nter ace var F: 5nteger; Cnit Vn eclara 7nter ace var A: 5nteger;

7mplementation $ses Vn eclara; proced$re 5nicia; )egin A := 48; end; end* 7mplementation

$ses VnAcessa; proced$re Jeset; )egin F := 8; end; end*

Ho e/emplo acima mostra um caso de re#er0ncia circular $ue #oi solucionada devido ; declara&'o da cl.usula uses ter sido #eita na .rea implementation. 5aso a declara&'o da cl.usula uses tivesse sido #eita na .rea inter2ace( seria apresentado um erro durante a compila&'o

EJ!eGes
#!e45es s'o erros $ue ocorrem durante a e/ecu&'o do programa. E/istem diversos tipos de e3ce!Des( $ue podem ocorrer nas seguintes opera&1es* aloca&'o de mem7ria2 cria&'o e utili%a&'o de ob"etos2 c.lculo de e/press1es matem.ticas2 manipula&'o de ar$uivos2

utili%a&'o de recursos do sistema operacional. Algumas das principais caractersticas das e/ce&1es no DEL !I s'o* a instCncia da e/ce&'o #ornece in#orma&1es sobre o tipo de problema ocorrido2 usu.rio pode de#inir suas pr7prias e/ce&1es( utili%ando a classe #!eption2 para #or&ar a e/ecu&'o de uma e/ce&'o utili%aAse a cl.usula $aise2 os tipos de e/ce&'o normalmente devem iniciar com a letra E.
Ob%ect Pa!cal 50

uma e/ce&'o gera um evento denominado -n #!eption. As e/ce&1es podem ser tratadas atrav-s das instru&1es* .r/ ... E3cept .r/ ... Finall/

2rF ### EJ!ept


O bloco try 666 e#!ept - utili%ado para de#inir um c7digo de programa a ser e/ecutado no momento $ue ocorrer uma e/ce&'o.
tr* $ ,loco de comandos& e1cept $ comandos executados quando ocorrer uma exceo& end;

E3emplo* tratamento de uma divis'o por %ero.


*** Palor4 := 'trTo5nt(Edit4*Te1t); Palor6 := 'trTo5nt(Edit6*Te1t) tr* Jesultado := Palor4 di$ Palor6; eDcept '.oEMessage (+ i$is[o por \ero,); end; ***

Ho entanto( pode ocorrer mais de uma e/ce&'o dentro de um mesmo bloco. Heste caso - necess.rio utili%ar o comando on ... do.

On ### Do
O comando on 666 do permite tratar mais de um tipo de e/ce&'o de um bloco tr/ ... e3cept.
on $-ipo de exceo& do $,loco de comandos da exceo&

E3emplo* tratamento de uma divis'o por %ero e da digita&'o de um caracter em um campo $ue deveria ser num-rico.

Ob%ect Pa!cal

51

*** tr* Palor4 := 'trTo5nt (Edit4*Te1t); Palor6 := 'trTo5nt (Edit6*Te1t) Jesultado := Palor4 di$ Palor6; eDcept on E i$F)\ero do '.oEMessage (+ i$is[o por \ero,); on E5nOutError do '.oEMessage (+Os $alores de$em ser num]ricos,); end;

2ipos de EJ!eo
Os principais tipos de e/ce&'o da <DL ( R!nTime ,i+rar() do DEL !I( a serem tratadas nos blocos on ... do s'o*
#ome EaccessGiolation EconvertError Ediv@N_ero EinOutError EintOver9lo4 Einvalid5ast EinvalidOp Einvalid ointer EoutO#=emorN Eover9lo4 ErangeError EstacLOver#lo4 Eunder#lo4 E%eroDivide Descri!"o Ocorre $uando se tenta acessar uma regi'o de mem7ria inv.lida (e/* tentar atribuir valor a um ponteiro cu"o conte6do - nil). ocorre $uando se tenta converter um string em um valor num-rico (e/* utili%ar a #un&'o )trDoInt em uma letra). ocorre na divis'o de um n6mero por %ero. ocorre numa opera&'o incorreta de I:O (e/* abrir um ar$uivo $ue n'o e/iste). ocorre $uando o resultado de um c.lculo e/cedeu a capacidade do registrador alocado para ele (para vari.veis inteiras). ocorre $uando se tenta reali%ar uma opera&'o inv.lida com o operador as (e/* tentar usar um )ender com uma classe $ue n'o corresponde a seu tipo). ocorre $uando se detecta uma opera&'o incorreta de ponto #lutuante. ocorre $uando se e/ecuta uma opera&'o invalida com um ponteiro (e/* tentar liberar um ponteiro duas ve%es). ocorre $uando se tenta alocar mem7ria mas ". n'o e/iste mais espa&o su#iciente. ocorre $uando o resultado de um c.lculo e/cedeu a capacidade do registrador alocado para ele (para vari.veis de ponto #lutuante). ocorre $uando uma e/press'o e/cede os limites para a $ual #oi de#inida (e/* tentar atribuir 11 ao ndice de um vetor $ue pode ir no m./imo at- 1F). ocorre $uando o sistema n'o tem mais como alocar espa&o de mem7ria na )tacL. ocorre $uando o resultado de um c.lculo - pe$ueno demais para ser representado como ponto #lutuante. ocorre $uando se tenta dividir um valor de ponto #lutuante por %ero.

2rF ### $inallF


O bloco try 666 1inally permite $ue um bloco de comandos se"a e/ecutado( mesmo $uando houver uma e/ce&'o.

Ob%ect Pa!cal

52

tr* $ ,loco de comandos& inall* $Comandos executados mesmo quando ocorrer uma exceo& end;

or e/emplo( garantir $ue um ar$uivo ser. #echado mesmo $uando ocorrer uma e/ce&'o.
... assign (arU! +teste*t1t,); tr* reset(arU) .. outros comandos sobre o arquivo inall* close (arU) end; ***

Ob%ect Pa!cal

53

Pro,etos Delphi
Os Ar?uivos do Pro,eto
Im pro"eto Delphi - composto por v.rios ar$uivos relacionados entre si. Alguns destes ar$uivos s'o gerados durante o desenvolvimentos( $uando est. se de#inindo os #ormul.rios da aplica&'o. Outros ar$uivos s'o gerados na compila&'o da aplica&'o.

O Ar?uivo Prin!ipal K#DP.L


O ar$uivo principal - gerado durante a constru&'o da aplica&'o e possui a e/tens'o .dpr. , neste ar$uivo $ue - instanciado o #ormul.rio principal da aplica&'o( assim como todos os #ormul.rios $ue ser'o automaticamente instanciados pelo Delphi. Goc0 raramente ir. editar o ar$uivo de pro"eto de uma aplica&'o
program Project4; $ses 0orms! Vnit4 in ^Vnit4*pas^ "0orm4%; $'( )#(/0& )egin Application*5nitialize; Application*(reate0orm(T0orm4! 0orm4); Application*Jun; end* Estrutura de um Pro'eto em Delp-i.

Hote $ue neste ar$uivo e/iste uma cl.usula uses contendo a rela&'o de uma nit. O ar$uivo de pro"eto ir. listar todas as nits $ue comp1em a aplica&'o( estando elas relacionadas a #ormul.rios ou n'o. Outro ponto $ue vale ressaltar - a diretiva de compila&'o KL% M.%E+N. As chaves seguidas pelo caracter L indicam uma diretiva de compila&'o( ou se"a( um determinado comportamento do compilador Delphi. Heste caso( esta diretiva indica $ue o compilador ir. adicionar os ar$uivos com e/tens'o .%E+ (ar$uivos de recurso)( $uando da linLAedi&'o do pro"eto.

O Ar?uivo de .e!urso K#.E'L


O ar$uivo de recurso - um ar$uivo bin.rio gerado automaticamente pelo Delphi $ue cont-m basicamente o cone da aplica&'o. oder. ser adicionado um ttulo a sua aplica&'o( ou gerar um outro ar$uivo de recursos para o seu pro"eto. or de-a!lt( todo o pro"eto Delphi possui um ar$uivo de recurso $ue ter. o mesmo nome do ar$uivo principal (.dpr) e ser. QlinLadoR ao ar$uivo e/ecut.vel (.e3e).

O Ar?uivo de OpGes K#DO$L


Im ar$uivo de op&1es de pro"eto ser. gerado $uando sua aplica&'o - salva pela primeira ve%. Este ar$uivo ir. conter op&1es de compila&'o de pro"eto( indica&1es de cria&'o autom.tica de #ormul.rios( etc. odeAse alterar as op&1es de um pro"eto utili%ando o comando (ption do menu Pro'ect. Al-m do ar$uivo .do2( um ar$uivo com e/tens'o .D+O ser. criado com as op&1es do ambiente de desenvolvimento Delphi. Assim como as op&1es de um pro"eto ( Pro7e!t` -ptions)( podeAse de#inir di#erentes op&1es de ambiente para cada pro"eto. ara se alterar as op&1es de ambiente utili%aAse o comando Environment (ptions do menu .ools.

Os Ar?uivo de CDdigo K#PA'L


Os ar$uivos .pas s'o os programas #onte em Ob"ect ascal( as as Inits em tr0s classes* units $ue possuem um #ormul.rio relacionado a ela2 units relacionadas a componentes2 nits. odeAse dividir

units de uso geral( $ue possuem prodecures e #unctions $ue ser'o utili%adas por outros programas
$nit Vnit4; inter ace $ses DindoEs! Messages! ')sVtils! (lasses! Zrap.ics! (ontrols! 0orms! ialogs; t*pe T0orm4 = class(T0orm) private $ %rivate declarations & p$)lic $ %ublic declarations & end; var 0orm4: T0orm4; implementation $'( )#*F+& end*

Ar?uivos de $ormulCrios K#D$"L


>uando um novo #ormul.rio - adicionado em uma aplica&'o( o Delphi gera dois ar$uivos correspondente ao #ormul.rio. Im ar$uivo - o c7digo #onte em Ob"ect ascal (.PA+). O outro ar$uivo (.DFM)( descreve as caractersticas do #ormul.rio como( por e/emplo( a altura( a largura( o ttulo( a cor( etc. <aramente ser. necess.rio
P"o%eto! Del&'i 55

visuali%ar o conte6do deste tipo de ar$uivo. Ele - atuali%ado automaticamente toda ve% $ue - #eito uma altera&'o no #ormul.rio.

Ar?uivos Compilados
Ap7s a compila&'o de um pro"eto( ser'o gerados mais dois tipos de ar$uivos. Os ar$uivos com e/tens'o .DC (Delp.i Compiled $nit) e o ar$uivo com e/tens'o .E&E. Im ar$uivo .dcu - o resultado da compila&'o dos ar$uivos .pas e .d2m. O ar$uivo e/ecut.vel .e3e - o resultado da compila&'o de todos os ar$uivos do pro"eto.

As OpGes de um Pro,eto
O comando de menu ro"ect ` Options( ir. apresentar uma cai/a de di.logo contendo algumas op&1es relativas ao seu pro"eto. Goc0 poder. de#inir desde o #ormul.rio principal da aplica&'o( at- a #orma de como o pro"eto ser. compilado.

A PCgina $orms
Ha p.gina 9orms - possvel selecionar o #ormul.rio principal da aplica&'o e para de#inir $uais os #ormul.rios ser'o criados automaticamente pelo Delphi. Main 2orm* Indica $ual o #ormul.rio principal da sua aplica&'o. Este ser. o primeiro #ormul.rio apresentado $uando se e/ecuta a aplica&'o. Atrav-s do 5ombo@o/ - possvel alterar a de#ini&'o do #ormul.rio principal da aplica&'o. Hormalmente o #ormul.rio principal - gerado automaticamente. Isto -( ele est. presente na lista Auto=create 2orms. Auto=create 2orms* 5ont-m a lista dos #ormul.rios automaticamente pelo Delphi $uando sua aplica&'o #or e/ecutada. gerados

Available 2orms* 5ont-m a lista dos #ormul.rios $ue ser'o gerados pela aplica&'o. ara #a%er uso dos #ormul.rios $ue est'o sendo mostrados nesta lista eles devem ser instanciados anteriormente.

P"o%eto! Del&'i

56

A PCgina Appli!ation
Hesta p.gina poder. de#inirAse um ttulo e um cone para a aplica&'o. .itle* Especi#ica&'o de um ttulo para a sua aplica&'o. Este ttulo ser. apresentado $uando sua aplica&'o estiver minimi%ada. 9elp 2ile* Associa&'o de um ar$uivo de help (.-lp) $ue ser. utili%ado na sua aplica&'o. O bot'o @ro4se ir. abrir uma cai/a de di.logo para $ue voc0 locali%e o ar$uivo de help. Icon* Especi#ica&'o de um cone para a aplica&'o.

A PCgina Compiler
De#ine as op&1es de compila&'o de seu pro"eto. Entre as op&1es disponveis( podeAse indicar se ser'o reali%adas checagem de limite de vari.veis( se ser'o compiladas in#orma&1es para depura&'o do pro"eto( etc. Dodas as op&1es desta p.gina s'o diretivas de compila&'o $ue tamb-m poder'o ser colocadas diretamente no c7digo da unit.

A PCgina Lin5er
5ont-m as indica&1es de como os ar$uivos do pro"eto ser'o linLAeditados. Hesta p.gina indicaAse se o compilador Delphi ir. gerar um ar$uivo e/terno com mapeamento dos ar$uivos linLados( indicar. tamb-m se o produto #inal da linLA edi&'o ser. uma unit compilada (.dcu) ou um ar$uivo ob"eto (.ob')( e mais diversas outras op&1es.

A PCgina Dire!toriesMConditionals
Itili%aAse esta p.gina para de#inir onde os seus ar$uivos compilados ser'o arma%enados e para de#inir um smbolo de compila&'o. odeAse decidir( de acordo com o smbolo de compila&'o( $ual a parte do c7digo ser. compilada.

A PCgina )ersion InAo


Esta p.gina permite especi#icar in#orma&1es de vers'o de seu pro"eto.

A PCgina Pa!5ages
Q acLagesR s'o ar$uivos $ue cont-m v.rias classes pr-Ade#inidas pelo Delphi( como( por e/emplo( bot1es( #orms( tables( etc. O nome pacLage - uma nova designa&'o para G5L Gisual 5omponent LibrarN. Goc0 poder. indicar $uais os pacLages $ue estar'o disponveis em tempo de desenvolvimento e $uais os $ue ser'o re$uisitados em tempo de e/ecu&'o. 5om o controle dos pacLages( consegueAse redu%ir o tamanho do ar$uivo e/ecut.vel( pois s7 ser'o compilados os pacLages $ue #a%em parte da sua aplica&'o.

P"o%eto! Del&'i

57

Parte

III
6an!o de Dados

Delphi !om 6an!o de Dados


O Delphi prov0 um ambiente bastante simples para o desenvolvimento de aplica&1es $ue acessam banco de dados. O @orland Data@ase Engine (@DE) permite o acesso aos principais sistema de gerenciamento de banco de dados e de um con"unto de componentes para cone/'o e manipula&'o das bases. 5om isso - possvel desenvolver aplica&1es de #orma simples e r.pida.

O @DE - um con"unto de #un&1es $ue possui as in#orma&1es sobre os drivers de acesso dos principais gerenciadores de banco de dados do mercado. Ha vers'o 5lient:)erver do Delphi( o @DE tra% drivers de cone/'o nativa para os bancos Oracle( In#ormi/( )>L )erver( D@M( entre outros.

As #erramentas de gerenciamento de banco de dados do Delphi s'o* BDE Administrator* 5on#igura o @DE e os drivers de 8erenciadores de @anco de Dados. 5ria e con#igura Alias. DataBase Des)top <DBD0* #erramenta para criar( alterar e editar bancos de dados2 Componentes (visuais e n'o visuais)* permitem cone/1es e inter#ace com banco de dados. Est'o disponibili%ados nas paletas Data Access e Data Controls2 Data Module* centrali%a componentes de acesso a dados dos #ormul.rios e aplica&1es2 Form E3pert* permite a gera&'o autom.tica de #ormul.riosApadr'o para acesso a banco de dados. -b7e!t $epository* arma%ena #ormul.rios e m7dulos de dados para serem compartilhados entre di#erentes aplica&1es2 Borland Database n'ine 8BD 9* #a% o relacionamento entre o DEL !I e o banco de dados2 %/L #plorer* #erramenta para gerenciar @DE e criar dicion.rio de dados2 4uic) %eport* permite a gera&'o de relat7rios a partir de bancos de dados2

O ?ue B um Alias @
As aplica&1es $ue trabalham com tabelas de banco de dados podem re#erenciar estas tabelas utili%ando o caminho (path) onde elas est'o posicionadas no disco. ara cada tabela representada na aplica&'o - de#inido o caminho e o ar$uivo $ue cont-m os dados da tabela.

Del&'i com Banco de Dado!

60

Implementa!"o sem utili5ar Alias: %e2erncia direta ao arGuivo

Apesar de #uncionar sem problemas( essa #orma de implementa&'o #a% com $ue a aplica&'o #i$ue dependente da pasta (diret7rio) onde os dados est'o locali%ados. )e os dados n'o estiverem e/atamente na pasta de#inida na aplica&'o( esta n'o #uncionar..

Altera!"o da pasta de dados: A aplica!"o n"o 2unciona mais

Ima #orma de se resolver esse problema - atrav-s da utili%a&'o de um Alias. Im Alias re#erencia a pasta onde est'o locali%ados os ar$uivos de dados (tabelas). A representa&'o das tabelas representadas na aplica&'o re#erenciam o Alias previamente de#inido.

Del&'i com Banco de Dado!

61

Desta #orma( caso se"a alterada a pasta onde est'o locali%ados os dados da aplica&'o basta alterar a de#ini&'o do Alias para $ue a aplica&'o continue #uncionando normalmente.

6DE Administrator
ara $ue se consiga acessar bases de dados a partir do Delphi( #a%Ase necess.rio a cria&'o de re#er0ncias. Estas re#er0ncias s'o conhecidas por Alias( e s'o criadas em um aplicativo chamado BDE Administrator. O @DE Administrator permite* 5on#igurar o @orland Database Engine (@DE). 5on#igurar os drivers )DAHDA<D ( arado/ e d@A)E:9o/ ro)( os drivers )>L( Access e tamb-m criar e con#igurar drivers OD@5. 5riar e manter Alias de banco de dados.

A PCgina Databases
=ostra os alias dos bancos de dados disponveis.

Del&'i com Banco de Dado!

62

A PCgina ConAiguration
ermite adicionar e con#igurar drivers OD@5( con#igurar drivers padr'o e drivers )>L e ainda con#igurar o @orland Database Engine (@DE).

Data6ase Des5top
O DataBase Des"top - uma #erramenta do DEL !I para manipula&'o de @anco de Dados. Ela - 6til principalmente para a cria&'o( visuali%a&'o( modi#ica&'o e consulta de tabelas nos #ormatos arado/( d@A)E e )>L.

Del&'i com Banco de Dado!

63

Criando uma 2abela


ara criar uma nova tabela utili%aAse a op&'o do menu File|0ew|(able.

)er. apresentado uma "anela para a de#ini&'o do tipo de tabela $ue se dese"a criar. 5li$ue o bot'o OY. Heste instante devem ser de#inidos os atributos dos campos( como segue* Field 0ame* nome do campo2 (ype* tipo do campo. 5licando o bot'o direito do mouse podeAse selecionar o tipo do campo2 %i:e* de#ine o tamanho do campo. )7 disponvel para alguns tipos2 +ey* de#ine camposAchave para a tabela. Ainda nesta tela podeAse de#inir* (able properties* de#ine caractersticas gerais dos campos da tabela2 $e;uired Field* de#ine se o campo tem um valor re$uerido2 Minimum Value* valor mnimo para o campo2 Ma#imum Value* valor m./imo para o campo2 De1ault Value* valor padr'o para o campo2 Pi!ture* de#ine o #ormato de entrada do campo.
Del&'i com Banco de Dado! 64

Componentes de 6an!o de Dados


A p.gina Data Access possui componentes $ue permitem a cone/'o do DEL !I com bancos de dados.

A p.gina Data Controls cont-m componentes $ue permitem a manipula&'o e visuali%a&'o dos dados de um banco de dados.

Os componentes da p.gina Decision Cube #ornece recursos para an.lise multidimensional de dados atrav-s de re#er0ncia cru%ada entre tabelas de banco de dados utili%ando a linguagem )>L.

Data "odule
O Data Module - um #ormul.rio especial $ue permite centrali%ar os componentes de controle de banco de dados. )uas principais vantagens s'o* permite $ue toda a aplica&'o utili%e os mesmos componentes de controle de dados( evitando duplica&'o de componentes2 garantem o uso correto das tabelas( pois elas n'o precisam ser recriadas em cada #ormul.rio2 permitem de#inir novos eventos ou m-todos sobre as tabelas $ue se"am comuns em toda a aplica&'o.

Del&'i com Banco de Dado!

65

Data Module: Centrali5a!"o de componentes de banco de dados.

$ormulCrios ;tiliNando 6an!o de Dados


A cria&'o de um #ormul.rio para a manipula&'o do banco de dados pode ser #eita de #orma manual (adicionandoAse cada componente individualmente) ou de #orma autom.tica (atrav-s do Form E3pert). O Form #pert - uma #erramenta do DEL !I $ue permite criar um #ormul.rio padr'o para a manipula&'o de banco de dados. )ua principal vantagem est. na automati%a&'o do processo de cria&'o de #ormul.rio( o $ue permite ganhar tempo no desenvolvimento da aplica&'o.

Del&'i com Banco de Dado!

66

2;2O.IAL
.

Construindo uma Apli!ao DELPHI

)er'o vistas a$ui as etapas para constru&'o de uma aplica&'o Delphi. 5omo e/emplo ser. utili%ado um sistema comercial simpli#icado( $ue se utili%a de tabelas de banco de dados. A se$?0ncia com $ue essas etapas s'o apresentadas serve apenas para a condu&'o did.tica na elabora&'o do e/emplo proposto( n'o tem pretens'o de metodologia. elo contr.rio. A #orma com $ue ser'o implementadas algumas caractersticas do nosso sistemaAe/emplo se "usti#ica apenas por uma $uest'o de gosto pessoal.

De2inindo o +istema
, sempre bom lembrar $ue( antes de sentarAse em #rente ao micro e sair programando( a an.lise do sistema e a modelagem de dados ainda s'o #undamentais para o sucesso de um pro"eto de sistema. , muito di#cil para um programador compulsivo #icar QparadoR elaborando diagramas( Qperdendo tempoR rabiscando coisas $ue ". est'o claras em sua cabe!a. Esse pensamento - o caminho mais curto para a$ueles Qsistemas n'o acabam nuncaR. +o2isticados recursos de inter2ace n"o conseguem a'eitar um sistema mal elaborado. Ha elabora&'o de sistemas $ue envolvam @anco de Dados( n'o se deve es$uecer de toda a teoria $ue envolve esta .rea. =odelagem de dados( normali%a&'o( etc.( #oram e est'o sendo estudadas para serem usadas. H'o se deve elaborar novas teorias ou Qum 'eitin-o todo seu de se #a%er as coisasR. elo menos n'o durante o desenvolvimento um sistema importante. Doda a QpapeladaR gerada durante a an.lise do sistema( se bem padroni%ada( pode servir como documenta&'o do sistema ainda ser um ponto de partida para a elabora&'o dos manuais. Assim o seu sistema continuar. #uncionando caso o analista ou o programador arran"ar outro emprego.

O 'istema
O sistema $ue ser. utili%ado como e/emplo serve para emiss'o de notas #iscais. Ele ter. o nome (otimista) de +isFat( e ter. as seguintes atribui&1es* 5ontrole de rodutos2 5ontrole de Gendedores2 Elabora&'o e emiss'o de Hotas 9iscal.

As 2abelas
As in#orma&1es necess.rias est'o divididas em $uatro tabelas de banco de dados como de#inidas abai/o*
P%(D .( 57digo Descri&'o >uantidade em esto$ue re&o de compra re&o de venda 6E#DED(% 57digo Home Data de admiss'o #otaFiscal H6mero Data Gendedor Item#ota Hota Item roduto >uantidade

(rgani5ando os ArGuivos
De#inido o sistema( iremos agora ao computador come&ar a programaraaa A primeira coisa a #ase - de#inir uma nova pasta (diret7rio) onde ser'o gravados os dados e os programas do novo sistema. Im sistema pode conter centenas de ar$uivos re#erentes aos programas e outras centenas re#erentes aos dados. ortanto( - uma boa pr.tica criar uma pasta de trabalho para a organi%a&'o dessa grande $uantidade de ar$uivos.

Criando DiretDrios
5rie uma asta (diret7rio) com o nome do sistema ()is9at).

, importante separar os ar$uivos $ue se re#erem aos dados (tabelas) dos diversos tipos de ar$uivos re#erentes aos programas. ara isso( na pasta +isFat( crie duas outras pastas* Dados e Programas.

Criando um Alias
ara a aplica&'o proposta( vamos criar um Alias chamado Faturamento $ue re#erencia a pasta de dados onde ser'o gravadas as tabelas $ue iremos criar adiante. 1%# Passo 1 Ha p.gina Databases do @DE Administrator e/ecute a op&'o #e$ do menu (b'ect. 1&# Passo % )er. apresentada uma "anela para a sele&'o do driver de banco de dados. )elecione )DAHDA<D pois iremos trabalhar com tabelas arado/.

Ap7s digitar OY( ser. criado um novo Alias com o nome )DA<DA<D1. <enomeie o Alias com o nome Faturamento. 1(# Passo & Em De2inition (lado direito da "anela) preencha o atributo Pat- com o caminho onde ser'o posicionadas as tabelas de dados da aplica&'o* C:P+isFatPDados. )e pre#erir( cli$ue o mouse nos tr0s pontos $ue aparecem no atributo para utili%ar uma cai/a de di.logo para au/iliar na procura do diret7rio de dados.

on!t"(indo (ma a&lica#$o Del&'i

70

1+# Passo ( 9eche o D@E Administrator

<esponda Qes para salvar o Alias. 5omo pode ser visto( todos os Alias s'o gravados no ar$uivo C:PArGuivos de ProgramasPBorlandPCommon FilesPBDEPIDAPI@A.CFF

Criando .abelas
Data6ase Des5top
O DataBase Des"top - uma #erramenta para manipula&'o de @anco de Dados. Ela 6til principalmente para a cria&'o( visuali%a&'o( modi#ica&'o e consulta de tabelas nos #ormatos arado/( d@A)E e )>L.

Ho menu principal do Data+a"e De")top selecione a op&'o File|0ew|(able. 1-# PA''O 1 )elecione a op&'o Parado# < e cli$ue em -+. As tabelas Parado% (e/tens'o .D@) o#erecem mais recursos $ue as tabelas DBa"e (e/tens'o .D@9).

1/# PA''O % Heste instante devem ser de#inidos os atributos dos campos*
on!t"(indo (ma a&lica#$o Del&'i 71

Field 0ame* nome do campo2

(ype* tipo do campo. 5licando o bot'o direito do mouse podeAse selecionar o tipo do campo2 %i:e* de#ine o tamanho do campo. )7 disponvel para alguns tipos2 +ey* de#ine camposAchave para a tabela.

Produto.db 5odigo Descricao >tdEsto$ue reco5ompra recoGenda #otaFiscal.db Humero Data Gendedor

./pe A A H b b ./pe W D A

+i5e U PF

Oe/ \

6endedor.db 5odigo Home DataAdmissao

./pe A A D

+i5e K PF

Oe/ \

+i5e

Oe/ \

Item#ota.db Hota Item roduto >uantidade

./pe I I A H

+i5e

Oe/ \ \

10# PA''O & 5licando no bot'o %ave ,s( deve aparecer uma cai/a de di.logo para $ue se possa salvar a tabela em disco. D0 um nome ; tabela e cli$ue no bot'o %alvar.

on!t"(indo (ma a&lica#$o Del&'i

72

Ateno

Ho nosso e/emplo os ar$uivos de dados (tabelas) devem ser gravados na pasta C:P+isFatPDados.

Iniciando um Pro'eto
Ao iniciar o Delphi( - apresentado um pro"eto chamado Pro'ectE com um #ormul.rio chamado FormE. ara come&armos a partir do %ero( #eche (sem salvar) o #ormul.rio utili%ando o comando do menu File|Close. Desta #orma teremos apenas o pro"eto sem nenhum #ormul.rio. Agora salve o pro"eto atrav-s do comando File|%ave Pro7e!t ,s. Im ar$uivo de pro"eto possui a e/tens'o .dpr (Delphi Pro"ect).
Ateno

Geri#i$ue com aten&'o a pasta onde ser. gravado o pro"eto. Ho nosso e/emplo os ar$uivos $ue n'o se re#erem ;s tabelas devem ser gravados na pasta C:P+isFatPProgramas.

Criando um Data "odule


O Data Module - um #ormul.rio especial $ue permite centrali%ar os componentes de controle de banco de dados. )uas principais vantagens s'o* permite $ue toda a aplica&'o utili%e os mesmos componentes de controle de dados( evitando duplica&'o de componentes2 garantem o uso correto das tabelas( pois elas n'o precisam ser recriadas em cada #ormul.rio2 permitem de#inir novos eventos ou m-todos sobre as tabelas $ue se"am comuns em toda a aplica&'o. 11# PA''O 1 )elecione o comando do menu File|0ew Data Module. )er. criada uma "anela chamada inicialmente Data=odule1. Ha propriedade #ame digite DadosFaturamento. %3# PA''O % Inicialmente ponha na "anela (Data =odule) um componente Database( locali%ado no con"unto de componentes da p.gina DataAccess da aleta de 5omponentes Altere as seguintes propriedades*
Properties Alias#ame Database#ame #ame Connected 9aturamento db9aturamento db9aturamento Drue

on!t"(indo (ma a&lica#$o Del&'i

73

%1# PA''O & onha um componente .able na "anela. O componente .able tamb-m est. locali%ado na p.gina DataAccess da aleta de 5omponentes Altere as seguintes propriedades*
Properties Database#ame .able#ame #ame Active db9aturamento roduto tb <ODIDO Drue

%%# PA''O ( Acrescente um componente Data+ource no Data =odule. Altere as seguintes propriedades*
Properties Data+et #ame tb <ODIDO) ds <ODIDO

%&# PA''O + 5on#orme os passos E e P( acrescente mais tr0s componentes .able e mais tr0s componentes Data+ource com as seguinte as propriedades*
Properties Database#ame .able#ame #ame Active Properties Database#ame .able#ame #ame Active Properties Database#ame .able#ame #ame Active db9aturamento ItensHota tbItensHota Drue db9aturamento Hota9iscal tbHota9iscal Drue Properties Data+et #ame tbItensHota dsItensHota db9aturamento Gendedor tbGEHDEDO< Drue Properties Data+et #ame tbHota9iscal dsHota9iscal Properties Data+et #ame tbGEHDEDO< dsGEHDEDO<

%(# PA''O )alve o Data =odule utili%ando o comando File|%ave ,s. O nome do ar$uivo ser. dmFaturamento.
Ateno

Este ar$uivo deve ser gravados na pasta C:P+isFatPProgramas.


on!t"(indo (ma a&lica#$o Del&'i 74

.rans2ormando campos em ob'etos


odeAse di%er $ue a #un&'o de um componente .able - representar internamente ; aplica&'o uma tabela gravada no disco( permitindo $ue a aplica&'o consiga re#erenci.Ala. Ha maioria das aplica&1es - necess.rio $ue cada campo de uma tabela se"a tamb-m representado por um ob"eto. Dessa #orma - possvel manipular algumas propriedades de cada campo individualmente. 5omo e/emplo ser. utili%ada a tabela tbItens#ota D0 um duploAcli$ue sobre a tabela tbItens#ota. Aparecera uma pe$uena "anela inicialmente va%ia. )obre esta "anela cli$ue o bot'o direito do mouse e escolha a op&'o ,dd Fields666.

on!t"(indo (ma a&lica#$o Del&'i

75

Aparecer. uma outra "anela contendo todos os campos da tabela. =ar$ue todos os campos e cli$ue o bot'o -+.

O nome de cada ob"etoAcampo ser. de#inido automaticamente pelo Delphi. Ele ser. composto do nome da tabela seguido do nome do campo. or e/empo( o nome do ob"etoAcampo de#inido para o campo Produto da tabela tbItem0ota ser. tbItem#otaProduto.

Alterando propriedades dos !ampos


Ap7s a trans#oma&'o dos campos em ob"etos( cada campoAob"eto ter. suas propriedades e eventos individualmente. )empre $ue #or necess.rio ter acesso aos ob"etosAcampo de uma tabela basta dar um duploAcli$ue sobre ela.

on!t"(indo (ma a&lica#$o Del&'i

76

Criando campos TvirtuaisU


O recurso de trans#ormar campos em ob"etos permite $ue se crie ob"etosAcampo $ue n'o est'o ligados a um campo da tabela. Ha tabela tbItem#ota( por e/emplo( temos o c7digo do Produto e a 4uantidade. )abemos antecipadamente $ue durante a e/ecu&'o do nosso sistema teremos $ue calcular diversas ve%es o valor total do item (pre&o de venda \ $uantidade). or-m o pre&o de venda do produto n'o aparece nesta tabela e sim na tabela tbP%(D .(. Q>ue bom seria se o campo Preco6enda aparecesse tamb-m na tabela tbItem#ota( economi%aria muito trabalhoR.

Criando !ampos lookup


Este tipo de campo QvirtualR arma%ena o valor de um campo $ue est. em outra tabela. A busca desse valor - #eita atrav-s de pes$uisa utili%ando a chave prim.ria. Gamos criar um campo chamado Preco nitario na tabela tbItem#ota cu"o valor $ue ser. Qtra%idoR da tabela tbP%(D .( atrav-s do c7digo do produto. %+# PA''O 1 D0 um duploAcli$ue na tabela tbItem#ota. Aparecer. uma pe$uena "anela contendo os ob"etosAcampo da tabela. )obre essa "anela cli$ue o bot'o direito do mouse e escolha a op&'o 0ew 1ield666.

%-# PA''O % Ha "anela $ue ser. apresentada( preencha as seguintes in#orma&1es*

on!t"(indo (ma a&lica#$o Del&'i

77

#ame Component ./pe Oe/ Fields Dataset *oo)up )e/ %esult Field

Home do novo campo QvirtualR $ue ser. criado na tabela. Home do ob"etoAcampo $ue ser. criado. Dipo do novo campo QvirtualR. 5ampo $ue ser. utili%ado na pes$uisa. Dabela onde est. o campo dese"ado. 5have prim.ria da tabela onde est. o campo dese"ado Home do campo cu"o valor se dese"a Qtra%erR.

O atributo Component - preenchido automaticamente mas pode ser alterado( se pre#erir. Este nome - usado para re#erenciar o ob"etoAcampo nos programas do sistema. %/# PA''O & 5li$ue no bot'o (O e pronto. , criado um novo campo na tabela $ue n'o est. #isicamente gravado no disco. Este campo - mantido automaticamente pelo sistema.

Criando !ampos !al!ulados


Outro tipo de campo QvirtualR - o campo calculado. Im campo calculado arma%ena o resultado da uma opera&'o reali%ada com alguns campos da tabela. Itili%ando mais uma ve% a tabela tbItem#ota como e/emplo( poderamos pensar $ue nos pouparia muito trabalho se tiv-ssemos arma%enado na tabela o resultado da multiplica&'o do Preco nitario com a 4uantidade. %0# PA''O 1 D0 um duploAcli$ue na tabela tbItem#ota. Aparecer. uma pe$uena "anela contendo os ob"etosAcampo da tabela. )obre essa "anela cli$ue o bot'o direito do mouse e escolha a op&'o 0ew 1ield666.

on!t"(indo (ma a&lica#$o Del&'i

78

%1# PA''O % Ha "anela $ue ser. apresentada( preencha as seguintes in#orma&1es*

#ame Component ./pe

Home do novo campo QvirtualR $ue ser. criado na tabela. Home do ob"etoAcampo $ue ser. criado. Dipo do novo campo QvirtualR.

&3# PA''O & 5li$ue no bot'o OY e ser. criado um novo campo na tabela $ue n'o est. #isicamente gravado no disco. or-m( o valor deste campo n'o - mantido automaticamente pelo sistema. , necess.rio de#inir na tabela tbItem#ota o evento (nCalcFields. )elecione a tabela tbItem#ota e na "anela (b'ect Inspector cli$ue na p.gina Events. Ho evento (nCalcFields digite .otalItem e pressione Enter. )er. criado uma procedure onde dever. ser digitada apenas uma linha de c7digo.

on!t"(indo (ma a&lica#$o Del&'i

79

proced$re T ados0aturamento*Total5tem( ata'et: T ata'et); )egin tb5tensNotaTotal5tem*Palue := tb5tensNota_uantidade*Palue ? tb5tensNotaPrecoVnitario*Palue; end;

%elacionando tabelas
E/iste um relacionamento 1 para H entre as tabelas tb#otaFiscal e a tabela tbItem#ota. Ima nota #iscal possui v.rios itens. Este tipo de relacionamento chamado pelo Delphi de Master=Detail. Ho nosso e/emplo a tabela Ma"ter - a tabela tb#otaFiscal e a tabela Detail - a tabela tbItem#ota. Os relacionamentos entre as tabelas - #eito atrav-s de um ou mais campos. Ho caso( o campo #ota da tabela Detail (tbItem#ota) deve se relacionar com o campo #umero da tabela Ma"ter (tb#otaFiscal)2 ara se de#inir um relacionamento =asterADetail basta alterar alguns atributos da tabela Detail.

Ha propriedade MasterFields de#iniAse o campo de relacionamento. Esta de#ini&'o #eita utili%andoAse o Field *in)er Designer.

on!t"(indo (ma a&lica#$o Del&'i

80

Criando a 'anela Principal


O primeiro #ormul.rio ("anela) $ue iremos criar - o #ormul.rio principal. O #ormul.rio principal ter. apenas o menu principal de nossa aplica&'o. Este menu servir. para guiar a implementa&'o de todos demais #ormul.rios do sistema. &1# PA''O 1 ara criar um novo #ormul.rio selecione a op&'o do menu File|0ew Form. )er. criado um #ormul.rio $ue inicialmente ter. o nome 9orm1. Altere as seguintes propriedades da "anela.
Properties Caption #ame Position )is9at 1.F #m rincipal po)creen5enter

&%# PA''O % onha um componente MainMenu (p.gina )tandard) em $ual$uer posi&'o e altere a propriedade #ame para MenuPrincipal. D0 um duploAcli$ue sobre esse componente e ser. apresentado um Editor de Menu( onde voc0 poder. de#inir as op&1es do menu.

on!t"(indo (ma a&lica#$o Del&'i

81

5ada item do menu - um ob"eto( possuindo suas propriedades e eventos. ara cada item do menu( altere as seguintes propriedades*
Caption c5adastro cGendedores cGenda A )air #ame =enu5adastro OpcaoGendedores OpcaoGenda H1 Opcao)air

&&# PA''O & Os eventos deste menu ser'o de#inidos assim $ue as "anelas correspondentes #orem criadas. odemos( no entanto( de#inirmos o evento para a op&'o )air. ara isso d0 um duploAcli$ue sobre esta op&'o. Automaticamente ser. criada uma rocedure para $ue voc0 escreva o c7digo (programa) $ue ser. e/ecutado na sele&'o desta op&'o.
proced$re T2mPrincipal*Opcao'air(lic`('ender: TObject); )egin (lose; end;

Digite apenas o comando CloseH na linha onde o cursor est. posicionado. &(# PA''O ( )alve o #ormul.rio utili%ando o comando File|%ave ,s. O nome do ar$uivo ser. Principal( e ser. gravado na pasta de programas (C:P+isFatPProgramas). O Delphi( na verdade( ir. gravar dois ar$uivo. Im ar$uivo com e/tens'o .pas e um outro ar$uivo com e/tens'o .d2m (Delphi Form).

on!t"(indo (ma a&lica#$o Del&'i

82

Criando a 'anela T6endedoresU


Gamos agora criar o #ormul.rio para entrada de dados da tabela Gendedores. E/iste uma #orma autom.tica de se criar #ormul.rios de banco de dados utili%andoAse o Database Form ,i5ard. Iremos( por-m( criar os #ormul.rios de #orma manual. &+# PA''O 1 Ho menu( selecione File|0ew Form. )er. apresentado um #ormul.rio em branco. Altera as seguintes propriedades*
Properties Caption Border+t/le #ame Position Gendedores bs)ingle #mGendedor po)creen5enter

Antes de tudo( salve o #ormul.rio (File|%ave ,s666) com o nome 6endedor. &-# PA''O % Este #ormul.rio( assim como todos os #ormul.rios $ue #a%em atuali%a&'o de tabelas( vai re#erenciar uma ou mais tabelas $ue est'o de#inidas no Data Module da aplica&'o (dmFaturamento). ara $ue este #ormul.rio possa acessar tais tabelas( necess.rio declarar este relacionamento. ara isso( selecione a op&'o File|)se )nit do menu principal. )er. apresentada a seguinte "anela*

on!t"(indo (ma a&lica#$o Del&'i

83

)elecione dmFaturamento e cli$ue OY. &/# PA''O & Inclua no #ormul.rio um componente DBFrid (Data Controls). Altere algumas de suas propriedades*
Properties Data+ource #ame Dados9aturamento.dsGEHDEDO< DadosGendedor

)elecionando a propriedade Columns (ou d0 um duploAcli$ue no componente D@8rid) - apresentado um QEditor de 5olunasR. Atrav-s dele - possvel alterar propriedades e eventos de cada coluna individualmente.

&0# PA''O ( Inclua no #ormul.rio um componente DB#avigador. Altere as seguintes propriedades*


Properties Data+ource #ame Dados9aturamento.dsGEHDEDO< 5ontroleGendedor

on!t"(indo (ma a&lica#$o Del&'i

84

Criando a 'anela TProdutosU


)eguindo o e/emplo da cria&'o da "anela QGendedoresR - criada a "anela Q rodutosR 5riar novo #ormul.rio (File|0ew Form)com as seguintes propriedades*
Properties Caption Border+t/le #ame Position rodutos bs)ingle #m roduto po)creen5enter

EX

)alvar este #ormul.rio com o nome Produtos File|)se )nit dmFaturamento

Incluir no #ormul.rio um componente DBFrid (Data Controls) e alteraras seguintes propriedades*


Properties Data+ource Dados9aturamento.ds <ODIDO on!t"(indo (ma a&lica#$o Del&'i 85

#ame

Dados roduto

5on#igurar cada coluna individualmente2

Inclua no #ormul.rio um componente DB#avigador e altere as seguintes propriedades*


Properties Data+ource #ame Dados9aturamento.ds <ODIDO 5ontrole roduto

Criando a 'anela T#otas 2iscaisU


O #ormul.rio de entrada de dados das notas #iscais ter. as seguintes propriedades*
Properties Caption Border+t/le #ame Position Hotas 9iscais bs)ingle #mHota9iscal po)reen5enter

EE

on!t"(indo (ma a&lica#$o Del&'i

86

Completando a 'anela principal


O #ormul.rio principal ir. acessar os tr0s #ormul.rios de entrada de dados $ue #oram criados (2m6endedor( 2mProduto( 2m#otaFiscal). ara $ue o #ormul.rio principal consiga re#erenciar cada um deste #ormul.rios( - necess.rio selecion.Alos atrav-s da op&'o File|)se )nit selecione.

EA

on!t"(indo (ma a&lica#$o Del&'i

87

9alta agora completar o menu principal de#inindoAse o evento (nClic) de cada op&'o. ara isso( basta clicar em cada op&'o do menu e de#inir a linha de c7digo para a chamada da "anela correspondente.

Ap7s a de#ini&'o de todas as procedures( o #ormul.rio principal ter. o seguinte c7digo*

on!t"(indo (ma a&lica#$o Del&'i

88

Con2igurando o Pro'eto
ara con#igurar a aplica&'o utili%e a op&'o do menu do Delphi Pro7e!t|-ptions666 Apesar de e/istir v.rias p.ginas( as p.ginas $ue iremos ver s'o as p.ginas Forms e Application. Ha p.gina Forms( no campo Main 2orm( voc0 de#ine o #ormul.rio principal do pro"eto. Isto -( a "anela $ue ser. apresentada $uando voc0 e/ecutar a aplica&'o. Ho nosso e/emplo( o #ormul.rio $ue cont-m o menu( ou se"a 2mPrincipal. Ha "anela Auto=create 2orms: aparecem os #ormul.rios $ue s'o criados automaticamente( ao ser iniciada a aplica&'o. odeAse di%er $ue estes #ormul.rios ocupam mem7ria( mesmo $ue n'o este"am visveis. Ha "anela Available 2orms: est'o os #ormul.rios $ue ser'o criados em tempo de e/ecu&'o. Esses #ormul.rios n'o ocupam mem7ria( at- $ue eles se"am apresentados na tela. or-m( o processo de aloca&'o e libera&'o de mem7ria para esses #ormul.rios - de responsabilidade do programador.

E@

on!t"(indo (ma a&lica#$o Del&'i

89

Ha p.gina Application s'o con#igurados o ttulo da aplica&'o ( .itle:)( o ar$uivo de help $ue ser. utili%ado pela aplica&'o (9elp 2ile:) e o cone para representar a aplica&'o (Icon*)

on!t"(indo (ma a&lica#$o Del&'i

90

Vous aimerez peut-être aussi