Apostila delphi rad studio 2007

17,402 views

Published on

0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
17,402
On SlideShare
0
From Embeds
0
Number of Embeds
30
Actions
Shares
0
Downloads
753
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Apostila delphi rad studio 2007

  1. 1. MINISTÉRIO DA EDUCAÇÃO SECRETARIA DE EDUCAÇÃO MÉDIA E TECNOLÓGICA Instituto Federal de Educação, Ciência e Tecnologia do Amazonas DIRETORIA DE ENSINO GERÊNCIA EDUCACIONAL DA ÁREA DE SERVIÇOS Curso Técnico em Informática – SINF32 Prof. Manoel Pantoja A. Jr. Apostila de Delphi1. IDE O ambiente de desenvolvimento é composto de várias partes compondo umconjunto integrado de janelas que interagem entre si. Figura 1 – Tela do Ambiente de Desenvolvimento Delphi 20071.1 FORM DESIGNO Form representa as janelas do Windows que compõem a aplicação. O form éresponsável pela interação entre usuário e máquina, além de servir de base para osdemais componentes.O form tem características de uma janela comum do windows, botões (Maximizar,Minimizar, fechar e controle) e ícones que podem ser modificados para umaaplicação.
  2. 2. 6 Figura 1.1 – Tela do Formulário1.2 BARRA DE MENU PRINCIPALA barra de menu principal, contém todos os menus da aplicação. Figura 2 – Barra de Menu Principal1.3 PALETA DE COMPONENTESTodos os componentes que podem ser utilizados no Delphi2007 encontram-se najanela Tool Palette localizado ao lado direito da tela. Figura 3 – Tool Palette
  3. 3. 7Para que os componentes disponíveis na tool palette sejam inseridos no form,podemos proceder das seguintes formas:  Clicando duas vezes sobre o componente deseja;  Clicar uma vez sobre o componente e em seguida clicar no form;  Clicando sobre o compoente e arrastá-lo até o form;1.4 OBJECT INSPECTORÉ uma das janelas mais importantes do Delphi2007, pois nela podemos definir ascaracterísticas dos componentes utilizados na aplicação.Nela encontramos 2 (duas) guias:Properties – responsável pelas informações a respeito das propriedades de cadacomponente selecionado.Events – Define quais os eventos que um determinado componente pode realizar eque serão definidos pelo desenvolvedor.Temos ainda uma caixa de combinação, onde podemos selecionar um componentede forma mais rapidamente. Figura 4 – Object InspectorPor exemplo, ao selecionarmos o componente Form, temos algumas propriedades:  Caption – permite a inserção de um rótulo de dados no componente;
  4. 4. 8  Align – Permite a definição do alinhamento;  Font – Permite a definição de uma fonte padrão para o form.  Icon – Define o ícone que será apresentado no form.Perceba que ao lado esquerdo da propriedade Font existe um sinal de +, istosignifica que toda e qualquer propriedade que possua este símbolo tem acaracterística de mostrar subpropriedades.Já a propriedade Icon possui ao seu lado direito o símbolo ( … ), isto significa quetodo e qualquer propriedade que possua este símbolo abrirá um caixa de diálogo aoser acionado.1.5 CODE EDITORÉ o responsável por toda parte de programação do Delphi2007, tais como:declarações de variáveis, definição de objetos, bibliotecas, etc. Todas asimplementações realizadas pelo desenvolvedor no Delphi2007, será feito do CodeEditor. Figura 5 – Code EditorUma característica muito interessante no Code Editor é que ao inserirmos umcomponente no form, o mesmo é declarado automaticamente no editor de código.
  5. 5. 9 Figura 6 – Tela de Formulário Figura 7 – Tela do Code Editor1.6 CODE INSIGHTUm recurso que vai facilitar nossa vida no momento de desenvolvimento de código éo Code Insight do Code Editor.Ele atua como um ajudante de complemento junto ao código do desenvolvedor. Porexemplo, ao digitar o nome de um objeto seguido de ponto (.) abre-se uma listagemde métodos e propriedades que podem ser utilizadas neste objeto. Figura 8 – Code Insight1.7 CONFIGURAÇÕES DE AMBIENTEVocê pode personalizar o ambiente através do menu Tools | Options | EnvironmentOptions, algumas opções podemos julgar importantes:
  6. 6. 101.7.1 Autosave OptionsEditor files – Grava os arquivos fonte (.PAS) no momento da compilação, evitandoperda de código em caso de travamento da máquina. Porém, não permite compilarum determinado projeto sem salva-lo antes.Project Desktop - Grava a posição das janelas do projeto atual.1.7.2 Compiling and RunningShow Compiler Progress – Mostra o progresso da compilação do projeto;Minimize on run – Minimiza o codegear durante a execução do projeto;2. TECLAS IMPORTANTES Tecla FunçãoF12 Alterna entre o code editor e o form designer.F11 Alterna entre o code editor, form designer e a object inspector.F10 Torna o foco para a janela principal. (RUN) Permite compilar e executar o projeto para testes. Este processo geraF9 automaticamente o arquivo .EXE no diretório onde foi gravado o arquivo de projeto (.DPR).CTRL + F9 Permite compilar o projeto sem executar. Ideal para conferência de código. Permite alternar entre os formulários do projeto.SHIFT + F12 Equivalente ao ícone View Form na SpeedBar. Permite ‘destravar’ o Delphi em caso de testes onde ocorram exceções, comoCTRL + F2 veremos mais adiante.3. PROJETOS NO 2007Um projeto nada mais é do que um conjunto de arquivos necessários para geraruma aplicação.Vamos destacar alguns arquivos:
  7. 7. 11 Extensão Tipo e descrição Criação Necessário para compilar? Arquivo Pascal: o código-fonte de Desenvolvimento Sim. uma unidade Pascal, ou uma.PAS unidade relacionada a um formulário ou uma unidade independente. Arquivo Delphi Project. (Contém Desenvolvimento Sim..DPROJ código-fonte em Pascal.) Delphi Form File: um arquivo Desenvolvimento Sim. Todo formulário é binário (na versão 5 pode ser armazenado em um convertido para texto) com a arquivo PAS e em um.DFM descrição das propriedades de um arquivo DFM. formulário e dos componentes que ele contém. Delphi Compiled Unit: o resultado Compilação Apenas se o código- da compilação de um arquivo fonte não estiver Pascal. disponível. Os arquivos DCU para as unidades que você escreve são.DCU um passo intermediário; portanto, eles tornam a compilação mais rápida. Arquivos de bitmap, ícone e Desenvolvimento: Normalmente não, mas cursor: arquivos padrão do Image Editor eles podem ser.BMP, .ICO, Windows usados para armazenar necessários em tempo.CUR imagens de bitmap. de execução e para edição adicional. Arquivo de configuração com Desenvolvimento Necessário apenas se opções de projeto. Semelhante opções de compilação.CFG aos arquivos DOF. especiais foram configuradas. Delphi Option File: um arquivo de Desenvolvimento Exigido apenas se texto com as configurações atuais opções de compilação.DOF para as opções de projeto. especiais foram configuradas. Arquivo de Desktop: contém Desenvolvimento Não. Você deve excluí- informações sobre a posição das lo se copiar o projeto.DSK janelas do Delphi, os arquivos em um novo diretório. abertos no editor e outros ajustes da área de trabalho. Arquivo executável: o aplicativo Compilação: Não. Esse é o arquivo Windows que você produziu. Ligação (linking) que você vai distribuir..EXE Ele inclui todas as unidades compiladas, formulários e recursos. Backup do arquivo Pascal Desenvolvimento Não. Esse arquivo é Pode ser ativado ou desativado gerado através do Menu Tools – Options automaticamente pelo.~PAS – Editor Options - Item: Create Delphi, quando você backup file. salva uma nova versão do código-fonte.3.1 SALVAR PROJETOPara salvar um projeto no delphi 2007, você tem 4 opções :
  8. 8. 12 Comando ObjetivoSave Salvar apenas a unidade selecionada Salvar a unidade selecionada como... pode-se renomear ou trocar de pastaSave As... (duplicando) o arquivo. Salvar o projeto como… pode-se renomear ou trocar de pasta (duplicando) oSave Project As... arquivo.Save All Grava todos os arquivos do projeto, e atualiza-os caso já sejam salvos.Caso seja a primeira vez que o projeto será salvo, aparecerá a janela padrão doWindows, onde deve ser preenchido o nome do arquivo e o local onde o mesmoserá salvo.3.2 ABRIR O PROJETOTodo projeto é identificado por um arquivo com extensão .DPROJ, desta forma paraabrir um projeto no codegear, basta ir no menu File e escolher uma das 3 (três)opções Open; Open Project; Reopen. Comando ObjetivoOpen Permite abrir um arquivo .DPROJ, .PAS entre grupos de projeto.Open Project... Permite abrir um arquivo de projeto.Reopen Permite reabrir um arquivo (DPROJ ou PAS) utilizado anteriormente.3.3 OPÇÕES DE PROJETOÉ possível configurar vários itens do sistema através do Projects | Options: Figura 9 – Tela de Opções do Projeto
  9. 9. 13Forms :  Main form – Permite a escolha do formulário principal da aplicação;  Available forms – Os formulários available (disponíveis) em caso de criação em tempo de execução.Application:  Title – Define um nome para a aplicação diferente do nome do arquivo .DPR;  Help File – Define o nome do arquivo de Help associado à aplicação;  Icon – Define o ícone utilizado no arquivo executável;Compiler  Estas opções permitem especificar uma compilação personalizada, ou seja, cada projeto pode ser compilado com uma característica.Linker  Estas opções incluem informações para a depuração.Directories/Conditionals  Nesta guia pode-se configurar o diretório de saída para os arquivos gerados pela aplicação.Version Info  Estas informações podem ser visualizadas no Windows através do menu rápido do mouse no arquivo executável.Packages  Os packages permitem um controle de distribuição através de DLL’s básicas externas ao executável entre outros recursos.4 CONVENÇÃO DE NOMEAÇÃOPara qualquer componente existente no projeto a principal propriedade é a name,pois ela define o nome da variável que será utilizado no código escrito em ObjectPascal Grande parte dos desenvolvedores adota uma convenção parafacilitar/organizar o desenvolvimento/manutenção de sistemas. O Delphi 2007 adota
  10. 10. 14como padrão o nome da classe da qual o componente é instanciado e um númerocrescente de acordo com o número de vez que aquele componente é utilizado noform. Exemplo: Button1; Button2, Label1, etc.5 MANIPULANDO COMPONENTESVimos anteriormente que existem 3 formas de adicionarmos um componente noobjeto form. Uma vez que os objetos estejam adicionados podemos manipulá-los dediversas formas.Para selecionar um objeto, basta apenas clicar sobre o mesmo ou ir à janela doobject inspector e selecionarmos o componente desejado na caixa de diálogo. Paraselecionarmos um conjunto de objetos, basta pressionarmos a tecla SHIFT e clicarnos objetos desejados.Estando o(s) objeto(s) selecionado(s), para posicioná-los no local desejado, bastaarrastar com o mouse ou utiilizar as teclas de combinação CTRL + SETAS. Pararedimensioná-los, utilize a combinação SHIFT + SETAS. Figura 10 – Selecionando Vários Objetos6 MANIPULANDO EVENTOSA guia Events do object Inspector permite ao desenvolvedor criar um manipulador deevento, onde o usuário ou o próprio sistema poderá disparar um determinado evento.Um evento é uma ação disparada dentro de uma aplicação. Exemplo: Evento Ocorrência Quando o usuário clicar uma vez com o botão esquerdo do mouse sobre oOnClick componente.OnDblClick Quando o usuário dá um duplo clique no componente com o botão
  11. 11. 15 esquerdo do mouse.OnEnter Quando o componente recebe o foco.OnExit Quando o componente perde o foco.OnKeyPress Quando pressiona uma única tecla de caractere.Exemplo 1 : Codificando um objeto button.  Insira um componente button no form;  Na object inspector selecione o componente button e altere sua propriedade caption para : “Exibir Mensagem”;  Dê um clique duplo no componente button; Aparecerá no Code Editor a declaração do evento na cláusula interface e a implementação do procedimento na cláusula implementation. procedure TForm1.Button1Click(Sender: TObject); begin form1.Caption := Meu Primeiro Programa; ShowMessage(‘Meu Primeiro Programa em Delphi 2007); end;Executando a aplicaçãoPara executar a aplicação acima, pressione a tecla F9 ou clique no ícone RUN.6.1 COMENTÁRIOSOs comentários no código fonte são importantes e podem ser feitos através dosseguintes símbolos://Comentário de linha{ Comentário de bloco }(*Comentário de bloco *)7 VCL – VISUAL COMPONENT LIBRARYVamos explanar alguns objetos com suas propriedades e seus respectivos métodos.7.1 OBJETO FORMPropriedadesActiveControl Permite definir qual o primeiro componente a receber foco assim que o
  12. 12. 16 formulário é criado.Align Altera o alinhamento e preenchimento do objeto.AutoScroll Permite habilitar as barras de rolagem.AutoSize Determina se o controle será automaticamente redimensionado.BorderIcons Determina os ícones a serem exibidos na barra de título do formulário.BorderStyle Define o estilo da borda do formulário. bsDialog – Borda não redimensionável, comum em caixa de diálogo bsSingle – Borda simples e redimensionável. bsNone – Borda invisível, não redimensionável, sem botões de controle. bsSizeable – Borda padrão redimensionável.BorderWidth Define a espessura da borda.Caption Indica o rótulo exibido para o componente.ClientHeight / Define a altura e largura da área cliente.ClientWidthColor Define a cor de fundo de um componente.Cursor Indica a imagem exibida pelo ponteiro do mouse quando este ficar sobre o objeto.DefaultMonitor Associa o form a um monitor específico em uma aplicação que utiliza vários monitores.Enabled Define se o componente está habilitado ou não.Font Permite controlar os atributos do texto exibido em um componente.FormStyle Determina o estilo do formulário. fsNormal – Definição padrão do formulário. fsMDIChild – O formulário será uma janela-filha de uma aplicação MDI. fsMDIForm – O formulário será o formulário-pai de uma aplicação MDI. fsStayOnTop – O formulário permanece sobre todos os outros formulários do projeto, exceto aqueles que também têm a propriedade FormStyle igual a fsStayOnTop.Height Define a altura do objeto.HelpContext Define o tópico do arquivo help que será exibido ao pressionar a tecla F1.HelpFile Define um arquivo de help específico.Hint Permite exibir um texto de auxílio no momento em que o ponteiro do mouse permanece sobre o controle.HorzScrollBar Define o comportamento de uma barra de rolagem horizontal.Icon Define o ícone que será usado pelo formulário.KeyPreview Define se o formulário deve ou não responder a um pressionamento de tecla, através do evento OnKeyPress, por exemplo.Left Define a coordenada da extremidade esquerda de um componente.Menu Permite escolher entre mais de um componente MainMenu.Name Define o nome interno que identifica o componente dentro da aplicação.PopupMenu Define o componente PopupMenu a ser utilizado pelo objeto.Position Permite definir o tamanho e posição de um formulário no momento em que ele aparece na sua aplicação.ShowHint Define se a string de auxílio deve ou não ser exibida quando o usuário mantém o ponteiro do mouse sobre um controle.Tag A propriedade Tag é uma variável do tipo Longint que o Delphi coloca à disposição do usuário, que pode atribuir o significado mais conveniente.Top Define a coordenada da extremidade superior de um componente.VertScrollBar Define o comportamento de uma barra de rolagem vertical.Visible Define se o componente aparece ou não na tela.Width Define a largura do objeto.WindowMenu Permite definir qual o menu responsável por manipular as janelas-filhas de uma aplicação MDI.WindowState Define o estado de exibição de um formulário.MétodosShow Exibe o formulário de manipulação não-modal.ShowModal Exibe o formulário de manipulação modal.Close Permite fechar o formulário.
  13. 13. 177.2 OBJETO TBUTTONÉ um dos objetos mais importantes para confirmar edisparar eventos associados. Figura 11 - ButtonPropriedadesAction Referencia uma ação definida em um objeto TActionList.Anchors Permite manter a posição relativa do objeto ao objeto ‘parente’ quando este é redimencionado.Cancel Associa o evento OnClick do objeto ao pressionamento da tecla Esc.Default Associa ao evento OnClick do objeto ao pressionamento da tecla Enter.ModalResult Propriedade utilizada para encerrar a execução de um formulário Modal quando selecionado um valor diferente de mrNone.Parent... As propriedades Parent permitem que o componente receba a mesma formatação do objeto proprietário.TabOrder Define a ordem na passagem de foco no momento de pressionamento da tecla TAB.TabStop Define se o foco pára no componente.MétodosSetFocus Envia o foco do windows para o componente.7.3 OBJETO TEDITUm dos principais componentes para a entrada dedados. Figura 12 - EditPropriedadesAutoSelect Define se o texto exibido pelo controle será selecionado quando este receber o foco da aplicação.AutoSize Para componentes TEdit a propriedade determina se a altura do controle será redimensionada quando o tamanho da fonte for alterado.BorderStyle Determina o tipo da borda do componente.CharCase Determina o se tipo da fonte será maiúscula, minúscula ou normal.HideSelection Define se o texto perde a seleção ao perder o foco.Maxlength Define um limite para a inserção de caracteres.PasswordChar Define qual caractere será usado para ocultar o texto inserido no componente.Text Permite manipular os caracteres inseridos no componente pelo usuário.
  14. 14. 18MétodosClear Limpa o conteúdo da propriedade text.SetFocus Envia o foco do windows para o componente.7.4 OBJETO LABELOrienta os usuários à escolha de componentes. Figura 13 - LabelPropriedadesAlignment Define o alinhamento da string na área do componente.AutoSize 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 usuário selecionar a combinação 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 não.WordWrap Define se o texto poderá utilizar o ‘retorno automático’ em caso de ultrapassar a largura definida e se a propriedade AutoSize estiver falsa.EXERCÍCIO PROPOSTO 1Objetivo: Trabalhar com objetos e elementos básicos em Object Pascal, introduzindotécnica de manipulação de propriedades e eventos.Componentes Utilizados: TLabel, TEdit e TButtonEnfoque: Quando o usuário digitar uma string, este texto deve ser exibido no títulodo formulário e em uma mensagem de caixa de diálogo.Resolução: 1. Primeiramente solicite um novo projeto clicando no menu File | New | VCL Forms Application – Delphi for Win32; 2. Salve o projeto antes de prosseguir, criando uma pasta Exercício 1 e dentro dela salve a unit com o nome ufrmPrimeiroExercicio e o projeto com o nome prjPrimeiroExercicio;
  15. 15. 19 Figura 14 – Salvando a Aplicação 3. Insira os seguintes componentes no objeto form: 1 Label; 1 Edit; 2 Button. Modifique as propriedades conforme abaixo: a. Edit – MaxLength = 10; Name = edtMensagem; b. Label – Caption = Digite: ; Focus Control = edtMensagem; c. Form – Active Control = edtMensagem ; Caption = Formulário Principal; Name = frmPrincipal; d. Button1 – Caption = Confirmar; Hint = Executar uma ação; ShowHint = True; e. Button2 – Caption = Sair;Para definirmos os eventos para os objetos Buttons, faça o seguinte procedimento: - Selecione o Button1 (Confirmar) e na guia events da object inspector, identifique oevento onclick e dê dois cliques no espaço em branco ao lado do evento. Umprocedimento será exibido no code editor. - Insira o código entre o Begin e o End, como no exemplo abaixo:begin frmPrincipal.Caption := edtmensagem.Text; ShowMessage(edtmensagem.Text); edtmensagem.Clear;end;Para o Button2 (Sair) realize o mesmo procedimento:begin frmPrincipal.Close;end;Salve seu projeto e através do comando RUN compile e faça os testes necessários.
  16. 16. 207.5 OBJETO – MEMOPermite a digitação de um texto bem maisextenso do que no componente edit. Figura 15 - MemoPropriedadesLines Propriedade do tipo TStrings que contém as linhas de texto do componente.MaxLength Define o limite máximo de caracteres no componente em sua propriedade Lines.ReadOnly Define se o componente é do tipo somente leitura.ScrollBars Define se o componente pode trabalhar com barras de rolagem.WantReturns Define se a tecla ENTER será utiliza para ‘quebra de linha’.WantTabs Define a tecla Tab como tabulação ou mudança de foco. Caso falso pode-se utilizar CTRL+TAB para produzir o efeito desejado.MétodosLoadFromFile Permite ‘carregar’ um arquivo para a propriedade Lines.SaveToFile Permite salvar o conteúdo da propriedade Lines em um arquivo especificado.7.6 Objeto – ComboBoxCria uma lista suspensa de opções a escolha dousuário através do botão dropDown. Figura 16 – ComboBoxPropriedadesItems Define uma lista de Strings que aparece no componente.Sorted Define se os dados serão ordenados.Text Define o texto atual da Combobox.MétodosClear Permite limpar o conteúdo da propriedade Items.LoadFromFile Permite ‘carregar’ um arquvo para a propriedade Items.SaveToFile Permite salvar o conteúdo da propriedade Items para um arquivo.
  17. 17. 217.7 OBJETO – GROUPBOXÉ um objeto contêiner, pois permite que possamser inseridos outro componentes dentro dele. Figura 17 – GroupBoxPropriedadesAlign Pemite definir um alinhamento no objeto proprietário.Caption Define o texto informativo na parte superior do componente.7.8 OBJETO – RADIOGROUPPermite a criação de opções para o usuárioescolher apenas um dentre todas existentes. Figura 18 - RadioGroupPropriedadesItems Define os itens disponíveis ao usuário.ItemIndex Define qual dos itens está selecionado.Columns Define o número de colunas para organização dos componentes.7.9 OBJETO – MAINMENU E POPUPMENUPermite a criação de Menus principais e menusrápidos. Figura 19 - MainMenuPropriedadesItems Define um novo item de Menu.Images Define um objeto do tipo ‘ImageList’.
  18. 18. 227.10 OBJETO – CHECKBOX (CAIXA DE VERIFICAÇÃO)Permite verificar opções boolenas pré-definidas oure-definidas pelo usuário. Figura 20 - CheckBoxPropriedadesAllowGrayed Define caso verdadeiro, três estados possíveis para o checkbox: checked (ligado), unchecked (desligado) e grayed (parcial). Caso falso, dois estados: checked (ligado) e unchecked (desligado).Checked Define se o componente está ligado ou não, caso tenha apenas dois estados.State Permite definir três estados se AllowGrayed for verdadeiro.7.11 OBJETO – RADIOBUTTON (BOTÃO DE ‘RADIO’)Permite escolher entre um grupo, pelo menos umaopção. Figura 21 - RadioButtonPropriedadesChecked Define se o componente está ligado ou desligado.7.12 OBJETO – LISTBOX (CAIXA DE LISTAGEM)Permite o usuário entrar ou manipular uma lista dedados. Figura 22 - ListBoxPropriedadesItems Define uma lista de Strings que aparece no componente.MultiSelect Permite selecionar vários itens (Strings) no componente.Sorted Define se a lista de Strings será ordenada ou não.
  19. 19. 23MétodosClear Permite limpar o conteúdo da propriedade Items.LoadFromFile Permite ‘carregar’ um arquvo para a propriedade Items.SaveToFile Permite salvar o conteúdo da propriedade Items para um arquivo.7.13 OBJETO – PANEL (PAINEL)Permite agrupar outros objetos e estabelecer umefeito visual nas aplicações. Figura 23 - PainelPropriedadesAlign Define o alinhamento do componente em relação ao seu proprietário.Bevel... Define a característica das bordas (interna e externa) bem como sua espessura.BorderStyle Define o tipo da borda.7.14 OBJETO – SPEEDBUTTON (BOTÃO PARA BARRA DE ÍCONES)Permite ao usuário manipular os botões individuaisou através do conceito de grupo. Figura 24 - SpeedButtonPropriedadesGlyph Define um Bitmap para o componente.GroupIndex Permite agrupar um conjunto de SpeedButtons quando ao serem selecionados, tiverem a propriedade diferente de zero.AllowAllUp Permite que o componente possa ter o relevo suspenso ao ser clicado. Só pode ser utilizado junto ao conceito de agrupamento.Flat Define um efeito visual interessante.Down Permite determinar qual componente foi pressionado. Só pode ser utilizado junto ao conceito de agrupamento.
  20. 20. 247.15 OBJETO MASKEDIT – (CAIXA DE EDIÇÃO COM MÁSCARA)Permite estabelecer uma máscara para aentrada de dados no componente. Pode serconsiderado literalmente um componente ‘Editcom máscara’. Figura 25 - MaskEditPropriedadesCharCase Define o tipo dos caracteres.EditMask Permite definir uma máscara para entrada de dados.PasswordChar Define um caracter para ocultar a entrada de dados.7.16 OBJETO – IMAGE (IMAGEM)Permite inserir uma figura para uso geral naaplicação. Figura 26 - ImagePropriedadesAutoSize Permite alterar o tamanho do componente baseado no tamanho da figura.Picture Define a figura a ser exibida.Stretch Permite alterar o tamanho da figura baseado no tamanho do componente.MétodosLoadFromFile Permite ‘carregar’ um arquivo de figura na propriedade Picture.7.17 OBJETO – PAGECONTROLPermite definir guias para agrupar os demaiscomponentes.Cada guia representa um componente TabSheetdo tipo TTabSheet, uma espécie de ‘sub-objeto’ doPageControl. Figura 27 - PageControl
  21. 21. 25PropriedadesActivePage Permite determinar qual a guia foi selecionada pelo usuário.7.18 OBJETO – OPENDIALOG (CAIXA DE DIÁLOGO PARA ABERTURA DEARQUIVOS)Permite utilizar uma caixa de diálogo pronta comrecursos padronizados pelo sistema operacional. Figura 28 - OpenDialogPropriedadesDefaultExt Especifica a extensão a ser adicionada ao nome de um arquivo quando o usuário digita o nome de um arquivo sem a sua extensão.FileName Define o arquivo selecionado no componente.Filter Permite definir as máscaras de filtro de arquivo a serem exibidas.FilterIndex Define o filtro default a ser exibido na lista drop-down que define os tipos de arquivos selecionáveis.InitialDir Define o diretório default quando a caixa de diálogo é aberta.Options Neste componente, options define uma série de valores booleanos.Title Define o título da caixa de diálogo.Os componentes da paleta dialogs são executados através do método execute.Este método é uma função que retorna um valor booleano, assim para exibir umacaixa de diálogo, podemos escrever: if OpenDialog1.Execute thenSe o usuário escolher algum arquivo e confirmar a caixa, execute retorna verdadeiro,caso contrário, falso.7.19 OBJETO – IMAGELIST (LISTA DE IMAGENS)Permite definir um conjunto de ícones para seremre-utilizados por diversos componentes derecebem este objeto como provedor de uma listade imagens. Figura 29 - ImageList
  22. 22. 26Para incluir imagens no componente ImageList, clique 2 vezes rapidamente nocomponente e clique no botão Add.7.20 OBJETO – PROGRESSBAR (BARRA DE PROGRESSO)Permitir ao usuário ter um acompanhamento deuma rotina demorada. Figura 30 - ProgressBarPropriedadesMax Permite definir o valor máximo para a faixa de valores no componente.Min Permite definir o valor mínimo para a faixa de valores no componente.Orientation Define se o componente deverá ser vertical ou horizontal.Position Define a posição corrente do controle no componente.Step Define o incremento usado na variação do valor da propriedade position.7.21 OBJETO – GAUGE (BARRA DE PROGRESSO)Permitir ao usuário ter um acompanhamento deuma rotina demorada. Figura 31 - GaugePropriedadesKind Permite definir aparências diferenciadas no componente.Progress Define a posição corrente do controle no componente.
  23. 23. 277.22 OBJETO – DATETIMEPICKER (DATA E HORA ATRAVÉS DE UMACOMBOBOX)Permite ao usuário escolher uma data através deum componente que possui um importante impactovisual e facilidade operacional. Figura 32 - DateTimePickerPropriedadesCalColors Define as cores do calendário.Date Define a data selecionada no componente.DateFormat Define o formato da apresentação da data.DateMode Define o estilo da caixa de listagem.Kind Define se o componente deve trabalhar com data ou hora.MaxDate Define uma data máxima para uma faixa de valores.MinDate Define uma data mínima para uma faixa de valores.7.23 OBJETO – MONTHCALENDAR (CALENDÁRIO MENSAL)Permite ao usuário escolher uma data através deum componente que possui um importante impactovisual e facilidade operacional. Figura 33 - MonthCalendarPropriedadesDate Define a data selecionada no componente.FirstDayOfWeek Define qual o primeiro dia da semana.WeekNumbers Permite numerar as semanas.
  24. 24. 287.24 OBJETO – STATUSBAR (BARRA DE STATUS)Um dos principais componentes de informaçõessobre operações gerais no sistema. Figura 34 – StatusBarPropriedadesAutoHint Permite exibir o hint do componente automaticamente na barra de status. Se não houver painéis, a barra deve ter a propriedade SimplePanel ligada.SimplePanel Define que a barra de status será sem divisões.SimpleText Define o texto a ser exibido pela barra de status.Panels Permite a criação e edição de painéis na barra de status. A propriedade SimplePanel deve estar desligada. Pode-se também dar um duplo clique na barra de status.7.25 OBJETO – TOOLBAR (BARRA DE ÍCONES)Permite criar barras de ícones de maneira rápida esimples. Figura 35 – ToolBarPropriedadesFlat Define um efeito visual com relevo através do mouse nos botões.Images Permite definir um objeto do tipo ImageList.HotImages Permite definir um objeto do tipo ImageList a ser usado no momento em que o mouse passa (ou clica) sobre o componente.ShowCaptions Permite exibir a propriedade caption dos botões.8 LINGUAGEM OBJECT PASCALConsideramos que uma aplicação em Delphi é baseada em um conjunto dearquivos, (citados anteriormente .DPROJ .PAS e .DFM) básicos. Vamos examinaralguns arquivos de fundamental importância:
  25. 25. 298.1 O MÓDULO .DPROJTodo programa em Object Pascal possui um arquivo .DPR, considerado comoarquivo de projeto, o seu formato é composto inicialmente da seguinte definição:program Project1;uses Forms, Unit1 in ‘Unit1.pas’ {Form1};{$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 forgravado o arquivo .DPROJ do projeto.Na cláusula uses, são listadas as units usadas pelo módulo principal. As units sãoresponsáveis pela capacidade de dividir o programa em uma visão modularizada.Em cada um, declaramos uma série de objetos (funções, variáveis, procedimento,etc...) que podem ser usados por outras units e pelo módulo principal.Em seguida vem um conjunto de comandos (denominado comando composto)através de dois delimitadores begin e end.8.2 AS UNITSUm programa em Object Pascal é constituído de um módulo principal (.DPROJ) e deuma ou mais unidades de compilação (.PAS). O compilador gera um arquivo com ocódigo objeto correspondente, e considera o mesmo nome do arquivo .PAS com aextensão .DCU.As units são entidades independentes, ou seja, no momento da criação não hávínculo lógico (nem físico) entre uma unit e um programa principal que a utiliza. Comesta característica, podemos utilizar as units em qualquer projeto.A principal característica do conceito de unit é que possibilita estruturar o programaem módulos funcionais, com cada unit provendo um conjunto de funções eprocedimentos. Cada formulário corresponde a uma unit. Mas, podemos criar unitsindependentes, não associadas a um form.
  26. 26. 30Se considerarmos o código uma unit com um componente Button e um manipuladorde evento, teremos o seguinte código:unit Unit1;interfaceuses 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;implementation{$R *.DFM}procedure Tform1.Button1Click(Sender: Tobject);begin Form1.Caption := ‘Curso de Delphi 2007’; Showmessage(‘Exemplo de caixa de diálogo’);end;end.Uma unit possui cinco partes:  Cabeçalho Contém a palavra reservada unit seguida de um identificador que é o nome da unit. Este nome é o mesmo nome do arquivo com extensão .PAS unit Unit1;  Interface Contém tudo o que a unit exporta: constantes, tipos, variáveis, procedimentos, funções, etc... Na declaração dos procedimentos e funções que a unit exporta, deve constar apenas o cabeçalho (nome e parâmetros). A declaração completa fica na parte da implementação. Interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls; type Tform1 = class(Tform)
  27. 27. 31 Button1: Tbutton; procedure Button1Click(Sender: Tobject); private { Private declarations } public { Public declarations } end; var Form1: Tform1;  Implementação Contém a definição completa das funções e procedimentos que constam na interface. Se na implementação são usados identificadores definidos em outra unit, o nome desta outra unit deve ser incluído na lista de units da cláusula uses da implementação. Implementation {$R *.DFM} procedure Tform1.Button1Click(Sender: Tobject); begin Form1.Caption := ‘Curso de Delphi 2007’; Showmessage(‘Exemplo de caixa de diálogo’); end;  Inicialização É uma parte opcional. Quando usada, não pode conter nenhuma declaração. Apenas comandos são permitidos nesta parte. Ela começa com a palavra initialization, e os comandos de inicialização são executados “antes” do programa começar. Initialization <comandos>  Finalização É também uma parte opcional, com uma observação: ela só pode existir se na unit houver também uma parte de inicialização e só pode conter comandos, que serão executados dentro do processo de finalização do programa, após a execução do programas principal. Finalization <comandos>Toda unit termina com a palavra end seguida de um ponto final (‘.’).
  28. 28. 328.3 ATRIBUIÇÃOAo declarar uma variável, o compilador cuida de alocar na memória uma área queseja suficiente para armazenar qualquer dos valores definidos através do seu tipo.Os valores que podem ser atribuídos à variável são definidos através de umcomando de atribuição que pode ser considerado da seguinte forma: Variável := expressão;8.4 DECLARAÇÃO DE VARIÁVEISAs variáveis podem ser classificadas em:Globais: Quando são feitas diretamente na seção interface de uma unit (ou seja, forados procedimentos e funções). Pode-se ter variáveis públicas e privadas.Locais: Quando é feita a declaração dentro de um procedimento ou função.Var N: Single; S: String; I: Integer;8.5 TIPOS PARA MANIPULAÇÃO DE VARIÁVEIS  Tipos de variáveis Inteiras Tipo Faixa de Valores FormatoInteger -2147483648.. 2147483647 32 bitsCardinal 0..4294967295 32 bits, sem sinalShortint -128..127 8 bitsSmallint -32768..32767 16Longint -2147483648.. 2147483647 32Int64 -2^63..2^63-1 64Byte 0..255 8 bits, sem sinalWord 0..65535 16 bits, sem sinalLongword 0..4294967295 32 bits, sem sinal  Tipos de números Reais Tipo Faixa de ValoresReal 2.9*10E-39..1.7*10E38Single 1.5*10E-45..3.4*10E38Doublé 5.0*10E-324..1.7*10E308Extended 3.4*10E-4932..1.1*10E4932
  29. 29. 33Comp -2*10E63+1..2*10E63-1Currency -9.22*10E14..9.22*10E14  Tipos de variáveis booleanas Tipo Faixa de ValoresBoolean False ou TrueByteBool *WordBool *LongBool *  Tipos de variáveis de caracteres Tipo ValoresChar Permite armazenar um caractere ASCII.ShortString Permite armazenar uma cadeia de até 255 caracteres.String Permite armazenar uma cadeia ‘ilimitada’ de caracteres.  Tipo genérico (Variant)Objetos variant são essencialmente variáveis sem tipo podendo assumir diferentestipos, automaticamente. Esta vantagem aparente tem a característica de serineficiente se utilizada indiscriminadamente.8.6 FUNÇÕES DE CONVERSÃO E MANIPULAÇÃOOs objetos do Delphi para entrada e/ou exibição de dados utilizam propriedades dotipo String, as propriedades Text e Caption são bons exemplos. O problema ocorrequando tentamos realizar cálculos matemáticos com os dados que devem sermanipulados por estas propriedades.Desta maneira precisamos de funções para converter dados String em tipos Inteirosou Reais ou Datas, por exemplo: Função ObjetivoStrToInt(const S: String) Converte um dado String em tipo Inteiro.IntToStr(value: Integer) Converte um dado Inteiro em tipo String.StrToFloat(const S: String) Converte um dado String em tipo Ponto Flutuante.FloatToStr(Value: Extended) Converte um dado Ponto Flutuante em tipo String.DateToStr(Date: TdateTime) Converte um dado TdateTime em String.DateTimeToStr(DateTime: Converte um dado TdateTime em String.TdateTime)StrToDate (const S: String) Converte um dado String em tipo TdateTime.StrToDateTime(const S: String) Converte um dado String em tipo TdateTimeFormatFloat(const Format: string; Permite formatar um tipo ponto flutuante retornando uma string.Value: Extended): string Edit2.Text := FormatFloat(‘###,###.00’,soma); Sendo soma uma variável real.
  30. 30. 348.7 EXPRESSÕES LÓGICASSão expressões que retornam valor booleano (falso ou verdadeiro). Operador OperaçãoNot NegaçãoAnd E lógicoOr OU lógicoxor OU EXCLUSIVO lógicoO operador not é unário, por exemplo: if not (X > Z) thenDevemos usar parênteses ao compararmos expressões lógicas, por exemplo:if (X > Z) or (W > Y) thenEXERCÍCIO PROPOSTO 2Objetivo: Trabalhar com objetos e elementos básicos utilizando as técnicas demanipulação de propriedades e eventos.Componentes utilizados: Label, Memo, Radio Group, CheckBox, ComboBox;Enfoque: Deselvolver um pequeno editor de texto, onde o usuário possa alterar afonte, cor e estilo da fonte.9 CAIXAS DE DIALOGONo Delphi existem caixas de diálogos pré-definidas, nas quais podem ser utilizadasvisando facilitar o desenvolvimento de aplicativos pela ferramenta.  ShowMessage – Exibe uma mensagem na tela ao usuário.Exemplo:ShowMessage(‘Esta é uma mensagem de Texto.’); Figura 36 – Tela de MensagemMessageDlg – Exibe uma mensagem na tela ao usuário, porém permite tratar aresposta que o usuário informa na caixa de diálogo. Sua sintaxe é a seguinte:function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons:MsgDlgButtons; HelpCtx: Longint): Word;
  31. 31. 35onde:const Msg: string É uma constante string ou propriedade deste tipo. mtWarning Contém um ícone exclamação amarelo. mtError Contém um ícone vermelho de ‘parada’. mtInformationDlgType: TmsgDlgType Contém um ícone ‘i’ azul. mtConfirmation Contém uma interrogação verde. mtCustom Não contém BitMap. mbYes mbNo mbOK mbCancel mbAbort mbRetryButtons: TMsgDlgButtons mbIgnore mbAll mbNoToAll mbYesToAll mbHelpHelpCtx: Longint Define um número para o help de contexto. Por padrão, zero ‘0’.Exemplo:if MessageDlg(‘Deseja sair?’, mtConfirmation, [mbYes, mbNo], 0)=mrYes then Figura 37 – Tela de ConfirmaçãoAPPLICATION.MESSAGEBOXUma outra caixa de diálogo é o método MessageBox do objeto Application. Estafunção está definida da seguinte maneira:function MessageBox(const Text, Caption: PChar; Flags: Longint): Integer;Onde:const Text É uma constante string ou propriedade deste tipo.Caption: PChar Define uma string para o título da janela. Define os botões, ícones e a possibilidade de focar um determinado botão. Os valores para botões são: MB_ABORTRETRYIGNORE,Flags MB_OK, MB_OKCANCEL, MB_RETRYCANCEL, MB_YESNO, MB_YESNOCANCEL
  32. 32. 36 Os valores para os ícones são: MB_ICONEXCLAMATION, MB_ICONWARNING, MB_ICONINFORMATION, MB_ICONASTERISK, MB_ICONQUESTION, MB_ICONSTOP, MB_ICONERROR, MB_ICONHAND Os valores para a definição do botão default pode ser: MB_DEFBUTTON1, MB_DEFBUTTON2, MB_DEFBUTTON3, MB_DEFBUTTON4O retorno da função é o tipo do botão como id(IDABORT IDCANCEL IDIGNORE IDNO IDOK IDRETRY IDYES)Desta maneira pode-se fazer testes lógicos como no exemplo:If Application.MessageBox(Texto,Título,MB_YESNOCANCEL +MB_ICONINFORMATION + MB_DEFBUTTON2) = IdYes then Figura 38 – Application.MessageBox10 CAIXAS DE ENTRADAPodemos obter dados do usuário através de caixas de diálogo pré-defindas.  InputBoxA função InputBox retorna um tipo String, que é dado digitado pelo usuário na suautilização. Sua definição interna é a seguinte:function InputBox(const ACaption, APrompt, ADefault: string): string;Onde:const ACaption Define o título da janelaAPrompt Define um rótulo para orientação dentro da caixa.
  33. 33. 37ADefault Define um valor default para a caixa.Exemplo:InputBox(Título da janela,Descrição,Valor Padrão) Figura 39 – Tela de Input11 ESTRUTURAS CONDICIONAIS11.1 IF – THEN - ELSEA estrutura condicional if pode ser composto de uma ou mais condições deprocessamento, por exemplo:  if (A > B) then B := B + 1;  if (A > B) then B := B + 1 else A := A - 1;Caso haja a mais de uma linha de comando dentro da estrutura then é necessáriodelimitar o bloco de comando utilizando as cláusulas BEGIN e END  if (A > B) then begin B := B + 1; X := B + A; end else begin A := A - 1; Y := Y + B; end;O comando if-then-else é considerado como único, portanto, não há ponto e vírgula(‘;’)antes da palavra reservada else.É possível ainda que se tenha um conjunto de IF-then-else aninhados, por exemplo:
  34. 34. 38  if (A > B) then begin A := A + 1; ShowMessage(‘A é maior que B’); end else Begin if (A < B ) then begin A := A - 1; ShowMessage(‘B é maior do que A’); End else ShowMessage(‘A é igual a B’); End;11.2 ESTRUTURA CASE - OFO comando case..of oferece uma alternativa para comandos if-then-else com um‘grande’ número de testes. Por exemplo:case Key of ‘A’..‘z’: Label1.Caption := ‘Letras’; ‘0’..‘9’: Label1.Caption := ‘Números’; ‘+’, ‘-’, ‘*’, ‘/’: Label1.Caption := ‘Operador’else Label1.Caption := ‘Caracter especial’;end; //fim do case12 ESTRUTURAS DE REPETIÇÃO12.1 Repeat ... UntilA estrutura de repetição Repeat ... until, garante que pelo menos uma vez aestrutura será executada. Para que as instruções de comando que estiverem dentroda estrutura de repetição sejam executadas várias vezes é necessário que acondições existente na cláusula until seja de valor FALSO. Exemplo:....Repeat X := x+ 1; Inc(Y,3); // equivale a y := y + 3; Dec(Aux,2); // equivale a aux := aux – 2;Until x >= 2000;...
  35. 35. 3912.2 WHILE - DOA estrutura de repetição WHILE se difere da estrutura Repeat, pelo fato de realizaruma validação dos dados antes de executar qualquer instrução dentro da suaestrutura. Para que as instruções sejam executadas diversas vezes, é necessárioque a condição estabelecida seja VERDADEIRA. Exemplo:…while X <= 200 do begin X := X + 1; INC(Z,3); DEC(AUX,2); end;...12.3 FOR – TO - DOA estrutura FOR permite ao desenvolvedor delimitar o numero de vezes que umaestrutura de comando será executada, pois é conhecido o inicio e o fim do numerode interações que serão realizados. Exemplo: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;12.4 BREAKO comando BREAK é utilizado para interromper a execução de um estrutura derepetição ou seqüência de comandos alinhados. Exemplo: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’
  36. 36. 4012.5 ADICIONADO FORMULARIOS AO PROJETOAs aplicações desenvolvidas por ferramentas visuais dificilmente utilizam somenteum formulário. Nos exercícios anteriores vimos que como se tratavam de aplicaçõessimples, não houve a necessidade de se adicionar novos formulários à aplicação.Vamos criar uma pequena aplicação que seja capaz de manipular mais de umformulário.Primeiramente abra um novo projeto do Delphi 2007, clicando no menu File | New |VCL Forms Applications – Delphi for Win32. Salve a aplicação em uma pastaExercicio3, salvando a unit1 com o nome de ufrmExercicio3 e o projeto com o nomeexercicio3. Figura 40 – Salvando o Formulário 3Incluia no form1 o compoente MainMenu e altere as propriedades dos objetos daseguinte forma:Object Form : TFormCaption : Exercício Proposto 3Name : frmExercicio3;Position : poDesktopCenter;Object : MainMenu: TMainMenuName: mmFormularios;
  37. 37. 41 Figura 41 – Elaborando Menu de OpçõesAgora que os objetos já estão configurados, vamos incluir as linhas de códigosnecessárias para que o nosso formulário frmexercicio3 possa “chamar” os outrosformulários da aplicação.Primeiramente antes de realizarmos qualquer codificação é necessário queadicionemos mais dois novos formulários na nossa aplicação, para isso clique nomenu File | New | Form – Delphi for Win32, salve-os com os respectivos nomesufrmFormulario2 e ufrmFormulario3, agora podemos codificar nosso mmFormularios.Para “chamar” um outro formuário apartir do formulário atual temos duas formas:Show e ShowModalShow – “Chama” o formulário solicitado e permite que se alterne entre os formuláriosdurante a execução da aplicação.Showmodal – Tem a mesma finalidade do Show, porém não permite a alternânciaentre os formulários em tempo de execução.Clique duas vezes sobre o componente MainMenu e clique duas vezes sobre o itemFormulario 1 e digite o seguinte código:procedure TForm1.Formulario11Click(Sender: TObject);begin frmFormulario2.Show;end;Em seguida, faça o mesmo procedimento para o item Formulário 2, mas com oseguinte código:procedure TForm1.Formulario21Click(Sender: TObject);begin frmFormulario3.ShowModal;end;Após isto, salve sua aplicação e execute-a clicando no botão RUN ou pressionandoa tecla F9.
  38. 38. 42Aparecerá a seguinte tela: Figura 42 – Confirmação de Referência entre formuláriosO Delphi está questionando se no formulário ‘Form1’ deve haver uma referência aoformulário ‘frmFormulario2’. Ao confirmar o Delphi adiciona uma referência no CodeEditor da unidade UFrmExercicio3 na seguinte estrutura:implementationuses ufrmFormulario2;Perceba que ao “chamar” o formulário 1 do menu, você ainda conseguirá acessar oformulário principal, porém isto não é permitido ao “chamar” o formulário 2 do menu.EXERCÍCIOS PROPOSTOS 4Calcule o Volume de uma Espera; Área de um triangulo; Perímetro do Triangulo;EXERCÍCIOS PROPOSTOS 5Objetivo: Trabalhar com objetos e elementos básicos utilizando as técnicas demanipulação de propriedades, eventos e formulários.Enfoque: Deselvolver uma aplicação que contenha todos os projetos abaixo, sendocada um solicitado através de um Menu de opções.1. PROJETO TRIANGULO: Dado 3 valores numéricos pelo usuário verificar se osmesmo formam um triângulo e em caso positivo emitir uma mensagem informandoqual o tipo correspondente. Em caso negativo informar ao usuário através de umamensagem.
  39. 39. 432. PROJETO FIBONACCI: Sendo informado o nº de termos desejados para gerar aseqüência de Fibonacci, faça um programa que exiba toda a seqüência em umcomponente Memo.3. PROJETO FATORIAL: Faça um programa que calcule o fatorial de um numeroinformado pelo usuário. O resultado do cálculo deverá ser exibido em umcomponente Edit.4. PROJETO POTENCIA: Sendo informado a Base e o Expoente pelo usuário,calcule a potência para esta operação. A base, o expoente e o resultado devem serinformados através de um coponente Edit.Cada item acima é desenvolvido em formulários separados.13 PROCEDIMENTOS E FUNÇÕESToda parte programável no Delphi 2007 é realizada dentro de procedures oufunctions, toda vez em que um evento de um componente é programado, o Delphi2007 cria automaticamente a sua declaração no Code Editor, por exemplo:type TForm1 = class(TForm) MainMenu1: TMainMenu; Formulario11: TMenuItem; procedure Formulario11Click(Sender: TObject);É possível também criar procedimentos e funções próprias não definidas pelo Delphi,para isso deve-se declarar o procedimento ou função na seção INTERFACE do codeeditor e implementá-la na seção IMPLEMENTATION.Vale a pena lembrar que a decisão por utilizar procedimento ou função é decisão dodesenvolvedor, visto que todo procedimento não tem como obrigação retornarvalores ao programa, já a função deve por obrigação retornar um valor ao programa,sendo que no Object Pascal este retorno de valor se dá pela variável result, variávelesta que não deve ser declarada pelo desenvolvedor, pois ela é declaradaautomaticamente sempre que a função é solicitada pelo programa.Uma forma automática de se implementar a declaração uma procedure ou functionna seção implementation e posicionar o curso de digitação sobre a declaração daprocedure ou function na seção Interface e pressionar as teclas CTRL + Shift + C.Exemplo de procedure:
  40. 40. 44...Typeprocedure TForm1.Soma(X, Y: String);...Implementationprocedure TForm1.Soma(X, Y: String);begin Label1.Caption := FloatToStr(StrToFloat(X)+StrToFloat(Y));end;....Exemplo de Function...Typefunction TForm1.Subtrai(X, Y: String): String;...Implementationfunction TForm1.Subtrai(X, Y: String): String;begin result := FloatToStr(StrToFloat(X)-StrToFloat(Y));end;14 TRATAMENTO DE EXCEÇÕESQuando desenvolvemos nossos programas só os disponibilizamos aos usuáriosapós uma série de testes realizados, porém é impossível prever todo e qualquer tipode problema que possa ocorrer em tempo de execução, a esses erros damos onome de exceções.As exceções devem ser tratadas para que o aplicativo não “trave” com o usuário;não deixe o SO instável; etc.Quando uma exceção ocorre, o fluxo de controle é automaticamente transferido parablocos de códigos de exceção, denominados handlers, definidos através decomandos do object Pascal.14.1 TRY – EXCEPTUma das formas de tratarmos exceções no Delphi é utilizando o comando TRY-EXCEPT.Sua sintaxe é a sguinte: Try <Comando a serem executado> Except <Bloco de execução> End;
  41. 41. 45Toda vez que o aplicativo for executado sem ocorrer nenhuma exceção o bloco decódigos de exceção é ignorado e o aplicativo prossegue normalmente, porém casoocorra a exceção o aplicativo é direcionado ao bloco de exceções e executa asinstruções lá contidas.O bloco de exceção pode ser definido através de uma construção genérica,exemplo:try Abre(Arq); while not Fim(Arq) do processa(Arq);except Showmessage (‘Houve um erro inesperado.’);end; //bloco tryNo exemplo acima tratamos os erros com uma mensagem genérica dentro de umbloco try-except.14.2 A CONSTRUÇÃO ON-DOtry Abre(Arq); while not Fim(Arq) do processa(Arq);except on EInOutError do //erro de entrada e saída begin Showmessage(‘Problemas...’); Fecha(Arq); end; on EdivByZero do //erro de divisão de nº inteiro por zero Showmessage(‘Erro ao dividir por zero’); on EconvertError do //erro de conversão de tipos Showmessage(‘Erro de conversão de tipos de dados’);end; //bloco tryPodemos ainda definir utilizando a cláusula on-do com um handler genérico usandoelse, da seguinte forma:try Processa;except on Exceção1 do Trata1; on Exceção2 do Trata2; else TrataOutras;end;Os principais tipos de exceção da RTL (RunTime Library) do DELPHI, a seremtratadas nos blocos on ... do são:
  42. 42. 46 Nome Descrição EaccessViolation Ocorre quando se tenta acessar uma região de memória inválida (ex: tentar atribuir valor a um ponteiro cujo conteúdo é nil). EconvertError ocorre quando se tenta converter um string em um valor numérico (ex: utilizar a função StrToInt em uma letra). EdivByZero ocorre na divisão de um número inteiro por zero. EinOutError ocorre numa operação incorreta de I/O (ex: abrir um arquivo que não existe). EintOverFlow ocorre quando o resultado de um cálculo excedeu a capacidade do registrador alocado para ele (para variáveis inteiras). EinvalidCast ocorre quando se tenta realizar uma operação inválida com o operador as (ex: tentar usar um Sender com uma classe que não corresponde a seu tipo). EinvalidOp ocorre quando se detecta uma operação incorreta de ponto flutuante. EinvalidPointer ocorre quando se executa uma operação invalida com um ponteiro (ex: tentar liberar um ponteiro duas vezes). EoutOfMemory ocorre quando se tenta alocar memória mas já não existe mais espaço suficiente. EoverFlow ocorre quando o resultado de um cálculo excedeu a capacidade do registrador alocado para ele (para variáveis de ponto flutuante). ErangeError ocorre quando uma expressão excede os limites para a qual foi definida (ex: tentar atribuir 11 ao índice de um vetor que pode ir no máximo até 10). EstackOverflow ocorre quando o sistema não tem mais como alocar espaço de memória na Stack. Eunderflow ocorre quando o resultado de um cálculo é pequeno demais para ser representado como ponto flutuante. EzeroDivide ocorre quando se tenta dividir um valor de ponto flutuante por zero.14.3 O COMANDO TRY-FINALLYHá outro comando cuja sintaxe começa com try. Este controle de finalização nospermite lidar de forma estruturada com as situações em que alocamos algum tipo derecurso e, haja o que houver, precisamos depois liberá-lo. <aloca o recurso>try <usa o recurso>finally <libera o recurso com ou sem exceção>end;O comando funciona da seguinte forma: os comandos especificados após o Try sãoexecutados seqüencialmente. Se não ocorrer nenhuma exceção, os comandosespecificados após finally são executados, e o programa prossegue com a execução
  43. 43. 47normal, com o comando seguinte ao try-finally. Porém, se houver alguma exceção –qualquer uma – durante a execução da lista de comandos do try, o trecho após ofinally é executado e, no final, a exceção é reativada.Em resumo: Os comandos do bloco finally sempre são executados, haja ou nãoalguma exceção durante a execução dos comandos especificados após o try.14.4 CLASSES BÁSICAS Exceção EMathError EIntError EInOutError EAccessViolation Exceções de EInvalidOp EDivByZero Entrada/Saída EPrivilege EZeroDivide ERangeError EInvalidCast EStackOverflow EOverFlow EIntOv erFlow Exceções Typecast Exceções de EControlC Matemática de EUnderFlow Inteiros Exceções de Processador Exceções de EConvertError Ponto Flutuante EOutOfMemory Exceções de Conv ersão EAssertionFailed EVariantError EInvalidPointer Exceções de Exceções de Exceções de Asserção Variantes Pilha Figura 43 – Classes Básicas de Exceções14.5 BLOCOS TRY ANINHADOSBlocos try aninhados permitem maior versatilidade na construção de blocosprotegidos, lembrando que se a exceção ocorrer, os comandos inseridos em exceptserão executados. Já os comandos inseridos em finally serão executados havendoou não a ocorrência de erros.
  44. 44. 48Embora no próximo exemplo, não exista margem para exceções dentro do laçofor..do (a menos que seja digitado errado) podemos ter uma idéia de como criarblocos aninhados para garantir a execução de rotinas sujeitas a erros mais graves.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 método ProcessMessages é necessário para forçar 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-finallyend; //fim da procedure15 BANCO DE DADOSGrande parte dos sistemas desenvolvidos em Delphi, ou ferramentas visuais, tem anecessidade de comunicação com banco de dados. Um banco de dados pode serinterpretado de várias formas. Pode ser um arquivo único, pode ser um diretório comvários arquivos, etc.15.1 MODELAGEM DE DADOSExistem 3 modelos básico para a modelagem de dados que devemos abordarrapidamente antes de iniciarmos esta seção, são eles: Modelo Conceitual; ModeloLógico; Modelo Físico;Modelo Conceitual : Procura abstrair a realidade independente da plataforma dehardware e software.Modelo Lógico : Define as regras básicas na forma de como os dados devem serarmazenados no banco de dados.
  45. 45. 49Modelo Físico : Implementa a definição do modelo lógico.15.2 MODELO CONCEITUAL E LÓGICOA princípio vamos entender como podemos definir os dados que serão armazenadosem um computador, através do conceito de entidade.Ao pensarmos em cadastrar dados de clientes, alunos, fornecedores, etc... temosexemplos de entidades. A entidade possui propriedades que serão identificadoscomo os dados propriamente ditos, estas propriedades são chamadas de atributos.15.3 MODELO FISICONo modelo físico de dados, as entidades serão chamadas de tabelas e os atributosserão chamados de campos. A linha de dados que deriva do conjunto de camposchama-se registro.Nas entidades é necessário que haja um campo que seja capaz de identificar umúnico registro dentre todos existente, a este campo chamamos de chave primária.15.4 RELACIONAMENTOSPara os bancos de dados relacionais, definimos relacionamentos como sendo umaassociação entre um ou mais entidades. O relacionamento pode ser representadoatravés de cardinalidades, que são as regras de relacionamento entre as entidades.Existem 3 tipo de cardinalidades: 1:1 ; 1:N ; N : NO relacionamento 1:N ou N:1 é tipo mais comum de relacionamento utilizado, eledefine que a chave primária da entidade 1, deve ser adicionada na entidade N comochave estrangeira.Já o relacionamento N:N tem como regra a criação de uma 3ª tabela, onde aschaves primárias das entidades envolvidas no relacionamento, serão inseridas na 3ªtabela como chave estrangeira.16 CONEXAO DE BANCO DE DADOSO Delphi 2007 utiliza uma estrutura de camadas para fazer com que o front-end(formulário) manipulado pelo usuário venha interagir com a base de dados. Ocaminho deve ser percorrido por uma série de componentes configurados entre si,
  46. 46. 50porém, há uma camada intermediária que não fica dentro do ambiente Delphi, nemdiretamente preso ao banco, é o BDE.16.1 BDEO BDE, Borland DataBase Engine, é um conjunto de DLLs que deve acompanhar asaplicações que fazem uso de seus recursos de acesso ao banco. É nesta camadaque são definidas características específicas de cada banco de dados, bem comosua localização, ou seja, o front-end não acessa diretamente a base de dados, oBDE é responsável para estabelecer este funcionamento. Aplicação Delphi (Front-End) Borland DataBase Engine (BDE) Bancos de Dados Locais SQL Links Drivers ODBC Figura 44 – Esquema de Aplicação BDE16.2 COMPONENTES DE CONTROLE E ACESSOO sistema para conexão com o banco de dados utiliza além do BDE um conjunto decomponentes denominados: Session, DataBase, DataSet, DataSource e Data-Aware. O componente Session não será o foco de nosso estudo.Uma visão ‘geral’ sobre estes componentes pode ser vista da seguinte maneira: Session DataBase DataSet DataSource Data-Aware Figura 45 – Visão Geral dos Componente  Session: Aplicações simples trabalham com apenas um banco de dados. Porém o Delphi permite mais de uma conexão simultânea à bancos de dados
  47. 47. 51 distintos, e também mais de uma conexão com o mesmo banco de dados. O controle global das conexões é feito através do componente da classe TSession, criado automaticamente pelo Delphi na execução do programa. Esse componente representa a sessão default da aplicação.  DataBase: O componente DataBase é responsável pela conexão da aplicação a um banco de dados com a finalidade maior de implementar segurança (transações) e definir características de comunicação entre uma aplicação Delphi-Client/Server. Embora em aplicações locais, sua utilização explicita é recomendada.  DataSet: Existem três componentes que descendem de uma classe chamada TDataSet e implementam importantes métodos de manipulação de banco de dados além de suas características específicas. De fato, não utilizamos a classe TDataSet diretamente, mas através dos componentes TTable, TQuery(SQL) e TStoreProc. Estes componentes estão na paleta BDE  DataSource: O componente DataSource é responsável por conectar os componentes Data-Aware à uma determinada tabela representada pelo DataSet. Este componente está na paleta DataAccess.  Data-Aware: Os componentes Data-Aware são responsáveis pela visualização e manipulação direta dos dados. Todo componente Data-Aware tem uma propriedade para conectar-se ao DataSource correspondente à tabela destino. Estes componentes estão na paleta DataControls.ExemploVamos exemplificar a utilização de componentes básicos de acesso e controleatravés de um exemplo baseado em uma tabela (arquivo de dados) já pronta, criadana instalação do Delphi. O objetivo é entendermos o funcionamento destescomponentes.  Crie uma nova aplicação e salve-a na pasta especificada pelo instrutor. A unit : UFrmPeixes
  48. 48. 52 Projeto: Peixes  Insira dois componentes: Um DataSource e um Table. Configure suas propriedades de acordo com a orientação abaixo: Object : Table : TTable Name: TbPeixes; DatabaseName = DBDEMOS TableName = biolife.db Active = True Object: DataSouce : TDataSource Name = DsPeixes; AutoEdit = False DataSet = TbPeixes  Insira um componente DBGrid e configure-o: object DBGrid1: TDBGrid Align = alBottom DataSource = DsPeixes  Insira um componente DBImage e configure-o: object DBImage1: TDBImage DataField = Graphic DataSource = DsPeixes Stretch = True  Insira um componente DBMemo e configure-o: object DBMemo1: TDBMemo DataSource = DsPeixes DataField = Notes  Insira um componente DBNavigator e configure-o: object DBNavigator1: TDBNavigator DataSource = DsPeixesUma sugestão do visual pode ser aseguinte:Podemos perceber que a aplicaçãofunciona manipulando a tabela
  49. 49. 53´biolife.DB´ sem a necessidade de nenhuma linha de código explícita.É claro que este é apenas um exemplo para entendermos o mecanismo decomponentes de acesso e controle. Desse modo, veremos a seguir que linhas decódigo serão necessárias para implementar funcionalidades específicas (pesquisas),ou mesmo básicas como inclusão, edição e remoção.Por último, vamos personalizar o componente DBGrid para não exibir os camposGrafic e Notes (campos BLOB). Pode-se usar a propriedade Columns ou um duploclique no componente DBGrid, O Editor de colunas é exibido, clique no ícone AddAll Fields; os campos disponíveis serão exibidos, selecione o campo desejado Figura 46 – Dados de Biolife(Grafic) e clique em Delete Selected Figura 47 – Editando Colunas Figura 48 – Eliminando um Campo  Salve novamente e execute a aplicação.16.3 OBJETOS TFIELDVamos criar uma outra aplicação e exemplificar um recurso muito importante naconstrução de aplicações baseadas em banco de dados, os campos persistentes.  Crie uma nova aplicação e salve-a na pasta especificada pelo instrutor. Os nomes podem ser: O Formulário: UFrmPaises Projeto: Paises  Insira dois componentes: Um DataSource e um Table. Configure suas propriedades de acordo com a orientação abaixo:
  50. 50. 54  Agora, ao invés de colocarmos componentes data-aware (paleta DataControls) diretamente no form, vamos definir os campos persistentes através de um duplo clique componente Table surgirá o editor de campos(Fields Editor).Clique com botãodireito no editor e escolhaAdd all fields.A partir de agora, cadacampo na tabela éconsiderado um objetoTField com suaspropriedades individualizadas na Object Inspector.Mas, o melhor de tudo é o fato de podermos arrastar os campos TField diretamentepara o formulário, e perceber que o Delphi se encarrega de construir o componentedata-aware necessário a cada campo.Isso realmente poupa muito tempo no desenvolvimento de aplicações em banco dedados. Porém há a possibilidade de criar aplicativos que utilizem acesso à bancosem data-aware.  Insira um componente DBNavigator e configure-o: object DBNavigator1: TDBNavigator DataSource = DsPaises endUma sugestão para a disposição dos componentes pode ser:
  51. 51. 55 Figura 49 – Cadastro de Paises  Salve novamente e execute a aplicação.16.4 BDE – CRIAÇÃO DO ALIASVamos explorar com mais detalhes o conceito e funcionamento da camada BDE. OBDE é instalado junto com o Delphi. Execute o programa e examine a tela inicial.A tela é dividida em duas partes básicas: A listagem de Aliases do lado esquerdo eas configurações de cada Alias no lado direito.Um conceito importantíssimo é a definição de Alias. Cada nome do lado esquerdodo BDE representa uma configuração para acesso a um determinado banco.Exemplo: O Alias BDDEMOS representa o diretório C:Arquivos deprogramasArquivos comunsBorland SharedData, o driver para acesso ao de banco(Paradox) entre outras configurações.Dessa maneira o desenvolvedor utiliza o nome DBDEMOS dentro do Delphi, porémo diretório pode ser alterado no BDE sem maiores problemas. O Alias é uma stringque define o path e configurações para acesso ao banco de dados.
  52. 52. 56 Figura 50 – Borland DataBase EnginePara criar um alias:  Clique no menu Object e escolha New. (CTRL+N).  Confirme o tipo de driver;  Defina um nome para o Alias (lado esquerdo).  Defina o path através do botão reticências.  Clique no menu Object e escolha Apply, para confirmar as alterações.  Confirme a gravação.Note que já janela de ferramentas ( tool palette), há uma área específica paracomponentes que acessam o banco de dados através do BDE.16.5 COMPONENTE ADO - ACTIVEX DATA OBJECTSUma outra forma de fazer com que sua aplicação possa acessar um banco de dadosé através de componentes ADO, que permite o acesso direto ao banco de dadossem a utilização do BDE.Abaixo temos um pequeno aplicativo que acessa um banco de dados SQL utilizandoo componente ADO que no Delphi 2007 encontra-se na paleta dbGO.
  53. 53. 57 Figura 51 – Paleta dbGoComo o objetivo do exemplo é mostrar a funcionalidade dos componentes ADO,será utilizado apenas um formulário, um dbgrid e um DataSet, componentes estes jáconhecidos de capítulos anteriores. Utilizaremos os seguintes componentes dapaleta dbGo: TAdoConnection; TAdoTable.TAdoConnection: Permite a conexão da aplicação diretamente com o banco dedados.TAdoTable : é utilizado para acessar as tabelas do banco de dados. Figura 52 – Componentes AdoSelecione o componente AdoConnection1 e clique no botão ... da propriedadeconnectionstring na Object Inspector e aparecerá aseguinte tela:
  54. 54. 58 Figura 53 – Criando Conexão AdoA propriedade connectionstring é utilizada para informar ao Delphi todas as diretivasque serão utilizadas pelo banco de dados. Para definirmos a string de conexão,clique no botão Build... e aparecerá a seguinte tela: Figura 54 – Escolhendo tipo de Base de DadosA janela acima se refere ao link de dados que será utilizado pela aplicação. Existemdiversos Links de Dados conforme mostrado na figura acima.O link de dados que utilizaremos para este exemplo é o Microsoft OLE DB Providerfor SQL Server, que permite a conexão da aplicação com dados do banco SQLServer. Em seguida clique no botão next >>
  55. 55. 59 Figura 55 – Selecionando ServidorNa guia Connection, será especificado no item 1 o nome do servidor de dados ondeestá instalado o SQL. No item 2, será especificado as informações sobre o tipo delogon que será realizado no BD, caso o BD tenha uma senha de acesso definida énecessário informar o nome do usuário e o senha de acesso, caso contrário épossível realizar o acesso ao banco apenas utilizando a integridade de segurança doServidor. Figura 56 – Selecionando UsuárioO item 3, será selecionado especificamente qual o bando de dados que você iráacessar.
  56. 56. 60É possível ainda verificar se as configurações realizadas foram bem sucedidasatravés do botão Test Connection e em seguida clique OK. Figura 57 – Exibição dos Dados da TabelaNote que em nenhum momento foi feito a utilização do BDE.É possível ainda utilizar os componentes ADO juntamente com drivers ODBC, quepermite você acessar outros tipos de bancos de dados.17 APLICAÇÃO DE BANCO DE DADOSPara aplicarmos tudo o que vimos até agora vamos desenvolver um pequeno projetode banco de dados aplicando todos os passos básicos de desenvolvimento desde aconstrução das tabelas até a geração de relatórios.Primeiramente vamos criar a estrutura de banco de dados abaixo utilizando oInterBase e em seguida criar um Alias apontando para o banco. Setor Dependente Setor_ID: INTEGER Dependente_ID: INTEGER Matricula: CHAR(18) (FK) Descricao: VARCHAR(100) Local: VARCHAR(25) Nome: VARCHAR(100) Sexo: CHAR(1) GrauParentesco: VARCHAR(20) Funcionario Matricula: CHAR(18) Nome: VARCHAR(100) Sexo: CHAR(1) Endereco: VARCHAR(150) Email: VARCHAR(150) Cidade: VARCHAR(50) Estado: VARCHAR(25) Salario: FLOAT Setor_ID: INTEGER (FK) Figura 58 – Esquema de Banco de Dados 1
  57. 57. 61Após a estrutura de bando de dados criada, o passo seguinte é abrir o Delphi 2007 esolicitar uma Nova aplicação clicando no menu File|New|VCL Forms Applications –Delphi for Win32 e salve-a dentro de uma pasta empresa, sendo a unit com o nomeufrmPrincipal e o projeto com o nome de Empresa.No formulário principal, adicione o componente MainMenu com os seguintes itens: Figura 59 – Menu de Opções17.1 DATA MODULEA definição dos componentes de acesso aos dados será centralizada em umformulário especial chamado Data Module. Este formulário tem uma característicabem específica: é um form invisível e só recebe componentes invisíveis, ou seja, ousuário nem vai imaginar que o DataModule e os componentes que ele recebe estãona aplicação. A sua finalidade é centralizar os componentes para que qualquerformulário possa ter acesso aos dados, sem a necessidade de repetir oscomponentes de acesso em cada formulário. Para criar formulário DataModule,clique em File|New|Other|Delphi Files. Figura 60 – Adicionando Novo Item
  58. 58. 62Salve o novo formulário com o nome de UFrmDmEmpresa e insira trêscomponentes: um DataBase, Table ( Paleta BDE ) e DataSource (PaletaDataAccess). Figura 61 – DataModuleConfigure as propriedades como abaixo:Object DataBase : TDataBase;Connected : False;Name : ConexaoAliasName: EmpresaDataBaseName: dbEmpresa;Object Table : TTable;DataBaseName: tbEmpresa;TableName: Setor;Name: tbSetor;Object DataSource: TDataSource;Name: dsSetor;DataSet: tbSetor;17.2 FORMULÁRIO DE CADASTRO DE SETORAdicione um novo formulário a aplicação e insira 2 componentes Panel, onde umterá alinhamento na parte inferior (alBottom) e outro na área cliente (alClient).Salve o formulário com o nome FrmCadSetor e a propriedade name do form seráFrmCadSetor.Uma característica importante na construção de aplicações utilizando banco dedados é a possibilidade de trabalharmos com campos TFIELD exemplificadosanteriormente, ou seja, campos que são considerados como objetos dentro daaplicação, sendo assim estes campos possuem propriedades e eventos individuaisatravés da object inspector ou por atribuições manipulando código.Vamos explorar um pouco mais da funcionalidade deste recurso. Campos TFIELDsão chamados de campos persistentes e sua criação é extremamente simples.
  59. 59. 63  No DataModule, localize o objeto Table referente à tabela desejada.  Um duplo clique no objeto Table, exibirá a janela de manipulação dos campos  Um clique dentro da janela com o botão direito exibirá o speed menu.  Escolha a opção Add All Fields. Figura 62 – Field EditorApós a criação dos campos persistentes, pode-se selecioná-lo e verificarpropriedades específicas na Object Inspector. As propriedades serão diferentesdependendo do tipo de dados do campo, neste exemplo um tipo TStringField. Figura 63 – Exibindo Propriedades do campo TField
  60. 60. 64Mas o melhor está para vir. Posicione a janela dos campos persistentes em um ladoda tela e com o formulário FrmCadSetor (criado anteriormente) visível, selecione oscampos e arraste-os para dentro do Form. Uma pergunta do tipo: Figura 64 – Confirmação de Referência entre FormuláriosSerá exibida. Confirme com Yes, ou seja, o Delphi está questionando se noformulário ‘FrmCadSetor’ deve haver uma referência ao formulário ‘DmEmpresa’(DataModule). Ao confirmar o Delphi adiciona uma referência no Code Editor daunidade UFrmCadSetor na seguinte estrutura:implementationuses UDMEmpresa;Pode-se fechar o editor de campos persistentes. Uma diferença visual que temdestaque agora são os controles de manipulação de dados que foram inseridosautomaticamente pelo Delphi. Figura 65 – Tela de cadastro Versão 1Embora se pareçam com um componente já visto anteriormente (Edit) estescomponentes são provenientes da paleta Data Controls e tem o nome de DBEdit, ouseja, um controle específico para manipulação de dados provenientes de um banco
  61. 61. 65de dados. Já nos referimos a estes controles nos primeiros exemplos do capítuloanterior.DBEditDataSource Permite ‘conectar’ o controle à fonte de dados.DataField Permite especificar um campo da tabela referenciada em DataSource.Insira um componente DBNavigator e modifique suas propriedades: object DBNavigator1: TDBNavigator DataSource = DmEmpresa.DsSetor VisibleButtons = [nbFirst, nbPrior, nbNext, nbLast] endInsira seis componentes BitBtn, e configure apenas as propriedades Name, Captione Glyph. Uma sugestão visual pode ser vista a seguir: Figura 66 – Tela de Cadastro Finalizada17.3 MÉTODOS E PROPRIEDADES PARA MANIPULAÇÃO DE DADOSPara percorrer os registros de uma tabela podemos utilizar os seguintes métodos:First Move o cursor para o primeiro registro do dataset.Prior Move o cursor para o registro anterior (se houver).Next Move o cursor para o próximo registro (se houver).Last Move o cursor para o último registro do dataset.MoveBy(N) Move o cursor para frente ou para trás, conforme o valor do parâmetro N, que é um valor inteiro, positivo ou negativo.Para controlar o início e fim da tabela podemos utilizar as propriedades:BOF : Boolean Begin Of File. Indica True se o cursor estiver no primeiro registro da tabela.EOF : Boolean End Of File. Indica True se o cursor estiver no último registro da tabela.

×