You are on page 1of 118

Professores: Adriano Cancelier Luiz Henrique Castelan Carlson

Sumrio
VERSES...........................................................................................................................................................................6 IDE.......................................................................................................................................................................................7 O FORM DESIGN .........................................................................................................................................................7 A BARRA DE MENU PRINCIPAL ............................................................................................................................8 A PALETA DE COMPONENTES...............................................................................................................................8 A SPEEDBAR................................................................................................................................................................9 OBJECT INSPECTOR ................................................................................................................................................10 CODE EDITOR ...........................................................................................................................................................11 CODE INSIGHT ..........................................................................................................................................................12 SPEED MENUS...........................................................................................................................................................13 DESKTOPS TOOLBAR .............................................................................................................................................13 CONFIGURAES DO AMBIENTE.......................................................................................................................14 Autosave Options.....................................................................................................................................................14 Compiling and running ...........................................................................................................................................14 Form designer..........................................................................................................................................................14 TECLAS IMPORTANTES ...........................................................................................................................................15 PROJETO EM DELPHI................................................................................................................................................16 .PAS E .DPR.................................................................................................................................................................18 SALVAR O PROJETO................................................................................................................................................18 ABRIR O PROJETO....................................................................................................................................................19 OPES DE PROJETO..............................................................................................................................................20 Forms .......................................................................................................................................................................20 Application...............................................................................................................................................................20 Compiler ..................................................................................................................................................................20 Linker .......................................................................................................................................................................20 Directories/Conditionals ........................................................................................................................................21 Version Info .............................................................................................................................................................21 Packages ..................................................................................................................................................................21 A LISTA TO-DO .........................................................................................................................................................21 TIPOS DE COMPONENTES .......................................................................................................................................21 Visveis .....................................................................................................................................................................21 No-Visveis.............................................................................................................................................................21 CONVENO DE NOMEAO................................................................................................................................22 MANIPULANDO COMPONENTES ..........................................................................................................................22 Utilizando o Object Inspector.................................................................................................................................23 MANIPULANDO EVENTOS .......................................................................................................................................25 Construo de um manipulador de evento para o objeto button.........................................................................26 Executando a aplicao..........................................................................................................................................27 COMENTRIOS .........................................................................................................................................................27 UM POUCO MAIS SOBRE EVENTOS ...................................................................................................................27 VCL ...................................................................................................................................................................................28 Objeto Form (Formulrio) ..................................................................................................................................28 Objeto Button1 (Boto)........................................................................................................................................30 Objeto Edit (Caixa de edio).............................................................................................................................30

Objeto Label (Rtulo de orientao) ..................................................................................................................31 Sugesto: Exercicio 1..............................................................................................................................................31 MAIS SOBRE A PALETA STANDART ..................................................................................................................32 Objeto Memo (Memorando)................................................................................................................................32 Objeto CheckBox (Caixa de verificao) ...........................................................................................................32 Objeto RadioButton (Boto de radio)..............................................................................................................33 Objeto ListBox (Caixa de listagem)....................................................................................................................33 Objeto ComboBox1 (Caixa de listagem em formato de cortina)......................................................................34 Objeto GroupBox (Caixa de agrupamento) .......................................................................................................34 Objeto RadioGroup (Grupo de botes radio).....................................................................................................35 Objeto Panel (Painel) ..........................................................................................................................................35 Objetos MainMenu e PopupMenu (Menu principal e Menu rpido) ...............................................................36 Sugesto: Exerccio 2..............................................................................................................................................36 A LINGUAGEM OBJECT PASCAL..........................................................................................................................36 O MDULO .DPR.......................................................................................................................................................36 AS UNITS.....................................................................................................................................................................37 Cabealho ................................................................................................................................................................38 Interface ...................................................................................................................................................................38 Implementao ........................................................................................................................................................38 Inicializao ............................................................................................................................................................39 Finalizao ..............................................................................................................................................................39 ATRIBUIO .............................................................................................................................................................39 DECLARAO DE VARIVEIS.............................................................................................................................39 TIPOS PARA MANIPULAO DE VARIVEIS..................................................................................................40 Tipos de variveis Inteiras......................................................................................................................................40 Tipos de nmeros Reais ..........................................................................................................................................40 Tipos de variveis booleanas .................................................................................................................................40 Tipos de variveis de caracteres ............................................................................................................................40 Tipo genrico (Variant) ..........................................................................................................................................40 Arrays (Vetores) ......................................................................................................................................................41 FUNES DE CONVERSO E MANIPULAO................................................................................................42 CLASSES E OBJETOS...............................................................................................................................................42 COMPONENTES, CONTROLES E PROPRIEDADES ..........................................................................................43 MTODOS E EVENTOS ...........................................................................................................................................43 EXPRESSES LGICAS ..........................................................................................................................................44 OPERADORES ARITMTICOS...............................................................................................................................44 OPERADORES RELACIONAIS .........................................................................................................................................44 P ALAVRAS RESERVADAS ..............................................................................................................................................45 COMANDO IF.............................................................................................................................................................47 COMANDO CASE......................................................................................................................................................47 COMANDO REPEAT.................................................................................................................................................48 COMANDO WHILE ...................................................................................................................................................48 COMANDO FOR ........................................................................................................................................................48 COMANDO BREAK ..................................................................................................................................................48 COMANDO WITH......................................................................................................................................................49 Sugesto: Exerccio 3..............................................................................................................................................49 PROCEDIMENTOS E FUNES.............................................................................................................................49 DECLARAO E ATIVAO DE PROCEDIMENTO ........................................................................................50 PASSAGEM DE PARMETROS .............................................................................................................................51 DECLARAO E ATIVAO DE FUNES......................................................................................................52 TRABALHANDO COM ARQUIVO DE DADOS...................................................................................................53 Procedimento Write ................................................................................................................................................53 Procedimento Writeln .............................................................................................................................................53 Procedimento Read .................................................................................................................................................53 Procedimento Readln..............................................................................................................................................54

Procedimento AssignFile ........................................................................................................................................54 Funo Eof...............................................................................................................................................................54 FunoSeekEof ........................................................................................................................................................54 Funo Eoln.............................................................................................................................................................55 Procedimento Append.............................................................................................................................................55 Procedimento Rewrite.............................................................................................................................................55 Procedimento Reset.................................................................................................................................................55 Procedimento CloseFile..........................................................................................................................................56 Funo DeleteFile...................................................................................................................................................56 A UNIT MATH............................................................................................................................................................58 DECLARAES CRIADAS AUTOMATICAMENTE PELO DELPHI...............................................................61 CAIXAS DE DILOGO .............................................................................................................................................61 ShowMessage...........................................................................................................................................................61 MessageDlg .............................................................................................................................................................61 Application.MessageBox.........................................................................................................................................62 CAIXAS DE ENTRADA ............................................................................................................................................63 InputBox...................................................................................................................................................................63 InputQuery...............................................................................................................................................................64 Exemplo....................................................................................................................................................................64 Sugesto: Exerccio 4..............................................................................................................................................65 CHAMADA DE FORMS...............................................................................................................................................65 COMPONENTES (VCL)...............................................................................................................................................66 Objeto Chart (Componente grfico)...................................................................................................................66 Objeto StringGrid (Tabela de texto) ...................................................................................................................67 Objeto BitBtn (Boto com figuras opcionais) ....................................................................................................67 Objeto SpeedButton (Boto para barra de cones)............................................................................................68 Objeto MaskEdit (Caixa de edio com mscara) ............................................................................................69 Objeto Image (Imagem).......................................................................................................................................69 Objeto - PageControl..............................................................................................................................................69 Objeto OpenDialog (Caixa de dilogo para abertura de arquivos) ................................................................71 Sugesto: Exerccio 5.............................................................................................................................................71 Objeto ImageList (Lista de imagens)..................................................................................................................71 Objeto RichEdit (Texto com formatao)...........................................................................................................72 Objeto ProgressBar (Barra de progresso).........................................................................................................72 Objeto Gauge (Barra de progresso) ...................................................................................................................73 Objeto Animate (Animaes)...............................................................................................................................73 Sugesto: Exerccio 6..............................................................................................................................................73 Objeto DateTimePicker (Data e hora atravs de uma Combobox)..................................................................74 Objeto MonthCalendar (Calendrio mensal) ....................................................................................................74 Objeto StatusBar (Barra de status).....................................................................................................................75 Objeto ToolBar (Barra de cones) ......................................................................................................................75 TRATAMENTO DE EXCEES ...............................................................................................................................76 O COMANDO TRY-EXCEPT...................................................................................................................................76 A CONSTRUO ON-DO ........................................................................................................................................77 O COMANDO TRY-FINALLY .................................................................................................................................78 CLASSES BSICAS...................................................................................................................................................79 BLOCOS TRY ANINHADOS....................................................................................................................................79 TRATAMENTO DE EXCEES DE FORMA GLOBAL.....................................................................................80 TRATAMENTO DE EXCEES SILENCIOSAS..................................................................................................81 Sugesto: Exerccio 8..............................................................................................................................................81 UM POUCO MAIS SOBRE COMPONENTES (VCL)............................................................................................82 Objeto Timer (Temporizador) .............................................................................................................................82

Objeto FileListBox (Caixa de listagem de arquivos).........................................................................................82 Objeto DirectoryListBox (Caixa de listagem de diretrios) .............................................................................83 Objeto - DriveComboBox (Caixa de listagem de drives) .....................................................................................83 Objeto FilterComboBox (Caixa de listagem de filtros).....................................................................................83 TCNICAS DE INTERFACE ......................................................................................................................................84 SPLASH SCREEN.......................................................................................................................................................84 CRIANDO E DESTRUINDO FORMS......................................................................................................................87 TOOLBAR .......................................................................................................................................................................88 EXERCCIOS..................................................................................................................................................................92 EXERCCIO 1..............................................................................................................................................................92 EXERCCIO 2..............................................................................................................................................................94 EXERCCIO 3..............................................................................................................................................................97 EXERCCIO 4..............................................................................................................................................................97 EXERCCIO 5........................................................................................................................................................... 101 EXERCCIO 6........................................................................................................................................................... 105 EXERCCIO 7........................................................................................................................................................... 106 EXERCCIO 8........................................................................................................................................................... 108 EXERCCIO 9........................................................................................................................................................... 108 EXERCCIO 10......................................................................................................................................................... 110 EXERCCIO 11......................................................................................................................................................... 111 EXERCCIO 12......................................................................................................................................................... 111 DICAS ............................................................................................................................................................................ 113 CRIAR UM HOTLINK ............................................................................................................................................ 113 ENVIAR UM MAIL................................................................................................................................................. 113 EXECUTANDO UM PROGRAMA DE ACORDO COM A EXTENSO DE UM ARQUIVO...................... 113 COMO SABER QUAL BIBLIOTECA INSERIR NA USES? ............................................................................. 114 DATAS ...................................................................................................................................................................... 114 SAIR DE UMA APLICAO ................................................................................................................................ 114 REDUZINDO TESTES IF..................................................................................................................................... 115 HINTS COM DUAS OU MAIS LINHAS .............................................................................................................. 115 SUBSTITUIR A TECLA TAB POR ENTER NA MUDANA DE FOCO ........................................................ 115 CONES ..................................................................................................................................................................... 116 EXECUTAR UM PROGRAMA.............................................................................................................................. 116 LINKS ........................................................................................................................................................................ 116 Nacionais .............................................................................................................................................................. 116 Internacionais....................................................................................................................................................... 116 CONFIRMAO DE GRAVAO DE REGISTROS EM PARADOX ........................................................... 116 DISPARANDO SONS DO SISTEMA (MULTIMDIA) ...................................................................................... 116 PERMITIR APENAS NMEROS EM UM TEDIT.............................................................................................. 117 REFERNCIA BIBLIOGRFICA .......................................................................................................................... 118

VERSES
O Delphi distribudo em trs verses: Standart Verso bsica do produto que disponibiliza um conjunto bem limitado de componentes. Professional Tem por objetivos programadores profissionais. Possui de todos os recursos bsicos, suporte programao de banco de dados, suporte a servidores Web (WebBroker) e algumas ferramentas externas. Enterprise Conhecida como Client/Server nas verses anteriores; enfoca programadores que esto construindo aplicativos empresariais. Possui o SQL Links para conexes Cliente/Servidor BDE nativas, vrios componentes para Internet, componentes ADO e InterBase Express, suporte a aplicativos multiusurios, internacionalizao e arquitetura de trs camadas. Todas as verses possuem a mesma definio de ambiente integrado e a capacidade de expandir sua VCL original.

IDE
O ambiente de desenvolvimento do Delphi composto de vrias partes compondo um conjunto integrado de janelas que interagem entre si.

Vamos abordar cada uma separadamente:

O FORM DESIGN
Form o termo utilizado para representar as janelas do Windows que compem uma aplicao. Os forms servem como base para o posicionamento dos componentes, que so responsveis pela interao entre usurio e mquina. Para selecionarmos o form devemos clicar (uma vez) em sua rea interna ou na object inspector, e no simplesmente em seu ttulo. As caractersticas iniciais do form como tamanho, botes (minimizar, maximizar, fechar, controle) e cone podem (e sero) ser modificadas atravs de recursos que veremos adiante.

A BARRA DE MENU PRINCIPAL


Como todo programa padro Windows, h uma janela onde esto situados os menus da aplicao, a barra que contem os menus tambm agrupa outras partes.

A PALETA DE COMPONENTES
Aplicativos orientados a objetos trabalham com elementos que denominamos componentes. No Delphi, os componentes encontram-se em uma paleta com vrias guias.

Pode-se configurar a ordenao das guias clicando com o boto direito do mouse sobre qualquer componente e clicar na opo Properties.

H basicamente trs maneiras de inserirmos os componentes no formulrio:

Clicar uma vez no componente, e clicar dentro do formulrio (no arrastar para o form). Clicar duas vezes rapidamente no componente desejado. Segurar a tecla Shift e clicar no componente desejado; clicar no form vrias vezes.

Na terceira opo, o componente ser travado ao mouse. Para destrav-lo clique no cone da seta, o primeiro cone da paleta.

A SPEEDBAR
A speedbar est posicionada ao lado esquerdo da barra principal do Delphi. Possui diversos botes (cones) que representam comandos muito utilizados durante o desenvolvimento.

Pode-se customizar a speedbar adicionando ou retirando algum boto atravs do boto direito em qualquer cone (da speedbar) e escolher o comando customize. Na janela aberta, selecionase a guia Commands. Neste momento pode-se arrastar nos dois sentidos, para adicionar ou retirar botes.

OBJECT INSPECTOR
Uma das partes mais importantes da orientao a objeto a possibilidade de definir caractersticas personalizadas aos componentes. No Delphi, utilizamos a janela object inspector para realizar esta tarefa. H uma caixa de listagem1 que permite a escolha de qual componente dever ser selecionado. Duas guias:

Objeto atual selecionado

Properties Define as propriedades e valores do Objeto selecionado.


Propriedade

Events Define quais os eventos sero manipulados pelo desenvolvedor.

Algumas propriedades trazem opes diferenciadas para alterao. Por exemplo:

Valor atual desta propriedade

Caption Permite a insero de uma string de caracteres. Color Permite a insero de um dos valores pr-definidos na caixa de listagem. BorderIcons Toda propriedade que possui o sinal de + tem a caracterstica de mostrar subpropriedades. Deve-se clicar no sinal de + para expandir e no sinal de para ocultar. Icon Exibe um boto de reticncias (...) que dar origem a uma caixa de dilogo.
Os nomes definidos como valores das propriedades na object inspector sero os nomes usados na construo do cdigo em Object Pascal.

Componente ComboBox.

10

CODE EDITOR
O editor de cdigo responsvel por receber todas as declaraes criadas pelo Delphi e handlers2 criados pelo desenvolvedor. E no ambiente Code Editor que implementamos o algoritmo na linguagem Object Pascal.

Code Editor Code Explorer

Na janela do editor pode haver uma outra janela denominada Code Explorer. a parte esquerda da janela, onde podemos ter uma orientao sobre os objetos, procedimentos, funes e classes utilizadas na aplicao. Para desligar o code explorer clique no pequeno X ao lado da guia do code editor, para visualiza-lo clique com o boto direito dentro do editor e escolha View Explorer ou pelo teclado Ctrl+Shift+E. Uma caracterstica muito importante do Code Explorer que quando inserirmos componentes no form, a sua declarao feita pelo Delphi de maneira automtica.

Manipulador de eventos.

11

Podemos considerar tambm o seguinte fato: Tudo o que o Delphi escrever, problema dele. Agora, Tudo o que voc escrever problema seu . Problema no sentido de atualizao de cdigo, como veremos adiante. Quando alteramos o nome do objeto, deve-se utilizar o mesmo nome nas rotinas implementadas. Agora, o que o Delphi declarou, ele se encarrega de atualizar. Pode-se personalizar o Editor atravs do menu Tools | Editor Options.

CODE INSIGHT
Um recurso que vai facilitar nossa vida no momento de desenvolvimento de cdigo o Code Insight do Code Editor do Delphi., Ele atua como um ajudante de complemento junto ao cdigo do desenvolvedor. Por exemplo, ao digitar o nome de um objeto seguido de ponto (.) abre-se uma listagem de mtodos e propriedades que podem ser utilizadas neste objeto.

Esta lista pode ser ordenada por nome, clicando com o boto direito dentro da listagem.

No momento de chamada de procedimentos ou mtodos:

12

Para forar o code insight em determinada situao, utiliza-se: Ctrl + Barra de Espao - Para complemento de objetos; seus mtodos e propriedades. Ctrl + Shift + Barra de Espao Para complemento de parmetros.

SPEED MENUS
Speed Menus ou Menus Rpidos a caracterstica de podermos selecionar comandos rpidos atravs do boto direito do mouse. Em vrias situaes (j citadas anteriormente) utilizamos o boto direito para escolher algum comando ou ao.

DESKTOPS TOOLBAR
Este novo recurso permite gravar vrios layouts3 de tela personalizando seu ambiente de trabalho. Estas opes (layouts) podem ser manipuladas pelos cones ou pelo menu: View - Desktops

Disposies das janelas no monitor.

13

CONFIGURAES DO AMBIENTE
O Delphi permite que voc personalize o ambiente atravs do menu Tools | Environment Options.

Algumas opes da janela Environment Options que a princpio, podemos julgar importantes:

