Problemas com MaskEdit

Delphi

14/12/2007

Eaee Pessoal.

Estou com alguns problemas para realizar algumas validações com os campos com MASKEDIT.

Vou colocar os probelmas que tenho e o código para vocês poderem entender melhor meus probleminhas.

1. Tenho o campo CPF que é um MASKEDIT 999.999.999-99;0 ... meu problema e quando o usuário sai do campo sem digitar todos os numeros do CPF, pois quando não é digitado nada e quando os numeros estão completos a validação é feita.

Essa é a função da validação do CPF, como o campo não é obrigatório se o usuário não digitar nada então o CPF é válido.

function TFmClientes.cpf(num: string): boolean;
// Testa se o CPF é válido
var
n1,n2,n3,n4,n5,n6,n7,n8,n9: integer;
d1,d2: integer;
digitado, calculado: string;
begin
if (MaskEdit1.Text = (´´)) then
begin
cpf:=true;
end
else
begin
n1:=StrToInt(num[1]);
n2:=StrToInt(num[2]);
n3:=StrToInt(num[3]);
n4:=StrToInt(num[4]);
n5:=StrToInt(num[5]);
n6:=StrToInt(num[6]);
n7:=StrToInt(num[7]);
n8:=StrToInt(num[8]);
n9:=StrToInt(num[9]);
d1:=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[10]+num[11];
if calculado=digitado then
cpf:=true
else
cpf:=false;
end;
end;


Código do evento exit do MaskEdit no campo CPF.

procedure TFmClientes.MaskEdit4Exit(Sender: TObject);
begin
If not DataValida(maskEdit4.text) then
Begin
ShowMessage(´DATA Inválida !!´);
MaskEdit4.Text := ´´;
MaskEdit4.SetFocus;
End
Else
end;

Pensei em forçar o usuário a completar todos os numeros antés de sair do campo ou completar de alguma forma os numeros que não foram digitados, mas não consegui implementar nenhumas delas.


2. O outro campo com problema é a DATA DE NASCIMENTO ... também se o usuário sair do campo antés de completar o Maskedit da o erro e se digitar uma data inválida o erro da antés do TRY e tenho que voltar o programa para dar a mensagem da data inválida.

Function TFmClientes.DataValida(StrD: string): Boolean;
// Testa se uma data é válida
var
D : TDateTime;
begin
if (MaskEdit4.Text = (´ / / ´)) then
begin
Result := True;
end
else
begin
Result := True;
try
D := StrToDate(StrD);
except
on EConvertError do Result:=False;
end;
end;
end;

procedure TFmClientes.MaskEdit4Exit(Sender: TObject);
begin
If not DataValida(maskEdit4.text) then
Begin
ShowMessage(´DATA Inválida !!´);
MaskEdit4.Text := ´´;
MaskEdit4.SetFocus;
End
Else
end;


Se alguem tiver alguma idéia ou algum código que possa solucionar algum dos problemas.

Desde já muito obrigado


Mano_froids

Mano_froids

Curtidas 0

Respostas

Marcosrocha

Marcosrocha

14/12/2007

Amigo está meio confuso... sua função valida CPF mas você colou os eventos do MaskEdit que valida Data.... :?


GOSTEI 0
POSTAR