Renanbg 1 Denunciar post Postado Setembro 24, 2007 To quase lá agora, mas ainda da um erro vou colocar todo o codigo e ir comentando To usando 3 funcoes Uma para formatar o campo function Tfboleto.FormatarCPFCNPJ(const Doc: String): String;begin if (Length(Doc) = 11) then begin Result:= Copy(Doc,1,3) + '.' + Copy(Doc,4,3) + '.' + Copy(Doc,7,3) + '-' + Copy(Doc,10,2); end; if (Length(Doc) = 14) then begin Result:= Copy(Doc,1,2) + '.' + Copy(Doc,3,3) + '.' + Copy(Doc,6,3) + '/' + Copy(Doc,9,4) + '-' + Copy(Doc,13,2); end;end;uma para validar cpf function Tfboleto.cpf(num:string):boolean;varn1,n2,n3,n4,n5,n6,n7,n8,n9:integer;d1,d2:integer;digitado,calculado:string;beginn1:=StrToInt(num[1]);n2:=StrToInt(num[2]);n3:=StrToInt(num[3]);n4:=StrToInt(num[5]);n5:=StrToInt(num[6]);n6:=StrToInt(num[7]);n7:=StrToInt(num[9]);n8:=StrToInt(num[10]);n9:=StrToInt(num[11]);if (n1=n2) and (n2=n3) and (n3=n4) and (n4=n5) and (n5=n6)and (n6=n7) and (n7=n8) and (n8=n9) thencpf:=falseElseBegind1:=n9*2+n8*3+n7*4+n6*5+n5*6+n4*7+n3*8+n2*9+n1*10;d1:=11-(d1 mod 11);if d1>=10 then d1:=0;d2:=d1*2+n9*3+n8*4+n7*5+n6*6+n5*7+n4*8+n3*9+n2*10+n1*11;d2:=11-(d2 mod 11);if d2>=10 then d2:=0;calculado:=IntToStr(d1)+IntToStr(d2);digitado:=num[13]+num[14];if calculado=digitado thencpf:=trueelsecpf:=false;endend;uma para formatar cnpj function Tfboleto.cnpj(num:string):Boolean;varn1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12:integer;d1,d2:integer;digitado,calculado:string;beginn1:=StrToInt(num[1]);n2:=StrToInt(num[2]);n3:=StrToInt(num[4]);n4:=StrToInt(num[5]);n5:=StrToInt(num[6]);n6:=StrToInt(num[8]);n7:=StrToInt(num[9]);n8:=StrToInt(num[10]);n9:=StrToInt(num[12]);n10:=StrToInt(num[13]);n11:=StrToInt(num[14]);n12:=StrToInt(num[15]);if (n1=n2) and (n2=n3) and (n3=n4) and (n4=n5) and (n5=n6)and (n6=n7) and (n7=n8) and (n8=n9) and (n9=n10) and (n10=n11) and (n11=n12) thencnpj:=falseelsebegind1:=n12*2+n11*3+n10*4+n9*5+n8*6+n7*7+n6*8+n5*9+n4*2+n3*3+n2*4+n1*5;d1:=11-(d1 mod 11);if d1>=10 then d1:=0;d2:=d1*2+n12*3+n11*4+n10*5+n9*6+n8*7+n7*8+n6*9+n5*2+n4*3+n3*4+n2*5+n1*6;d2:= 11-(d2 mod 11);if d2>=10 then d2:=0;calculado:=IntToStr(d1)+IntToStr(d2);digitado:=num[17]+num[18];if calculado=digitado thencnpj:=Trueelsecnpj:=false;endend;Agora uso esse codigo no evento de onexit do edit procedure Tfboleto.EditCgccpfExit(Sender: TObject);var num_cpf, num_cnpj:string;beginEditCgccpf.Text:= FormatarCPFCNPJ(EditCgccpf.Text); //formata o campoif (Length(EditCgccpf.Text) = 11) then // valida cpfnum_cpf:=EditCgccpf.Text;if NOT cpf(EditCgccpf.Text) thenBeginShowMessage('CPF INVALIDO!!!');EditCgccpf.SetFocus;exit;end;if (Length(EditCgccpf.Text) = 14) then // valida cnpjnum_cnpj:=EditCgccpf.Text; If not cnpj(EditCgccpf.Text) thenBeginShowMessage('CNPJ INVALIDO!!!');EditCgccpf.SetFocus;exit;end;end;Agora o problema Se uso só uma das funcoes no exit do edit funciona certo, mas usando o codigo acima com as duas da o erro abaixo qndo o valor é valido Alguma idéia? Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Setembro 24, 2007 Somente alguns problemas no OnExit de validação e bloco de código, tente assim: procedure TForm1.EditCgccpfExit(Sender: TObject);var num_cpf, num_cnpj:string;beginnum_cpf:=EditCgccpf.Text;EditCgccpf.Text:=FormatarCPFCNPJ(EditCgccpf.Text); //formata o campoif (Length(num_cpf) = 11) then // valida cpf begin if NOT cpf(EditCgccpf.Text) then Begin ShowMessage('CPF INVALIDO!!!'); EditCgccpf.SetFocus; exit; end; end;if (Length(num_cpf) = 14) then // valida cnpj begin If not cnpj(EditCgccpf.Text) then Begin ShowMessage('CNPJ INVALIDO!!!'); EditCgccpf.SetFocus; exit; end; end;end; Compartilhar este post Link para o post Compartilhar em outros sites
Renanbg 1 Denunciar post Postado Setembro 24, 2007 Opa..deu certo marcioAgora preciso de mais uma coisapreciso colocar nesse codigo um teste para caso o tamanho seja diferente de 11 ou 14 de uma mensagem dizendo q tem algo errado, pq do jeito q esta se eu digitar um valor diferente de 11 ou 14 o campo fica em branco...Pode me ajudar? Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Setembro 24, 2007 Uma das formas: procedure TForm1.EditCgccpfExit(Sender: TObject);var num_cnpj:string; num_cpf: integer;beginnum_cpf:=Length(EditCgccpf.Text);if ((num_cpf = 11) or (num_cpf = 14)) then begin EditCgccpf.Text:=FormatarCPFCNPJ(EditCgccpf.Text); //formata o campo if (num_cpf = 11) then // valida cpf begin if NOT cpf(EditCgccpf.Text) then Begin ShowMessage('CPF INVALIDO!!!'); EditCgccpf.SetFocus; end; end; if (num_cpf = 14) then // valida cnpj begin If not cnpj(EditCgccpf.Text) then Begin ShowMessage('CNPJ INVALIDO!!!'); EditCgccpf.SetFocus; end; end; endelse begin ShowMessage('Tamanho inválido !!!'); EditCgccpf.SetFocus; end;end; Compartilhar este post Link para o post Compartilhar em outros sites
Renanbg 1 Denunciar post Postado Setembro 24, 2007 Deu certo, agora só falta uma coisa Estou trabalhando td isso direto no dbedit ao inves do maskedit e se eu for passando todos os campos com enter numa edição no exit vai dar uma mensagem de erro como mostrei no post acima para cpf e vai dar o showmessage de tamanho invalido para o cnpj. Preciso remover os "." "/" "-" (pontinhos, barras e traços) do campo no evento de enter se fosse um maskedit eu só faria maskedit1.editmask:= ''; mas como posso fazer no dbedit? Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Setembro 24, 2007 No evento OnEnter pode fazer algo do tipo: procedure TForm1.EditCgccpfEnter(Sender: TObject);beginEditCgccpf.Text:=RemoveFormatacaoCPFCNPJ(EditCgccpf.Text);end; E a função: function RemoveFormatacaoCPFCNPJ(const Doc: String): String;var x: integer; ret: string;beginret:='';for x:=1 to Length(Doc) do if (Doc[x] in ['0'..'9']) then ret:=ret + Doc[x];Result:=ret;end; No caso somente vai pegar os números, removendo os caracteres... Compartilhar este post Link para o post Compartilhar em outros sites
Renanbg 1 Denunciar post Postado Setembro 24, 2007 beleza, marcio...Tinha pensado nisso...só faltava saber fazer..heheheAgora ta 100%Grato pela ajuda e pela paciênciaAbraço... Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Setembro 24, 2007 beleza... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites