Fórum Detectar click num botão #349938
01/12/2007
0
Na primeira é digitado um numero de CPF, e no evento OnClose dessa Edit manda checar a validade do CPF numa função.
No meu projeto mudo de Edits com o Enter, isso significa que quando digito o CPF e dou o Enter, valida o CPF e se for verdadeiro vai me pedir o próximo dado na próxima Edit.
Até aí tudo bem, porem, se eu não quiser digitar o CPF e voltar ao Form anterior, clico num botão, e como estou ativando o OnClose daquela Edit, e como a Edit está vazia, dá a mensagem de que o CPF é inválido, pois antes de atender o ´Voltar´ do botão, ele vai tentar validar o CPF.
Tem como, no inicio da procedure de validação, eu colocar uma condição de que se o botão ´Voltar´ foi clicado, simplesmente não executar a validação?
Eu coloquei assim, mas na checagem do projeto já dá um erro de que falta parâmetros.
[b:5e3ad6617d]if BtVoltar.OnClick then
Close;[/b:5e3ad6617d]
O que falta?
Obrigado
Cps.art
Curtir tópico
+ 0Posts
03/12/2007
Daykas
Gostei + 0
03/12/2007
Cps.art
O meu problema não é esse que você citou.
Quanto aos cálculos aritiméticos para se chegar ao DV do CPF, isso eu já fiz.
Dê mais uma olhada na mensagem que abre este tópico e verá que meu problema é detectar o click de um botão.
Abraços.
Gostei + 0
04/12/2007
Renan.cb
Gostei + 0
04/12/2007
Cps.art
Não dá pra fazer isso não, pois de qualquer jeito que eu sair da EditCpf a validação é feita, tanto que o evento OnClose dessa Edit manda para a função de validação, e um número de CPF vazio, é um CPF inválido.
Eu tenho que descobrir uma forma de quando eu clicar num botão para voltar ao form anterior, e o OnClose da EditCpf direcionar-se para a função de validação, lá, naquela procedure, colocar uma linha de código que checa se o desvio foi por dar o Enter na Edit (aí faz a validação), ou se foi um click do botão ´Voltar´( então não faria a validação).
É isso que tá pegando.
Gostei + 0
05/12/2007
Facc
Amigo, tenta assim
if Trim(EdtCPF.Text) <> ´´ then
Faz validação
Gostei + 0
05/12/2007
Renan.cb
Tu deves ter feito um codigo para testar se a tecla apertada dentro do edit foi o enter, certo? entao cria uma variavel booleana e testa ela na função de validação. quando clicar no botao seta false para a variavel quando pressionar seta true.
nao é muito bonito, mas é uma forma de fazer.
Gostei + 0
05/12/2007
Renan.cb
quando pressionar enter seta true para a variavel, quando clicar no botao seta false. dentro do metodo de validação tu testas essa variavel booleana. se for true (veio do enter) nao valida.
Gostei + 0
05/12/2007
Cps.art
Confundi na postagem da mensagem.
Obrigado
Gostei + 0
13/12/2007
Aeciovc
Gostei + 0
13/12/2007
Cps.art
Uso o ENTER para mudar de Edits, pois num trabalho com um grande volume de digitação, é muito mais rápido não ter que tirar a mão do teclado para mover o ponteiro do mouse e clicar num botão.
Como o CPF é o primeiro dado a ser digitado e se ele já estiver no banco de dados aproveito para carregar diversas Edits com dados já digitados anteriormente, evitando assim ter que digitar novamente o nome, endereço, telefone, etc do titular.
Então tenho que validar esse CPF antes de mais nada e em seguida procura-lo no banco de dados.
Já imaginou o cara digitar uma tela inteira de dados, clicar num botão para ´cadastrar´ e o CPF não ser validado.
Ai move o ponteiro do mouse até a Edit, redigita o CPF, clica no botão novamente e só ai percebe que aquele CPF já estava cadastrado e que ele digitou uma porção de dados sem necessidade.
Como sou usuário de grandes sistemas que prestam serviços ao governo do estado, tenho sentido na pele a incompetência dos chamados grandes programadores que fazem exatamente isso que citei acima, com um agravante, dá a mensagem que o CPF é inválido e limpa todos os dados digitados, numa tela com mais de 30 ítens.
Não sei como ainda, mas vou conseguir resolver meu problema e que o sistema funcione da forma que eu quero.
Então deixem suas sugestões e dicas que serão sempre bem vindas.
Obrigado mais uma vez aeciovc.
Gostei + 0
16/12/2007
Dedi
incluo um botão logo depois do edit do cpf os demais ficam dentro de uma panel desabilitados,quando o usuario teclar enter o foco vai pro botão + um enter e é feita a validação do cpf se ok procura no banco e abilita o panel com os edits ( se já cadastrado preenche os edits). se o cpf não for válido então volta o foco pro edit1 e informa que o documento não é valido, caso queira desistir basta fechar a janela,nenhuma validação é feita no onexit do edit.
Esta é a forma que trabalho e tenho conseguido uma boa eficiencia com ela.
obs.
já vi em muitos sistemas em que o usuario tem que ficar digitando e usando o mouse a todo instante, informa um dado em um edit no topo da tela e tem que clicar com mouse lá no rodapé pra validar,isso não tá certo mesmo.
Gostei + 0
16/12/2007
Cps.art
Gostei da sua idéia.
Não tinha pensado nisso.
Apesar da existência do botão, não há necessidade do uso do mouse, apenas o Enter.
Vou adaptar aqui no meu sistema e volta a postar o resultado.
Valeu.
Gostei + 0
16/12/2007
Mano_froids
Acho que posso ajudar, eu estava com o mesmo problema seu ... tenho um formulário com um campo CPF com MaskEdit e a validação é feita assim que sair do MaskEdit, consegui na internet uma validação, mas quando ficava em branco o campo dava um erro então fiz uma pequena modificação do código... só coloquei uma condição se o campo estiver em branco não faz a validação, ai funcionou bem.... só que ainda estou com problema nessa validação, quando o usuário não digita todos os numeros do cpf também da erro ai esse erro ainda não consegui solucionar.
Espero ter ajudado e se postar o seu código acho que fica mais fácil para podermos ajudar.
Gostei + 0
17/12/2007
Mano_froids
Acho que posso ajudar, eu estava com o mesmo problema seu ... tenho um formulário com um campo CPF com MaskEdit e a validação é feita assim que sair do MaskEdit, consegui na internet uma validação, mas quando ficava em branco o campo dava um erro então fiz uma pequena modificação do código... só coloquei uma condição se o campo estiver em branco não faz a validação, ai funcionou bem.... só que ainda estou com problema nessa validação, quando o usuário não digita todos os numeros do cpf também da erro ai esse erro ainda não consegui solucionar.
Espero ter ajudado e se postar o seu código acho que fica mais fácil para podermos ajudar.[/quote:3ca2419235]
Teste esse código ai no seu sistema.
function TFmClientes.TestaCPF(Dado : string) : boolean;
var D1 : array[1..9] of byte;
I,
DF1,
DF2,
DF3,
DF4,
DF5,
DF6,
Resto1,
Resto2,
PrimeiroDigito,
SegundoDigito : integer;
begin
Result := true;
if Length(Dado) = 11 then
begin
for I := 1 to 9 do
if Dado[I] in [´0´..´9´] then
D1[I] := StrToInt(Dado[I])
else
Result := false;
if Result then
begin
DF1 := 0;
DF2 := 0;
DF3 := 0;
DF4 := 0;
DF5 := 0;
DF6 := 0;
Resto1 := 0;
Resto2 := 0;
PrimeiroDigito := 0;
SegundoDigito := 0;
DF1 := 10*D1[1] + 9*D1[2] + 8*D1[3] + 7*D1[4] + 6*D1[5] + 5*D1[6] +
4*D1[7] + 3*D1[8] + 2*D1[9];
DF2 := DF1 div 11;
DF3 := DF2 * 11;
Resto1 := DF1 - DF3;
if (Resto1 = 0) or (Resto1 = 1) then
PrimeiroDigito := 0
else
PrimeiroDigito := 11 - Resto1;
DF4 := 11*D1[1] + 10*D1[2] + 9*D1[3] + 8*D1[4] + 7*D1[5] + 6*D1[6] +
5*D1[7] + 4*D1[8] + 3*D1[9] + 2*PrimeiroDigito;
DF5 := DF4 div 11;
DF6 := DF5 * 11;
Resto2 := DF4 - DF6;
if (Resto2 = 0) or (Resto2 = 1) then
SegundoDigito := 0
else
SegundoDigito := 11 - Resto2;
if (PrimeiroDigito <> StrToInt(Dado[10])) or
(SegundoDigito <> StrToInt(Dado[11])) then
Result := false;
end;
end
else
if Length(Dado) <> 0 then
Result := false;
end;
procedure TFmClientes.MaskEdit1Exit(Sender: TObject);
begin
If not testacpf(MaskEdit1.text) then
Begin
ShowMessage(´CPF Inválido !!´);
MaskEdit1.Text := ´´;
MaskEdit1.SetFocus;
End
Else
end;
Gostei + 0
17/12/2007
Renan.cb
assim como tu fizeste uma verificação se o maskedit é vazio, faça uma para ver se ele é menor que 11 ou 14 (cnpj). Lembre-se de aumentar esse valor caso você esteja passando os caracteres ´especiais´ (.-/).
abraço
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)