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
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
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
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.
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.
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
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
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
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
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
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.
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.
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:
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.
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
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
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
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:
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;
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.
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
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
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;
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.
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)
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.
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;
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).
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.
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
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.
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.
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
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
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.
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:
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.
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:
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
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.
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.
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;
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
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:
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
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.
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:
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;
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);
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
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:
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:
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:
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
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
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:='';
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
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
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:='';
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;
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;
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
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;
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
Top Related