Autosave Options
Editor files Grava os arquivos fonte (.PAS) no momento da compilao, evitando perda de cdigo em caso de travamento da mquina. Porm, no permite compilar um determinado projeto sem salva-lo antes. Project Desktop - Grava a posio das janelas do projeto atual.

Compiling and running


Minimize on run Para minimizar o Delphi no momento da compilao em efeito de testes. Evita confuses de janelas.

Form designer
New forms as text Para tornar compatvel os arquivos de definio de formulrio (.DFM) criados no Delphi5 para o Delphi4 , desligue esta opo.

14

TECLAS IMPORTANTES
Tecla
F12 F11 F10 F9 CTRL + F9 SHIFT + F12 CTRL + F2

Funo Alterna entre o code editor e o form designer. Alterna entre o code editor, form designer e a oject inspector. Torna o foco para a janela principal. (RUN) Permite compilar e executar o projeto para testes. Este processo gera automaticamente o arquivo .EXE no diretrio onde foi gravado o arquivo de projeto (.DPR). Permite compilar o projeto sem executar. Ideal para conferncia de cdigo. Permite alternar entre os formulrios do projeto. Equivalente ao cone View Form na SpeedBar. Permite destravar o Delphi em caso de testes onde ocorram excees, como veremos mais adiante.

15

PROJETO EM DELPHI
O conceito de projeto em Delphi baseado em um conjunto de arquivos necessrios para gerar uma aplicao. Vamos destacar os principais arquivos:

Extenso

Tipo e descrio
Arquivo Pascal: o cdigo-fonte de uma unidade Pascal, ou uma unidade relacionada a um formulrio ou uma unidade independente. Arquivo Delphi Project. (Contm cdigo-fonte em Pascal.) Delphi Form File: um arquivo binrio (na verso 5 pode ser convertido para texto) com a descrio das propriedades de um formulrio e dos componentes que ele contm. Delphi Compiled Unit: o resultado da compilao de um arquivo Pascal.

Criao
Desenvolvimento

Necessrio para compilar? Sim.

.PAS

.DPR

Desenvolvimento Desenvolvimento

Sim. Sim. Todo formulrio armazenado em um arquivo PAS e em um arquivo DFM.

.DFM

.DCU

.BMP, .ICO, .CUR

.CFG

.DOF

Apenas se o cdigofonte no estiver disponvel. Os arquivos DCU para as unidades que voc escreve so um passo intermedirio; portanto, eles tornam a compilao mais rpida. Arquivos de bitmap, cone e Desenvolvimento: Normalmente no, cursor: arquivos padro do Image Editor mas eles podem ser Windows usados para armazenar necessrios em imagens de bitmap. tempo de execuo e para edio adicional. Arquivo de configurao com Desenvolvimento Necessrio apenas se opes de projeto. Semelhante opes de aos arquivos DOF. compilao especiais foram configuradas. Delphi Option File: um arquivo Desenvolvimento Exigido apenas se de texto com as configuraes opes de atuais para as opes de projeto. compilao especiais foram configuradas.

Compilao

16

.DSK

Arquivo de Desktop: contm Desenvolvimento informaes sobre a posio das janelas do Delphi, os arquivos abertos no editor e outros ajustes da rea de trabalho. Aquivo executvel: o aplicativo Compilao: Windows que voc produziu. Ligao (linking)

No. Voc deve exclu-lo se copiar o projeto em um novo diretrio. No. Esse o arquivo que voc vai distribuir. Ele inclui todas as unidades compiladas, formulrios e recursos. No. Esse arquivo gerado automaticamente pelo Delphi, quando voc salva uma nova verso do cdigofonte. No. Esse arquivo contm notas para os programadores.

.EXE

.~PA

Backup do arquivo Pascal Pode ser ativado ou desativado atravs do Menu Tools Editor Options - guia display Item: Create backup file.

Desenvolvimento

.TODO

Arquivo da lista to-do, contendo os itens relacionados ao projeto inteiro.

Desenvolvimento

O Delphi possui um mecanismo de gerncia de arquivos de projeto informando os principais arquivos e seu path. Clique em View Project Manager

A figura acima um exemplo de um projeto inicial, ainda no salvo. O diretrio padro para criao dos arquivos projects, obviamente devemos definir na gravao pasta e nomes de arquivos mais especficos.

17

.PAS E .DPR
Para visualizarmos o cdigo fonte da unidade (.PAS) em Delphi basta selecionarmos o code editor (F12). Para visualizarmos o cdigo fonte no arquivo de projeto (.DPR) basta selecionarmos o menu Project View Source. O arquivo de projeto exibido em uma guia no code editor. Para fechar a guia basta clicar com o boto direito e escolher close page. No feche as janelas atravs do X (boto fechar do Windows)

SALVAR O PROJETO
Como vimos anteriormente, o conceito de projeto em Delphi se faz atravs de um conjunto de arquivos. No Menu File do Delphi temos quatro opes para a gravao do projeto:

Onde:

Comando
Save Save As... Save Project As... Save All

Objetivo Salvar apenas a unidade selecionada Salvar a unidade selecionada como... pode-se renomear ou trocar de pasta (duplicando) o arquivo. Salvar o projeto como pode-se renomear ou trocar de pasta (duplicando) o arquivo. Grava todos os arquivos do projeto, e atualiza-os caso j sejam salvos.

Ao clicar em Salve All abre-se uma caixa de dilogo padro do Windows onde deve ser preenchido o nome do arquivo e escolhida uma pasta para armazenar o projeto. Observe o ttulo da janela, pois aps a gravao do arquivo da unidade, ser exibida a mesma caixa (com ttulo diferente) para a gravao do arquivo de projeto.

18

Escolher a pasta.

Nomear o arquivo.

ABRIR O PROJETO
O projeto em Delphi determinado atravs do arquivo com extenso .DPR. Desta forma, para abrir um projeto, deve-se abrir o arquivo .DPR. No menu File do Delphi podemos utilizar mais de uma opo:

Onde:

Comando
Open Open Project... Reopen

Objetivo Permite abrir um arquivo .DPR, .PAS entre grupos de projeto. Permite abrir um arquivo de projeto. Permite reabrir um arquivo (DPR ou PAS) utilizado anteriormente.

No abra um arquivo .PAS atravs destas opes, a menos que saiba o que est fazendo. Os arquivos .PAS devem ser abertos atravs do menu View | Units aps a abertura do .DPR.

19

OPES DE PROJETO
O Delphi permite a configurao de vrios itens do sistema atravs do menu Project Options.

Forms

Main form - Nesta guia permite a escolha do formulrio principal da aplicao. Available form - Os formulrios available (disponveis) em caso de criao em tempo de execuo.

Application

Title - Define um nome para a sua aplicao diferente do nome do arquivo de projeto (.DPR). Help file Define o nome do arquivo de Help (.HLP) associado aplicao. Icon Define o cone utilizado no arquivo executvel. (.EXE)

Compiler
Estas opes permitem especificar uma compilao personalizada, ou seja, cada projeto pode ser compilado com uma caracterstica.

Linker

Estas opes incluem informaes para a depurao.

20

Directories/Conditionals

Nesta guia pode-se configurar o diretrio de sada para os arquivos gerados pela aplicao.

Version Info

Estas informaes podem ser visualizadas no Windows atravs do menu rpido do mouse no arquivo executvel.

Packages

Os packages permitem um controle de distribuio atravs de DLLs bsicas externas ao executvel entre outros recursos.

A LISTA TO-DO
O Delphi adicionou um recurso de controle/gerenciamento de projeto na verso 5, denominado To-Do List. Voc pode incluir incluir ou modificar itens a serem feitos atravs de dilogos que podem ter dois estados, prontos ou fazer. Para utilizar a To-Do List clique no menu View | To-Do List.

Clique com o boto direito dentro da janela e escolha Add. O arquivo gerado gerado pela lista gravado no diretrio do projeto com a extenso .todo

TIPOS DE COMPONENTES
Fazemos uma distino de duas categorias bsicas quando tratamos dos componentes, so: Componentes Visveis e Componentes No-Visveis.

Visveis
Quando um componente pode ser visto pelo usurio em tempo de execuo. Exemplo Button e Edit.

No-Visveis
Alguns componentes aparecem no form durante o tempo de projeto na aparncia de um cone, mas no podem ser vistos pelo usurio em tempo de execuo. Exemplo: Timer e MainMenu.

21

CONVENO DE NOMEAO
A propriedade mais importante de um componente a propriedade Name. ela que define o nome interno com relao ao cdigo escrito em Object Pascal. Para organizar e facilitar o processo de desenvolvimento/manuteno do sistema, grande parte dos desenvolvedores adota uma nomenclatura para tornar o cdigo mais legvel possvel. O Delphi adota como nomenclatura padro o nome da classe da qual o componente instanciado e um nmero crescente de acordo com o nmero de ocorrncia deste componente no form. Exemplo: Button1, Button2, etc... so componentes instanciados da classe TButton . No obrigatria a utilizao da conveno de nomes utilizados nesta apostila, mas muito importante fazer uso de uma conveno mais clara possvel. Exemplo:

Nome gerado pelo Delphi Button1 Edit1 Label1

Objetivo Sair da aplicao Receber nome do usurio Indicar componente Edit

Conveno
BtnSair EdtNome LblNome

MANIPULANDO COMPONENTES
Podemos adicionar os componentes ao formulrio de trs maneiras, (citadas anteriormente) e utilizar ferramentas e tcnicas de alinhamento para aumentar nossa produtividade. Para selecionar um componente, basta clic-lo uma vez ou na object inspector selecion-lo na caixa de listagem. Pode-se ento arrast-lo com o Mouse ou utilizar as teclas CTRL+SETAS para mover o componente. As teclas SHIFT+SETAS alteram a largura e altura. Para selecionar mais de um componente ao mesmo tempo, utiliza-se a tecla SHIFT, pode-se mover ou alterar o conjunto. O recurso de arrastar e selecionar (Paint, por exemplo) vlido quando a base o Form. Quando inserirmos componentes em cima de outro objeto (Panel, por exemplo) necessrio segurar a tecla CTRL no processo de arrastar.

22

Para definir vrios componentes baseados em uma propriedade de outro, altere o componente modelo, selecione-o primeiro e com SHIFT selecione os outros. Na object inspector selecione a propriedade a ser definida para todos Width (largura, por exemplo) e aperte a tecla ESC. O Delphi dispe de uma ferramenta para auxlio ao alinhamento dos componentes. Clique no menu View Alignment Palette

Uma outra opo clicar sobre o componente selecionado e no Speed Menu (Menu rpido) selecionar Align.

Utilizando o Object Inspector


O object inspector uma janela importantssima na programao orientada a objetos, atravs dela que podemos alterar as propriedades e definir os eventos de acordo com o objetivo da aplicao.

23

Na parte superior da janela h uma caixa de listagem que permite a seleo de componentes j inseridos no formulrio. Duas guias (Properties e Events) separam as listas de propriedades e eventos. As propriedades so definidas atravs de tipos. Podemos citar no exemplo com o objeto form:

Tipos Simples So tipos String ou valores numricos definidos ao digitar um valor na frente da propriedade. Exemplo: Name, Caption, Height e Width entre outros. Tipos Enumerados So tipos definidos por uma quantidade limitada de opes que devem ser previamente selecionadas, no simplesmente definidas pelo usurio. Exemplo: Cursor, BorderStyle e WindowState entre outros.

24

Tipo Set Algumas propriedades podem conter mltiplos valores. Um exemplo a propriedade BorderIcons com o sinal + indicando subpropriedades. Tipos com Editor de Propriedades As propriedades que so acompanhadas de um cone de reticncias (...) indicam que uma janela de dilogo ir auxiliar na escolha de seu(s) valor(es). Exemplo: Icon.

Manipulando Eventos
A guia Events permite o desenvolvedor definir um handler4 em Object Pascal para um determinado evento que pode ser disparado pelo usurio ou pelo sistema. Um evento uma ao disparada dentro de uma aplicao orientada a Objeto. Podemos citar as ocorrncias dos principais eventos que so disponibilizados na maioria dos componentes em Delphi:

Evento
OnClick OnDblClick

Ocorrncia Quando o usurio clicar uma vez com o boto esquerdo do mouse sobre o componente. Quando o usurio d um duplo clique no componente com o boto esquerdo do mouse.

Manipulador de evento

25

OnEnter OnExit OnKeyPress

Quando o componente recebe o foco. Quando o componente perde o foco. Quando pressiona uma nica tecla de caractere.

Construo de um manipulador de evento para o objeto button.



Insira um componente button no Form, no necessrio mudar nenhuma propriedade. Selecione a object inspector a guia events e localize o evento OnClick. D um duplo clique no espao em branco do evento. Os componentes possuem um evento padro para a construo do cdigo, por isso possvel clicar no componente duas vezes para abrir um evento.

Selecione a guia events

Utilize o mouse e d um duplo clique no espao em branco, para abrir o evento desejado.

No Code Editor criada uma declarao do evento na clusula Interface e a implementao do procedimento na clusula Implementation. Como veremos com mais detalhes nos prximos captulos, todo cdigo em object pascal delimitado pelas palavras reservadas begin e end. Defina apenas as duas linhas de cdigo dentro dos delimitadores.
procedure TForm1.Button1Click(Sender: TObject); begin Form1.Caption := Curso de Delphi; Showmessage(Exemplo de caixa de dilogo); end;

26

Observe a construo do procedimento criado pelo prprio Delphi:

procedure TForm1.Button1Click(Sender: TObject); begin


Evento manipulado Name do form end; que define uma nova classe Name do objeto

Executando a aplicao
Para executar o programa e visualizar os dois comandos codificados no evento OnClick basta teclar F9 ou o cone Run.

COMENTRIOS
Os comentrios no cdigo fonte so importantes e podem ser feitos atravs dos seguintes smbolos:

//Comentrio de linha { Comentrio de bloco } (*Comentrio de bloco *)

UM POUCO MAIS SOBRE EVENTOS


A programao baseada em eventos (POE5), em resumo, tem a caracterstica de obedecer as aes do usurio. Se voc j programou em alguma linguagem para o sistema operacional MSDOS sabe do que estamos falando. mais fcil programar com POE. Um programa estruturado difere em muito deste raciocnio porque seu escopo rgido e baseado em rotinas, ou seja, pode haver (e na maioria h) momentos em que o usurio deve seguir determinados passos orientados pelo programa; enquanto que na POE existe a execuo do evento associado ao do usurio ou do sistema. H dois tipos bsicos de eventos: Usurio So eventos disparados pelo usurio, por exemplo: OnClick, OnKeyPress, OnDblClik. Sistema So eventos que podem ocorrer baseados no sistema operacional, por exemplo: O evento OnTimer executa um procedimento a cada intervalo em milisegundos. O evento OnCreate ocorre quando uma instncia do objeto est sendo criada. importante notar que o usurio pode disparar mais de um evento em uma nica ao, na verdade isso ir ocorrer com freqncia, de maneira que devemos ter conscincia que os eventos obedecem uma ordem.
5

Programao Orientada a Eventos

27

Supondo a existncia de trs manipuladores de eventos para um objeto da classe Tbutton: OnMouseDown, OnEnter e OnClick. A ordem destes eventos ser:

OnEnter OnMouseDown OnClick

Isso uma observao importante no manuseio e na construo de manipuladores.

VCL
Vamos considerar alguns objetos e suas principais propriedades e mtodos.

Objeto Form (Formulrio)


Paleta Standart Importncia: o principal componente container pois permite posicionar os demais componentes em si mesmo. literalmente a implementao do conceito de janelas do sistema operacional Windows.

Propriedades ActiveControl
Align AutoScroll AutoSize BorderIcons BorderStyle

BorderWidth Caption ClientHeight / ClientWidth Color Cursor

Permite definir qual o primeiro componente a receber foco assim que o formulrio criado. Altera o alinhamento e preenchimento do objeto. Permite habilitar as barras de rolagem. Determina se o controle ser automaticamente redimensionado. Determina os cones a serem exibidos na barra de ttulo do formulrio. Define o estilo da borda do formulrio. bsDialog Borda no redimensionvel, comum em caixa de dilogo bsSingle Borda simples e redimensionvel. bsNone Borda invisvel, no redimensionvel, sem botes de controle. bsSizeable Borda padro redimensionvel. Define a espessura da borda. Indica o rtulo exibido para o componente. Define a altura e largura da rea cliente.

Define a cor de fundo de um componente. Indica a imagem exibida pelo ponteiro do mouse quando este ficar sobre o objeto. DefaultMonitor Associa o form a um monitor especfico em uma aplicao que utiliza

28

Enabled Font FormStyle

Height HelpContext HelpFile Hint HorzScrollBar Icon KeyPreview Left Menu Name PopupMenu Position ShowHint Tag Top VertScrollBar Visible Width WindowMenu WindowState

vrios monitores. Define se o componente est habilitado ou no. Permite controlar os atributos do texto exibido em um componente. Determina o estilo do formulrio. fsNormal Definio padro do formulrio. fsMDIChild O formulrio ser uma janela-filha de uma aplicao MDI. fsMDIForm O formulrio ser o formulrio-pai de uma aplicao MDI. fsStayOnTop O formulrio permanece sobre todos os outros formulrios do projeto, exceto aqueles que tambm tm a propriedade FormStyle igual a fsStayOnTop. Define a altura do objeto. Define o tpico do arquivo help que ser exibido ao pressionar a tecla F1. Define um arquivo de help especfico. Permite exibir um texto de auxlio no momento em que o ponteiro do mouse permanece sobre o controle. Define o comportamento de uma barra de rolagem horizontal. Define o cone que ser usado pelo formulrio. Define se o formulrio deve ou no responder a um pressionamento de tecla, atravs do evento OnKeyPress, por exemplo. Define a coordenada da extremidade esquerda de um componente. Permite escolher entre mais de um componente MainMenu. Define o nome interno que identifica o componente dentro da aplicao. Define o componente PopupMenu a ser utilizado pelo objeto. Permite definir o tamanho e posio de um formulrio no momento em que ele aparece na sua aplicao. Define se a string de auxlio deve ou no ser exibida quando o usurio mantm o ponteiro do mouse sobre um controle. A propriedade Tag uma varivel do tipo Longint que o Delphi coloca disposio do usurio, que pode atribuir o significado mais conveniente. Define a coordenada da extremidade superior de um componente. Define o comportamento de uma barra de rolagem vertical. Define se o componente aparece ou no na tela. Define a largura do objeto. Permite definir qual o menu responsvel por manipular as janelas-filhas de uma aplicao MDI. Define o estado de exibio de um formulrio.

