delphi 2005 - básico

Upload: alexandre-silva-oliveira

Post on 31-Oct-2015

267 views

Category:

Documents


2 download

TRANSCRIPT

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 1 de 272

    Capitulo I Definies

    Sistema Operacional: Conjunto de pequenos softwares capazes de controlar as diversas funes de um hardware.

    Exemplos: WINDOWS, LINUX, DOS, UNIX... etc

    Linguagem: Conjunto de cdigos capazes de descrever uma ao a ser realizada por um processador ou sistema computacional.

    Linguagem estruturada: toda linguagem onde as linhas de comando seguem uma seqncia lgica continua ou em rotinas interligadas entre si.

    Exemplos: CLIPPER, BASIC, FORTRAN, NATURAL, C... etc

    Linguagem orientada a objeto: a linguagem onde se utilizam formas grficas (Objetos) com caractersticas prprias e independentes, capazes de realizar um procedimento atravs de uma ao que assim o determine.

    Exemplos: DELPHI, VISUAL BASIC,... etc

    Constantes: So informaes que possuem um valor predefinido, que no se altera durante um processo.

    As constantes podem ser classificadas em numricas ou alfanumricas tambm conhecidas como strings:

    Exemplo Constante Tipo CaractersticaA:=5 5 Numrica Aceita clculos numricosA:= B*30 30 Numrica Se apresenta sempre fora de aspasA:=Delphi Delphi String Se apresenta sempre entre aspasA:=Delphi +2005 Delphi e 2005 String Aceita clculos lgicos

    Variveis: So posies definidas na memria e reservadas para guardar dados ou resultados de clculos.

    As variveis podem ser:

    Tipo Descrio ExemploVariant Assume qualquer valor V1: Variant;Integer Assume um valor inteiro I: Integer;Real ou Doubl Assume um valor real D: Double;String Assume um valor string (alfa-numrico) S: string;Boolean ou Lgico Assume um valor lgico B:Boolean;

    Com exceo das variveis do tipo variant, toda varivel possui uma faixa de abrangncia para guardar valores, dependo a capacidade de armazenamento a varivel pode ser:

    Varivel Integer Faixa de abrangncia FormatoDe At Sinal BitsInteger/Longint -2.147.483.648 2.147.483.647 Positivo/Negativo 32Longword/Cardinal 0 4.294.967.295 Positivo 32Byte 0 255 Positivo 8Int64 -263 2631 Positivo/Negativo 64Shortint -128 128 Positivo/Negativo 8Smallint -32.768 32.767 Positivo/Negativo 16Word 0 65.535 Positivo 16

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 2 de 272

    Varivel Real ou Doubl

    Faixa de abrangncia FormatoDe At Dgitos Bits

    Real -5 * 10324 1,7 * 10308 1516 64Real48 -2,9 *1039 1,7 * 1038 1112 48Single -1,5 * 1045 3,4 * 1038 78 32Doubl -5 * 10324 1,7 * 10308 1516 64Extended -3,6 * 104951 1,1 * 104932 1920 80Comp -263 + 1 263 - 1 1920 64Currency -9 * 1018 9 * 1018 1920 64

    Varivel String Faixa de abrangncia Memria ocupadaChar 1 caracter 1 byteString / ShortString 255 caracteres De 2 at 256 bytesAnsiString Aproximadamente 231 caracteres De 4 bytes at 4 gigabytesWideString Aproximadamente 230 caracteres De 4 bytes at 4 gigabytes

    Varivel Lgica

    Faixa de valores FormatoVerdadeiro False Tipo associado Bits

    Boolean 1 0 Byte 8ByteBool Diferente de 0 0 Byte 8WordBool Diferente de 0 0 Word 16LongBool Diferente de 0 0 Integer/Longint 32

    As variveis sero sempre representadas por letras, podendo ou no, serem seguidas por outras letras ou nmeros e nunca estaro entre de aspas.

    Exemplos:Nome:String;A1:Integer;Preo_de_custo:Currency.

    Operadores: So smbolos ou expresses capazes de gerar um clculo lgico ou aritmtico.

    Os operadores so classificados segundo seu clculo, podendo ser:

    Atribuio: Atribuir valores a uma varivel ou propriedade de um objeto; Aritmtico: Efetuam clculos aritmticos; Lgicos: Efetuam clculos lgicos; Relacionais: Efetuam clculos relacionais; Set: So operadores predefinidos em funes; ou @ retorna o endereo de uma varivel, funo, procedimento ou mtodo.

    Operadores de atribuio:

    Operador Exemplo: Varivel:Integer

    Operadores aritmticos:

    Operador Operao Tipo do operando Tipo Resultante Exemplo+ Adio Inteiro, real Inteiro, real X + Y- Subtrao Inteiro, real Inteiro, real Result - 1* Multiplicao Inteiro, real Inteiro, real P * 45/ Diviso Inteiro, real Real X / 2

    Div Inteiro da diviso Inteiro Inteiro Total div x

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 3 de 272

    Mod Resto da diviso Inteiro Inteiro Y mod 6

    Observao: O operador + quando utilizado com dados string provocar a concatenao destes.

    Exemplo: A,B,C:String;A:= Curso de ;B:=Delphi;C:=A+B;

    C resulta em Curso de Delphi.

    Operadores lgicos:

    Operador Operao Tipo do operando Tipo Resultante ExemploNot negao Boolean Boolean not (C in MySet)And conjunco Boolean Boolean D and (T > 0)Or disjuno Boolean Boolean A or BXor disjuno exclusiva Boolean Boolean A xor B

    Operadores set:

    Operador Operao Tipo do operando Tipo Resultante Exemplo+ unio set set Set1 + Set2- diferena set set S - T* interseco set set S * T

    desigualdade set Boolean MySet S1>= superset set Boolean S1 >= S2Y

    < menor que simple, string, packed string, PChar

    Boolean X= maior ou igual simple, string, packed string, PChar

    Boolean X>=Y

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 4 de 272

    As rotinas visam dividir um aplicativo em pequenas partes capazes de transcrever e executar uma tarefa especfica, como exemplo, suponha que uma distribuidora de livros resolva controlar seus pedidos s editoras e o volume de livros repassados aos seus clientes e para facilitar este trabalho, resolve dividi-lo em sees:

    Seo Funes Rotinas

    Compras1Identificar as editoras 1-Cadastro de editoras2-Identificar os livros das editoras 2-Cadastro de livros3-Escolher os livros e comprar 3-Entrada dos livros

    Vendas 1-Identificar os clientes 1-Cadastro de clientes2-Separar e entregar os livros escolhidos 2-Sada dos livros

    Procedimento: cada uma das aes realizadas por uma rotina:

    Exemplo:

    Rotina Procedimentos

    Cadastro de editoras

    1. Verificar se editora j foi cadastrada2. Se no foi cadastrada, ento pegar uma nova ficha3. Transcrever os dados da editora para a ficha4. Confirmar a veracidade dos dados5. Se dados conferem ento colocar a ficha no arquivo.

    Comandos: So termos, palavras reservadas, que servem para transcrever os procedimentos humanos aplicados a uma rotina para linguagem compreendida pelo computador.

    Estruturas: So comandos que dispostos em certa ordem executam uma funo comum. Geralmente as estruturas apresentam um incio e um fim e dentre estes so descritos procedimentos.

    As estruturas podem ser classificadas em:

    1) Estrutura de bloco: a estrutura que controla o projeto e cada procedimento nele descrito, determinando seu incio e fim. O bloco tambm pode conter declaraes de constantes, tipos, variveis, procedimentos, e funes; estas declaraes tm que preceder a parte de declarao do bloco.

    2) Estruturas de deciso: Provocam desvios no fluxo do projeto de acordo com a entrada fornecida pelo usurio ou resultante de um clculo.

    3) Estruturas de loop ou lao: Provocam a repetio de um ou vrios procedimentos de acordo com uma condio previamente descrita.

    4) Estruturas consecutivas: Executa uma sucesso de declaraes constituintes.5) Estruturas de exceo: Desvia o fluxo do projeto quando ocorre um erro na execuo normal

    de um programa ou outro evento a interrompa.

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 5 de 272

    Capitulo II Componentes bsicos da orientao a objetos

    Classe: So moldes atravs dos quais criamos objetos.

    Exemplo:

    type TFprincipal = class(TForm) Panel1: TPanel; Label1: TLabel; Label2: TLabel;

    Objeto: Abstrao que agrupa caractersticas e comportamentos.

    Exemplo:

    object BitBtn1: TBitBtn Left = 168 Top = 240 Width = 199 Height = 31 Caption = '&Confirmar e encaminhar' TabOrder = 4 OnClick = BitBtn1Click Glyph.Data = {76060000424D}End;

    Instncia: o objeto propriamente dito. Possui caractersticas prprias.

    Propriedade: Define as caracterstica dos objetos de uma classe.

    Exemplo:

    Mtodo: Define o comportamento dos objetos de uma classe.

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 6 de 272

    Mensagem: Representa uma ao do objeto ou uma mudana de estado. Define a comunicao entre objetos.

    Interface: Conjunto de mensagens que define o comportamento de um objeto (Protocolo).

    Evento: um gatilho que quando disparado pelo usurio realiza um procedimento.

    Exemplo: (Evento OnClick do objeto Button1 montado sobre o formulrio Form1)

    procedure TForm1.Button1Click(Sender: TObject);begin Form1.Color:=clYellow;end;

    Procedimento: a ao a ser realizada aps o disparo de um evento.

    Exemplo: (Procedimento disparado pelo evento OnClick do objeto Button1)

    procedure TForm1.Button1Click(Sender: TObject);begin Form1.Color:=clYellow; end;

    Tempo de Projeto: o tempo utilizado pelo desenvolvedor durante a confeco do projeto.

    Tempo de Execuo: o tempo utilizado pelo usurio final para execuo do projeto aps o trmino da sua confeco ou pelo desenvolvedor para realizao de testes.

    Capitulo III Apresentao do Delphi 2005

    Tela de Abertura

    Mdulos carregados

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 7 de 272

    VCL Form Application for WIN 32

    Menu Principal

    Barra de Ferramentas

    Caixa de Estrutura

    Object Inspector

    Pgina de Cdigos

    Gerente do projeto

    Paleta de objetos

    Formulrio

    Barra de status

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 8 de 272

    Object Inspector: a conexo entre o a parte visual (Form) e a parte codificada (Unit) de sua aplicao.

    No Object inspector encontram-se duas abas: Propriedades (Properties) e eventos (Events), onde a primeira determina as caractersticas do objeto selecionado e a segunda indica quais so os eventos suportados por este objeto. Alm das abas encontra-se uma outra regio indicativa do nome e da classe do objeto selecionado.

    Caixa de estruturas (Structure): a regio do DELPHI onde se apresentam todos os objetos dispostos em um formulrio (Form).

    A Paleta de Componentes: a principal barra de ferramenta, pois contem barras que classificam e guardam os componentes (objetos) que sero utilizados durante o desenvolvimento de projetos em Delphi.

    Os componentes contidos nas abas da paleta de componentes so alvos de nosso estudo, portanto, sero apresentados conforme sua necessidade nos captulos a seguir.

    Boto minimizar

    Boto fechar

    Caixa de seleo de objetos

    Paleta de propriedades

    Paleta de eventos

    Boto minimizar

    Boto Fechar

    Mover para baixo

    Mover para cima

    Excluir objeto

    Incluir objeto

    Objetos

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 9 de 272

    Gerente do projeto (Project Manager): Mostra todo o projeto disposto em forma de rvore permitindo acesso a pgina de cdigos ou formulrio, bem como permite a localizao de objetos, procedimentos e funes contidas no projeto.

    Boto minimizar

    Boto fechar

    Boto filtrar

    Boto desfazer seleo

    Boto habilitar/desabilitar categoria

    Categoria selecionada

    Objetos da categoria

    Boto minimizar

    Boto minimizar

    Seleciona projeto

    Inclui nova unit/form ao projeto

    Remove unit/form do projeto

    Unit/form do projeto

    Modelo do projeto

    Explorador de base de dados

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 10 de 272

    O Formulrio:

    Form: O mesmo que formulrio, a regio onde sero dispostos os objetos, nas linguagens estruturadas representariam a tela do projeto.

    Unit: a regio onde se escrevem os procedimentos, a parte estrutural do Delphi tambm chamada de pgina de cdigos.

    Barra de rolagem

    Linhas de cdigos

    Mostra a unit

    Mostra o form

    Mostra o histrico

    Tecla insert

    Nmero da coluna

    Nmero da linha

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 11 de 272

    Estrutura de uma Unit:

    Unit ;Interface{Especifica o que ser exportado pela UNIT a fim de ser utilizados por outros mdulos}

    [uses ;]

    Implementation{Declarao de Variveis, Constante e tipos locais a UNIT e Implementao dos mtodos.

    [uses ;]

    [Initialization {Cdigo executado automaticamente quando um aplicativo que utiliza a UNIT executado}]

    [Finalization{Cdigo executado automaticamente quando um aplicativo que utiliza a UNIT finalizado}]

    end.

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 12 de 272

    Capitulo IV Os primeiros contatos

    Para entender o funcionamento de uma linguagem orientada a objeto, imagine a seguinte proposio:

    - Em uma rua movimentada foi colocado um semforo para controlar o trfego de veculos e prximo a este existe uma cabine de onde um agente o trnsito determina o momento em que as luzes devero ser acesas.

    - Assim de acordo com o boto pressionado pelo agente de uma determinada luz do semforo ascende e as demais apagam.

    - Podemos ento dizer que cada boto um objeto utilizado pelo agente, da mesma forma, o semforo tambm pode ser considerado como objeto.

    - Se o semforo um objeto ento ele possui algumas propriedades, por exemplo: o semforo possui luzes que podem ascender em

    cores distintas desse modo cor seria uma propriedade do semforo e a cor acessa seria sua caracterstica. Resumindo temos:

    Objeto Evento Procedimento Boto Verde Clicar Cor do semforo = VerdeBoto Amarelo Clicar Cor do semforo = AmareloBoto Vermelho Clicar Cor do semforo = Vermelho

    Prtica 01: O primeiro projeto

    Objeto Propriedade Evento ProcedimentoButton1 Caption = Verde OnClick Panel1.Color:=clgreen;Button2 Caption = Amarelo OnClick Panel1.Color:=clyellow;Button3 Caption = Vermelho OnClick Panel1.Color:=clred;

    Uma vez montado o projeto pressione ou F9 para execut-lo.

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 13 de 272

    Prtica 02: Alterando algumas propriedades do formulrio.

    Para alterar a cor, propriedade color, usaremos os botes 1, 2 e 3, conforme descrito a seguir:

    Objeto Propriedade Evento ProcedimentoButton1 Caption = Amarelo OnClick Form1.Color:=clyellow;Button2 Caption = Verde OnClick Panel1.Color:=clgreen;Button3 Caption = Vermelho OnClick Panel1.Color:=clred;

    Para alterar a largura, propriedade height, usaremos os botes 4 e 5, conforme descrito a seguir:

    Objeto Propriedade Evento ProcedimentoButton4 Caption = Mais Largo OnClick form1.Height:=form1.Height+1;Button5 Caption = Menos Largo OnClick form1.Height:=form1.Height+1;

    Para alterar o comprimento, propriedade width, usaremos os botes 6 e 7, conforme descrito a seguir:

    Objeto Propriedade Evento ProcedimentoButton6 Caption = Mais Largo OnClick form1.Width:=form1.Width+1;Button7 Caption = Menos Largo OnClick form1.Width:=form1.Width-1;

    Para alterar a altura, propriedade top, usaremos os botes 8 e 9, conforme descrito a seguir:

    Objeto Propriedade Evento ProcedimentoButton8 Caption = Mais Alto OnClick form1.Top:=form1.Top-1;Button9 Caption = Mais Baixo OnClick form1.Top:=form1.Top+1;

    Uma vez montado o projeto pressione ou F9 para execut-lo.

    Prtica 03 - Exerccio 01: O objetivo dessa prtica alterar algumas propriedades do objeto TPanel, clicando sobre os botes.

    Complete a tabela e escreva os procedimentos conforme o formulrio a seguir:

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 14 de 272

    Formulrio:

    Objeto Propriedade Valor Evento ProcedimentoButton1 Caption OnClickButton2 Caption OnClickButton3 Caption OnClickButton4 Caption OnClick

    Capitulo V Estruturas

    Estrutura um conjunto de aes interligadas entre si contendo um comando que caracteriza o seu incio e um outro seu fim as estruturas controlam todo o projeto, provocam tomadas de decises, controlam repeties, deviam o fluxo do projeto e controlam as possveis excees.

    As estruturas podem ser classificadas em:

    6) Estrutura de bloco: a estrutura que controla o projeto e cada procedimento nele descrito, determinando seu incio e fim. O bloco tambm pode conter declaraes de constantes, tipos, variveis, procedimentos, e funes; estas declaraes tm que preceder a parte de declarao do bloco.

    7) Estruturas de deciso: Provocam desvios no fluxo do projeto de acordo com a entrada fornecida pelo usurio ou resultante de um clculo.

    8) Estruturas de loop ou lao: Provocam a repetio de um ou vrios procedimentos de acordo com uma condio previamente descrita.

    9) Estruturas consecutivas: Executa uma sucesso de declaraes constituintes.10) Estruturas de exceo: Desvia o fluxo do projeto quando ocorre um erro na execuo normal

    de um programa ou outro evento a interrompa.

    a) Estrutura de bloco:

    Esta estrutura sempre composta pelos comandos Begin ... End, onde o primeiro determina o incio da estrutura e o segundo o seu fim.Um ponto e vrgula aps um comando indicam que ainda existem comandos ou declaraes pertencentes a estrutura, porm quando o comando End sucedido do ponto e vrgula indica o fim da estrutura.O uso do ponto ao final aps o End, indica o fechamento do projeto.

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 15 de 272

    Exemplo 01:

    Para entender a estrutura de bloco tomemos como exemplo um fato cotidiano de acordar, pegar o carro e ir at o trabalho.

    Inicio Rotina despertar; Inicio Acordar; Forrar a cama; Sair do quarto; Fim; Rotina asseio; Inicio Escovar os dentes; Tomar banho; Fim; Rotina alimentao; Inicio; Preparar a comida; Sentar a mesa; Comer; Fim; Rotina trabalhar; Inicio; Pegar o carro; Ir ao trabalho; Desligar o carro; Trabalhar; Fim;Fim.

    Exemplo 02:

    Somar 02 nmeros e mostrar o resultado:

    Rotina somar dois nmeros;Declarar A,B,C como variveis numricas;Inicio Perguntar qual o primeiro nmero; Ler o nmero e guardar em A; Perguntar qual o segundo nmero; Ler o nmero e guardar em B; Fazer C = A + B; Mostrar C;Fim;

    Prtica 04:Baseado no exemplo 02, montaremos um projeto para somar dois nmeros inteiros.

    Objeto Propriedade Valor Evento ProcedimentoForm1 Caption Soma de dois nmerosLabel1 Caption Primeiro nmero:Label2 Caption Segundo nmero:Label3 Caption Resultado:Edit1 Text Vazio (null) OnKeyPres

    sEdit1KeyPress

    E s t r u t u r a P r i n c p a l

    E s t r u t u r a s S e c u n d r i a s Estrutura bloco

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 16 de 272

    Edit2 Text Vazio (null) OnKeyPress

    Edit2KeyPress

    Button1 Caption Soma OnClick Button1Click

    Formulrio:

    Procedimentos:

    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);begin if not (key in ['0'..'9']) then key:=#0;end;

    procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);begin if not (key in ['0'..'9']) then key:=#0;end;

    procedure TForm1.Button1Click(Sender: TObject);var A,B,C:integer;begin A:=strtoint(edit1.Text); B:=strtoint(edit2.Text); C:=A+B; Label3.Caption:='Resultado:'+inttostr(C);end;

    Comentrios:

    Pratica 05 Exerccio 02: Monte um projeto capaz de calcular a mdia aritmtica entre 4 nmeros inteiros quaisquer.

    Varivel KeyTipo caracterGuarda a tecla pressionada

    Verifica se a tecla pressionadaEst entre 0 e 9

    Variveis A, B e C do tipo inteira

    A funo strtoint(string):integer;Converte um valor string em um valor inteiro

    A funo inttostr(integer):string;Converte um valor inteiro em um valor string

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 17 de 272

    Condies propostas: Deve-se travar o teclado evitando-se a digitao de caracteres no numricos.

    b) Estruturas de deciso:

    Muitas vezes em um projeto o processador precisa decidir entre dois ou mais valores, para tanto o desenvolvedor dever dirigir o fluxo do projeto de acordo com a entrada fornecida pelo usurio ou resultante de um clculo.

    As estruturas de deciso utilizam operadores relacionais, podendo tambm fazer uso de operadores lgicos.

    As estruturas de decises podem ser classificadas em:

    Estrutura de deciso nica, utilizam a estrutura If...then...Else; Estrutura de deciso mltipla, utiliza a estrutura Case...Else...End;

    - Estrutura If ... Then ... Else: (Se... Ento... Seno...)

    Na estrutura If ... Then ... Else a deciso nica e quando for verdadeira os comandos que estiverem aps o Then sero executados, enquanto os comandos que estiverem aps o else sero desprezados. Caso a condio seja falsa os comando existente aps o then sero desprezados sendo executados apenas os comandos que estiverem aps o Else.

    Para entender melhor esta estrutura de deciso imagine um interruptor de uma lmpada.Quando o interruptor fechado permite a passagem da corrente eltrica, acendendo a lmpada e quando ele aberto, interrompe-se a passagem da corrente eltrica e a lmpada no acende.

    Assim:

    Incio

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 18 de 272

    Indique a posio do interruptor; Se a posio o interruptor fechada ento A lmpada est acessa Seno A lmpada est apagadaFim

    Pratica 06: Acendendo uma lmpada:

    Baseado na explicao acima monte o seguinte projeto.

    Formulrio:

    Objeto Propriedade Valor Evento ProcedimentoForm1 Caption Pratica 06Panel1 Caption Vazio (null)Panel1 Color clBlackRadioGroup1 Caption Interruptor OnClick RadioGroup1Click

    RadioGroup1 Items Acender a lmpadaApagar a lmpadaRadioGroup1 ItemIndex 1

    Procedimentos:

    procedure TForm1.RadioGroup1Click(Sender: TObject);begin if RadioGroup1.ItemIndex=0 then panel1.Color:=clyellow else panel1.Color:=clblack;end;

    Comentrios:

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 19 de 272

    Prtica 07: O objetivo desta prtica descobrir se um nmero par ou mpar, calcular sua raiz quadrada, definir se exata ou inexata e separar a parte inteira da parte decimal.

    Formulrio:

    Objeto Propriedade Valor Evento ProcedimentoForm1 Caption Pratica 07Label1 Caption Digite um nmero:Label2 Caption Resultado:Label3 Caption Raiz:Label4 Caption Parte inteira:Label5 Caption Parte decimal:Edit1 Text Vazio (null) OnKeyPres

    sEdit1KeyPress

    Edit2 Text Vazio (null)Edit3 Text Vazio (null)Edit4 Text Vazio (null)Button1 Caption Verificar OnClick Button1ClickGroupBox1 Caption Resultados:GroupBox1 Enabled FalseRadioButton1 Caption ExataRadioButton2 Caption Inexata

    Procedimentos:

    procedure TForm1.Button1Click(Sender: TObject);var valoremreal:real; valordaraiz:real; parteinteira:real; partefracionaria:real;begin valoremreal:=strtofloat(edit1.Text); valordaraiz:=sqrt(valoremreal); edit2.Text:=floattostr(valordaraiz); parteinteira:=int(valordaraiz); partefracionaria:=valordaraiz-parteinteira;

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 20 de 272

    if strtoint(edit1.Text) mod 2 =0 then label2.Caption:=edit1.Text+' um nmero par' else label2.Caption:=edit1.Text+' um nmero impar'; if partefracionaria=0 then begin radiobutton1.Checked:=true; edit3.Text:=floattostr(parteinteira); edit4.Text:='0'; end else begin radiobutton2.Checked:=true; edit3.Text:=floattostr(parteinteira); edit4.Text:=floattostr(partefracionaria); end;end;

    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);begin if not (key in ['0'..'9']) then key:=#0;end;

    Comentrios:

    Pratica 08 Exerccio 03: Monte um projeto onde o usurio informe o nome do aluno e 04 notas, obtendo como sada, a mdia aritmtica das notas fornecidas e situao em que o aluno se encontra, baseando-se na condio abaixo.Condies propostas: O aluno ser aprovado se obter uma mdia >= 6.

    - Estrutura Case... of... Else End: (Caso... de... Seno... Fim)

    Na estrutura Case ... of... Else ... End a deciso baseada em mltipla escolha sendo executados apenas os comandos que satisfaam a condio.

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 21 de 272

    Ateno: A estrutura Case...of... Else... End, s aceita condies com valores inteiros.Para entender melhor o funcionamento desta estrutura imagine um semforo controlando o fluxo de veculos, a cada cor acessa uma mensagem enviada ao motorista e como apenas uma cor acende por vez, o motorista nunca receber mais que uma mensagem ao mesmo tempo.

    Pratica 09: Controlando o trnsito.

    Formulrio:

    Objeto Propriedade Valor Evento ProcedimentoForm1 Caption Pratica 09 OnActivate Form1ActivateImage1 Picture c:\delphi 2005\pratica 09\ carro1.bmpImage1 Autosize TrueTimer1 Enabled False OnTimer Timer1TimerRadioGroup1 Caption Semforo OnClick RadioGroup1Click

    RadioGroup1 ItemsPareAtenoSiga

    RadioGroup1 ItemIndex 0Shape1 Shape stCircleShape2 Shape stCircleShape3 Shape stCircleShape1 Brush.Color clBtnfaceShape2 Brush.Color clBtnfaceShape3 Brush.Color clRed

    Variveis:Clausula Varivel Tipo Private Carro Integer

    Procedimentos:

    procedure TForm1.FormActivate(Sender: TObject);begin carro:=0;end;

    procedure TForm1.Timer1Timer(Sender: TObject);begin case carro of

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 22 de 272

    0:begin image1.Picture.LoadFromFile('c:\delphi 2005\pratica 09\carro1.bmp'); carro:=1; end; 1:begin image1.Picture.LoadFromFile('c:\delphi 2005\pratica 09\carro2.bmp'); carro:=0; end; end;end;

    procedure TForm1.RadioGroup1Click(Sender: TObject);begin case radiogroup1.ItemIndex of 0:begin timer1.Enabled:=false; shape1.Brush.Color:=clbtnface; shape2.Brush.Color:=clbtnface; shape3.Brush.Color:=clred; end; 1:begin timer1.Enabled:=true; timer1.Interval:=500; shape1.Brush.Color:=clbtnface; shape2.Brush.Color:=clyellow; shape3.Brush.Color:=clbtnface; end; 2:begin timer1.Enabled:=true; timer1.Interval:=50; shape1.Brush.Color:=clgreen; shape2.Brush.Color:=clbtnface; shape3.Brush.Color:=clbtnface; end; end;end;

    Comentrios:

    Pratica 10: Promovendo descontos

    Esta prtica visa calcular o valor a ser cobrado por uma empresa de cpias de acordo com a quantidade de xrox retiradas em um ms conforme a tabela abaixo:

    Quantidade de cpias Valor por cpiaAt 50 R$ 0,10De 51 a 100 R$ 0,08De 101 a 150 R$ 0,06Acima de150 R$ 0,05

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 23 de 272

    Formulrio:

    Objeto Propriedade Valor Evento ProcedimentoForm1 Caption Pratica 10

    LabeledEdit1 EditLabelCaption Quantidade de xrox na primeira semanaOnKeyPress Testatecla

    LabeledEdit1 LabelPosition lpLeft

    LabeledEdit2 EditLabelCaption Quantidade de xrox na segunda semanaOnKeyPress Testatecla

    LabeledEdit2 LabelPosition lpLeft

    LabeledEdit3 EditLabelCaption Quantidade de xrox na terceira semanaOnKeyPress Testatecla

    LabeledEdit3 LabelPosition lpLeft

    LabeledEdit4 EditLabelCaption Quantidade de xrox na quarta semanaOnKeyPress Testatecla

    LabeledEdit4 LabelPosition lpLeftLabel1 Caption Total de xrox:Label2 Caption Valor por xrox:Label3 Caption Total a pagar:StaticText1 Caption 0StaticText1 BorderStyle sbsSukenStaticText2 Caption 0StaticText2 BorderStyle sbsSukenStaticText3 Caption 0StaticText3 BorderStyle sbsSukenBitBtn1 Caption Calcular

    BitBtn1 Glyph

    C:\Arquivos de programas\ arquivos comuns\ borland shared\images\buttons\ calculat.bmp

    OnClick BitBtn1Click

    Procedimentos:

    procedure TForm1.testatecla(Sender: TObject; var Key: Char);begin if not (key in ['0'..'9',#8]) then key:=#0;end;

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 24 de 272

    procedure TForm1.BitBtn1Click(Sender: TObject);var valor,total:real; soma:integer;begin if (labelededit1.Text='') or (labelededit2.Text='') or (labelededit3.Text='') or (labelededit4.Text='') then showmessage('Existe pelo menos uma semana sem quantidade!') else begin soma:=strtoint(labelededit1.Text)+strtoint(labelededit2.Text)+strtoint(labelededit3.Text)+strtoint(labelededit4.Text); case soma of 0..49:valor:=0.10; 50..99:valor:=0.08; 100..150:valor:=0.06; else valor:=0.05; end; statictext1.Caption:=inttostr(soma); statictext2.Caption:=formatfloat('R$0.00',valor); total:=soma*valor; statictext3.Caption:=formatfloat('R$0.00',total); end;end;

    Comentrios:

    Pratica 11 Exerccio 04: Uma empresa resolve realizar uma promoo com descontos entre 10 e 40 por cento de acordo com o total a ser pago pelo cliente conforme a tabela a seguir:

    Valor total comprado Percentual de descontoAt R$ 100,00 10%De R$ 101,00 a R$ 250,00 20%De R$ 251,00 a R$ 300,00 30%Acima de R$ 300,00 40%

    c) Estruturas de loop ou lao:

    Muitas vezes em um projeto o desenvolvedor necessita repetir um determinado procedimento de forma controlada, a esta repetio denominamos lao ou loop.dever dirigir o fluxo do projeto de acordo com uma condio previamente descrita.

    So trs as estruturas de lao:

    Repeat... Until; (Repita... at) While... do; (Enquanto... faa) For... to... do // For... downto do. (Para... at... faa)

    - Repeat... Until: O Repeat executa sua sucesso de declaraes constituintes continuamente e testa a expresso depois de cada repetio. Quando o resultado da expresso satisfeita, o repeat termina. A sucesso sempre executada pelo menos uma vez porque expresso no avaliada at depois da primeira repetio.

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 25 de 272

    Pratica 12: Demonstrao do Repeat ... Until;

    Formulrio:

    Objeto Propriedade Valor Evento ProcedimentoLabel1 Caption Indique o nmero de repeties:Edit1 Text Vazio (null) OnKeyPress Edit1KeyPressButton1 Caption Aplicar OnClick Button1Click

    Procedimentos:

    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);begin if (key< chr(48)) or (key > chr(57)) then key:=chr(0);end;

    procedure TForm1.Button1Click(Sender: TObject);var i:integer;begin i:=1; listbox1.Clear; repeat listbox1.Items.Add('Repetio n:'+inttostr(i)); inc(i); until strtoint(edit1.Text)

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 26 de 272

    - While... do: Executa sua sucesso de declaraes constituintes continuamente e testa a expresso antes de cada repetio. Quando o resultado da expresso no mais satisfeita, o while termina.

    Para entender melhor o funcionamento desta estrutura proceda da seguinte maneira.

    Abra o projeto anterior e altere o procedimento OnClick do objeto Button1 para:

    procedure TForm1.Button1Click(Sender: TObject);var i:integer;begin i:=0; listbox1.Clear; while strtoint(edit1.Text)>i do begin inc(i); listbox1.Items.Add('Repetio n:'+inttostr(i)); end;end;

    Comentrios:

    - For... to... do // For... downto... do: Executa sua sucesso de declaraes constituintes continuamente at que o valor inicial atinja o valor final, atravs de uma incrementao, (clausula to), ou decrementao, (clausula downto), quando o valor final alcanado, o for termina.

    Para entender melhor o funcionamento desta estrutura proceda da seguinte maneira.

    Abra o projeto anterior e altere o procedimento OnClick do objeto Button1 para:

    procedure TForm1.Button1Click(Sender: TObject);var i:integer;begin listbox1.Clear; for i:=1 to strtoint(edit1.Text) do listbox1.Items.Add('Repetio n:'+inttostr(i));end;

    Comentrios:

    Pratica 13 Exerccio 05: Usando a estrutura de lao monte um projeto capaz e fazer a combinao de 15 nmeros aleatrios para gerar cartes da sena.

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 27 de 272

    d) Estruturas consecutivas:

    Executa uma sucesso de declaraes baseadas em condies onde se referenciam objetos, classes, campos, procedimentos ou propriedades.

    Comando: With... do (Com... faa)

    Para entender melhor o funcionamento desta estrutura monte o projeto descrito a seguir.

    Pratica 14: Demonstrao do With...do

    Formulrio:

    Objeto Propriedade Valor Evento ProcedimentoForm1 Caption Pratica 14Label1 Caption Tamanho da fonte:Label2 Caption Largura da borda:Label3 Caption Nome da fonte:Label4 Caption Rtulo:Label5 Caption Cor da fonte:Label6 Caption Cor do painel:Button1 Caption Aplicar OnClick Button1Click

    Procedimentos:

    procedure TForm1.Button1Click(Sender: TObject);begin with panel1 do begin font.Size:=strtoint(edit1.Text); font.Color:=colorbox1.Selected; font.Name:=edit3.Text; caption:=edit4.Text; Color:=colorbox2.Selected; end;end;

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 28 de 272

    Comentrios:

    e) Estruturas de exceo: Desvia o fluxo do projeto quando ocorre um erro ou outra interrupo na execuo normal de um programa.

    Estruturas:

    try... except (Tentar Exceptualmente) try... finally (Tentar Finalmente)

    - Try Except Tenta executar um bloco de comandos caso no consiga, o fluxo geraria uma interrupo que tenderia a interromper a execuo do projeto, com o uso do except um segundo bloco tentar ser executado.

    Exemplo:

    try X := Y/Z;except on EZeroDivide do HandleZeroDivide;end;

    - Esta declarao tenta dividir Y por Z, mas se uma exceo encontrada chamada uma rotina nomeada HandleZeroDivide de EZeroDivide, (erro:diviso por zero).

    - Try finally Tenta executar um bloco, se uma interrupo provocar uma parada no fluxo de execuo do projeto, o uso do finally o interpretar como fim do processo executando um segundo bloco de comandos.

    Exemplo:

    Reset(F);try ... // process file Ffinally CloseFile(F);end;

    Capitulo VI Bancos de dados:

    Os bancos de dados so estruturas capazes de armazenar informaes fornecidas por usurios para utilizaes futuras, a bem da verdade os dados sero armazenados em tabelas e estas por sua vez comporo estruturas maiores denominadas bancos ou bases de dados.

    Para que uma linguagem consiga abrir, ler ou armazenar dados em uma tabela necessrio a presena de uma ferramenta conhecida como gerenciador de bancos de dados.

    Como exemplo de gerenciadores de bancos de dados temos:

    BDE Administrator (Borland Database Engine); MSSQL (Microsoft Structure Query Linguage).

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 29 de 272

    O BDEAdministrator:

    Introduo ao Borland DataBase Engine

    O BDE uma ferramenta utilizada para fazer a conectividade entre o Delphi, C++Builder, IntraBuilder, Paradox for Windows, e Visual dBASE for Windows.

    Arquitetura: A arquitetura do BDE inclui numerosos servios compartilhados utilizados pelos drives de banco de dados e outras funes. O contedo includo nos drives do BDE habilita acesso consistente para fontes de dados standards: Paradoxo, dBASE, FoxPro, ACCESS, e bancos de dados de texto. Voc pode adicionar os drivers Microsoft ODBC e criar atravs do Borland SQL vnculos com outros servidores de SQL, inclusive Informix, DB2, InterBase, Oracle, e Sybase. Junto com seus drivers de banco de dados e API consistente, BDE d para a Microsoft Windows 95 e Windows NT Aplication um acesso direto inclusive de compartilhamento a mltiplas fontes de dados. Orientao a Objeto: BDE orientado a objeto. Em tempo de execuo o fomentador de aplicao interage com BDE criando vrios objetos. Estes objetos de runtime manipulam entidades de banco de dados, como Tables e Querys. A Interface de Programa de Aplicao extensa do BDE (API) escrita direto em C e C++ aperfeioaram o acesso ao BDE e seus drives embutidos para dBASE, Paradox, FoxPro, ACCESS, e bancos de dados de texto.

    Alias: um pseudnimo, um nome e um conjunto de parmetros que descrevem um recurso de Network, (cadeia de trabalho). Aplicaes de BDE usam pseudnimos para conectar se com bancos de dados compartilhados. Um alias no exigido para endereos de bancos de dados locais, mas ser exigido enderear um banco de dados de SQL.

    Aba de definies (DataBases): Nesta aba so definidos os alias que indicaro onde sero definidos os tipos, os drives, o local, a forma de acesso e comportamento das bases de dados que podero se acessadas mediante o chamamento do alias.

    Aba de configuraes (Configuration): Nesta aba so definidos as configuraes dos drives e comportamento do sistema.

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 30 de 272

    Os drives carregados pelo BDE so divididos em dois grupos: Native e ODBC, descritos a seguir:

    Forma de acesso Estrutura

    Nativo

    ParadoxDB2DBaseFoxProInformixInterbaseMSAccessMSSQLOracleSybase

    ODBC

    SQLServerMicrosoft Access DriverMicrosoft Text DriverMicrosoft Excel DriverMicrosoft dBase DriverMicrosoft Paradox DriverMicrosoft Visual FoxPro DriverMicrosoft FoxPro VFP DriverMicrosoft VFP dBase Driver

    Usaremos este gerenciador com o drive nativo paradox em nossos exemplos.

    Configurando o Drive Paradox:

    Net Dir: Determina o local onde ser armazenado o arquivo PDOXUSRS.NET;

    Version: Informa a verso interna do drive;

    Type: Tipo do servidor para o qual este drive conecta. Pode ser SERVER (servidor de SQL) ou FILE (standard, arquivo baseado em servidor).

    LangDriver: Informa o idioma do drive;

    Block Size: Determina o tamanho do bloco resevado para aramazenamento das tabelas Paradox, Os blocos ocupam mltiplos de 1024 bytes dispostos nos seguintes nveis:

    Nvel 5 and 7 1024, 2048, 4096, 16384 e 32768Nvel 3 and 4 1024, 2048 e 4096Default: 2048

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 31 de 272

    Fill Factor: Porcentagem de bloco de disco atual que deve ser enchido antes do Paradox alocar outro bloco de disco para arquivos de ndice. Pode ser qualquer inteiro que varia de 1 a 100. Default: 95 Nota: valores Menores oferecem desempenho melhor mas aumentam o tamanho de ndices. Valores maiores do arquivos de ndice menores mas aumentam o tempo para criao de um ndice.

    Level: Determina o formato utilizado na criao de tabelas Paradox temporrias:

    Nivel 7 tabelas Paradox para Windows 32-bit;Nivel 5 tabelas Paradoxo 5.0; Nivel 4 formato de tabelas STANDARD introduzido em Paradox 4.0 Nivel 3 formato de tabelas usadas por Paradox 3.5 e verses anterioresDefault: Nvel 4. Para usar campos Blob, ndices secundrios, e integridade referente, especifique Paradox nvel 4 ou nvel 5. Voc pode usar o nvel mais baixo possvel para forar a compatibilidade para um nivel anterior. S escolha Nvel 7 se voc precisa das caractersticas de posicionamento avanadas aplicadas para aquele formato de tabela.

    StrictIntegrty: Integridade Referente, Especificaes das tabelas Paradox se podem ser modificadas usando aplicaes que no se apiam na integridade referente (como, Paradoxo 4.0). por exemplo, se TRUE voc estar impossibilitado mudar uma tabela com integridade referente que usa Paradox 4.0; se FALSE, voc pode mudar a tabela, mas voc arrisca a integridade de seus dados. Default: TRUE.

    Para acessarmos as tabelas que utilizam este gerenciador utilizaremos os componentes da paleta BDE.

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 32 de 272

    O MSSQL Server:

    Para acessarmos as tabelas que utilizam este gerenciador utilizaremos os componentes da paleta dbGo.

    OBS: Para utilizar qualquer uma destas estruturas os gerenciadores devem estar instalados no equipamento de desenvolvimento.

    Capitulo VII O DataBase Desktop (DBD):

    Uma das principais finalidades das linguagens de programao a de controlar o armazenamento de informaes de forma permanente, isto , a possuir a capacidade de incluir, excluir ou alterar informaes mantidas em um meio. A este meio chamaremos de tabela.Ao se trabalhar com armazenamento de dados, dois softwares devero estar instalados no computador, o primeiro capaz de criar tabelas e segundo capaz de torn-las acessveis ao delphi.

    O DataBase Desktop um utilitrio que nos permite cria, ver, ordenar, modificar Tables (Tabelas de dados) e Query (Tabelas de consultas) nos formatos Paradox, dBASE, e SQL.

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 33 de 272

    Viso geral do DBD (verso:7.0):

    No menu encontramos os seguintes comandos:

    Comando DescrioFile Menu de controle de arquivosEdit Menu de edio de arquivos e prefernciasTools Menu de ferramentasWindow Menu de exibio de janelasHelp Menu de ajuda do DBD

    O comando file apresenta a seguinte lista de subcomandos:

    Subcomando DescrioNew Cria uma nova tabela, query ou SQLOpen Abre uma tabela, query ou SQLClose Fecha uma tabela, query ou SQLSave Salva uma tabela, query ou SQLSave As... Salva uma tabela, query ou SQL em outraWorking Directory... Define um diretrio como de trabalhoPrivate Directory... Define um diretrio como privado

    Caso a opo open seja selecionada os comandos do menu sero alteradas como veremos a seguir.

    O comando edit apontara para preferncias enquanto a opo open no for aberta e se encarregar de determinar as preferncia de edio do usurio, porm se a opo open estiver ativa os comandos do menu sero alterados.

    O comando tools apresenta a seguinte lista de subcomandos:

    Subcomando DescrioAlias manager.. Ativa o gerenciador de Alias, isto , abrir o

    Borland DataBase Engine (BDE), gerenciador de bases de dados da Borland

    Menu

    Barra de ferramentas

    rea de trabalho

    Barra de status

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 34 de 272

    O comando window estar inabilitado at que a opo open seja ativada e apresentar a seguinte lista de subcomandos:

    O comando help abrir a ajuda do DBD.

    Para se criar uma tabela precisaremos de alguns conceitos bsicos:

    Dados: So todas as informaes fornecidas pelo usurio.Campos: So espaos predeterminados onde sero armazenados os dados.Registros ou Recordes: o conjunto de campos.Chaves: So ordens de classificao dos registros.

    A forma de armazenamento dos dados juntamente com a grande quantidade de aplicativos capazes de criar tabelas, associadas as diversas linguagens de programao existentes, fizeram com que surgissem vrias estruturas ou tipos de tabelas, cada uma com sua caractersticas prprias. Por essa razo o desenvolvedor ter que identificar e ajustar o delphi quela que melhor lhe convir.

    Capitulo VIII Trabalhando com o DataBase Desktop:

    Para iniciarmos o trabalho com o DBD, criaremos uma nova pasta na unidade c: e a chamaremos de Delphi 2005, em seguida devemos analisar os dados que sero armazenados. Nesta anlise devem ser levados em considerao os seguintes pontos:

    Nmero do campo (Field Roster): uma classificao onde so ordenados os campos.

    Nome do campo (Field Name): Determina o nome que ser usado para identificao do campo.

    Tipo (Type): Determina o tipo do dado que ser aceito pelo campo.

    Tamanho (Size): Determina o nmero mximo de caracteres fornecidos pelo usurio.

    Chave (Key): Determina se o campo chave de ndice da tabela.

    Os tipos dos dados disponveis variaro de acordo com a estrutura escolhida, no nosso caso, iniciaremos com a estrutura Paradox em sua verso 7.0.

    Tipo do campo Smbolo Tamanho Valor suportadoAlpha A 1 - 255 Letras, nmeros, smbolos especiais como

    %, &, #, or = ou qualquer outro carcter ASCII

    Utilities Ativa uma lista de funes capazes de realizar cpias, adio, subtrao, fornecer informaes, zerar, classificar, renomear e reestruturar tabelas.

    Password Cria senhas para acessos a tabelas

    Subcomando DescrioCascade Exibir as janelas das tabelas na forma de cascataTile top and bottom Exibir as janelas das tabelas uma abaixo da outraSide by side Exibir as janelas das tabelas uma ao lado da outraArrange icons Organizar as janelas em iconesClose all Fecha todas as janelas

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 35 de 272

    Number N --- Um campo que pode conter s nmeros, um sinal, e um ponto de frao decimal.

    Money $ --- Formata os nmeros para forma de moeda com at seis dgitos aps a vrgula.

    Short S --- Qualquer nmero inteiro entre -32767 e 32767Long Integer I --- Qualquer nmero inteiro na faixa que vai de

    -2147483648 a 2147483647Date D --- Guarda datas entre 1 de Janeiro de 9999 AC at 31

    de Dezembro 9999 AD.Time T --- Guarda horas no formato DD:MM:AAAATimestamp @ --- Guarda a data e hora atualMemo M 1 - 240** Guarda arquivos memoFormatted Memo F 0 - 240** Guarda arquivos formatted memoGraphic G 0 - 240*** Guardam imagens nos formatos .BMP, .PCX, .TIF,

    .GIF, e .EPS.OLE O 0 - 240*** Armazena tipos diferentes de dados, como imagens,

    som, documentos, e assim por diante. O campo de OLE lhe proporciona um modo para ver e manipular estes dados dentro do Paradox. Voc no precisa especificar um tamanho para campos de OLE porque eles no so armazenados na tabela, mas em arquivos separados.

    Logical L --- Campos lgicos contm valores que representam verdadeiro ou falso (True ou False).

    Autoincrement + --- Campos autoincrement contm um inteiro longo, um campo somente de leitura (no editvel). A tabela comea com o nmero 1 e soma um nmero para cada registro subseqente. Apagando um registro no muda os valores de campo de outros registros.

    Binary B 0 - 240*** Campos binrios s devem ser usados por usurios avanados que precisam trabalhar com dados que a tabela no consegue interpretar, isto , a tabela no pode exibir ou pode interpretar campos binrios. Um uso comum de um campo binrio armazenar som. Campos binrios no requerem um tamanho porque eles so armazenados em um arquivo separado (o .MB arquivam), no na tabela.

    Bytes Y 1 - 255 Campos de bytes s devem ser usados por usurios avanados que precisam trabalhar com dados que a tabela no consegue interpretar, isto , a tabela no pode interpretar campos bytes. Um uso comum de um campo binrio armazenar cdigos de barra ou tiras magnticas. Campos de bytes distintos, campos binrios requerem um tamanho porque eles so armazenados na tabela e no em um arquivo separado, permitindo acesso mais rpido.

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 36 de 272

    BCD # 0 - 32* Campos BCD contm dados numricos em formato BCD (Codigo Decimal Binrio). Use campos BCD quando voc quer executar clculos com um nvel mais alto de preciso que aquele disponvel com o uso de outros campos numricos. Clculos em campos BCD no so executados to depressa quanto em outros campos numricos. O campo tipo BCD provido principalmente para compatibilidade com outras aplicaes que usam dados BCD. A tabela interpreta dados BCD corretamente de outras aplicaes que usam BCD. Porm, quando a tabela executa clculos com dados BCD, converte os dados para o tipo de flutuante, devolvendo o resultado para BCD.

    * Nmero de dgitos depois do ponto de frao decimal; * * Campos Memo ou Formated Memo podem ter um tamanho virtual. O valor especificado se refere ao tamanho da Base de dados do arquivo memo da tabela (1 a 240 caracteres para memo e 0 a 240 caracteres para formated memo). O memo inteiro armazenado fora da tabela. Por exemplo, se voc especifica um valor de 45 ao campo, o Banco de dados guarda os primeiros 45 caracteres na tabela e armazena o campo de memo inteiro em outro arquivo (com a extenso .MB).

    * * * Opcional

    Obs: Se todos seus memos so menores que um determinado tamanho (por exemplo, 200 carter), voc pode economizar espao e tempo fixando o tamanho de campo de memo igual ou maior que este tamanho. O Banco de dados guarda na tabela o memo inteiro se ele menor que o tamanho determinado.

    A partir deste conhecimento criaremos uma tabela simples conforme a descrio abaixo:

    Nome do campo Tipo Tamanho Chave Descrio

    Identidade Alfanumrico 10 Sim Guarda o nmero da identidadeCPF Alfanumrico 14 Guarda o nmero do C.P.F.Nome Alfanumrico 50 Guarda o nomeNascimento Data Guarda a data de nascimentoLogradouro Alfanumrico 50 Guarda o nome da ruaNumero Numrico Guarda o numero da casa

    Complemento Alfanumrico 50 Guarda dados complementaresBairro Alfanumrico 30 Guarda o nome do bairroCidade Alfanumrico 30 Guarda o nome da cidadeEstado Alfanumrico 2 Guarda o nome do estadoCEP Alfanumrico 10 Guarda o nmero do cepAtivo Lgico Guarda a situao

    Crie a pasta: C:\Delphi 2005\Tabelas, agora abra o DBD e escolha as opes: File; New e Table:

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 37 de 272

    Aponte o tipo da tabela para Paradox 7, conforme a figura acima e click sobre OK;Aparecer a janela de edio de tabelas em Paradox, preencha conforme a tabela descrita

    anteriormente.

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 38 de 272

    Aps a montagem a sua tabela dever ter a seguinte forma:

    Click sobre o boto Save As em seguida localize a pasta C:\Delphi 2005\Tabelas;D o nome de Pessoal tabela e click em salvar.

    Exerccio 06: Agora crie uma tabela com base nas instrues abaixo e salve no diretrio C:\Delphi 2005\Tabelas com o nome de acessos:

    Campo Tipo Tamanho ChaveUsuario Alpha 30 SimSenha Alpha 6Nivel de acesso Number

    Incrementando registros de uma tabela:

    Para se incluir registros a uma tabela sem conduto ter que fazer um projeto para isso, proceda da seguinte maneira:

    a) Abra a tabela; Opo: File seguida das opes Open e Table;b) Uma vez a aberta a tabela o menu sofrer uma alterao passando a ter os seguintes

    comandos:

    Comando DescrioFile Menu de controle de arquivosEdit Menu de edio de arquivos e prefernciasTools Menu de ferramentasView Menu de visualizao de registrosTable Menu de controle sobre a tabelaRecord Menu de controle sobre registros da tabelaWindow Menu de exibio de janelasHelp Menu de ajuda do DBD

    c) Com a tabela aberta escolha a opo Edit Data do comando Table ou pressione F9:d) A gravao ser automtica sempre que houver um deslocamento a nvel de registro.

    Navegando pelos registros de uma tabela:

    Para se navegar sobre os registros de uma tabela sem conduto ter que fazer um projeto para isso, proceda da seguinte maneira:

    a) Abra a tabela; Opo: File seguida das opes Open e Table;b) Em seguida utilize as opes do comando Record para navegar:

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 39 de 272

    Excluindo registros de uma tabela:

    Para se excluir os registros de uma tabela sem conduto ter que fazer um projeto para isso, proceda da seguinte maneira:

    c) Abra a tabela; Opo: File seguida das opes Open e Table;d) Em seguida coloque a tabela sob a forma de edio localize o registro que deseja excluir e

    pressione Ctrl+Del.

    Organizando os registros de uma tabela:

    Um ndice um arquivo que determina a ordem em uma tabela. O paradox, o dBASE, e o SQL usam ndices para organizar os registros em uma tabela, mas os ndices deles/delas trabalham diferentemente. Os ndices podem ser primrios ou secundrios. No paradox, o ndice primrio chamado tambm a chave (KEY).

    Criando ndices secundrios:

    Os ndices secundrios geralmente so criados durante a confeco da tabela, portanto se a tabela j existir teremos que reestrutur-la.No processo de reestruturao se alterarmos a forma dos campos ou excluirmos algum campo, os dados contidos nestes devero ser ajustados para a nova forma do campo ou sero perdidos se o campo for excludo, no entanto, a criao de ndices secundrios no afetaram, a princpio, os dados armazenados.Para se criar ndices secundrios em uma tabela sem conduto ter que fazer um projeto para isso, proceda da seguinte maneira:

    a) Escolha a opo restructure no comando Tools:b) Em seguida abra a tabela.

    Para melhor entendimento criaremos dois ndices secundrios: o primeiro Unique (sem repeties vlidas), para o campo CPF e o segundo Maintained, (com repeties vlidas), para o campo Nome da tabela Pessoal.db.

    Opo Tecla de atalho DescrioNext F12 vai para o Prximo registroPrevious F11 vai para o registro AnteriorFirst Ctrl+F11 vai para o Primeiro registroLast Ctrl+F12 vai para o ltimo registro

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 40 de 272

    Uma vez aberta a tabela selecione a opo Secundary Indexes, na caixa de rolagem Table Properties;Em seguida click sobre o boto Define. Surgir ento a janela de definies descrita a seguir:

    Selecione o campo CPF e click sobre a seta de adio, em seguida marque a opo Unique na caixa Index options.

    Uma vez definido o campo e a opo do ndice clica-se sobre o boto OK e informa-se o nome para o arquivo de ndice.

    Sugesto: Monte o nome do ndice associando o campo a terminao idx, por exemplo:CPFIDX

    Agora proceda de maneira semelhante para o campo Nome, alterando, porm, a opo do ndice para Maintained na caixa Index options e salvando com o nome: NOMIDX

    Observaes: As opes Case sensitive e Descending, promovem a distino de maisculas e minsculas no primeiro caso, e organiza a tabela de forma decrescente no segundo caso.

    Exerccio 07: Abra a tabela Acessos.db e inclua 03 registros.

    Capitulo IX Incluindo tabelas em um formulrio:

    Existem duas maneiras de se trabalhar com tabelas em formulrios: a primeira delas introduz a tabela diretamente sobre o formulrio onde se vai trabalhar, e a segunda consiste em utilizar-se de um tipo especial de formulrio denominado Data-Module. Geralmente usam-se os data-modules quando a tabelas so compartilhadas entre vrios formulrios.

    O Data-Module: Como j mencionamos o Data-Module um tipo especial de formulrio, onde se colocam as tabelas a serem utilizadas no projeto.

    O data-module possui apenas dois eventos:

    OnCreate Ocorre sempre que uma aplicao inicializa o data-module.

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 41 de 272

    Por exemplo: Se um data-module contm os componentes database ou table e dataset, uma aplicao pode estabelecer uma conexo com o banco de dados ou com as tabelas imediatamente. Se o mdulo de dados contm Timer, (cronmetros), a aplicao pode os inicializar.

    OnDestroy Ocorre sempre que o data-module foi destrudo.

    Por exemplo: Pode-se se escrever um procedimento que autorize o fechamento de tabelas, neste evento, e sempre que o data-module for destrudo, ele fechar as tabelas antes de se destruir.

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 42 de 272

    Com relao as propriedades, convm mencionar a seguinte:

    OldCreateOrder Est propriedade do tipo boolean, apresenta False como default, o que assegura que o evento Oncreate seja executado aps a finalizao das instncias dos demais construtores e que o evento OnDestroy seja executado antes das instncias dos demais destructors.

    Pratica 15: Incluindo uma senha

    Aps a criao da tabela Acessos, precisaremos criar o data module, e neste inserir objetos capazes de acessar a tabela, porem, definiremos um ALIAS, (atalho para a pasta onde esto as tabelas), e o chamaremos de dados.

    Alias: um pseudnimo, um nome e um conjunto de parmetros que descrevem um recurso de Network, (cadeia de trabalho). Aplicaes de BDE usam pseudnimos para conectar se com bancos de dados compartilhados.

    Criando um alias paradox:

    1- Selecione a opo Object no menu opes e nesta selecione New ou pressione Ctr+N:

    2- Aps a abertura da janela apresentada ao lado, selecione Standard como Database Driver Name (nome do drive para a base de dados);

    3- Click em Ok para confirmar o drive;

    4 Agora altere o nome do Alias de Standard para dados;

    Quando se cria um Alias indicando Standard como disponibilizados trs drives:

    PARADOX: Paradox, para tabelas .DB; DBASE: dBASE e FoxPro, para tabelas .DBF; ASCIIDRV: ASCII text, para tabelas .TXT.

    Em seguida configuraremos as opes para o alias criado para o drive escolhido:

    TYPE: Tipo do servidor para o qual este drive conecta;PATH: o caminho onde o banco de dados est armazenado;DEFAULT DRIVER: Drive padro: PARADOX, DBASE ou ASCIIDRV;

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 43 de 272

    ENABLE BCD: Specifica se BDE traduz campos numricos e decimais em valores de ponto flutuantes ou valores em decimal codificado binrio (BCD). Valores de BCD eliminam os erros de arredondamento associados com matemtica de ponto flutuante (exemplo: 3 * (2/3) resultando em 2.00000000001). Quando ENABLE BCD fixado para TRUE, decimais e campos numricos so convertidos para BCD. Default FALSE.

    5- Para as nossas tabelas configuraremos os parmetros do alias conforme a tabela abaixo:

    Parmetro ValorTYPE STANDARDDEFAULT DRIVER PARADOXENABLE BCD FALSEPATH C:\Delphi 2005\Tabelas

    6- Agora resta-nos apenas salvar o nosso alias: Opes: Object e Save As.

    Agora que j temos um alias criado partiremos para a criao o data module.

    Criando o data module:

    i) Crie uma nova aplicao para win32;ii) Click em File // New // Other

    iii) Click em Delphi Projects // Delphi Files;iv) Selecione o cone Data Module e pressione OK.

    Formulrio Data Module:

    Objeto Propriedade Valor Evento Procedimento

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 44 de 272

    Data-module Name DMData-module OnCreate DatamoduleCreateData-module OnDestroy DatamoduleDestroyTable1 Name TAcessosTable1 DatabaseName DadosTable1 TableName Acessos.DBDataSource1 Name DSAcessosDataSource1 DataSet TAcessos

    Alteradas as propriedades deve-se indicar quais campos da tabela estaro disponveis ao projeto.

    D um click duplo no objeto TAcessos e selecione Add All Fiels:

    Procedimentos:

    procedure TDM.DataModuleCreate(Sender: TObject);begin TAcessos.Open;end;

    procedure TDM.DataModuleDestroy(Sender: TObject);begin TAcessos.Close;end;

    Digitados os procedimentos, Salve o data moule com o nome UDM.

    Agora que o data module est pronto montaremos um formulrio para entrada do usurio e sua senha.

    Formulrio:

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 45 de 272

    Objeto Propriedade Valor Evento ProcedimentoForm1 Caption Pratica 15Form1 OnActivate Form1ActivatePanel1 Caption Vazio (null)Panel1 Border Style bsSinglePanel1 BevelInner bvLoweredPanel1 BevelOuter bvRaisedPanel1 BevelWidth 2Panel1 BorderWidth 2Label1 Caption Usurio:Label2 Caption Senha:Edit1 Text Vazio (null)Edit2 Text Vazio (null)BitBtn1 Caption Verificar OnClick BitBtn1Click

    BitBtn1 GlyphC:\arquivos de programas\ arquivos comuns\Borland Shared \Images\Buttons\Key

    BitBtn2 Caption Cancelar OnClick BitBtn2Click

    BitBtn1 GlyphC:\arquivos de programas\ arquivos comuns\Borland Shared \Images\Buttons\DoorOpen

    Clausula Varivel Tipo Valor ParmetroPrivate Tentativas IntegerUses Acrescentar UDM

    uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls,udm;

    private tentativas:integer;

    Procedimentos:

    procedure TFSenha.FormActivate(Sender: TObject);begin tentativas:=0;end;

    procedure TFSenha.BitBtn1Click(Sender: TObject);begin

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 46 de 272

    if tentativas=3 then // Tentativas=3? begin MessageDlg('Acesso Negado!',mtinformation,[mbCancel],0); // Emitir mensagem Halt; // Encerrar projeto end else begin dm.TAcessos.SetKey; // Ativa a chave de ndices dm.TAcessosUsuario.Text:=edit1.Text; // Atribui usurio campo.chave dm.TAcessos.GotoKey; // Busca chave if dm.TAcessosUsuario.Text=Edit1.Text then // campo.chave=usurio? begin if dm.TAcessosSenha.Text=Edit2.Text then // campo.senha=senha? showmessage('acesso permitido!') // Chama o formulario de menu else begin tentativas:=tentativas+1; // Incrementar Tentativas em 1 MessageDlg('Senha Invlida!',mterror,[mbok],0); // Emitir mensagem edit2.Text:=''; // Zerar entrada da senha edit2.SetFocus; // Retornar a entrada da senha end; end else begin inc(tentativas,1); // Incrementar Tentativas em 1 MessageDlg('Usurio no autorizado!',mterror,[mbok],0); // Emitir mensagem Edit1.Text:=''; // Zerar entrada do usurio Edit1.SetFocus; // Retornar a entrada do usurio end; end;end;

    procedure TFSenha.BitBtn2Click(Sender: TObject);begin Halt; // Fecha projetoend;

    Comentrios:

    Capitulo X Incluindo menus em um formulrio:

    A montagem de menus algo bastante comum em aplicativos que seguem os padres Windows, isto , aplicativos que se executam em janelas.

    Os menus do delphi se classificam em dois tipos:

    MainMenu: Menu principal, fixo e normalmente ocupa a posio superior da janela do aplicativo.PopUpMenu: Menu flutuante, mvel e ativo com o pressionamento do boto direito do mouse, so geralmente utilizados como menus auxiliares.

    Tanto no MainMenu como no PopupMenu, existem duas propriedades que trabalharam da mesma forma: Items: usada para criar os itens do menu e Images: usada para colocar cones ao lado dos itens do menu.

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 47 de 272

    Os itens criados nos MainMenu e PopUpMenu se comportam como novos objetos e possuem propriedades e eventos prprios.

    Prtica 16 Montando um formulrio de controle

    Formulrio:

    Objeto Propriedade Valor Evento ProcedimentoForm1 Caption Pratica 16Form1 Name Fpratica16Image1 AutoSize TrueImage1 Stretch TrueImage1 Align alClientImage1 Picture C:\Delphi 2005\images\Borland1

    Mainmenu1 Items

    &Cadastros C&lientes &Produtos &Fornecedores F&uncionarios&Movimentos &Entradas &SadasC&onsultas &Cadastros C&lientes &Produtos &Fornecedores F&uncionarios &Movimentos &Entradas &Sadas&Sair

    Aps a digitao dos procedimentos salve a unit com o nome Upratica16

    Comentrios:

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 48 de 272

    Capitulo XI Trabalhando com mais de um formulrio:

    comum na maioria dos projetos a presena de vrios formulrios, tanto pelo fato da quantidade de objetos utilizados, como por uma questo de lgica e organizao.

    Os formulrios precisam ser abertos e aps seu uso novamente fechados para evitar seu acmulo na memria do computador.

    a)Abertura de formulrio:

    Comandos: Show; ShowModal.

    O comando Show abre um formulrio em uma janela, mantendo disponvel as janelas abertas anteriores a atual O comando ShowModal abre um formulrio em uma janela, no permitindo acesso s janelas abertas anteriores a atual.

    Prtica 17 Anexando formulrios:

    Observe as prticas 16 e 17, verifique que de certo modo eles se completam. O que vamos fazer agora anexar estas duas prticas em um nico projeto, dando assim uma viso maior sobre projetos em delphi.

    Para anexar as prticas, proceda da seguinte forma:

    1. Abra a prtica 16;2. Na barra de ferramentas click sobre Add file to project;

    3. Selecione a unit Upratica16 e click em ok;

    Pronto as duas prticas agora pertencem ao mesmo projeto, no entanto, precisamos criar uma interface entre seus cdigos e seu formulrios.

    Para criar tal interface utilizamos ao final da clausula USES da unit do projeto de senhas, inclumos Upratica16, que corresponde ao nome da unit da pratica 16:

    uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls,udm,Upratica16;

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 49 de 272

    Embora as units estejam interligadas, precisamos chamar o formulrio da pratica 16 caso o usurio seja aceito e sua senha seja vlida, para isso altere a linha 55 do procedimento Click do bitbtn1 do formulrio FSenha para:

    Antes da alterao Aps a alteraoLinha Procedimento Linha Procedimento

    54 if dm.TAcessosSenha.Text=Edit2.Text then 54 if dm.TAcessosSenha.Text=Edit2.Text then55 showmessage('acesso permitido!') 55 Fpratica16.Show56 else 56 Else

    Antes e executar vamos salvar como um novo projeto:

    No menu principal click sobre File e escolha a opo: Save projet as..., dando-lhe o nome de pratica17.

    Comentrios:

    Observe a linha 55 da pgina de cdigos do formulrio FSenha:

    Fpratica16.Show

    Execute o projeto e mova a janela do menu principal de forma a enxergar o formulrio de senha, em seguida clique sobre ele.

    Comentrios:

    Agora substitua a linha 55 da pgina de cdigos do formulrio FSenha por:

    Fpratica16.ShowModal

    Execute o projeto e mova a janela do menu principal de forma a enxergar o formulrio de senha, em seguida clique sobre ele.

    Comentrios:

    b) Fechamento de formulrio:

    Comandos: Close; Halt.

    O comando Close retornando janela aberta anteriormente. O comando Halt fecha todas as janelas de um projeto, juntamente com todas as bases de dados, encerrando a aplicao e retirando-a da memria.

    Inclua ao projeto o evento click no objeto Sair1, este objeto foi criado pelo delphi quando inclumos o item Sair no mainmenu1.

    procedure TForm1.Sair1Click(Sender: TObject);

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 50 de 272

    begin Close;end;

    Execute o projeto e clique em sair.

    Comentrios:

    Substitua o comando Close do Sair1Click por Halt e execute o projeto

    Comentrios:

    Capitulo XII Estruturando um projeto:

    Para facilitar o trabalho com vrios formulrios geralmente se faz um esboo de visualizao, onde se divide o projeto em blocos de acordo com sua aplicabilidade:

    A seguir est demonstrado um diagrama simples, para leitura de registros de uma tabela armazenada em um banco de dados, incrementar registros e atualizar a tabela.

    Observe a presena de rotinas em cada processo. A estas rotinas podem estar associados formulrios e units ou simplesmente units quando se tratarem de funes ou processos internos de mquina.

    A seguir est demonstrado um algoritmo simples, para leitura de registros de uma tabela armazenada em um banco de dados, incrementar registros e atualizar a tabela.

    1-Incio2-Localiza base de dados3-Identifica a tabela

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 51 de 272

    4- possvel abrir a tabela?4.1-Se no:

    4.1.1-Identificar a razo 4.1.2-Informar ao usurio

    4.2-Se sim:4.2.1-Ativar chave de ndices

    5-Definir ao:6-Caso ao: Incluso de novos registros:

    1-Abrir formulrio2-Preparar campos de formulrio3-Entrar com dado4-Buscar chave5-Chave existe?

    6-Se sim:6.1-Mostrar dados6.2-Informar ao usurio6.3-Voltar para definio de ao 5

    7-Se no:7.1-Entrar com valores7.2-Criticar valores7.3-Preparar tabelas para recebimento de dados7.4-Gravar dados7.5-Dados gravados com sucesso?7.6-Informar usurio7.7-Incluir novos registros?

    7.7.1-Se sim:7.7.1.1-Retornar para ao - 2

    7.7.2-Se no:7.7.2.1-Voltar para definio de ao 5

    Alterao de registros:1-Abrir formulrio2-Preparar campos de formulrio3-Entrar com dado4-Buscar chave5-Chave existe?

    6-Se sim:6.1-Mostrar valores6.2-Alterar valores6.3-Criticar valores6.4-Preparar tabelas para recebimento de dados6.5-Gravar dados6.6-Dados gravados com sucesso?6.7-Informar usurio6.8-alterar outros registros?

    6.8.1-Se sim:6.8.1.1-Retornar para ao - 2

    6.8.2-Se no:6.8.2.1-Voltar para definio de ao

    7-Se no:7.1-Informar ao usurio7.2-Voltar para definio de ao 5

    Excluso de registros:1-Abrir formulrio2-Preparar campos de formulrio3-Entrar com dado4-Buscar chave5-Chave existe?

    6-Se sim:

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 52 de 272

    6.1-Mostrar valores6.2-Exclui dados?

    6.2.1-Se sim:6.2.1.1-Excluir dados6.2.1.2-Dados excludos com sucesso?

    6.2.1.2.1-Se sim:6.2.1.2.1.1-Informar ao usurio6.2.1.2.1.2-Excluir outros registros?

    6.2.1.2.1.2.1-Se sim:6.2.1.2.1.2.1.1-Retornar para ao - 2

    6.2.1.2.1.2.2-Se no:6.2.1.2.1.2.2.1-Voltar p/ definio de ao 5

    6.2.1.2.2-Se no:6.2.1.2.2.1-Informar ao usurio6.2.1.2.2.2-Voltar para efinio de ao 5

    6.2.2-Se no:6.2.2.1-Voltar para definio de ao 5

    7-Se no:7.1-Informar ao usurio7.2-Excluir outro?7.2.1-Se sim:

    7.2.1.1-Retornar para ao - 27.2.2-Se no:

    7.2.2.1-Voltar para definio de ao 58-Fim dos casos9-Finalizar?

    9.1-Se sim:9.1.1-Fechar tabela9.1.2-Fechar formulrio

    9.2- Se no:9.2.1- Voltar para definio de ao 5

    Fim

    Observaes: O algoritmo descrito acima poder ser escrito de maneiras diferentes, dependendo apenas da linha de raciocnio do desenvolvedor.

    Capitulo XIII Incluindo, localizando e excluindo dados de uma tabela em tempo de execuo:

    Observando a prtica 17 notamos que falta d continuidade s opes apresentadas pelo mainmenu, onde cada opo possui rotinas prprias agrupadas em blocos denominados de cadastros, movimentos e consultas. Cada bloco, por sua vez representa um formulrio e uma pgina de cdigo. A prtica a seguir visa montar um desses formulrios, o cadastro de clientes, que tem como objetivo inclui, excluir e consultar registros de uma base e clientes.

    Para podermos escrever estas rotinas precisamos primeiro montar a tabela:

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 53 de 272

    Tabela de clientes:

    ndices secundrios:

    Feita a tabela vamos para o delphi onde abriremos a prtica 17 e salvamos como prtica 18:

    Agora criaremos o formulrio para cadastros de clientes:

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 54 de 272

    Prtica 18 Cadastro de clientes:

    Com o projeto Pratica18 aberto, crie um novo formulrio:

    Agora monte o seguinte formulrio:

    Objeto Propriedade Valor Evento ProcedimentoForm1 Caption Cadastro de clientes OnActivate FormActivateLabel1 Visible FalseLabel2 Caption BairroLabel3 Caption CidadeLabel4 Caption EstadoLabel5 Caption CEPLabel6 Caption Telefone

    ToolBar1

    EdgeBorders

    Ebleft=trueebTop=trueebRight=trueebBottom=true

    Images ImageList1ShowCaptions TrueList True

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 55 de 272

    Toolbutton1 Name novo OnClick novoClickCaption NovoToolbutton2 Name primeiro OnClick primeiroClick

    Caption PrimeiroToolbutton3 Name anterior OnClick anteriorClick

    Caption AnteriorToolbutton4 Name proximo OnClick proximoClick

    Caption ProximoToolbutton5 Name ultimo OnClick ultimoClick

    Caption UltimoToolbutton6 Name salvar OnClick salvarClick

    Caption SalvarToolbutton7 Name excluir OnClick excluirClick

    Caption ExcluirToolbutton8 Name localizar OnClick localizarClick

    Caption LocalizarToolbutton9 Name fechar OnClick fecharClick

    Caption Fechar

    Labelededit1Name ecodigo OnExit ecodigoExitEditLabel.Caption CdigoLabelPosition lpleft

    Panel1 Align alBottomEnabled FalseLabel7 Caption Buscar

    DBGrid1Align alBottom OnDblClick DBGrid1DblClickDataSource DM.DSClientesReadOnly True

    BitBtn1 Caption Aplicar OnClick BitBtn1Click

    RadioGroup1

    Name elocaliza OnClick elocalizaClickCaption Localizar por:

    Items.Strings

    ClienteCdigoCPFCNPJ

    MaskEdit1 Name ebuscar

    RadioGroup2

    Name etipo OnClick etipoClickCaption TipoColumns 2

    Items.Strings FsicoJurdico

    ComboBox1

    Name ebairroSorted True

    Items.Strings

    13 de julhoAruanaAtalaiaCentroJabotianaSanta Tereza

    MaskEdit2 Name ecpf_cnpjVisible False

    LabeledEdit2Name eclienteEditLabel.Caption ClienteLabelPosition lpleft

    LabeledEdit3

    Name erg_insestadualEditLabel.Caption CdigoLabelPosition lpleftVisible False

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 56 de 272

    LabeledEdit4Name elogradouroEditLabel.Caption LogradouroLabelPosition lpleft

    LabeledEdit5Name ecomplementoEditLabel.Caption ComplementoLabelPosition lpleft

    LabeledEdit6 Name enumeroEditLabel.Caption NmeroLabelPosition lpleft

    ComboBox2

    Name ecidadeSorted True

    Items.Strings

    AracajuEstnciaItabaianaNossa Senhora da Glria

    ComboBox3

    Name eestadoSorted True

    Items.Strings

    AL AM BA PE SE

    MaskEdit3

    Name ecepEditMask 99999-999MaxLength 9Text Vazio (null)

    MaskEdit4

    Name etelefoneEditMask (99)9999-9999MaxLength 13Text Vazio (null)

    Panel2Name mensagensAlign alBottomCaption Defina uma ao

    ImageList1

    Procedimentos:

    uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, Mask, Grids, DBGrids, StdCtrls, ExtCtrls, ToolWin, ImgList, Buttons, udm, db;

    private acao:integer;

    procedure TFclientes.FormActivate(Sender: TObject);begin //desabilitao dos botes salvar.Enabled:=false; excluir.Enabled:=false; // limpeza dos campos ecodigo.Text:=''; etipo.ItemIndex:=-1; ebairro.Text:=''; ecpf_cnpj.Text:=''; ecliente.Text:='';

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 57 de 272

    erg_insestadual.Text:=''; elogradouro.Text:=''; ecomplemento.Text:=''; enumero.Text:=''; ecidade.Text:=''; eestado.Text:=''; ecep.Text:=''; etelefone.Text:=''; //inicializao da acao acao:=0; //abertura da tabela dm.TClientes.Open;end;

    procedure TFclientes.novoClick(Sender: TObject);begin //definicao da acao acao:=1; //informando ao usurio mensagens.Caption:='Rotina de incluso de registros'; // limpeza dos campos ecodigo.Text:=''; etipo.ItemIndex:=-1; ebairro.Text:=''; ecpf_cnpj.Text:=''; ecliente.Text:=''; erg_insestadual.Text:=''; elogradouro.Text:=''; ecomplemento.Text:=''; enumero.Text:=''; ecidade.Text:=''; eestado.Text:=''; ecep.Text:=''; etelefone.Text:=''; //direcionando o focus ecodigo.SetFocus;end;

    procedure TFclientes.primeiroClick(Sender: TObject);begin //definicao da acao acao:=2; // localizao do primeiro registro dm.TClientes.First; //transferencia dos dados da tabela para o formulario ecodigo.Text:=dm.TClientesCodigo.Text; etipo.ItemIndex:=dm.TClientesTipo.Value; ebairro.Text:=dm.TClientesBairro.Text; ecpf_cnpj.Text:=dm.TClientesCpf_cnpj.Text; ecliente.Text:=dm.TClientesCliente.Text; erg_insestadual.Text:=dm.TClientesRg_insestaudal.Text; elogradouro.Text:=dm.TClientesLogradouro.Text; ecomplemento.Text:=dm.TClientesComplemento.Text; enumero.Text:=dm.TClientesNumero.Text; ecidade.Text:=dm.TClientesCidade.Text; eestado.Text:=dm.TClientesEstado.Text; ecep.Text:=dm.TClientesCep.Text; etelefone.Text:=dm.TClientesTelefone.Text; //informando ao usurio

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 58 de 272

    mensagens.Caption:='Rotina de navegao de registros';end;

    procedure TFclientes.anteriorClick(Sender: TObject);begin //definicao da acao acao:=2; // localizao do registro anterior dm.TClientes.Prior; //transferencia dos dados da tabela para o formulario ecodigo.Text:=dm.TClientesCodigo.Text; etipo.ItemIndex:=dm.TClientesTipo.Value; ebairro.Text:=dm.TClientesBairro.Text; ecpf_cnpj.Text:=dm.TClientesCpf_cnpj.Text; ecliente.Text:=dm.TClientesCliente.Text; erg_insestadual.Text:=dm.TClientesRg_insestaudal.Text; elogradouro.Text:=dm.TClientesLogradouro.Text; ecomplemento.Text:=dm.TClientesComplemento.Text; enumero.Text:=dm.TClientesNumero.Text; ecidade.Text:=dm.TClientesCidade.Text; eestado.Text:=dm.TClientesEstado.Text; ecep.Text:=dm.TClientesCep.Text; etelefone.Text:=dm.TClientesTelefone.Text; //informando ao usurio mensagens.Caption:='Rotina de navegao de registros';end;

    procedure TFclientes.proximoClick(Sender: TObject);begin //definicao da acao acao:=2; // localizao do proximo registro dm.TClientes.Next; //transferencia dos dados da tabela para o formulario ecodigo.Text:=dm.TClientesCodigo.Text; etipo.ItemIndex:=dm.TClientesTipo.Value; ebairro.Text:=dm.TClientesBairro.Text; ecpf_cnpj.Text:=dm.TClientesCpf_cnpj.Text; ecliente.Text:=dm.TClientesCliente.Text; erg_insestadual.Text:=dm.TClientesRg_insestaudal.Text; elogradouro.Text:=dm.TClientesLogradouro.Text; ecomplemento.Text:=dm.TClientesComplemento.Text; enumero.Text:=dm.TClientesNumero.Text; ecidade.Text:=dm.TClientesCidade.Text; eestado.Text:=dm.TClientesEstado.Text; ecep.Text:=dm.TClientesCep.Text; etelefone.Text:=dm.TClientesTelefone.Text; //informando ao usurio mensagens.Caption:='Rotina de navegao de registros';end;

    procedure TFclientes.ultimoClick(Sender: TObject);begin //definicao da acao acao:=2; // localizao do ultimo registro dm.TClientes.Last; //transferencia dos dados da tabela para o formulario

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 59 de 272

    ecodigo.Text:=dm.TClientesCodigo.Text; etipo.ItemIndex:=dm.TClientesTipo.Value; ebairro.Text:=dm.TClientesBairro.Text; ecpf_cnpj.Text:=dm.TClientesCpf_cnpj.Text; ecliente.Text:=dm.TClientesCliente.Text; erg_insestadual.Text:=dm.TClientesRg_insestaudal.Text; elogradouro.Text:=dm.TClientesLogradouro.Text; ecomplemento.Text:=dm.TClientesComplemento.Text; enumero.Text:=dm.TClientesNumero.Text; ecidade.Text:=dm.TClientesCidade.Text; eestado.Text:=dm.TClientesEstado.Text; ecep.Text:=dm.TClientesCep.Text; etelefone.Text:=dm.TClientesTelefone.Text; //informando ao usurio mensagens.Caption:='Rotina de navegao de registros';end;

    procedure TFclientes.salvarClick(Sender: TObject);begin //informando ao usurio mensagens.Caption:='Rotina de gravao de registros'; //critica de permisso if ecodigo.Text='' then showmessage('Codigo no informado ou inexistente!') else begin if acao=1 then dm.TClientes.Append; // cria um registro em branco dm.TClientes.Edit; // coloca a tabela em modo de edio, alterao // transfere dados do formulario para a tabela dm.TClientesCodigo.Text:=ecodigo.Text; dm.TClientesTipo.Value:=etipo.ItemIndex; dm.TClientesBairro.Text:=ebairro.Text; dm.TClientesCpf_cnpj.Text:=ecpf_cnpj.Text; dm.TClientesCliente.Text:=ecliente.Text; dm.TClientesRg_insestaudal.Text:=erg_insestadual.Text; dm.TClientesLogradouro.Text:=elogradouro.Text; dm.TClientesComplemento.Text:=ecomplemento.Text; dm.TClientesNumero.Text:=enumero.Text; dm.TClientesCidade.Text:=ecidade.Text; dm.TClientesEstado.Text:=eestado.Text; dm.TClientesCep.Text:=ecep.Text; dm.TClientesTelefone.Text:=etelefone.Text; // grava dados dm.TClientes.Post; // mensagem ao usuario showmessage('Registro salvo!'); end; //desabilitao dos botes salvar.Enabled:=false; excluir.Enabled:=false; // limpeza dos campos ecodigo.Text:=''; etipo.ItemIndex:=-1; ebairro.Text:=''; ecpf_cnpj.Text:=''; ecliente.Text:=''; erg_insestadual.Text:=''; elogradouro.Text:='';

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 60 de 272

    ecomplemento.Text:=''; enumero.Text:=''; ecidade.Text:=''; eestado.Text:=''; ecep.Text:=''; etelefone.Text:=''; //inicializao da acao acao:=0;end;

    procedure TFclientes.excluirClick(Sender: TObject);begin //informando ao usurio mensagens.Caption:='Rotina de excluso de registros'; //informao ao usuario showmessage('Registro excludo'); // excluso do registro dm.TClientes.Delete; //desabilitao dos botes salvar.Enabled:=false; excluir.Enabled:=false; // limpeza dos campos ecodigo.Text:=''; etipo.ItemIndex:=-1; ebairro.Text:=''; ecpf_cnpj.Text:=''; ecliente.Text:=''; erg_insestadual.Text:=''; elogradouro.Text:=''; ecomplemento.Text:=''; enumero.Text:=''; ecidade.Text:=''; eestado.Text:=''; ecep.Text:=''; etelefone.Text:=''; //inicializao da acao acao:=0;end;

    procedure TFclientes.ecodigoExit(Sender: TObject);begin if ecodigo.Text'' then begin // vericando se alguma acao foi definida case acao of 0:begin //informando ao usuario showmessage('Nenhuma acao foi definida'); mensagens.Caption:='Defina uma ao'; end; 1:begin //verificando se o registro j existe dm.TClientes.Locate('codigo',ecodigo.Text,[locaseinsensitive]); if ecodigo.Text=dm.TClientesCodigo.Text then begin // informando ao usuario showmessage('Registro j existe'); // mostranddo os dados ecodigo.Text:=dm.TClientesCodigo.Text;

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 61 de 272

    etipo.ItemIndex:=dm.TClientesTipo.Value; ebairro.Text:=dm.TClientesBairro.Text; ecpf_cnpj.Text:=dm.TClientesCpf_cnpj.Text; ecliente.Text:=dm.TClientesCliente.Text; erg_insestadual.Text:=dm.TClientesRg_insestaudal.Text; elogradouro.Text:=dm.TClientesLogradouro.Text; ecomplemento.Text:=dm.TClientesComplemento.Text; enumero.Text:=dm.TClientesNumero.Text; ecidade.Text:=dm.TClientesCidade.Text; eestado.Text:=dm.TClientesEstado.Text; ecep.Text:=dm.TClientesCep.Text; etelefone.Text:=dm.TClientesTelefone.Text; //redefinindo acao acao:=2; mensagens.Caption:='Ao redefinda para navegao'; //redefinio dos botes salvar.Enabled:=false; excluir.Enabled:=true; end else begin //redefinio dos botes salvar.Enabled:=true; excluir.Enabled:=false; end; end; 2:begin //verificando se o registro j existe dm.TClientes.Locate('codigo',ecodigo.Text,[locaseinsensitive]); if ecodigo.Text=dm.TClientesCodigo.Text then begin // mostrando os dados ecodigo.Text:=dm.TClientesCodigo.Text; etipo.ItemIndex:=dm.TClientesTipo.Value; ebairro.Text:=dm.TClientesBairro.Text; ecpf_cnpj.Text:=dm.TClientesCpf_cnpj.Text; ecliente.Text:=dm.TClientesCliente.Text; erg_insestadual.Text:=dm.TClientesRg_insestaudal.Text; elogradouro.Text:=dm.TClientesLogradouro.Text; ecomplemento.Text:=dm.TClientesComplemento.Text; enumero.Text:=dm.TClientesNumero.Text; ecidade.Text:=dm.TClientesCidade.Text; eestado.Text:=dm.TClientesEstado.Text; ecep.Text:=dm.TClientesCep.Text; etelefone.Text:=dm.TClientesTelefone.Text; //redefinio dos botes salvar.Enabled:=true; excluir.Enabled:=true; end else begin // informando ao usuario showmessage('Registro no existe'); //redefinio dos botes salvar.Enabled:=false; excluir.Enabled:=false; end; end; end;

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 62 de 272

    end; if ecodigo.Text='' then begin // redefinindo acao acao:=0; mensagens.Caption:='Defina uma ao'; //redefinio dos botes salvar.Enabled:=false; excluir.Enabled:=false; end;end;

    procedure TFclientes.etipoClick(Sender: TObject);begin case etipo.ItemIndex of -1:begin label1.Visible:=false; ecpf_cnpj.Visible:=false; erg_insestadual.Visible:=false; end; 0:begin label1.Caption:='C.P.F.:'; label1.Visible:=true; ecpf_cnpj.EditMask:='999.999.999-99;0'; ecpf_cnpj.Visible:=true; erg_insestadual.EditLabel.Caption:='R.G.:'; erg_insestadual.Visible:=true; end; 1:begin label1.Caption:='C.N.P.J.:'; label1.Visible:=true; ecpf_cnpj.EditMask:='99.999.999/9999-99;0'; ecpf_cnpj.Visible:=true; erg_insestadual.EditLabel.Caption:='I.Est.:'; erg_insestadual.Visible:=true; end; end;end;

    procedure TFclientes.fecharClick(Sender: TObject);begin //fechamento da tabela dm.TClientes.Close; // fechamento do formulrio fclientes.Close;end;

    procedure TFclientes.localizarClick(Sender: TObject);begin panel1.Enabled:=true; elocaliza.ItemIndex:=0; ebuscar.EditMask:=''; ebuscar.Text:='';end;

    procedure TFclientes.elocalizaClick(Sender: TObject);begin case elocaliza.ItemIndex of 0:begin

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 63 de 272

    // ajustando a chave de ndices dm.TClientes.IndexName:='idcliente'; dm.TClientes.SetKey; dm.TClientes.First; //configurando campo de busca ebuscar.EditMask:=''; ebuscar.Text:=''; ebuscar.Width:=ecliente.Width; end; 1:begin // ajustando a chave de ndices dm.TClientes.IndexName:=''; dm.TClientes.SetKey; dm.TClientes.First; //configurando campo de busca ebuscar.EditMask:='9999999;0'; ebuscar.Text:=''; ebuscar.Width:=ecodigo.Width; end; 2:begin // ajustando a chave de ndices dm.TClientes.IndexName:=''; dm.TClientes.SetKey; dm.TClientes.First; //configurando campo de busca ebuscar.EditMask:='999.999.999-99;0'; ebuscar.Text:=''; ebuscar.Width:=ecpf_cnpj.Width; end; 3:begin // ajustando a chave de ndices dm.TClientes.IndexName:=''; dm.TClientes.SetKey; dm.TClientes.First; //configurando campo de busca ebuscar.EditMask:='99.999.999/9999-99;0'; ebuscar.Text:=''; ebuscar.Width:=ecpf_cnpj.Width; end; end;end;

    procedure TFclientes.BitBtn1Click(Sender: TObject);begin case elocaliza.ItemIndex of 0:dm.TClientes.FindNearest([ebuscar.Text]); 1:dm.TClientes.FindNearest([strtoint(ebuscar.Text)]); 2,3:dm.TClientes.Locate('CPF_CNPJ',ebuscar.Text,[locaseinsensitive]); end;end;

    procedure TFclientes.DBGrid1DblClick(Sender: TObject);begin // mostrando os dados ecodigo.Text:=dm.TClientesCodigo.Text; etipo.ItemIndex:=dm.TClientesTipo.Value; ebairro.Text:=dm.TClientesBairro.Text; ecpf_cnpj.Text:=dm.TClientesCpf_cnpj.Text; ecliente.Text:=dm.TClientesCliente.Text;

  • [email protected]

    Delphi 2005 for win32Fbio Jos de Gondra Ramos

    Pgina 64 de 272

    erg_insestadual.Text:=dm.TClientesRg_insestaudal.Text; elogradouro.Text:=dm.TClientesLogradouro.Text; ecomplemento.Text:=dm.TClientesComplemento.Text; enumero.Text:=dm.TClientesNumero.Text; ecidade.Text:=dm.TClientesCidade.Text; eestado.Text:=dm.TClientesEstado.Text; ecep.Text:=dm.TClientesCep.Text; etelefone.Text:=dm.TClientesTelefone.Text; //redefinio dos botes salvar.Enabled:=true; excluir.Enabled:=true; //redefinindo a ao acao:=2;end;

    Comentrios:

    Exerccio 08 Crie um cadastro de produtos e um cadastro de for