Problemas com MaskEdit
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
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
Curtidas 0
Respostas
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