Mtodos Show ShowModal Close

Exibe o formulrio de manipulao no-modal. Exibe o formulrio de manipulao modal. Permite fechar o formulrio.

29

Objeto Button1 (Boto)


Paleta Standart Importncia: um dos objetos mais utilizados para confirmar e disparar rotinas associadas.

Propriedades Action Anchors Cancel Default ModalResult


Parent... TabOrder TabStop

Referencia uma ao definida em um objeto TActionList. Permite manter a posio relativa do objeto ao objeto parente quando este redimencionado. Associa o evento OnClick do objeto ao pressionamento da tecla Esc. Associa ao evento OnClick do objeto ao pressionamento da tecla Enter. Propriedade utilizada para encerrar a execuo de um formulrio Modal quando selecionado um valor diferente de mrNone. As propriedades Parent permitem que o componente receba a mesma formatao do objeto proprietrio. Define a ordem na passagem de foco no momento de pressionamento da tecla TAB. Define se o foco pra no componente.

Mtodos SetFocus

Envia o foco do windows para o componente.

Objeto Edit (Caixa de edio)


Paleta Standart Importncia: Um dos principais componentes para a entrada de dados do usurio do sistema.

Propriedades AutoSelect
AutoSize

Define se o texto exibido pelo controle ser selecionado quando este receber o foco da aplicao. Para componentes TEdit a propriedade determina se a altura do controle

30

BorderStyle CharCase HideSelection Maxlength PasswordChar

Text Mtodos Clear SetFocus

ser redimensionada quando o tamanho da fonte for alterado. Determina o tipo da borda do componente. Determina o se tipo da fonte ser maiscula, minscula ou normal. Define se o texto perde a seleo ao perder o foco. Define um limite para a insero de caracteres. Define qual caractere ser usado para ocultar o texto inserido no componente. Permite manipular os caracteres inseridos no componente pelo usurio.

Limpa o contedo da propriedade text. Envia o foco do windows para o componente.

Objeto Label (Rtulo de orientao)


Paleta Standart Importncia: Orientar o usurio escolha de componentes bem como sua utilizao.

Propriedades Alignment AutoSize

Define o alinhamento da string na rea do componente. Para componentes TDBText e TLabel, esta propriedade define se o controle ser automaticamente redimensionado para acomodar o texto. FocusControl Define qual o componente receber foco quando o usurio selecionar a combinao de teclas aceleradoras (atalho) se existir. Layout Define o alinhamento vertical do texto na rea do componente. ShowAccelChar Define se o caracter & ser um literal ou tecla de aceleradora (atalho). Transparent Define se o fundo do componente ser transparente ou no. WordWrap Define se o texto poder utilizar o retorno automtico em caso de ultrapassar a largura definida e se a propriedade AutoSize estiver falsa.

Sugesto: Exercicio 1

31

MAIS SOBRE A PALETA STANDART


Objeto Memo (Memorando)
Paleta Standart Importncia: Permite o usurio entrar com dados do tipo TStrings, compara-se funcionalidade do software bloco de notas.

Propriedades Lines
MaxLength ReadOnly ScrollBars WantReturns WantTabs

Propriedade do tipo TStrings que contm as linhas de texto do componente. Define o limite mximo de caracteres no componente em sua propriedade Lines. Define se o componente do tipo somente leitura. Define se o componente pode trabalhar com barras de rolagem. Define se a tecla ENTER ser utiliza para quebra de linha. Define a tecla Tab como tabulao ou mudana de foco. Caso falso podese utilizar CTRL+TAB para produzir o efeito desejado.

Mtodos LoadFromFile SaveToFile

Permite carregar um arquivo para a propriedade Lines. Permite salvar o contedo da propriedade Lines em um arquivo especificado.

Objeto CheckBox (Caixa de verificao)


Paleta Standart Importncia: Permite verificar opes boolenas pr-definidas ou re-definidas pelo usurio.

Propriedades AllowGrayed

Define caso verdadeiro, trs estados possveis para o checkbox: checked (ligado), unchecked (desligado) e grayed (parcial). Caso falso, dois

32

Checked
State

estados: checked (ligado) e unchecked (desligado). Define se o componente est ligado ou no, caso tenha apenas dois estados. Permite definir trs estados se AllowGrayed for verdadeiro.

Objeto RadioButton (Boto de radio)


Paleta Standart Importncia: Permite escolher entre um grupo, pelo menos uma opo.

Propriedades Checked

Define se o componente est ligado ou desligado.

Objeto ListBox (Caixa de listagem)


Paleta Standart Importncia: Permite o usurio entrar ou manipular uma lista de dados.

Propriedades Items MultiSelect Sorted Mtodos Clear LoadFromFile SaveToFile

Define uma lista de Strings que aparece no componente. Permite selecionar vrios itens (Strings) no componente. Define se a lista de Strings ser ordenada ou no.

Permite limpar o contedo da propriedade Items. Permite carregar um arquvo para a propriedade Items. Permite salvar o contedo da propriedade Items para um arquivo.

33

Objeto ComboBox1 (Caixa de listagem em formato de cortina)


Paleta Standart Importncia: Permite o usurio entrar ou manipular uma lista de dados.

Propriedades Items Sorted Text Mtodos Clear LoadFromFile SaveToFile

Define uma lista de Strings que aparece no componente. Define se os dados sero ordenados. Define o texto atual da Combobox.

Permite limpar o contedo da propriedade Items. Permite carregar um arquvo para a propriedade Items. Permite salvar o contedo da propriedade Items para um arquivo.

Objeto GroupBox (Caixa de agrupamento)


Paleta Standart Importncia: Permite agrupar componentes e estabelecer um ttulo na propriedade Caption.

Propriedades Align Caption

Pemite definir um alinhamento no objeto proprietrio. Define o texto informativo na parte superior do componente.

34

Objeto RadioGroup (Grupo de botes radio)


Paleta Standart Importncia: Permite estabelecer um grupo de botes de radio e manipula-los pela propriedade ItemIndex.

Propriedades Items ItemIndex Columns

Define os itens disponveis ao usurio. Define qual dos itens est selecionado. Define o nmero de colunas para organizao dos componentes.

Objeto Panel (Painel)


Paleta Standart Importncia: Permite agrupar outros objetos e estabelecer um efeito visual nas aplicaes.

Propriedades Align Bevel...


BorderStyle

Define o alinhamento do componente em relao ao seu proprietrio. Define a caracterstica das bordas (interna e externa) bem como sua espessura. Define o tipo da borda.

35

Objetos MainMenu e PopupMenu (Menu principal e Menu rpido)


Paleta Standart Importncia: Define os Menus utilizados pelo usurio pelo boto esquerdo (MainMenu) ou pelo boto direito (PopupMenu) do Mouse.

Propriedades Items Images

Define um novo item de Menu. Define um objeto do tipo ImageList.

O objeto MainMenu permite a construo de sub-menus atravs de seu construtor clicando no item com o boto direito e escolhendo a opo Create submenu. Pode-se tambm excluir ou incluir items aleatoriamente atravs do boto direito no item desejado. Para criar um separador de menus, utilize o operador de subtrao (-) e confirme com a tecla Enter.

Sugesto: Exerccio 2

A LINGUAGEM OBJECT PASCAL


Por mais recursos grficos que as linguagens orientadas a objetos possuam, em determinado momento no h como fugir do cdigo. A programao em Delphi definida atravs da Linguagem Object Pascal, uma extenso do Pascal proposto por Niklaus Wirth. Consideramos uma aplicao em Delphi baseada em um conjunto de arquivos, (citados anteriormente .DPR .PAS e .DFM) bsicos. Vamos examinar alguns arquivos de fundamental importncia:

O MDULO .DPR
Todo programa em Object Pascal possui um arquivo .DPR, considerado como arquivo de projeto , o seu formato composto inicialmente da seguinte definio:
program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1};

36

{$R *.RES} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end.

A palavra program define o nome do programa, este nome ser alterado quando for gravado o arquivo .DPR do projeto. Na clusula uses, so listadas as units usadas pelo mdulo principal. As units (que sero vistas adiante) so responsveis pela capacidade de dividir o programa em uma viso modularizada. Em cada um, declaramos uma srie de objetos (funes, variveis, procedimento, etc...) que podem ser usados por outras units e pelo mdulo principal. Em seguida vem um conjunto de comandos (denominado comando composto) atravs de dois delimitadores begin e end.

AS UNITS
Um programa em Object Pascal constitudo de um mdulo principal (.DPR) e de uma ou mais unidades de compilao (.PAS). O compilador gera um arquivo com o cdigo objeto correspondente, e considera o mesmo nome do arquivo .PAS com a extenso .DCU. As units so entidades independentes, ou seja, no momento da criao no h vnculo lgico (nem fsico) entre uma unit e um programa principal que a utiliza. Com esta caracterstica, podemos utilizar as units em qualquer projeto. A principal caracterstica do conceito de unit que possibilita estruturar o programa em mdulos funcionais, com cada unit provendo um conjunto de funes e procedimentos. Cada formulrio corresponde a uma unit. Mas, podemos criar units independentes, no associadas a um form. Se considerarmos o cdigo uma unit com um componente Button e um manipulador de evento, teremos o seguinte cdigo:
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;

37

var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin Form1.Caption := 'Curso de Delphi'; Showmessage('Exemplo de caixa de dilogo'); end; end.

Uma unit possui cinco partes:

Cabealho
Contm a palavra reservada unit seguida de um identificador que o nome da unit. Este nome o mesmo nome do arquivo com extenso .PAS
unit Unit1;

Interface
Contm tudo o que a unit exporta: constantes, tipos, variveis, procedimentos, funes, etc... Na declarao dos procedimentos e funes que a unit exporta, deve constar apenas o cabealho (nome e parmetros). A declarao completa fica na parte da implementao.
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1;

Implementao
Contm a definio completa das funes e procedimentos que constam na interface. Se na implementao so usados identificadores definidos em outra unit, o nome desta outra unit deve ser includo na lista de units da clusula uses da implementao.

38

implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin Form1.Caption := 'Curso de Delphi - SENAC MG'; Showmessage('Exemplo de caixa de dilogo'); end;

Inicializao
uma parte opcional. Quando usada, no pode conter nenhuma declarao. Apenas comandos so permitidos nesta parte. Ela comea com a palavra initialization , e os comandos de inicializao so executados antes do programa comear.
initialization <comandos>

Finalizao
tambm uma parte opcional, com uma observao: ela s pode existir se na unit houver tambm uma parte de inicializao e s pode conter comandos, que sero executados dentro do processo de finalizao do programa, aps a execuo do programas principal.
finalization <comandos>

Toda unit termina com a palavra end seguida de um ponto final (.).

ATRIBUIO
Ao declarar uma varivel, o compilador cuida de alocar na memria uma rea que seja suficiente para armazenar qualquer dos valores definidos atravs do seu tipo. Os valores que podem ser atribudos varivel so definidos atravs de um comando de atribuio que pode ser considerado da seguinte forma:

Varivel := expresso;

DECLARAO DE VARIVEIS
As variveis podem ser classificadas em:

Globais: Quando so feitas diretamente na seo interface de uma unit (ou seja, fora dos procedimentos e funes). Pode-se ter varaveis pblicas e privadas. Locais: Quando feita a declarao dentro de um procedimento ou funo.
var N: Single; S: String; I: Integer;

39

TIPOS PARA MANIPULAO DE VARIVEIS


Tipos de variveis Inteiras
Tipo Integer Cardinal Shortint Smallint Longint Int64 Byte Word Longword Faixa de Valores -2147483648.. 2147483647 0..4294967295 -128..127 -32768..32767 -2147483648.. 2147483647 -2^63..2^63-1 0..255 0..65535 0..4294967295 Formato 32 bits 32 bits, sem sinal 8 bits 16 32 64 8 bits, sem sinal 16 bits, sem sinal 32 bits, sem sinal

Tipos de nmeros Reais


Tipo
Real Single Double Extended Comp Currency

Faixa de Valores 2.9*10E-39..1.7*10E38 1.5*10E-45..3.4*10E38 5.0*10E-324..1.7*10E308 3.4*10E-4932..1.1*10E4932 -2*10E63+1..2*10E63-1 -9.22*10E14..9.22*10E14

Tipos de variveis booleanas


Tipo
Boolean ByteBool WordBool LongBool

Faixa de Valores False ou True * * *

Tipos de variveis de caracteres


Tipo Char ShortString String Valores Permite armazenar um caractere ASCII. Permite armazenar uma cadeia de at 255 caracteres. Permite armazenar uma cadeia ilimitada de caracteres.

Tipo genrico (Variant)


Objetos variant so essencialmente variveis sem tipo podendo assumir diferentes tipos, automaticamente. Esta vantagem aparente tem a caracterstica de ser ineficiente se utilizada indiscriminadamente.

40

Arrays (Vetores)
Arrays so conjuntos de variveis com o mesmo nome e diferenciadas entre si por um ndice. Eles so teis para manipularmos grandes quantidades de dados de um mesmo tipo pois evitam a declarao de diversas variveis. Considere o caso de um programa de Folha de Pagamento que precise armazenar os seguintes dados referentes a 100 funcionrios : nome, funcao, salrio, etc... Seramos obrigados a declarar 100 varveis nome, 100 variveis funcao, etc... O array nos permite declarar uma nica varivel com um ndice para apontar para as diferentes ocorrncias. Declara-se um array da seguinte forma : nome_da_varivel : array[i1..i2] of tipo_de_varivel; onde i1 e i2 repreentam os valores mnimo e mximo, respectivamente, do ndice. O Object Pascal permite que i1 e i2 possuam qualquer valor desde que i1 seja menor ou igual a i2. Assim, poderiamos declarar um array de 100 variveis inteira idade de vrias formas diferentes : idade : array [1..100] of integer; ou idade : array [-100..-1] of integer; ou idade : array [0..99] of integer, etc... Pode-se definir arrays multidimensionais (com vrios ndices) como, por exemplo : espaco3d:array[1..10,-5..20,0..30] of double; que pode armazenar 10x26x31=8060 variveis do tipo double. Um dos casos mais comuns a matriz com m linhas e n colunas : matriz : array[1..m,1..n] of qqer_tipo. Os elementos dos arrays podem ser quaisquer tipos de variveis ou objetos.

41

FUNES DE CONVERSO E MANIPULAO


Os objetos do Delphi para entrada e/ou exibio de dados utilizam propriedades do tipo String, as propriedades Text e Caption so bons exemplos. O problema ocorre quando tentamos realizar clculos matemticos com os dados que devem ser manipulados por estas propriedades. Desta maneira precisamos de funes para converter dados String em tipos Inteiros ou Reais ou Datas, por exemplo.

Funo StrToInt(const S: String) IntToStr(value: Integer) StrToFloat(const S: String) FloatToStr(Value: Extended) DateToStr(Date: TdateTime) DateTimeToStr(DateTime: TDateTime) StrToDate (const S: String) StrToDateTime(const S: String) FormatFloat(const Format: string; Value: Extended): string

Objetivo Converte um dado String em tipo Inteiro. Converte um dado Inteiro em tipo String. Converte um dado String em tipo Ponto Flutuante. Converte um dado Ponto Flutuante em tipo String. Converte um dado TDateTime em String. Converte um dado TDateTime em String.
Converte um dado String em tipo TDateTime. Converte um dado String em tipo TDateTime Permite formatar um tipo ponto flutuante retornando uma string.
Edit2.Text := FormatFloat('###,###.00',soma);

Sendo soma uma varivel real.

O tipo TDateTime internamente manipulado como tipo Ponto Flutuante.

CLASSES E OBJETOS
Definio de classe : nome_da_classe_derivada = class(nome_da_classe_base) private {propriedades, campos e mtodos privados} public {propriedades, campos e mtodos pblicos} end; A definio de uma classe bastante similar a de um registro. As classes, diferentemente dos registros podem conter funes ou procedimentos, chamados mtodos, alm de variveis. Quando uma classe derivada de outra (chamada classe base, classe pai ou classe me), ela herda os campos, propriedades e mtodos da classe base. O Delphi possui uma classe chamada TObject da qual todas as demais classes se derivam, ou seja, todas as classes so derivadas de TObject ou de classes derivadas de TObject. Quando

42

voc deriva uma classe de TObject , no preciso declarar explicitamente a classe base pois o Delphi assume TObject como default. Um objeto uma instncia de uma classe, isto , depois de definirmos uma classe podemos declarar e utilizar objetos desta classe, da mesma forma que podemos declarar e usar uma varivel composta (um registro, por exemplo) depois que o tivermos definido. De forma anloga, tambm, nos referimos aos elementos de um objeto utilizando a notao de ponto : nome_do_objeto.nome_do_elemento;

COMPONENTES, CONTROLES E PROPRIEDADES


O Delphi j possui muitas classes predefinidas para utilizao no ambiente Windows. Algumas das classes do Delphi, chamadas genericamente de componentes podem ser acessadas atravs da paleta de componentes conforme j mostramos anteriormente. Outra classe bastante utilizada a classe Tform que define um formulrio, mas que no est disponvel na paleta de componentes. Mas, se olharmos na listagem do exerccio Ex01 verificamos que o Delphi define automaticamente uma classe derivada de Tform (TFormaPrincipal no nosso exemplo) e declara um objeto desta classe (FormaPrincipal no nosso exemplo). As propriedades so um tipo especial de campo em um objeto, cujo valor pode, em alguns casos, ser alterado usando-se o Object Inspector, como fizemos, por exemplo, com a propriedade Caption de FormaPrincipal no exerccio Ex01. Outras propriedades s podem ser alteradas por programa (run-time). O sistema de Help do Delphi fornece, para cada classe, uma listagem completa de suas propriedades e seus mtodos.

MTODOS E EVENTOS
Um mtodo um tipo especial de procedimento ou funo, definido dentro de uma classe. Por ser definido dentro da classe, ele pode acessar diretamente os campos dela sem a necessidade de passar este campos como parmetros. Para executar um mtodo de uma determinada classe basta usar a mesma notao de ponto usada para acessar um campo. Um evento muito semelhante a um mtodo pois ambos so definidos internamente a uma classe. A diferena que os eventos so executados em resposta a alguma ao do usurio ou em resposta a uma mensagem enviada pelo Windows. Cite-se como exemplo o evento OnClick de um formulrio, um procedimento que executado toda vez que o usurio d um clique com o mouse sbre o formulrio. Isto permite que o nosso programa execute alguma ao quando o usurio clica com o mouse sobre o controle.

