GARANTIR DESCONTO

Fórum Detectar click num botão #349938

01/12/2007

0

Tenho 5 Edits num form.
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

Cps.art

Responder

Posts

03/12/2007

Daykas

Prezado! A validação de CPF tem uma falha gritante, pois qualquer número que utilize uma função aritmetica com zero sempre será zero. Por isso, pode utilizar a sequencia de 11 zeros.


Responder

Gostei + 0

03/12/2007

Cps.art

Caro daykas, obrigado.

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.


Responder

Gostei + 0

04/12/2007

Renan.cb

nao dá pra testar se o conteudo do editCpf for vazio passa? Quando for vazio nao faz validação.


Responder

Gostei + 0

04/12/2007

Cps.art

Olá Renan.cb.

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.


Responder

Gostei + 0

05/12/2007

Facc

Olá Renan.cb. 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.


Amigo, tenta assim

if Trim(EdtCPF.Text) <> ´´ then
Faz validação


Responder

Gostei + 0

05/12/2007

Renan.cb

só checando, acho que tu te enganaste pois nao existe evento onClose no Tedit, acho que tu quis dizer onExit.

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.


Responder

Gostei + 0

05/12/2007

Renan.cb

só corrigindo o que escrevi.

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.


Responder

Gostei + 0

05/12/2007

Cps.art

É verdade Renan, o evento da Edit é OnExit e não OnClose.
Confundi na postagem da mensagem.

Obrigado


Responder

Gostei + 0

13/12/2007

Aeciovc

Cara, pq vc não coloca essa procedure de checagem na hora que ele clicar em um botão por exemplo ´Cadastrar´?? assim a validação é feita quando ele tentar cadastrar, podendo voltar a hora que quiser pro outro form!!


Responder

Gostei + 0

13/12/2007

Cps.art

Caro aeciovc, obrigado pela atenção, mas como citei na abertura deste tópico, a idéia é não usar botões e nem o mouse.

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.


Responder

Gostei + 0

16/12/2007

Dedi

cps.art, trabalho da mesmo forma que voce, isso para evitar a digitação desnecessaria de dados ,os usuarios não podem perder tempo principalmente quando tem um cliente esperando em sua frente. como solução para a validação e o cancelamento da mesma faço sempre assim:
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.


Responder

Gostei + 0

16/12/2007

Cps.art

É isso aí Dedi.

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.


Responder

Gostei + 0

16/12/2007

Mano_froids

É isso aí Dedi. 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.


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.


Responder

Gostei + 0

17/12/2007

Mano_froids

[quote:3ca2419235=´cps.art´]É isso aí Dedi. 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.


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;


Responder

Gostei + 0

17/12/2007

Renan.cb

caro Mano_Froids,

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar