Exercício 03 Construir um programa em Delphi com um menu
Transcrição
Exercício 03 Construir um programa em Delphi com um menu
Exercício 03 Construir um programa em Delphi com um menu, cadastrando informações de clientes de um banco, conforme tela abaixo. Para tal, inserir, na paleta Standard clicar em menu. Uma vez no form, dê um clique duplo sobre o objeto e insira a tela conforme abaixo. Não esqueça do & e das teclas de atalho. Salvar o projeto com o nome menu_exe.dpr e o form principal princip.pas. Para criar um novo form clique em File/New Form (ou conforme a sua versão do Delphi). Em seguida salvar novamente o projeto. Aparecerá a tela para definir o nome do novo form , incluir.pas. Inclua os objetos conforme tela abaixo. Objeto Form Label (qt 5) Propriedade Name Caption Caption Edit (qt 2) Name MaskEdit (qt 2) EditMask Name RadioGroup Name items Valor Cliente_incluir Inclusão de Clientes Nome Endereço CEP Telefone Renda Mensal Ed_nome Ed_endereco 00000\-999;1;_ para CEP !\(999\)0000-0000;1;_ para Tel !99990,00;1;0 para renda mensal Mk_cep Mk_telefone Mk_renda Rg_civil Solteiro Casado Viúvo Desquitado Divorciado GroupBox CheckBox Caption Name Caption Button Caption Name Serviços Ck_especial Ck_credito Cheque Escpecial Cartão de Crédito Incluir BB_incluir Algumas observações sobre o MASKEDIT: A propriedade EditMask do componente MaskEdit possui três partes, separadas por ; (ponto-e-vírgula): !\(9xx99\)000-0000;1;_ !\(9xx99\)000-0000 - é a máscara em si. 1 - indica que os caracteres serão salvos como parte do dado; 0 - indica que os caracteres NÃO serão salvos como parte do dado. _ - caracter usado para representar o branco na máscara. Na máscara o caracter 9 indica que é permitido números, mas não é obrigatório a entrada de dados; o caracter 0 indica que é obrigatório a entrada de números. Desta forma, queria que fosse obrigatório somente o telefone da pessoa, sem necessidade do DDD. Para criar uma entrada de dados como você deseja, utilize a máscara: LLLL99999 O caracter L obriga que seja somente letras (A-Z, a-z) e o 9 (como já disse) somente números Caracteres especiais utilizados com a máscara: ! Faz com que a digitação da máscara fique parada no primeiro caracter, fazendo com que os caracteres digitados que se movam. Ex: !;0;_ > Todos os caracteres alfabéticos digitados após este símbolo serão convertidos para maiúsculos. Ex: >aaa;0;_ < Todos os caracteres alfabéticos digitados após este símbolo serão convertidos para minúsculos. Ex: <aaa;0;_ <> Anula o uso dos caracteres > e <. Ex: >aaa<>aaa;0;_ \ Utilizado para marcar determinado caractere não especial como fixo, não podendo sobrescrevê-lo. Ex: !\(999\)000-0000;0;_ L Caracteres alfabéticos (A-Z, a-z.) de preenchimento obrigatório. Ex: LLL;1;_ l (Letra ele minúscula) Caracteres alfabéticos (A-Z, a-z.) de preenchimento opcional. Ex: lll;1;_ A Caracteres alfanuméricos (A-Z, a-z, 0-9) de preenchimento obrigatório. Ex: AAA;1;_ a Caracteres alfanuméricos (A-Z, a-z, 0-9) de preenchimento opcional. Ex: aaa;1;_ C Exige preenchimento obrigatório com qualquer caractere para a posição. Ex: CCC;1;_ c Permite qualquer caractere para a posição de preenchimento opcional. Ex: ccc;1;_ 0 Caracteres numéricos (0-9) de preenchimento obrigatório. Ex: 000;1;_ 9 Caracteres numéricos (0-9) de preenchimento opcional. Ex: 999;1;_ # Caracteres numéricos (0-9) e os sinais de - ou + de preenchimento opcional. Ex: ###;1;_ : Utilizado como separador de horas, minutos e segundos. Ex: !00:00:00;1;_ / Utilizado como separador de dia, mês e ano. Ex: !99/99/9999;1;_ ; Separa os três campos da máscara. _ Caractere usado normalmente nas posições do campo ainda não preenchidas. EVENTOS: Dê um clique duplo no menu Sair e insira o seguinte código: procedure Tmain.Sair1Click(Sender: TObject); begin if MessageDlg('Confirma a saída. Yes ou No ?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin Application.Terminate; end; end; No meuu Inserir, adicionar o código: procedure Tmain.Incluir1Click(Sender: TObject); begin cliente_incluir.bb_incluir.visible := true; cliente_incluir.bb_alterar.visible := false; cliente_incluir.caption := 'Inclusão de clientes'; cliente_incluir.Show; end; CRIANDO O BANCO DE DADOS No Access criar o seguinte banco de dados com a tabela cliente. CONEXÃO ODBC No painel de controle, em ferramentas administrativas, acessar Fonte de Dados ODBC. Selecionar Banco de Dados MS Access: Nomear a base com “banco_eter” selecionar a base do banco criado no Access. CRIANDO A CONEXÃO NO DELPHI. Os objetos de bancos de dados são três, a saber: DATABASE, DATASOURCE e TABLE. Por formulário temos apenas um DATABASE. Sendo assim, Clicar duplo no Database: Selecionar o Alias name com banco_eter (criado na conexão ODBC). Na propriedade Name, digite db_eter. Desmarcar os checks de Login prompt e Keep inactive connection. Clique em OK. Altere as seguintes propriedades. OBJETO Database Table PROPRIEDADE Connected Name VALOR True Tb_cliente Datasource Database Table Name Active Name DataSet Db_eter Cliente True Ds_cliente Tb_cliente No evento click do botão inserir: procedure Tcliente_incluir.bb_incluirClick(Sender: TObject); var estado_civil, servico : string; begin case rg_civil.ItemIndex of 0 : estado_civil := 'Solteiro'; 1 : estado_civil := 'Casado'; 2 : estado_civil := 'Viúvo'; 3 : estado_civil := 'Desquitado'; 4 : estado_civil := 'Divorciado'; else showmessage('Estado civil deve ser preenchido'); rg_civil.SetFocus; exit; end; if ck_especial.State = cbChecked then servico := 'Cq. Especial'; if ck_credito.State = cbChecked then servico := servico + ' - Cartão'; try with tb_cliente do begin Append; FieldByName('nome_cli').Value := ed_nome.Text; FieldByName('endereco_cli').Value := ed_endereco.Text; FieldByName('cep_cli').Value := mk_cep.Text; FieldByName('telefone_cli').Value := mk_telefone.Text; FieldByName('estcivil_cli').Value := estado_civil; FieldByName('servico_cli').Value := servico; FieldByName('renda_cli').AsVariant := strtofloat(mk_renda.Text); Post; end; except on E : EDBEngineError do begin messageDlg('Ocorreu o seguinte erro ' + E.Message, mtInformation, [mbOk], 0 ); end; end; cliente_incluir.close; end; CRIANDO O FORMULÁRIO DE CONSULTA Clicar em New/Other/Form. Salvar com nome consulta.pas. Alterar a propriedade name para “cliente_consulta” e o caption para “Consulta a Cliente”. Para acrescentar os objetos de consulta acessar a paleta Data Control com os objetos dbGrid e dbNavegator. Utilizaremos a conexão realizada no formulário, cliente_incluir. Para tal, clicar em File/Uses Unit/ e selecione o formulário referido. Alterar as propriedades DataSource os objetos Dbgrid e DbNavegator. Alterar a propriedade VisibleButtons do dbNavegator, retirando os botões de inclusão, remoção, edição e cancelamento. Acrescentar os seguintes objetos. Objeto Propriedade Label Caption Edit Name Text Button Caption Valor Consulta pelo nome Ed_nome “Limpar” Procurar.... Criar o evento click do botão procurar... procedure Tcliente_consulta.Button1Click(Sender: TObject); begin if NOT cliente_incluir.tb_cliente.locate('nome_cli',ed_nome.text,[loCaseInsensitive, loPartialKey]) then showmessage('Não foi encontrado '+ ed_nome.text) end; CRIANDO O FORMULÁRIO DE ALTERAÇÃO. Crie um novo form com o name cliente_alterar e o nome físico alterar.pas Acrescentar os objetos abaixo. OBJETO Form Label Edit Button PROPRIEDADE Name borderStyle Caption Name Text Caption VALOR Cliente_alterar bsDialog Digite o código do cliente Ed_codigo ‘limpar’ Alterar Criar o evento click no botão alterar. procedure Tcliente_incluir.bb_alterarClick(Sender: TObject); var estado_civil, servico : string; begin case rg_civil.ItemIndex of 0 : estado_civil := 'Solteiro'; 1 : estado_civil := 'Casado'; 2 : estado_civil := 'Viúvo'; 3 : estado_civil := 'Desquitado'; 4 : estado_civil := 'Divorciado'; else showmessage('Estado civil deve ser preenchido'); rg_civil.SetFocus; exit; end; if ck_especial.State = cbChecked then servico := 'Cq. Especial'; if ck_credito.State = cbChecked then servico := servico + ' - Cartão'; try if cliente_incluir.tb_cliente.FindKey([strtoint(ed_codigo.text)]) then begin with tb_cliente do begin Edit; FieldByName('nome_cli').Value := ed_nome.Text; FieldByName('endereco_cli').Value := ed_endereco.Text; FieldByName('cep_cli').Value := mk_cep.Text; FieldByName('telefone_cli').Value := mk_telefone.Text; FieldByName('estcivil_cli').Value := estado_civil; FieldByName('servico_cli').Value := servico; FieldByName('renda_cli').AsVariant := strtofloat(mk_renda.Text); Post; end; showmessage('Alteração realizada com sucesso'); end else showmessage('Não foi possível encontrar registro com código '+ ed_codigo.Text); except on E : EDBEngineError do begin messageDlg('Ocorreu o seguinte erro ' + E.Message, mtInformation, [mbOk], 0 ); end; end; cliente_incluir.close; end;