43

EXPRESSES LGICAS
So expresses que retornam valor booleano (falso ou verdadeiro). Operador Operao not Negao and E lgico or OU lgico xor OU EXCLUSIVO lgico O operador not unrio, por exemplo: if not (X > Z) then Devemos usar parnteses ao compararmos expresses lgicas, por exemplo:
if (X > Z) or (W > Y) then

OPERADORES ARITMTICOS
Em Object Pascal podem-se usar os seguintes operadores aritmticos :

Operador +
* / Div Mod

Operao Adio
Subtrao Multiplicao Diviso Diviso inteira Resto da diviso inteira

Tipos Usados Inteiros Reais Inteiros Reais Inteiros Reais Inteiros Reais Inteiros Inteiros

Tipos Resultantes Inteiro Real Inteiro Real Inteiro Real Real Real Inteiro Inteiro

Operadores Relacionais
Operador = Operao Igual Tipos Usados Tipos simples compatveis, de classe, referencia de classe, ponteiros, conjunto, string ou string empacotado. Tipos simples compatveis, de classe, referencia de classe, ponteiros, conjunto, string ou string empacotado. Tipos simples compatveis, strings ou string empacotado ou Pchar Tipos simples compatveis, strings ou string empacotado ou Pchar Tipos Resultantes Booleano

<>

Diferente de

Booleano

< >

Menor que Maior que

Booleano Booleano

44

<= >= <= >= In

Menor ou igual Tipos simples compatveis, strings ou string empacotado ou Pchar Maior ou igual Tipos simples compatveis, strings ou string empacotado ou Pchar Subconjunto de Tipos de conjuntos compatveis Superconjunto Tipos de conjuntos compatveis de Membro de Operando da esquerda, qualquer tipo ordinal; Operando da direita, conjunto cuja base seja compatvel com o operando da esquerda Compatvel a Tipos de conjuntos, mais especificamente classes

Booleano Booleano Booleano Booleano Booleano

Is

Booleano

Palavras reservadas
As palavras reservadas independente de qualquer biblioteca, fazem parte do ncleo da linguagem, e por isso so utilizadas por qualquer compilador Delphi. Normalmente elas esto em evidencia no programa (negrito). A tabela abaixo apresenta algumas destas palavras.

Palavra Begin End Type Var Uses Class Implementation

Interface Do while for if else Case Then Public Private

Descrio Incio de bloco de programa. Fim de Bloco de Programa. Definio de tipos. Definio de variveis. Definio de bibliotecas. Definio de classes. Seo da unidade, onde esto todas as definies da mesma, variveis, tipos, constantes, bibliotecas, etc., que so privadas unidade. Alm isso est todo o cdigo dos mtodos da unidade. Seo da unidade, onde esto todas as definies da mesma, variveis, tipos, constantes, bibliotecas, etc., que sero tornadas pblicas pela unidade. Comando interno de execuo de algum outro comando. Comando de repetio. Comando de repetio. Comando de seleo. Comando de exceo a uma seleo. Comando de seleo. Comando de auxiliar de seleo. Propriedades e Mtodos que podem ser acessados por qualquer unidade do programa. Propriedades e Mtodos que s podem ser acessados pela prpria unidade.
45

Protected Unit Array Of Repeat Until With

Propriedades e Mtodos que podem ser acessados apenas pela prpria unidade e pelos mtodos das unidades derivadas desta. Chave para a declarao do nome da unidade. Palavra para a definio de vetores. Comando auxiliar para definies de tipos. Comando de Repetio. Comando auxiliar na repetio. Comando utilizado para referir-se a um registro de um objeto de forma direta.

46

COMANDO IF
O comando condicional if pode ser composto de uma ou mais condies de processamento, por exemplo:
if (A > B) then B := B + 1; // ou INC(B); if (A > B) then B := B + 1 else A := A - 1; // ou DEC(A);

if (A > begin B := X := end else begin A := Y := end;

B) then B + 1; B + A;

A - 1; Y + B;

No ltimo exemplo para representar um bloco de comandos em caso verdadeiro ou falso, utiliza-se dos delimitadores begin e end. O comando if-then-else considerado como nico, portanto, no h ponto e vrgula (;)antes da palavra reservada else.

COMANDO CASE
O comando case..of oferece uma alternativa para comandos if-then-else com um grande nmero de testes. Por exemplo:
case Key of A..z: Label1.Caption := Letras; 0..9: Label1.Caption := Nmeros; +, -, *, /: Label1.Caption := Operador else Label1.Caption := Caracter especial; end; //fim do case

47

COMANDO REPEAT
O comando repeat..until uma opo para estruturas de repetio. A grande diferena com o comando while o fato do comando repeat ser executado pelo menos uma vez.
repeat X := X + 1; INC(Z,3); //equivale a Z := Z + 3; DEC(AUX,2); until X >= 200;

COMANDO WHILE
O comando while..do tambm permite a construo de estruturas de repetio, com diferena de no executar o lao no incio do teste lgico.
while X <= 200 do begin X := X + 1; INC(Z,3); DEC(AUX,2); end;

COMANDO FOR
O comando for..do estabelece uma estrutura de repetio considerando um controle inicial e final. Pode ser construdo de maneira crescente ou decrescente.
for i:=0 to 500 do Label1.Caption := IntToStr(i); for i:=500 downto 100 do begin Label1.Caption := IntToStr(i); Edit1.Caption := IntToStr(i); end;

COMANDO BREAK
O comando break usado para alterar o fluxo normal de comandos de repetio, o controle desviado para o comando seguinte ao comando repetitivo.
frase := Edit1.Text; for i:=1 to length(frase) do begin if frase[I] = 'A' then break; aux := aux + frase[I]; end; Label1.caption := aux; //Label1 recebe o conteudo de frase at a letra A

48

COMANDO WITH
O comando with..do usado para abreviar a referncia a campos de registro, ou a mtodos, e propriedades de um objeto.
begin Form1.Caption := Senac; Form1.Color := ClBlue; Form1.Top := 95; end; //Equivalente : with Form1 do begin Caption := Senac; Color := ClBlue; Top := 95; end;

Sugesto: Exerccio 3

PROCEDIMENTOS E FUNES
Procedimentos e funes so blocos de cdigo (rotinas) em Object Pascal que podem ou no receber parmetros (valores) para processamento. Uma vez definida a rotina pode-se ativa-la de diversas partes do programa atravs de seu nome. A grande diferena entre as formas de definio destas rotinas (se procedimentos ou funes) est no fato de que: Procedimento NO retorna valor. Funo Retorna valor. A definio de um procedimento obedece a seguinte sintaxe : procedure nome_do_procedimento(parmetro_1:tipo_1,,,,parmetro_n : tipo_n) var {declarao de variveis locais ao procedimento} begin {corpo do procedimento} end; Uma funo se define em Pascal de forma semelhante a definio matemtica. Ela recebe valores como parmetros e retorna um outro valor como resultado. A definio de funo obedece a seguinte sintaxe : function nome_da_funo(parmetro_1:tipo_1,,,,,parmetro_n:tipo_n) : tipo de retorno var {declarao de variveis locais funo} begin {corpo da funo} end; O trecho de cdigo a seguir define a funo PRODXY, que retorna como resultado o produto de dois nmeros reais X e Y:

49

function PRODXY(X,Y:Real):Real begin PRODXY := X*Y; end; O Object Pascal tem vrias funes predefinidas, parte das quais listamos a seguir : Abs(x) Retorna o valor absoluto de x. ArcTan(x) Retorna o valor do arco tangente de x (em radianos). Cos(x) Retorna o cosseno de x (x em radianos). Dec(x) Decrementa (subtrai 1) uma varivel inteira x. Exp(x) Retorna o valor de e elevado a x , onde e a base dos logaritmos neperianos. Frac(x) Retorna a parte fracionria do real x. Inc(x) Incrementa (soma 1) uma variavel inteira x. Int(x) Retorna a parte inteira do real x. Ln(x) Retorna o logaritmo neperiano de x. ODD(x) Retorna True se x for impar. Sqr(x) Retorna o quadrado de x. Sqrt(x) Retorna a raiz quadrada de x.

DECLARAO E ATIVAO DE PROCEDIMENTO


Podemos declarar um procedimento da seguinte maneira maneira: Dentro da clusula private ou public, defina a declarao do procedimento:
procedure Soma(X, Y: String);

Com o cursor posicionado na mesma linha, pressione: CTRL+SHIFT+C e perceba que o prprio Delphi realiza a construo do procedimento dentro da clusula implementation. Esse recurso chamado Class Completion. Nossa tarefa apenas definir o cdigo a ser realizado pelo procedimento.
procedure TForm1.Soma(X, Y: String); begin Label1.Caption := FloatToStr(StrToFloat(X)+StrToFloat(Y)); end;

Supondo a existncia de dois componentes Edit, um componente Button e um componente Label, este cdigo pode ser ativado da seguinte forma:
procedure TForm1.Button1Click(Sender: TObject); begin Soma(Edit1.Text, Edit2.Text); end;

50

PASSAGEM DE PARMETROS
Podemos passar parmetros para uma funo ou um procedimento por valor e por referncia. Quando se passa um parmetro por valor estamos realmente passando um valor ou a cpia de um valor armazendao numa varivel. Quando a passagem se faz por referncia, estamos passando o endereo da varivel na memria e no o seu valor. Quando se altera, dentro da funo, o valor de uma varivel passada por por referncia esta alterao surte efeito em todo o programa (fora da funo). Para passarmos um parmetro por referncia devemos preced-lo da palavra reservada var.

51

DECLARAO E ATIVAO DE FUNES


A construo de funes tem o mesmo raciocnio diferindo na caracterstica de retorno da funo. Podemos declarar um procedimento da seguinte maneira maneira: Dentro da clusula private ou public, defina a declarao da funo:
function Subtrai(X, Y: String): String;

Observe que agora, depois dos parmetros h um tipo de definio de retorno da funo (String). Pode-se utilizar a mesma dica de construo do procedimento, na linha da declarao tecle CTRL+SHIFT+C (Class Completion) e perceba que o prprio Delphi realiza a construo da funo dentro da clusula implementation. Nossa tarefa apenas definir o cdigo a ser realizado pela funo.
function TForm1.Subtrai(X, Y: String): String; begin result := FloatToStr(StrToFloat(X)-StrToFloat(Y)); end;

A palavra reservada result o recurso usado pela Object Pascal para estabelecer o retorno da rotina. No se deve declarar esta varivel, ela declarada no momento da utilizao da funo . Supondo a existncia de dois componentes Edit, um componente Button e um componente Label, esta funo pode ser ativada da seguinte forma:
function TForm1.Button2Click(Sender: TObject); begin Label1.Caption := Subtrai(Edit1.Text, Edit2.Text); end;

Neste caso, o Label recebe o result de subtrai, ou seja, a subtrao dos dados passados nos parmetros.

52

TRABALHANDO COM ARQUIVO DE DADOS


Na linguagem Object Pascal, inicialmente, deve-se criar o arquivo que se deseja armazenar os dados ou preparar um arquivo j existente para que os dados sejam salvos. Analogamente, alguns procedimentos e funes foram desenvolvidos para o processo de leitura de dados em um arquivo. Abaixo, veremos alguns procedimentos e funes importantes para o precesso de arquivamento ou leitura de dados.

Procedimento Write
procedure Write( [var F: Text; ] P1 [ , P2,..., Pn] );
Este procedimento escreve um ou mais valores em um arquivo de texto, sempre na mesma linha, at que se comande a troca de linha. Na funo, F uma varivel do tipo textfile, que armazena o endereo e nome do arquivo a ser salvo. Cada parmetro Pn um valor ou expresso a ser escrito no arquivo. O parmetro P pode ser uma varivel de qualquer um dos seguintes tipos: vairveis do tipo inteira (Byte, Shortint, Word, Integer, Longint, Cardinal); variveis de ponto flutuante (Single, Real, Double, Extended, Currency); variveis de texto (String, PChar, AnsiString, ShortString); variveis boleanas (Boolean, Bool).

Procedimento Writeln
procedure Writeln([ var F: Text; ] P1 [, P2, ...,Pn ] );
Este procedimento adiciona um marcador (marcador invisvel, no aparece no arquivo) no final de linha, para que o prximo dado seja salvo na linha seguinte.

Procedimento Read
procedure Read(F , V1 [, V2,...,Vn ] );
O procedimento Read utilizado para a leitura de dados de arquivo em variveis de tipo definido. Vn so as variveis para as quais se assinala os valores lidos. O arquivo deve estar aberto para iniciar o procedimento de leitura. Deve-se tomar o cuidado para no se utilizar variveis de tipos incompatveis, como, por exemplo, a leitura de um texo em uma varivei do tipo inteira. Semelhante ao procedimento Write, este procede a leitura de variveis na mesma linha, at que se comande a mudana da mesma. Quando a leitura feita em variveis numricas, do tipo inteira ou reais, o procedimento Read pula espaos em branco, tabs ou um marcador de final de linha.

53

Procedimento Readln
procedure Readln([ var F: Text; ] V1 [, V2, ...,Vn ]);
O procedimento Readln faz a leitura de uma linha do texto e passa o comando de leitura para a linha seguinte do mesmo. O arquivo deve estar aberto para iniciar o procedimento de leitura.

Procedimento AssignFile
procedure AssignFile(var F: TextFile, Name: string);
O procedimento AssignFile chamado para inicializar uma varivel do tipo TextFile, F. O valor repassado por uma varivel do tipo string, Name. Aps este procedimento ser chamado, a varivel F est associada com um arquivo, at que este seja fechado. No se deve associar F a um arquivo que j esteja aberto. Exemplos:
AssignFile(F, OpenDialog1.FileName); //Caixa de dilogo fornece o caminho do arquivo ou AssignFile(F, C:\Temp\Arquivo.txt); //O nome e caminho so informados no cdigo

Funo Eof
function Eof(var F: TextFile): Boolean;
A funo Eof testa se a posio a de final do arquivo que est sendo lido. Eof(F) retorna um valor verdadeiro (true) se a ltima posio do arquivo estiver sido lida, ou seja, o ltimo caractere foi lido, ou ainda quando o arquivo estiver vazio. Caso contrrio, a funo ir retorna falso (false). Obs: A funo Eof falha caso F represente um arquivo no modo somente escrita (write-only). Portanto, no possivel utilizar esta funo quando se utiliza o modo Append ou Rewrite.

FunoSeekEof
function SeekEof [ (var F: Text) ]: Boolean;
Esta funo muito parecida com a anterior, porm determina se o final do arquivo foi atingido, porm esta funo deve ser utilizada somente quando um espao em branco separa o texto do final do arquivo. Quando o ponteiro de leitura est na ltima posio do arquivo SeekEof retorna valor verdadeiro (true), caso contrrio retorna falso (false). Veja o Exemplo, onde a varivel real j lida at que o final do arquivo F seja atingido. 54

while not SeekEof(f) do begin Read(f,j); Y[i]:= Y + j* 5; i:= i+1; end;

Funo Eoln
function Eoln [(var F: TextFile) ]: Boolean;
A funo Eoln testa quando a posio da leitura do arquivo chegou ao final de uma linha. Eoln(F) retorna um valor verdadeiro (true) quando a posio final da linha foi atingida, caso contrrio o valor seria falso (false).

Procedimento Append
procedure Append(var F: TextFile);
O procedimento Append utilizado para colocar o arquivo no modo somente escrita (writeonly), posicionando o cursor no final do mesmo, ou seja, os dados j contidos no arquivo no sero sobreescritos (perdidos). Caso o arquivo assinalado esteja aberto, o mesmo ser fechado e novamente aberto. Este procedimento somente pode ser utilizado com um arquivo j existente.

Procedimento Rewrite
procedure Rewrite(var F:Text File);
O procedimento Rewrite cria um novo arquivo de dados, assinalado com o nome e endereo F, no modo somente escrita (write-only). Caso o arquivo F j exista, o mesmo deletado e outro com o mesmo nome automaticamente criado. Caso o arquivo F esteja aberto, o mesmo primeiramente fechado, seguindo-se pela excluso e posteriormente recriado com um arquivo vazio.

Procedimento Reset
procedure Reset(var F: TextFile);
O procedimento Reset abre um arquivo existente, assinalado pelo endereo e nome F. Caso o arquivo no exista um erro ocorrer.

55

Caso o arquivo j esteja aberto, o mesmo encerrado e reaberto, com o incio na primeira linha e primeira coluna, ou seja, o primeiro caractere do arquivo. Caso F seja um arquivo de texto, F tornar-se- um arquivo no modo somente leitura (readonly). Aps a chamada do procedimento Reset, Eof verdadeiro (true) se o arquivo estiver vazio, caso contrrio Eof ser falso (false).

Procedimento CloseFile
procedure CloseFile(var F: TextFile);
O procedimento CloseFile, como o prprio nome sujere, fecha o arquivo que esteja sendo manipulado pelo programa. Em outras palavras, este procedimento termina a associao entre o programa com o arquivo. Este procedimento dever sempre ser utilizado aps um procedimento de tratamento de dados em arquivo, tanto para leitura ou escrita.

Funo DeleteFile
function DeleteFile(const FileName: string): Boolean;
Esta funo utilizada quando se deseja deletar um arquivo do disco rgido ou diskete. Esta funo retorna um valor verdadeiro (true) quando o arquivo foi deletado corretamente e retorna valor falso (false) quando o arquivo no existe ou ocorreu algum problema. Obs: Nesta funo o parmetro assinalado do tipo string, diferentemente das funes e procedimentos anteriores. Um exemplo de escrita de dados em um arquivo:
procedure TForm1.BitBtn2Click(Sender: TObject); var SalvarDados:TextFile; //Criando a varivel do tipo TextFile i:integer; begin if SaveDialog1.execute then // Executando a caixa de dilogo para escolha do arquivo begin AssignFile(SalvarDados, SaveDialog1.FileName); //Assinalando o nome do arquivo varivel TextFile ReWrite(SalvarDados); // Criando o novo arquivo Writeln(SalvarDados,'Valores X',char(9),'Valores Y'); //Fazendo o cabealho do arquivo for i:=1 to Npontos do begin Writeln(SalvarDados,ValorX[i],char(9),ValorY[i]); //salvando os dados end; closefile(SalvarDados); // Fechando o arquivo end; end;

56

Um exemplo de leitura de dados em um arquivo:


procedure TForm1. BitBtn1Click(Sender: TObject); var Arquivo:TextFile; //Criando a varivel do tipo TextFile Npoint,i:word; begin if OpenDialog1.Execute then // Executando a caixa de dilogo para escolha do arquivo begin AssignFile(Arquivo, OpenDialog1.FileName); //Assinalando o nome do arquivo varivel TextFile Reset(Arquivo); //Abrindo o arquivo e posicionando o cursor para a leitura for i:= 1 to Npontos do begin readln(Arquivo,ValoresX[i],ValoresY[i],ValoresZ[i]); end; closefile(Arquivo); // Fechando o arquivo end; end;

57

A UNIT MATH
A linguagem ObjectPascal fornece uma rica biblioteca de funes matemticas e estatsticas. Para ter acesso a esta biblioteca, basta acrescentar a unidade math na seo uses no cabealho de cada unidade. Abaixo lista-se algumas das funes disponveis nesta biblioteca: Funo ArcCos : calcula o inverso do coseno. Funo ArcCosh : calcula o inverso do coseno hiperblico. Funo ArcCot : calcula o inverso da cotangente. Funo ArcCotH : calcula o inverso da cotangente hiperblica. Funo ArcCsc : calcula o inverso da cosecante. Funo ArcCscH : calcula o inverso da cosecante hiperblica. Funo ArcSec : calcula o inverso da secante. Funo ArcSecH : calcula o inverso da secante hiperblica. Funo ArcSin : calcula o inverso do seno. Funo ArcSinh : calcula o inverso do seno hiperblico. Funo ArcTanh : calcula o inverso da tangente hiperblica. Funo Cosecant : calcula o valor da cosecante. Funo Cosh : calcula o valor do coseno hiperblico. Funo Cot : calcula o valor da cotangente. Funo Coth : calcula o valor da cotangente hiperblica. Funo Csc : calcula o valor da cosecante. Funo Csch : calcula o valor da cosecante hiperblica. Funo log10 : calcula o logartimo de base 10. Funo log2 : calcula o logartimo de base 2. Funo Sec : calcula o valor da secante. Funo Sehc : calcula o valor da secante hiperblica. Funo Sinh : calcula o valor do seno hiperblico. Funo Tan : calcula o valor da tangente. Funo Tanh : calcula o valor da tangente hiperblica. Funo Power(base,Expoente) : calcula a potncia desejada de um nmero. function Power(const Base, Exponent: Extended): Extended; Procedimento DivMod : retorna o resultado e resto de um diviso de nmeros inteiros. procedure DivMod(Dividend: Integer; Divisor: Word; var Result, Remainder: Word); Procedimento Frexp : separa a mantissa e expoente de um nmero. procedure Frexp(const X: Extended; var Mantissa: Extended; var Exponent: Integer) register; Funo Hypot : calcula o comprimento de uma hipotenusa. function Hypot(const X, Y: Extended): Extended; onde X e Y so os catetos.

58

Funo LogN : calcula o logartmo para uma base especificada. function LogN(const Base, X: Extended): Extended; Funo Max : retorna o maior valor entre dois nmeros. function Max(A,B: Double): Double; overload; Funo MaxIntValue : retorna o maior valor de um vetor (array) de nmeros inteiros. function MaxIntValue(const Data: array of Integer): Integer; Funo MaxValue : retorna o maior valor de um vetor (array) de nmeros reais. function MaxValue(const Data: array of Double): Double; Funo Mean : retorna o valor da mdia dos valores de um vetor (array) de nmeros reais. function Mean(const Data: array of Double): Extended; Procedimento MeanAndStdDev : retorna o valor da mdia e desvio padro de um vetor (array) de nmeros reais. procedure MeanAndStdDev(const Data: array of Double; var Mean, StdDev: Extended); Funo Min : retorna o menor entre dois valores. function Min(A,B: Double): Double; overload; Funo MinIntValue : retorna o menor valor de um vetor (array) de nmeros inteiros. function MinIntValue(const Data: array of Integer): Integer; Funo MinValue : retorna o menor valor de um vetor (array) de nmeros reais. function MinValue(const Data: array of Double): Double; Procedimento MomentSkewKurtosis : retorna os 4 momentos da estatstica, alm do Skew e Kurtosis. M1 = mdia; M2 e desvio padro .... procedure MomentSkewKurtosis(const Data: array of Double; var M1, M2, M3, M4, Skew, Kurtosis: Extended); Funo RandG : gera nmeros aleatrios com uma distribuio Gaussiana. function RandG(Mean, StdDev: Extended): Extended; Mean o nmero que ir definir a mdia e StdDev o desvio padro. Funo RandomFrom : seleciona elementos aleatriamente de um vetor de dados. function RandomFrom(const AValues: array of Double): Double; overload; Funo Sign : testa o valor em comparao a zero. function Sign(const AValue: Double): TValueSign; overload; Sign retorna 0 se A for zero. Sign retorna 1 se A for maior que zero. Sign retorna -1 se A for menor que zero.

59

Funo StdDev : retorna o desvio padro dos elementos de um vetor (array) de dados. function StdDev(const Data: array of Double): Extended; Funo Sum : retorna a soma dos elementos de um vetor de dados. function Sum(const Data: array of Double): Extended; register; Funo SumInt : retorna a soma dos elementos de um vetor de dados inteiros. function SumInt(const Data: array of Integer): Integer register; Funo SumOfSquares : retorna a soma dos quadrados dos valores de um vetor de dados. function SumOfSquares(const Data: array of Double): Extended; Procedimento SumsAndSquares : retorna a soma dos elementos e a soma do quadrado dos elementos de um vetor de dados. procedure SumsAndSquares(const Data: arrayof Double; var Sum, SumOfSquares: Extended) register; Funo TotalVariance : retorna o valor da variana de um vetor de pontos. function TotalVariance(const Data: array of Double): Extended; Total Variance: SUM(i=1,N)[(X(i) - Mean)**2] Funo Variance : retorna o valor da variana de um vetor de pontos. function Variance(const Data: array of Double): Extended;

60

DECLARAES CRIADAS AUTOMATICAMENTE PELO DELPHI


Se voc um bom observador, percebeu que o Delphi tambm gera as declaraes e seus respectivos procedimentos quando voc deseja manipular um determinado evento.

CAIXAS DE DILOGO
Podemos utilizar alguns tipos de caixas de dilogo pr-definidas pelo Delphi facilitando em muito o desenvolvimento pela ferramenta:

ShowMessage
A caixa de dilogo ShowMessage declarada internamente pelo Delphi desta forma:
procedure ShowMessage(const Msg: string);

Onde o parmetro Msg um dado String. Exemplo:


ShowMessage(Um texto ou propriedade string ser exibida.);

MessageDlg
A caixa de dilogo MessageDlg declarada internamente pelo Delphi desta forma:
function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Word;

Onde: const Msg: string uma constante string ou propriedade deste tipo. mtWarning Contm um cone exclamao amarelo. mtError Contm um cone vermelho de parada. mtInformation Contm um cone i azul. mtConfirmation Contm uma interrogao verde. mtCustom No contm BitMap. mbYes mbNo mbOK mbCancel mbAbort mbRetry mbIgnore mbAll mbNoToAll mbYesToAll mbHelp Define um nmero para o help de contexto. Por padro, zero 0.

DlgType: TmsgDlgType

Buttons: TMsgDlgButtons HelpCtx: Longint

61

O retorno da funo o tipo do boto como mr Desta maneira pode-se fazer testes lgicos como no exemplo:
if MessageDlg(Deseja sair?, mtConfirmation, [mbYes, mbNo], 0)=mrYes then

Application.MessageBox
Uma outra caixa de dilogo o mtodo MessageBox do objeto Application. Esta funo est definida da seguinte maneira:
function MessageBox(const Text, Caption: PChar; Flags: Longint): Integer;

Onde: const Text Caption: PChar uma constante string ou propriedade deste tipo. Define uma string para o ttulo da janela. Define os botes, cones e a possibilidade de focar um determinado boto. Os valores para botes so: MB_ABORTRETRYIGNORE, MB_OK, MB_OKCANCEL, MB_RETRYCANCEL, MB_YESNO, MB_YESNOCANCEL Os valores para os cones so: MB_ICONEXCLAMATION, MB_ICONWARNING, MB_ICONINFORMATION, MB_ICONASTERISK, MB_ICONQUESTION, MB_ICONSTOP, MB_ICONERROR, MB_ICONHAND Os valores para a definio do boto default pode ser: MB_DEFBUTTON1, MB_DEFBUTTON2, MB_DEFBUTTON3, MB_DEFBUTTON4

Flags

62

O retorno da funo o tipo do boto como id


(IDABORT IDCANCEL IDIGNORE IDNO IDOK IDRETRY IDYES)

Desta maneira pode-se fazer testes lgicos como no exemplo:


if Application.MessageBox('Texto','Ttulo',MB_YESNOCANCEL + MB_ICONINFORMATION + MB_DEFBUTTON2) = IdYes then

CAIXAS DE ENTRADA
Podemos obter dados do usurio atravs de caixas de dilogo pr-defindas.

InputBox
A funo InputBox retorna um tipo String, que dado digitado pelo usurio na sua utilizao. Sua definio interna a seguinte:
function InputBox(const ACaption, APrompt, ADefault: string): string;

Onde: const ACaption APrompt ADefault Exemplo:


InputBox('Ttulo da janela','Descrio','Valor Padro')

Define o ttulo da janela Define um rtulo para orientao dentro da caixa. Define um valor default para a caixa.

63

InputQuery
A funo InputQuery retorna um tipo Booleano, o dado digitado pelo usurio ser colocado em uma varivel do tipo string previamente declarada. Sua definio interna a seguinte:
function InputQuery(const ACaption, APrompt: string; var Value: string): Boolean;

Exemplo:
if InputQuery('Ttulo', 'Descrio', aux) and (aux <> '') then

Neste exemplo acima, a janela s retornar verdade se houver algum valor digitado e o usurio clicar no boto OK, caso contrrio o retorno ser falso.

Exemplo
Vamos examinar uma unit e exemplicar os principais conceitos:
type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; Label1: TLabel; procedure Button1Click(Sender: TObject); function Soma(X, Y: String): Integer; //definida pelo desenvolvedor private { Private declarations } aux: Integer; //varivel privada public { Public declarations } frase: String; //varivel pblica end; var Form1: TForm1; implementation {$R *.DFM} const MAX = 50; //definio de constante

64

procedure TForm1.Button1Click(Sender: TObject); var titulo: String; //variavel local i: Integer; begin if (Edit1.Text <> '') and (Edit2.Text <> '') then //atribui variavel private - aux o retorno da funo soma aux := Soma(Edit1.Text,Edit2.Text); titulo := 'Curso de Delphi'; //atribui varivel local frase := titulo+' Verso 5'; //atribui variavel public Form1.Caption := frase; //atribui propriedade Caption do form ShowMessage('A soma dos valores : '+IntToStr(Aux)); for i:=0 to MAX do Label1.Caption := IntToStr(i); end; function TForm1.Soma(X, Y: String): Integer; begin result := StrToInt(X)+StrToInt(Y); end; end.

Sugesto: Exerccio 4

CHAMADA DE FORMS
Uma caracterstica importante da apresentao dos formulrios em uma aplicao, o fato de ser apresentado como MODAL ou NO-MODAL. H dois mtodos para executar a visualizao, mas antes vamos entender como isso funciona.

MODAL O foco fica preso no formulrio e no liberado para outro form at que ele seja fechado. O usurio pode ativar outra aplicao do Windows, mas no poder trabalhar em outra janela daquele programa cuja janela foi aberta como modal (at que seja fechada). NO MODAL O foco pode ser transferido para outra janela sem que esta precise ser fechada.

Entendido este conceito, os mtodos que o Delphi utiliza para apresentar os forms so: Show para apresentar forms NO-MODAIS, ou ShowModal para apresentar forms MODAIS.

65

COMPONENTES (VCL)
Objeto Chart (Componente grfico)
O Chart uma impotante ferramenta grfica, muito til para expor o comportamento de funes ou variveis. Aconfigurao do chart feita diretamente no ObjectInspector ou cdio no CodeEditor. Trabalha com diferentes formatos de apresentao: linhas, barras, pizza etc.

66

A adio dos pontos no Chart feita de forma simples, pela funo addxy:
AddXY(Const AXValue, AYValue: Double; Const AXLabel: String; AColor: TColor) : Longint;

Como exemplo podemos citar:


Chart1.Series[1].AddXY(ValorX,ValorY,'',clTeecolor);

Ou ainda pela referncia direta da curva selecionada:


Series3.AddXY(ValorX,ValorY,'',clTeecolor);

Objeto StringGrid (Tabela de texto)

A referncia aos pontos feita apontando-se o endereo da coluna e da linha, conforme:


StringGrid1.Cells[coluna,linha]:=Valor;

Objeto BitBtn (Boto com figuras opcionais)


Paleta Additional Importncia: Permite inserir figuras para uma melhor orientao do usurio, alm de funes pr-definidas.

Propriedades Glyph
Kind

Define um Bitmap para o componente. (Arquivo com extenso .BMP) Define o tipo de Bitmap exibido pelo usurio. bkCustom Bitmap definido pelo usurio. bkOk Boto OK padro, com uma marca de verificao na cor verde e propriedade Default igual a True. bkCancel 67

ModalResult

Boto Cancel padro, com um x na cor vermelha e propriedade Cancel igual a True. bkYes Boto Yes padro, com uma marca de verificao na cor verde e propriedade Default igual a True. bkNo Boto No padro, com uma marca vermelha representando um crculo cortado e propriedade Cancel igual a True. bkHelp Boto de auxlio padro, com uma interrogao na cor cyan. Quando o usurio clica sobre o boto, uma tela de auxlio deve ser exibida (baseada no cdigo do desenvolvedor). bkClose Boto Close padro, com o desenho de uma porta. Quando o usurio clica sobre o boto, o formulrio a que ele pertence se fecha. bkAbort Boto Abort padro, com um x na cor vermelha e propriedade Cancel igual a True. bkRetry Boto Retry padro, com uma seta circular verde. bkIgnore Boto ignore padro, com o desenho de um homem verde se afastando. bkAll Boto All padro, com uma marca de verificao dupla na cor verde e propriedade default igual a True. Permite encerrar a execuo de um formulrio Modal quando o seu valor for diferente de mrNone.

Objeto SpeedButton (Boto para barra de cones)


Paleta Additional Importncia: Permite ao usurio manipular os botes individuais ou atravs do conceito de grupo.

Propriedades Glyph GroupIndex


AllowAllUp

Define um Bitmap para o componente. Permite agrupar um conjunto de SpeedButtons quando ao serem selecionados, tiverem a propriedade diferente de zero. Permite que o componente possa ter o relevo suspenso ao ser clicado. S pode ser utilizado junto ao conceito de agrupamento.

68

Flat Down

Define um efeito visual interessante. Permite determinar qual componente foi pressionado. S pode ser utilizado junto ao conceito de agrupamento.

Objeto MaskEdit (Caixa de edio com mscara)


Paleta Additional Importncia: Permite estabelecer uma mscara para a entrada de dados no componente. Pode ser considerado literalmente um componente Edit com mscara.

Propriedades CharCase Define o tipo dos caracteres. Permite definir uma mscara para entrada de dados. EditMask PasswordChar Define um caracter para ocultar a entrada de dados.

Objeto Image (Imagem)


Paleta Additional Importncia: Permite inserir uma figura para uso geral na aplicao.

Propriedades AutoSize Picture Stretch Mtodos LoadFromFile

Permite alterar o tamanho do componente baseado no tamanho da figura. Define a figura a ser exibida. Permite alterar o tamanho da figura baseado no tamanho do componente.

Permite carregar um arquivo de figura na propriedade Picture.

Para trabalhar com imagens jpg, necessrio acrescentar na clusula uses da interface a biblioteca jpeg .

Objeto - PageControl

69

Paleta Win32 Importncia: Permite definir guias para agrupar os demais componentes. Cada guia representa um componente TabSheet do tipo TTabSheet, uma espcie de sub-objeto do PageControl.

Propriedades ActivePage

Permite determinar qual a guia foi selecionada pelo usurio.

Para criar novas pginas, clique com o boto direito no componente PageControl e escolha New Page.

70

Objeto OpenDialog (Caixa de dilogo para abertura de arquivos)


Paleta Dialogs Importncia: Permite utilizar uma caixa de dilogo pronta com recursos padronizados pelo sistema operacional.

Propriedades DefaultExt
FileName Filter FilterIndex InitialDir Options Title

Especifica a extenso a ser adicionada ao nome de um arquivo quando o usurio digita o nome de um arquivo sem a sua extenso. Define o arquivo selecionado no componente. Permite definir as mscaras de filtro de arquivo a serem exibidas. Define o filtro default a ser exibido na lista drop-down que define os tipos de arquivos selecionveis. Define o diretrio default quando a caixa de dilogo aberta. Neste componente, options define uma srie de valores booleanos. Define o ttulo da caixa de dilogo.

Os componentes da paleta dialogs so executados atravs do mtodo execute. Este mtodo uma funo que retorna um valor booleano, assim para exibir uma caixa de dilogo, podemos escrever:
if OpenDialog1.Execute then

Se o usurio escolher algum arquivo e confirmar a caixa, execute retorna verdadeiro, caso contrrio, falso.

Sugesto: Exerccio 5 Objeto ImageList (Lista de imagens)


Paleta Win32 Importncia: Permite definir um conjunto de cones para serem re-utilizados por diversos componentes de recebem este objeto como provedor de uma lista de imagens.

71

Para incluir imagens no componente ImageList, clique 2 vezes rapidamente no componente e clique no boto Add. O Delphi possui um conjunto de cones e imagens em uma pasta padro 6:
C:\Arquivos de programas\Arquivos comuns\Borland Shared\Images

Objeto RichEdit (Texto com formatao)


Paleta Win32 Importncia: Permite formatar o texto (Negrito, Itlico, Sublinhado, Fontes, etc...) para a leitura de outros editores compatveis com o padro RTF.

Propriedades Lines WantReturns WantTabs


WordWrap

Define o texto exibido no componente. Define a tecla Enter como quebra de linha. Define a tecla Tab como tabulao ou mudana de foco. Caso falso podese utilizar CTRL+TAB para produzir o efeito desejado. Define a quebra de linha automtica de texto.

Mtodos Clear LoadFromFile SaveToFile

Permite limpar o contedo do componente. Permite carregar um arquivo para a propriedade Lines. Permite salvar o contedo da propriedade Lines em um arquivo.

Objeto ProgressBar (Barra de progresso)


Paleta Win32 Importncia: Permitir ao usurio ter um acompanhamento de uma rotina demorada.

Caso voc tenha instalado o software nos diretrios sugeridos como padro.

72

Propriedades Max Min Orientation Position Step

Permite definir o valor mximo para a faixa de valores no componente. Permite definir o valor mnimo para a faixa de valores no componente. Define se o componente dever ser vertical ou horizontal. Define a posio corrente do controle no componente. Define o incremento usado na variao do valor da propriedade position.

Objeto Gauge (Barra de progresso)


Paleta Samples Importncia: Permitir ao usurio ter um acompanhamento de uma rotina demorada.

Propriedades Kind Progress

Permite definir aparncias diferenciadas no componente. Define a posio corrente do controle no componente.

Objeto Animate (Animaes)


Paleta Win32 Importncia: Permite exibir um filme .AVI para ilustrar tarefas (rotinas) em andamento.

Propriedades CommonAVI Active Repetitions

Define o AVI a ser exibido. Liga e desliga a exibio do AVI. Define um nmero inteiro correspondente ao nmero de repeties. Zero define repeties indefinidas.

Sugesto: Exerccio 6

73

Objeto DateTimePicker (Data e hora atravs de uma Combobox)


Paleta Win32 Importncia: Permite ao usurio escolher uma data atravs de um componente que possui um importante impacto visual e facilidade operacional.

Propriedades CalColors Date DateFormat DateMode Kind MaxDate MinDate

Define as cores do calendrio. Define a data selecionada no componente. Define o formato da apresentao da data. Define o estilo da caixa de listagem. Define se o componente deve trabalhar com data ou hora. Define uma data mxima para uma faixa de valores. Define uma data mnima para uma faixa de valores.

Objeto MonthCalendar (Calendrio mensal)


Paleta - Win32 Importncia: Permite ao usurio escolher uma data atravs de um componente que possui um importante impacto visual e facilidade operacional.

Propriedades Date Define a data selecionada no componente. FirstDayOfWeek Define qual o primeiro dia da semana. WeekNumbers Permite numerar as semanas.

74

Objeto StatusBar (Barra de status)


Paleta Win32 Importncia: Um dos principais componentes de informaes sobre operaes gerais no sistema.

Propriedades AutoHint
SimplePanel SimpleText Panels

Permite exibir o hint do componente automaticamente na barra de status. Se no houver painis, a barra deve ter a propriedade SimplePanel ligada. Define que a barra de status ser sem divises. Define o texto a ser exibido pela barra de status. Permite a criao e edio de painis na barra de status. A propriedade SimplePanel deve estar desligada. Pode-se tambm dar um duplo clique na barra de status.

Ao utilizar a propriedade AutoHint, pode-se definir o hint dos objetos com duas strings separadas por pipe (|). A primeira string ser utilizada como hint local, a segunda como hint na barra de status.

Objeto ToolBar (Barra de cones)


Paleta Win32 Importncia: Permite criar barras de cones de maneira rpida e simples.

Propriedades Flat Images HotImages


ShowCaptions

Define um efeito visual com relevo atravs do mouse nos botes. Permite definir um objeto do tipo ImageList. Permite definir um objeto do tipo ImageList a ser usado no momento em que o mouse passa (ou clica) sobre o componente. Permite exibir a propriedade caption dos botes.

Para adicionar botes ou separadores na ToolBar, clique com o boto direito sobre o componente e escolha New Button ou New Separator.

Sugesto: Exerccio 7
75

TRATAMENTO DE EXCEES
Quando criamos e executamos nossos programas, estamos sujeitos situaes de erros em tempo de execuo, a isto denominamos exceo . As excees devem ser tratadas de maneira a no permitir:

Travar a aplicao Emitir mensagens tcnicas ao usurio leigo Deixar o SO instvel

Quando uma exceo ocorre, o fluxo de controle automaticamente transferido para blocos de cdigo denominados handlers7 de excees, definidos atravs de comandos especficos do Object Pascal. No Object Pascal, uma exceo uma classe. A definio de excees como classes permite agrupar excees correlatas. Esse agrupamento feito atravs da prpria hierarquia de classes, de modo que podemos ter vrias classes dependentes de uma nica. O que ativa o mecanismo de tratamento de erros atravs de excees o uso da unit SysUtils. Ela permite detectar os erros e convert-los em excees.

O COMANDO TRY-EXCEPT
Podemos tratar as excees atravs do comando try-except. Sua sintaxe:
try <comandos a serem executados> except <bloco de exceo> end; //finaliza o bloco

Os comandos a serem executados so tratados seqencialmente na ordem em que foram criados, caso no haja alguma exceo o bloco de exceo ignorado. O programa prossegue normalmente obedecendo aos eventos provocados pelo usurio. Caso ocorra alguma exceo, o fluxo de controle desviado para o bloco de exceo. importante lembrar que podemos inserir qualquer comando, inclusive fazer chamadas a procedimentos e funes que por sua vez, podem chamar outros procedimentos e funes. O bloco de exceo pode ser definido atravs de uma construo genrica, exemplo:

Handler = Manipulador de evento.

76

try Abre(Arq); while not Fim(Arq) do processa(Arq); except Showmessage (Houve um erro inesperado.); end; //bloco try

No exemplo acima tratamos os erros com uma mensagem genrica dentro de um um bloco tryexcept.

A CONSTRUO ON-DO
try Abre(Arq); while not Fim(Arq) do processa(Arq); except on EInOutError do //erro de entrada e sada begin Showmessage(Problemas...); Fecha(Arq); end; on EdivByZero do //erro de diviso de n inteiro por zero Showmessage(Erro ao dividir por zero); on EconvertError do //erro de converso de tipos Showmessage(Erro de converso de tipos de dados); end; //bloco try

Podemos ainda definir utilizando a clusula on-do com um handler genrico usando else, da seguinte forma:
try Processa; except on Exceo1 do Trata1; on Exceo2 do Trata2; else TrataOutras; end;

Os principais tipos de exceo da RTL (RunTime Library) do DELPHI, a serem tratadas nos blocos on ... do so:
Nome EaccessViolation EconvertError EdivByZero EinOutError Descrio Ocorre quando se tenta acessar uma regio de memria invlida (ex: tentar atribuir valor a um ponteiro cujo contedo nil). ocorre quando se tenta converter um string em um valor numrico (ex: utilizar a funo StrToInt em uma letra). ocorre na diviso de um nmero inteiro por zero. ocorre numa operao incorreta de I/O (ex: abrir um arquivo que no existe).

77

EintOverFlow EinvalidCast EinvalidOp EinvalidPointer EoutOfMemory EoverFlow ErangeError EstackOverflow Eunderflow EzeroDivide

ocorre quando o resultado de um clculo excedeu a capacidade do registrador alocado para ele (para variveis inteiras). ocorre quando se tenta realizar uma operao invlida com o operador as (ex: tentar usar um Sender com uma classe que no corresponde a seu tipo). ocorre quando se detecta uma operao incorreta de ponto flutuante. ocorre quando se executa uma operao invalida com um ponteiro (ex: tentar liberar um ponteiro duas vezes). ocorre quando se tenta alocar memria mas j no existe mais espao suficiente. ocorre quando o resultado de um clculo excedeu a capacidade do registrador alocado para ele (para variveis de ponto flutuante). ocorre quando uma expresso excede os limites para a qual foi definida (ex: tentar atribuir 11 ao ndice de um vetor que pode ir no mximo at 10). ocorre quando o sistema no tem mais como alocar espao de memria na Stack. ocorre quando o resultado de um clculo pequeno demais para ser representado como ponto flutuante. ocorre quando se tenta dividir um valor de ponto flutuante por zero.

O COMANDO TRY-FINALLY
H um outro comando cuja sintaxe comea com try. Este controle de finalizao nos permite lidar de forma estruturada com as situaes em que alocamos algum tipo de recurso e, haja o que houver, precisamos depois liber-lo.
<aloca o recurso> try <usa o recurso> finally <libera o recurso com ou sem exceo> end;

O comando funciona da seguinte forma: os comandos especificados aps o Try so executados seqencialmente. Se no ocorrer nenhuma exceo, os comandos especificados aps finally so executados, e o programa prossegue com a execuo normal, com o comando seguinte ao tryfinally. Porm, se houver alguma exceo qualquer uma durante a execuo da lista de comandos do try, o trecho aps o finally executado e, no final, a exceo reativada. Em resumo: Os comandos do bloco finally sempre so executados, haja ou no alguma exceo durante a execuo dos comandos especificados aps o try.

78

CLASSES BSICAS

Exceo

EMathError

EIntError

EInOutError

EAccessViolation

EInvalidOp

EDivByZero

Excees de Entrada/Sada

EPrivilege

EZeroDivide

ERangeError

EInvalidCast

EStackOverflow

EOverFlow

EIntOverFlow

Excees Typecast EControlC Excees de Processador


EConvertError

EUnderFlow Excees de Ponto Flutuante

Excees de Matemtica de Inteiros

EOutOfMemory

EVariantError
EInvalidPointer

Excees de Converso

EAssertionFailed

Excees de Variantes

Excees de Pilha

Excees de Assero

BLOCOS TRY ANINHADOS


Blocos try aninhados permitem maior versatilidade na construo de blocos protegidos, lembrando que se a exceo ocorrer, os comandos inseridos em except sero executados. J os comandos inseridos em finally sero executados havendo ou no a ocorrncia de erros. Embora no prximo exemplo, no exista margem para excees dentro do lao for..do (a menos que seja digitado errado) podemos ter uma idia de como criar blocos aninhados para garantir a execuo de rotinas sujeitas a erros mais graves.

79

procedure TForm1.Button1Click(Sender: Tobject); var i, aux:integer; begin aux := 500; try {inicio do bloco try-finally. Screen controla uma serie de recursos do sistema operacional neste exemplo, muda-se a aparencia do cursor para ampulheta} Screen.Cursor := crHourGlass; try//inicio do bloco try-except for i:=0 to aux do begin Edit1.Text := IntToStr(i); Application.ProcessMessages; {O mtodo ProcessMessages necessrio para forar que as mensagens do windows sejam processadas, desenhando o numero no Edit. Sem ele, apenas o valor final seria visto.} end; except Showmessage('Ocorreu um erro.'); end;//fim do bloco try-except finally Screen.Cursor := crDefault; end;//fim do bloco try-finally end; //fim da procedure

TRATAMENTO DE EXCEES DE FORMA GLOBAL


H no Delphi um objeto chamado Application criado sem a deciso do desenvolvedor em todo o projeto. Este objeto representa a applicao como um todo e possui um evento muito importante: OnException. Este evento permite manipular as excees em um nvel global, podemos afirmar que os tratamentos de erro atravs do comando try so tratamento locais. Na verso 5 do Delphi, os eventos deste objeto esto disponvel na paleta Win32, nas verses anteriores este objeto era manipulado apenas no Code Editor tendo o desenvolvedor o trabalho de declarar os procedimentos desejados. Como o objeto tem como finalidade generalizar e centralizar tratamentos, deve haver um nico objeto na aplicao. Paleta Additional Importncia: Permite a manipulao de excees em um nvel global para toda a aplicao.

80

A utilizao do evento OnException pode ser criado da seguinte forma, utilizao um if na varivel E (que recebe o erro atual) tomando uma deciso na condio verdadeira:
procedure TForm1.ApplicationEvents1Exception(Sender: TObject; E: Exception); begin if E is EConvertError then ShowMessage('Erro de converso de dados.'); end;

Neste exemplo acima, em qualquer lugar do programa (e no apenas em uma determinada rotina) que venha a levantar um erro do tipo EConvertError, uma mensagem genrica ser exibida. Este objeto deve estar inserido ou no formulrio principal ou no formulrio especial denominado Data Module como veremos adiante.

TRATAMENTO DE EXCEES SILENCIOSAS


Podemos utilizar o comando Abort para gerar excees silenciosas, ou seja, sem nenhuma mensagem.
try Form1.Caption := FloatToStr(StrToFloat(Edit1.Text) / StrToFloat(Edit2.Text)); except on EZeroDivide do begin Beep; ShowMessage('Diviso por zero'); end; on EInvalidOp do ShowMessage('Operao invlida'); else Abort; end;

Sugesto: Exerccio 8

81

UM POUCO MAIS SOBRE COMPONENTES (VCL)


Objeto Timer (Temporizador)
Paleta System Importncia: Permite a execuo de rotinas em loop, em um intervalo pr-definido.

Propriedades Enabled
Interval

Permite ligar o timer, ou seja, ele entra em um loop executando o evento OnTimer at que seja atribudo falso ou terminada a aplicao. Define em milisegundos o intevalo de repetio do evento OnTimer.

Objeto FileListBox (Caixa de listagem de arquivos)


Paleta Win 3.1 Importncia: Permite listar arquivos de determinado diretrio.

Propriedades FileEdit
FileName Mask

Define uma caixa de edio (TEdit) que exibir o arquivo atualmente selecionado. Define o nome do arquivo selecionado. Vlido em tempo de execuo. Define mscaras de filtro (separadas por ponto e vrgula) para a exibio dos arquivos.

82

Objeto DirectoryListBox (Caixa de listagem de diretrios)


Paleta: Win 3.1 Importncia: Permite listar os diretrios do drive desejado.

Propriedades DirLabel
FileList

Permite exibir o diretrio corrente com a propriedade Caption de um componente do tipo TLabel. Permite a conexo com um componente TFileListBox.

Objeto - DriveComboBox (Caixa de listagem de drives)


Paleta: Win 3.1 Importncia: Permite listar os drives disponveis no computador.

Propriedades DirList

Permite a conexo com um componente TDirectoryListBox.

Objeto FilterComboBox (Caixa de listagem de filtros)


Paleta: Win 3.1 Importncia: Permite estabelecer filtros para visualizao de arquivos.

Propriedades FileList Filter

Permite a conexo com um componente TFileListBox. Permite definir as mscaras de filtro de arquivo a serem exibidas.

83

TCNICAS DE INTERFACE
SPLASH SCREEN
As telas de apresentao (Splash Screen) so muito utilizadas em diversos programas do windows, exemplo Delphi, Word, Excel, etc... uma janela de propaganda que vista no inicio, durante o carregamento dos recursos daquele programa para a memria principal. Vamos criar uma tela de entrada para demonstrar este recurso: Crie uma nova aplicao e grave os arquivos com os nomes:
Pasta - Splash Unit1 UFrmPrincipal Project Splash

A propriedade Name do formulrio deve ter o mesmo nome da Unit sem a letra U. Crie outro formulrio (File | New Form) e grave-o com o nome UFrmSegundo . Crie agora, um terceiro formulrio e grave-o com o nome UFrmSplash . Modifique as seguintes propriedades deste formulrio:
object FrmSplash: TFrmSplash BorderStyle = bsNone Caption = 'FrmSplash' ClientHeight = 230 ClientWidth = 265 Color = clBtnFace Position = poScreenCenter end;

84

Dentro deste formulrio insira um componente image e modifique suas propriedades:


object Image1: TImage Align = alClient Picture = {insira uma figura a seu gosto} end;

Pode-se inserir componentes Labels por cima do componente Image, basta ajustar a propriedade Transparent para true. Nota-se que apesar do formulrio FrmSplash ser exibido antes do formulrio principal ele pode ser criado a qualquer momento, atravs da alterao na implementao de cdigo a seguir. Agora, clique no Menu Project | Options e na lista Auto-Create forms selecione o formulrio FrmSplash. Atravs do cone > mude o formulrio para a lista Available forms. Todo formulrio criado pelo padro do Delphi carregado para a memria no momento da execuo do programa, sendo definida a ordem atravs da lista AutoCreate. Isso no quer dizer que os formulrio devem ser chamados nesta ordem, mas que todos os formulrios referenciados em Auto-Create sero criados na memria principal automaticamente e todos que esto na lista Available forms estaro disponveis para serem carregados em no momento definido pelo usurio.

85

Confirme a janela e clique no Menu Project View Source. A guia do arquivo de projeto (DPR) dever ser exibida no Code Editor. Vamos alterar o cdigo do arquivo DPR para a seguinte disposio: (No necessrio digitar os comentrios.)
program Splash; uses Forms, Windows, UFrmPrincipal in 'UFrmPrincipal.pas' {FrmPrincipal}, UFrmSegundo in 'UFrmSegundo.pas' {FrmSegundo}, UFrmSplash in 'UFrmSplash.pas' {FrmSplash}; {$R *.RES} begin Application.Initialize; {Cria o formulario atraves do metodo da propria classe} FrmSplash := TFrmSplash.Create(Application); //Exibe o formulario FrmSplash.Show; {Atualiza o form para exibir os componentes inseridos: Image, Labels, etc} FrmSplash.Refresh; Application.CreateForm(TFrmPrincipal, FrmPrincipal); Application.CreateForm(TFrmSegundo, FrmSegundo); {Caso queira exibir o formulario por um tempo minimo pode-se usar a funo Sleep que 'congela o sistema' por um determinado tempo mensurado em milisegundos. Acrescentar a biblioteca Windows na clausula USES} Sleep(2000); {Libera a memoria destruindo o formulario de splash} FrmSplash.Free; {Disponibiliza a aplicao para a interao com o usuario} Application.Run; end.

Com esse raciocnio, o formulrio Splash ser exibido inicialmente porm no ser o Main Form (formulrio principal) da aplicao, sendo destrudo aps os formulrios serem carregados para a memria.

86

CRIANDO E DESTRUINDO FORMS


Como j foi visto neste exemplo anterior, os formulrio so, por padro, auto-criados pelo Delphi. Isso pode trazer alguns incovenientes em projetos maiores, imagine o Delphi ao iniciar o arquivo executvel tentar carregar 50 formulrios para a memria principal... O primeiro passo tirar o formulrio da lista Auto-Create e passa-lo para a lista Available forms atravs do menu Project | Options. Depois devemos definir o cdigo de chamada do form e de liberao de memria do form chamado. Supondo o seguinte exemplo: Dois formulrios: um chamado UFrmPrincipal e outro UFrmSegundo, sendo que o principal faz uma chamada ao form secundrio atravs de um button, o cdigo seria o seguinte:
procedure TFrmPrincipal.Button1Click(Sender: TObject); begin FrmSegundo := TFrmSegundo.Create(Application); FrmSegundo.ShowModal;//ou atravs do mtodo Show end;

No formulrio chamado (FrmSegundo) dever ser criado um cdigo para liberar a memria quando este for fechado.
procedure TFrmSegundo.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end;

A varivel Action define qual a ao o formulrio deve tomar ao ser fechado. O default para formulrios SDI o valor caHide, ou seja, o formulrio apenas oculto permanecendo na memria principal, mudamos este comportamento atravs do valor caFree. Uma outra tcnica para o mesmo objetivo seria definir a liberao de memria em um bloco try como a seguir:
procedure TFrmPrincipal.Button1Click(Sender: TObject); begin FrmSegundo := TFrmSegundo.Create(Application); try FrmSegundo.ShowModal; finally FrmSegundo.Free; end;//do bloco finally end;

Este cdigo acima s funciona com formulrios Modais, pois o mtodo Show permite a execuo das prximas linhas de cdigo aps a sua chamada, trazendo um efeito indesejado neste exemplo.

87

TOOLBAR
A Toolbar fornece uma barra de ferramentas com botes prprios e recursos personalizados. Os botes inseridos na Toolbar so do tipo TToolButton, considerados objetos internos da Toolbar. Vamos exemplificar sua utilizao atravs de um exemplo: Crie uma nova aplicao e grave os arquivos com os nomes:
Pasta - Toolbar Unit1 UFrmToolBar Project Toolbar

Os componentes inseridos sero:

Toolbar

Image

StatusBar

O componente Toolbar alinha-se automaticamente na parte superior do formulrio da mesma maneira que a barra de Status alinha-se na parte inferior. O componente Image pode ter a propriedade Align definida como alClient e a propriedade Center como True. Para inserir botes na barra Toolbar, clique com o boto direito na barra e escolha New Button, para inserir um separador de botes escolha New Separator.

Insira 3 botes e separadores como no exemplo a seguir.

88

Para o objeto ImageList1 defina trs figuras cinzas clicando em Add... como abaixo: As figuras podem ser FileOpen.bmp, Tools.bmp, Doorshut.bmp Encontradas no diretrio padro8 de figuras do Delphi. Para excluir uma figura da lista, clique em Delete.

Para o objeto ImageList2 defina as mesmas figuras, porm coloridas. Para o objeto PopUpMenu1 defina dois menus atravs do construtor:

Caption Distorcer Normal

Name MnpDistorcer MnpNormal

C:\Arquivos de Programas\Arquivos Comuns\Borland Shared\Images\Buttons

89

Para o objeto ToolBar defina as propriedades:


object ToolBar1: TToolBar ButtonHeight = 25 ButtonWidth = 24 Flat = True HotImages = ImageList2 Images = ImageList1 end; Images define as figuras que sero atribudas aos botes na visualizao inicial do componente. HotImages define as figuras que sero atribudas aos botes no momento em que o mouse passa nestes componentes caso a propriedade Flat esteja ligada, gerando um efeito

semelhante barra de cones do Internet Explorer. O segundo boto da Toolbar (ToolButton2) deve ter as suas propriedade
object ToolButton2: TToolButton DropdownMenu = PopupMenu1 Style = tbsDropDown end

Defina a propriedade Hint para os trs botes segundo o raciocnio:

Objeto ToolButton1 ToolButton2 ToolButton3


Para a barra de status defina:

Finalidade Abrir um arquivo de imagem Distorcer ou no a figura Fechar o programa

Hint Abre arquivo de imagem Permite distorcer a imagem Sair do aplicativo

object StatusBar1: TStatusBar AutoHint = True SimplePanel = True end

Defina os manipuladores de eventos necessrios segundo a unit abaixo:


unit UFrmToolbar; {A interface no foi impressa} implementation {$R *.DFM} procedure TFrmToolBar.ToolButton1Click(Sender: TObject); begin if OpenPictureDialog1.Execute then Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName); end;

90

procedure TFrmToolBar.ToolButton4Click(Sender: TObject); begin FrmToolBar.Close; end; procedure TFrmToolBar.MnpDistorcerClick(Sender: TObject); begin Image1.Stretch := True; MnpDistorcer.Checked := True; MnpNormal.Checked := False; end; procedure TFrmToolBar.MnpNormalClick(Sender: TObject); begin Image1.Stretch := False; MnpNormal.Checked := True; MnpDistorcer.Checked := False; end; end.

91

EXERCCIOS
EXERCCIO 1
Objetivo: Abordar a maneira com que o Delphi trabalha com os objetos e elementos bsicos em Object Pascal. Introduzir a tcnica de manipulao de propriedades e eventos. Componentes utilizados: Label, Edit e Button. Enfoque: Quando o usurio digitar uma string, este texto dever ser exibidono ttulo formulrio e em uma mensagem de caixa de dilogo.
Abra o Delphi ou se j aberto, clique no comando File New Application. Perceba que inicialmente j temos um formulrio a nossa disposio, seu nome (atravs da propriedade Name) Form1. Salve o projeto antes de prosseguir criando uma pasta chamada Exercicio1 e dentro desta pasta, gravar a unidade e o arquivo de projeto.

Nome atual
Unit1 Project1 UFrmInicio Inicio

Novo nome

De acordo com o ttulo da janela nomear a(s) unit e depois, o projeto

Criar a pasta incio

Aps ter gravado, insira os seguintes componentes no form: 1 Label, 1 Edit e 2 Buttons. Uma sugesto para a disposio dos objetos pode ser vista a seguir:

92

Modifique as propriedades dos componentes como a seguir:


object FrmInicio: TFrmInicio Width = 216 Height = 172 ActiveControl = Edit1 Caption = FrmInicio Position = poScreenCenter Name = FrmInicio end object Label1: TLabel Caption = &Digite: FocusControl = Edit1 end object Edit1: TEdit MaxLength = 10 end object Button1: TButton Cursor = crHandPoint Caption = &Confirma Default = True Hint = Clique aqui para executar a tarefa ShowHint = True end object Button2: TButton Cursor = crHandPoint Caption = &Sair Cancel = True end

Exemplo:
Propriedade Name object FrmInicio: TFrmInicio Width = 216 Height = 172 end Outras propriedades

Para definirmos manipuladores para os objetos Buttons, faa o seguinte passo: Selecione o Button1 (Caption Confirma) e na janela Object Inspector selecione a guia Events. Identifique o evento: OnClick dando um duplo clique no espao em branco . Um procedimento no Editor de Cdigo dever ser exibido. Insira o cdigo entre o begin e o end. Como no exemplo abaixo:

93

procedure TFrmInicio.Button1Click(Sender: TObject); begin {O ttulo do formulrio recebe uma frase concatenada com uma string digitada pelo usurio} FrmInicio.Caption := 'Projeto Incio '+Edit1.Text; {Uma frase ser exibida atravs de uma caixa de dilogo padro} ShowMessage('Voc digitou: '+Edit1.Text); Edit1.Clear; //O mtodo Clear limpa a propriedade Text do objeto end;

Para o Button2 repita o mesmo processo e insira o cdigo:


procedure TFrmInicio.Button2Click(Sender: TObject); begin FrmInicio.Close; end;

Salve seu projeto novamente para atualiz-lo e atravs do comando RUN compile-o e faa os testes necessrios.

EXERCCIO 2
Objetivo: Abordar a maneira com que o Delphi trabalha com os objetos e elementos bsicos em Object Pascal. Revisar componentes vistos em sala e apresentar uma tcnica de atribuio de cdigo entre componentes bem como sua manipulao. Componentes utilizados: Label, Edit, Button, CheckBox e RadioGroup. Enfoque: O usurio dever digitar uma string no componente Edit, este texto dever ser exibido no Label(2). O CheckBox dever habilitar ou no a digitao e o RadioGroup vai manipular o tamanho da fonte do componente Label.
Iniciar uma nova aplicao e salv-la em uma pasta chamada Exercicio2.

Nome atual
Unit1 Project1 Troque o nome do objeto form para FrmFrase. UFrmFrase Frase

Novo nome

Em nosso curso ser uma regra : O nome do Form ser o nome da Unit sem a letra U. Insira os objetos como o exemplo a seguir:

94

Label1 CheckBox1

RadioGroup1

Os objetos podem ter as seguintes propriedades alteradas:


object FrmFrase: TFrmFrase ActiveControl = Edit1 BorderStyle = bsDialog Caption = Formulrio Exerccio 2 Width = 341 Height = 236 Name = FrmFrase ..end object Label1: TLabel Caption = &Digite um texto: FocusControl = Edit1 end object Label2: TLabel Width = 305 Height = 25 AutoSize = False Caption = {deixe vazio} end object Edit1: TEdit Text = {deixe vazio} end object CheckBox1: TCheckBox Hint = Permite habilitar o componente de entrada de dados Caption = Digitao Checked = True ShowHint = True end

95

object RadioGroup1: TRadioGroup Caption = Tamanho da fonte: Columns = 3 ItemIndex = 0 Items.Strings = Normal Maior Menor end object Button1: TButton Hint = Clique para fechar o programa Cancel = True Caption = &Sair ShowHint = True end

Para definir os manipuladores de eventos, identifique os procedimentos abaixo:

NO digite a linha da procedure, apenas o cdigo dentro do begin e end.


procedure TFrmFrase.CheckBox1Click(Sender: TObject); begin Edit1.Enabled := CheckBox1.Checked; end; procedure TFrmFrase.Edit1Change(Sender: TObject); begin Label2.Caption := Edit1.Text; end; procedure TFrmFrase.RadioGroup1Click(Sender: TObject); begin if RadioGroup1.ItemIndex = 0 then Label2.Font.Size := 8 else if RadioGroup1.ItemIndex = 1 then Label2.Font.Size := 12 else Label2.Font.Size := 6; end; procedure TFrmFrase.Button1Click(Sender: TObject); begin FrmFrase.Close; end;

Salve seu projeto novamente para atualiz-lo e atravs do comando RUN compile-o e faa os testes necessrios.

96

EXERCCIO 3
Utilizando os conceitos vistos, crie um aplicativo que possa efetuar as quatro operaes aritmticas bsicas, somar, subtrair, dividir e multiplicar. Os dados sero nmeros reais que o usurio deve digitar. A quantidade de objetos, a disposio visual e a escolha dos manipuladores sero de escolha do desenvolvedor.

Objetivo: Abordar a maneira com que o Delphi trabalha com diversas funes de converso e operaes aritmticas internas. Componentes utilizados: escolha do desenvolvedor Enfoque: O usurio dever digitar dois valores e aps escolher um operador aritmtico realizar o clculo.
Atravs de uma nova aplicao, grave o projeto dentro de uma pasta chamada Exercicio5

Nome atual
Unit1 Project1 UFrmMiniCalc MiniCalc

Novo nome

EXERCCIO 4
Objetivo: Abordar a maneira com que o Delphi trabalha com objetos tendo um enfoque maior no cdigo em Object Pascal utilizando recurso de reaproveitamento de cdigo. Componentes utilizados: Edit, Button, CheckBox, RadioGroup, ComboBox e Memo. Enfoque: O usurio dever digitar um caminho e arquivo vlido no Edit, este texto dever ser utilizado para carregar o arquivo (texto) no Memorando. Pode-se trocar a fonte pelo ComboBox e mudar o formato atravs do CheckBox.
Atravs de uma nova aplicao, grave o projeto dentro de uma pasta chamada Exercicio3

Nome atual
Unit1 Project1 UFrmTexto Texto

Novo nome

97

Insira os componentes e alinhe-os.

Modifique as propriedades conforme a orientao abaixo:


object FrmTexto: TFrmTexto ActiveControl = Edit1 BorderStyle = bsSingle Caption = Visualiza Texto ASCII Position = poScreenCenter Name = FrmTexto end object Edit1: TEdit Hint = Digite um caminho e nome de arquivo ShowHint = True Text = {deixe vazio} end object Memo1: TMemo Lines.Strings = {deixe vazio} Cursor = crNo ReadOnly = True end object ComboBox1: TComboBox Text = {deixe vazio} end object GroupBox1: TGroupBox Caption = Formato da fonte end object CheckBox1: TCheckBox Caption = Negrito end object CheckBox2: TCheckBox Caption = Itlico end

98

object CheckBox3: TCheckBox Caption = Sublinhado end object Button1: TButton Caption = &Carrega Arq. Default = True end object Button2: TButton Cancel = True Caption = &Sair end

Ao declarar9 o cabealho da procedure FormataTexto na seo Interface, pode-se utilizar na mesma linha, o atalho CTRL+SHIFT+C para declar-la na seo Implementation. Defina os cdigos para cada evento segundo o cdigo fonte abaixo:
unit UFrmTexto; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;

{No digite as declaraes da interface}


type TFrmTexto = class(TForm) Edit1: TEdit; Memo1: TMemo; ComboBox1: TComboBox; GroupBox1: TGroupBox; CheckBox1: TCheckBox; CheckBox2: TCheckBox; CheckBox3: TCheckBox; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure ComboBox1Change(Sender: TObject); procedure FormShow(Sender: TObject); procedure CheckBox1Click(Sender: TObject); procedure CheckBox2Click(Sender: TObject); procedure CheckBox3Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); private { Private declarations } procedure FormatoTexto; public { Public declarations } end;
9 Somente devemos declarar procedures ou funes manuais. As demais funes que possuem Sender como parmetro so declaradas automaticamento pelo Delphi, atravs da Object Inspector ou DuploClick no objeto (Evento Padro). A ordem de construo dos eventos no faz a menor diferena

99

var FrmTexto: TFrmTexto; implementation {$R *.DFM} procedure TFrmTexto.Button1Click(Sender: TObject); begin if Edit1.Text <> '' then Memo1.Lines.LoadFromFile(Edit1.Text) else ShowMessage('Digite um caminho e'+#13+ 'um nome de arquivo vlido'+#13+ 'Exemplo: C:\autoexec.bat'); end;

procedure TFrmTexto.ComboBox1Change(Sender: TObject); begin Memo1.Font.Name := ComboBox1.Text; end; {Para criar o procedimento FormatoTexto, digite sua declarao (sem TFrmTexto) na clusula private e utilize CTRL+SHIFT+C Para todos os demais, selecione o objeto e utilize a object inspector} procedure TFrmTexto.FormatoTexto; begin if (CheckBox1.Checked and CheckBox2.Checked and CheckBox3.Checked) then Memo1.Font.Style := [fsBold, fsItalic, fsUnderline] else if (CheckBox1.Checked and CheckBox2.Checked) then Memo1.Font.Style := [fsBold, fsItalic] else if (CheckBox1.Checked and CheckBox3.Checked) then Memo1.Font.Style := [fsBold, fsUnderline] else if (CheckBox2.Checked and CheckBox3.Checked) then Memo1.Font.Style := [fsItalic, fsUnderline] else if (CheckBox1.Checked) then Memo1.Font.Style := [fsBold] else if (CheckBox2.Checked) then Memo1.Font.Style := [fsItalic] else if (CheckBox3.Checked) then Memo1.Font.Style := [fsUnderline] else Memo1.Font.Style := []; end; procedure TFrmTexto.FormShow(Sender: TObject); begin ComboBox1.Items.AddStrings(Screen.Fonts); ComboBox1.Text := ComboBox1.Items.Strings[0]; Memo1.Font.Name := ComboBox1.Text; end; procedure TFrmTexto.CheckBox1Click(Sender: TObject); begin FrmTexto.FormatoTexto; end;

100

procedure TFrmTexto.CheckBox2Click(Sender: TObject); begin FrmTexto.FormatoTexto; end; procedure TFrmTexto.CheckBox3Click(Sender: TObject); begin FrmTexto.FormatoTexto; end; procedure TFrmTexto.Button2Click(Sender: TObject); begin FrmTexto.Close; end; procedure TFrmTexto.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if MessageDlg('Deseja realmente sair?',mtConfirmation,[mbYes,mbNo],0) = mrYes then CanClose := True else CanClose := False; end; end.

Salve seu projeto novamente para atualiz-lo e atravs do comando RUN compile-o e faa os testes necessrios.

EXERCCIO 5
Objetivo: Abordar a maneira com que o Delphi trabalha com objetos tendo um enfoque maior na diversidade de componentes. Componentes utilizados: PageControl, BitBtn, Memo, Image, MainMenu, PopupMenu, OpenDialog, OpenPictureDialog, SpeedButton. Enfoque: O usurio dever escolher entre carregar um texto ou uma figura dependendo da guia de trabalho.
Atravs de uma nova aplicao, grave o projeto dentro de uma pasta chamada Exercicio4

Nome atual
Unit1 Project1

Novo nome UFrmTextoFigura TextoFigura

A propriedade Name do form dever ser FrmTextoFigura Insira os seguintes objetos na guia TabSheet1.

101

Insira os seguintes objetos na guia TabSheet2. No insira os componentes invisveis novamente.

SpeedButton2 Image1

Construa o menu principal (MainMenu) com os seguintes items:

Caption &Arquivo &Fechar &Sair

Name MnuArquivo MnuFechar MnuSair

ShortCut
Ctrl+F Alt+F4

102

Contrua o menu rpido (PopupMenu) com os seguintes items:

Caption
Abrir Fechar

Name MnpAbrir MnpFechar

Selecione os dois componentes SpeedButton na TabSheet2 e defina a propriedade GroupIndex de ambos com o valor 1 Selecione o componente Memo1 e defina a propriedade PopupMenu com o valor PopupMenu1 Selecione o componente Image1 e defina a propriedade PopupMenu com o valor PopupMenu1 Selecione o componente OpenDialog1 e defina a propriedade Filter como na ilustrao. As demais propriedades esto definidas como:
object OpenDialog1: TOpenDialog Filter = InitialDir = 'c:\' Title = 'Abrir arquivo texto' end

Defina captions e figuras para os objetos BitBtn. Defina figuras para os SpeedButtons. Os demais detalhes de acabamento so de escolha do desenvolvedor. Agora, identifique os eventos abaixo e construa os cdigos indicados, fazendo os comentrios que julgar necessrio.
implementation {$R *.DFM} procedure TFrmTextoFigura.BitBtn1Click(Sender: TObject); begin if OpenDialog1.Execute then begin Memo1.Lines.LoadFromFile(OpenDialog1.FileName); TabSheet1.Caption := ExtractFileName(OpenDialog1.FileName); end; end;

103

procedure TFrmTextoFigura.BitBtn2Click(Sender: TObject); begin if OpenPictureDialog1.Execute then begin Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName); TabSheet2.Caption := ExtractFileName(OpenPictureDialog1.FileName); SpeedButton1.Down := True; Image1.Stretch := False; end; end; procedure TFrmTextoFigura.SpeedButton1Click(Sender: TObject); begin Image1.Stretch := False; end; procedure TFrmTextoFigura.SpeedButton2Click(Sender: TObject); begin Image1.Stretch := True; end; procedure TFrmTextoFigura.MnuFecharClick(Sender: TObject); begin if PageControl1.ActivePage = PageControl1.Pages[0] then Memo1.Lines.Clear else Image1.Picture := nil; end; procedure TFrmTextoFigura.MnpAbrirClick(Sender: TObject); begin if PageControl1.ActivePage = PageControl1.Pages[0] then BitBtn1.Click else BitBtn2.Click; end; procedure TFrmTextoFigura.MnpFecharClick(Sender: TObject); begin {Pode-se reaproveitar cdigo atravs da object inspector tambem} MnuFechar.Click; end; procedure TFrmTextoFigura.MnuSairClick(Sender: TObject); begin FrmTextoFigura.Close; end; procedure TFrmTextoFigura.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if MessageDlg('Deseja sair?',mtConfirmation,[mbYes,mbNo],0) = mrYes then CanClose := True else CanClose := False; end;

104

EXERCCIO 6
Objetivo: Abordar a maneira com que o Delphi trabalha com objetos revisando conceitos j abordados. Componentes utilizados: MainMenu, OpenDialog, RichEdit, Animate, ProgressBar. Enfoque: O usurio dever escolher um arquivo .RTF e ao carregar o arquivo, o processo vai atualizar a ProgressBar de acordo com o nmero de caracteres.
Atravs de uma nova aplicao, grave o projeto dentro de uma pasta chamada Exercicio6

Nome atual
Unit1 Project1 UFrmRichText RichText

Novo nome

Insira os componentes e organize-os. A sugesto pode ser vista a seguir:

Animate

ProgressBar

Insira duas figuras na ImageList atravs de um duplo clique. As figuras devem representar as funes (Abrir e Fechar) No objeto MainMenu crie os seguintes items:

Caption Name Abrir MnuAbrir Fechar MnuFechar Para o objeto Animate, configure as seguintes propriedades:
object Animate1: TAnimate Active = False CommonAVI = aviFindFile Visible = False end

105

Para inserir figuras nos items de Menu, selecione o MainMenu (1 click) e na propriedade Images defina o objeto ImageList correspondente. Depois, d um duplo clique no MainMenu. Nos items de menu (dentro do construtor) defina na propriedade ImageIndex a figura desejada. O aplicativo tem dois eventos basicamente. Implemente-os como a seguir.
implementation {$R *.DFM} procedure TFrmRichText.MnuAbrirClick(Sender: TObject); var i:integer; begin if OpenDialog1.Execute then begin RichEdit1.Visible := False; RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName); ProgressBar1.Max := Length(RichEdit1.Lines.Text); Animate1.Visible := True; Animate1.Active := True; for i:=0 to Length(RichEdit1.Lines.Text) do ProgressBar1.Position := i; Animate1.Active := False; Animate1.Visible := False; ProgressBar1.Position := 0; RichEdit1.Visible := True; FrmRichText.Caption := ('O total de caracteres : '+ IntToStr(Length(RichEdit1.Lines.Text))); end; end; procedure TFrmRichText.MnuFecharClick(Sender: TObject); begin FrmRichText.Close; end;

EXERCCIO 7
Objetivo: Abordar a maneira com que o Delphi trabalha com objetos revisando conceitos j abordados. Componentes utilizados: MonthCalendar, DateTimePicker, MaskEdit, StatusBar. Enfoque: O usurio dever escolher uma data em qualquer um dos dois componentes, poder tambm digit-la no MaskEdit. A data ser exibida na Barra de Status por extenso atravs da funo FormatDateTime.

106

Atravs de uma nova aplicao, grave o projeto dentro de uma pasta chamada Exercicio7

Nome atual
Unit1 Project1 UFrmData Data

Novo nome

Insira os componentes e identifique os eventos em seguida.

MaskEdit

StatusBar

implementation {$R *.DFM} procedure TFrmData.MonthCalendar1Click(Sender: TObject); begin StatusBar1.SimpleText := FormatDateTime('dddd, dd "de" mmmm "de" yyyy',MonthCalendar1.Date); DateTimePicker1.Date := MonthCalendar1.Date; MaskEdit1.Text := DateToStr(MonthCalendar1.Date); end; procedure TFrmData.DateTimePicker1Change(Sender: TObject); begin StatusBar1.SimpleText := FormatDateTime('dddd, dd "de" mmmm "de" yyyy',DateTimePicker1.Date); MonthCalendar1.Date := DateTimePicker1.Date; MaskEdit1.Text := DateToStr(DateTimePicker1.Date); end; procedure TFrmData.MaskEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_RETURN then {Se o usurio teclar ENTER, ento} begin StatusBar1.SimpleText := FormatDateTime('dddd, dd "de" mmmm "de" yyyy',StrToDate(MaskEdit1.Text)); MonthCalendar1.Date := StrToDate(MaskEdit1.Text); DateTimePicker1.Date := StrToDate(MaskEdit1.Text); end; end;

107

EXERCCIO 8
Abra o exerccio 5 e trate os possveis erros atravs de tratamento local (try-except). Abra o exerccio 7 e trate os possveis erros atravs do tratamento global (objeto ApplicationEvents).

EXERCCIO 9
Objetivo: Abordar a maneira com que o Delphi trabalha com objetos revisando conceitos j abordados. Componentes utilizados: StatusBar, FilterComboBox, FileListBox, DirectoryListBox, DriveComboBox, Image, Timer. Enfoque: O usurio dever escolher um arquivo BMP na caixa de listagem, sendo este exibido no componente Image. As horas sero exibidas em uma parte da StatusBar.
Atravs de uma nova aplicao, grave o projeto dentro de uma pasta chamada Exercicio9

Nome atual
Unit1 Project1 UFrmFigura Figura

Novo nome

Insira os componentes e modifique suas propriedades em seguida.

Image

object FilterComboBox1: TFilterComboBox Hint = 'Escolha um tipo de arquivo' FileList = FileListBox1 Filter = 'Bitmap|*.BMP | Jpeg|*.JPG | cones|*.ICO' end

StatusBar

108

object DriveComboBox1: TDriveComboBox Hint = Escolha um drive DirList = DirectoryListBox1 end object DirectoryListBox1: TDirectoryListBox Hint = Escolha uma pasta para visualizar mais arquivos FileList = FileListBox1 end object FileListBox1: TFileListBox Cursor = crHandPoint Hint = Clique para visualizar um arquivo end object StatusBar1: TStatusBar AutoHint = True SimplePanel = False end

Para o objeto StatusBar, crie dois painis na propriedade Panels. O primeiro dever ter a largura (width) de 350. Identifique os eventos e implemente o cdigo a seguir:
implementation {$R *.DFM} procedure TFrmFigura.FormShow(Sender: TObject); begin FileListBox1.Mask := FilterComboBox1.Mask; end; procedure TFrmFigura.FileListBox1Change(Sender: TObject); begin if FileListBox1.FileName <> '' then Image1.Picture.LoadFromFile(FileListBox1.FileName); end; procedure TFrmFigura.Timer1Timer(Sender: TObject); begin StatusBar1.Panels[1].Text := DateTimeToStr(Now); end;

109

EXERCCIO 10
Objetivo: Manipular objetos com enfoque maior em operaes internas. Componentes utilizados: GroupBox, Label, Edit, MaskEdit, BitBtn. Enfoque: O usurio dever preencher os dados bsicos e ao clicar no boto, a aplicao deve calcular os items identificados do lado esquerdo. Eventuais excees devem ser tratatadas para evitar mensagens tcnicas ou falta de orientao ao usurio.
Atravs de uma nova aplicao, grave o projeto dentro de uma pasta chamada Exercicio10

Nome atual
Unit1 Project1 Insira os seguintes componentes: UFrmJuros Juros

Novo nome

Inserir mscara

Pode-se trocar a sugesto do objeto MaskEdit para um DateTimePicker. Crie agora uma rotina para calcular: Juros dirios: o valor dos juros mensal dividido por 30. Dias atrasados: a diferena entre as datas de pagamento e vencimento. Valor pagar: Prestao + (juros dirio/100 * dias atrasados * prestao) Identificar se o usurio pagou adiantado, se pagou, no haver descontos, o valor a pagar ser a prestao. Eventuais excees devem ser tratatadas para evitar mensagens tcnicas ou falta de orientao ao usurio.

110

EXERCCIO 11
Objetivo: Manipular objetos com enfoque maior em operaes internas. Componentes utilizados: escolha do desenvolvedor. Enfoque: O usurio dever preencher os dados bsicos (altura atual e peso). Ao clicar no boto, a aplicao deve calcular o peso ideal informando quanto a pessoa deve engordar, emagrecer ou manter o peso.
Atravs de uma nova aplicao, grave o projeto dentro de uma pasta chamada Exercicio11

Nome atual
Unit1 Project1 UFrmPeso Peso

Novo nome

Supondo uma regra, a implementao ser a seguinte: Peso_ideal = Altura_atual 1,05


O usurio dever entrar com dois dados: Altura atual e peso atual. O programa deve calcular o peso ideal e exibir sua resposta de acordo com a diferena entre o Peso atual e o Peso ideal.

EXERCCIO 12
Objetivo: Manipular objetos com enfoque maior em operaes internas. Componentes utilizados: GroupBox, ListBox, Edit, MaskEdit, BitBtn, Label. Enfoque: O usurio dever preencher os dados bsicos. Ao clicar no boto, a aplicao deve calcular o salrio bruto.
Atravs de uma nova aplicao, grave o projeto dentro de uma pasta chamada Exercicio12

Nome atual
Unit1 Project1 Orientaes gerais: UFrmSalario Salario

Novo nome

Permitir a entrada dos seguintes dados (GroupBox Dados Bsicos): O nome do funcionrio, o salrio base, a data de admisso, o nmero de dependentes e selecionar o cargo do funcionrio. Permitir a entrada dos seguintes dados (GroupBox Base de Clculo): O valor em Real pago por cada dependente, o valor em porcentagem do Tempo de servio do funcionrio.

111

Exibir os seguintes dados (GroupBox Valores Calculados): O clculo dos dependentes do funcionrio (N de dependentes * Valor em Real pago por dependente), o clculo do tempo de servio (Quantidade de anos na empresa * Valor em porcentagem do Tempo de servio do funcionrio em relao ao salrio base), o clculo do cargo (de acordo com o cargo selecionado, o valor em porcentagem do cargo em relao ao salrio base). Exemplo e sugesto visual a seguir:

112

DICAS
CRIAR UM HOTLINK
Podemos criar um link para a Internet dentro do Delphi atravs da funo ShellExecute. Supondo que a propriedade Caption de um label seja um endereo web vlido (http://www.fulanodetal.com.br) podemos inserir em seu evento OnClick o seguinte cdigo:
ShellExecute(Handle, 'open', pchar(Label1.Caption), nil, '',SW_SHOWNORMAL);

necessrio incluir a biblioteca ShellAPI na clusula uses da Inteface.

ENVIAR UM MAIL
Podemos utilizar a funo ShellExecute para abrir o programa de mail do usurio e preparar seu envio.
ShellExecute(Handle, open, mailto:fulano@provedor.com.br, nil, ,SW_SHOWNORMAL);

Caso queira colocar um subject padro na construo do e-mail utilize a palavra subject da seguinte forma:
ShellExecute(Handle, open, mailto:fulano@provedor.com.br ?subject=Pergunta, nil, ,SW_SHOWNORMAL);

necessrio incluir a biblioteca ShellAPI na clusula uses da Inteface.

EXECUTANDO UM PROGRAMA DE ACORDO COM A EXTENSO DE UM ARQUIVO


ShellExecute um funo API comparada a um canivete suio, vamos utiliz-la novamente para chamar um programa atravs da extenso do arquivo passado como parmetro. Os parmetros de ShellExecute so 6: Um manipulador de janela, que o pai do processo disparado. Uma ao a executar, que pode ser open, para abrir, print, para imprimir, ou explore, para abrir uma janela do Explorer no diretrio desejado. Um ponteiro (tipo Pchar em Delphi) para o nome do programa ou diretrio. Parmetros para a aplicao. Diretrio inicial. Modo de abertura do programa Exemplo:
ShellExecute(Handle, open, exemplo.doc, nil, nil, SW_SHOWNORMAL);

necessrio incluir a biblioteca ShellAPI na clusula uses da Inteface.

113

COMO SABER QUAL BIBLIOTECA INSERIR NA USES?


Quando o Delphi no declarar automaticamente determinada classa na sesso uses, um erro dever ocorrer no processo de compilao. O nome do parmetro ou funo dever estar em evidencia no rodap do Code Editor em uma janela chamada Message View. Clique em Search | Browse Symbol e digite a palavra procurada, a unit onde ela se encontra dever aparecer. Digite este nome na clusula uses. Ou, pode-se para o cursor (piscando) na palavra e teclar F1, o help tambm exibe a unit.

DATAS
As datas so um tipo de dados TDateTime, internamente so armazenadas como nmeros de ponto flutuante (Double). A parte inteira indica a data, em nmero de dias, contados a partir de 30/12/1899 e a fracionria, as horas. Pelo fato de serem armazenadas como Double, pode-se subtrair, somar e estabelecer comparaes. Por exemplo:
var DataIni, DataFim : TDateTime; Dif : Single; begin Dif := DataFim DataIni; //diferena em dias entre as datas DataIni := DataIni+10; //acrescenta + 10 dias na data end;

Para saber a hora de determinada data, multiplica-se a parte fracionria por 24:
Frac(DataIni) * 24;

Podemos ainda comparar as datas com os operadores < e >. Caso no seja necessrio a comparao com a hora, basta converter a data para um inteiro e efetuar a comparao:
if Trunc(Data1) < Trunc(Data2) then

A formatao de data pode ser feita atravs da funo FormatDateTime.


function FormatDateTime(const Format: string; DateTime: TDateTime): string;

Exemplo:
Label1.Caption := FormatDateTime('dddd, d "de" mmmm "de" yyyy', date);

SAIR DE UMA APLICAO


O Delphi fornece diferentes mtodos para sair de uma aplicao. O ideal utilizar o mtodo Close. Porm, h casos em que Close no atenderia necessidade do desenvolvedor, nestes casos pode-se chamar Halt ou Application.Terminate. Halt um procedimento do Pascal e provoca o trmino da aplicao, no se importando com arquivos abertos. J o mtodo Terminate do objeto Application obriga o fechamento de todos os arquivos abertos e a destruio de todas a forms criadas. 114

REDUZINDO TESTES IF
A expresso:
if A = 10 then B := True else B := False;

Pode ser reduzida a apenas uma linha:


B := A = 10;

A = 10 uma operao boleana, que retorna True se A igual a 10 e False caso contrrio. Neste caso estamos atribuindo varivel B o resultado da comparao, TRUE ou FALSE.

HINTS COM DUAS OU MAIS LINHAS


A object inspector permite Hint com apenas uma linha. Para gerar Hints com mais linhas podese em tempo de execuo configurar a propriedade Hint da seguinte forma:
Edit1.Hint := Primeira linha do hint#13segunda linha do hint;

Pode-se tambm em tempo de projeto clicar na form com o boto direito e escolher a opo View as Text, procurar o objeto e a hint desejada e alter-la:
Hint := Primeira linha do hint#13segunda linha do hint;

Para voltar ao Form clique com o boto direito e escolha View as Form.

SUBSTITUIR A TECLA TAB POR ENTER NA MUDANA DE FOCO


Setar a propriedade KeyPreview da Form para True Setar a propriedade Default de todos os botes da Form para False Criar um evento OnKeyPress para a Form como este:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if (Key = #13) and not (Activecontrol is TMemo) then begin //desabilita o processamento posterior da tecla key := #0; //simula o envio da tecla tab Perform(WM_NEXTDLGCTL,0,0); end; end;

115

CONES
O Delphi possui um conjunto de cones e imagens em uma pasta padro:
C:\Arquivos de programas\Arquivos comuns\Borland Shared\Images

EXECUTAR UM PROGRAMA
Para executar um programa use a API WinExec.
WinExec(calc.exe, SW_SHOWNORMAL);

LINKS
Alguns links interessantes:

Nacionais
http://www.clubedelphi.com.br/ http://www.marcosferreira.eti.br/oraculo.htm http://www.delphibahia.eti.br/ http://www.drdelphi.com.br http://www.inprise.com.br/

Internacionais
http://www.marcocantu.com/ http://www.drbob42.com/home.htm http://www.delphi3000.com/ http://homepages.borland.com/torry/ http://delphi.about.com/compute/delphi/ http://delphi.icm.edu.pl/

CONFIRMAO DE GRAVAO DE REGISTROS EM PARADOX


O Paradox utiliza um buffer para a gravao dos registros, descarregando-os depois no disco. Para forar a gravao diretamente utilize a API DbiSaveChanges
Table1.Post; DbiSaveChanges(Table1.Handle); necessrio incluir as bibliotecas dbiTypes, dbiProcs na clusula uses da

Inteface.

DISPARANDO SONS DO SISTEMA (MULTIMDIA)


Para utilizar os sons do sistema, utilize a funo PlaySound.
PlaySound(pChar('SYSTEMSTART'),0,SND_ASYNC);

116

Outros sons: SYSTEMSTART SYSTEMEXIT SYSTEMHAND SYSTEMASTERISK SYSTEMQUESTION SYSTEMEXCLAMATION SYSTEMWELCOME SYSTEMDEFAULT necessrio incluir as biblioteca mmsystem na clusula uses da Inteface

PERMITIR APENAS NMEROS EM UM TEDIT


procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if ((Key in ['0'..'9'] = False) and (Word(Key) <> VK_BACK)) then Key := #0; end;

117

REFERNCIA BIBLIOGRFICA
Dominando o Delphi 5 A Bblia Marco Cant Makron Books, 2000 Programao Orientada a Objetos usando o Delphi 3 Faial Farhat de Carvalho Editora rika Delphi4 Curso Completo Marcelo Leo Axcel Books do Brasil Ferramenta de ajuda do prprio Delphi 5.

118

You might also like