Como cancelar a passagem do foco para outro componente?
Bom dia amigos, fiz funções para validar CNPJ e CPF, em que o usuário digita, pressiona enter e a função elimina os caracteres e devolve o Doc formatado e validado. Como faço para que lá na função, ao verificar o documento errado ele cancele a passagem para o próximo componente.
Uma boa semana a todos
Mario
Uma boa semana a todos
Mario
Aldus
Curtidas 0
Respostas
Massuda
23/05/2005
Não testei, mas pelo que me lembro você pode chamar a procedure Abort da unit SysUtils no caso da sua validação falhar; isso impedirá a mudança do foco de entrada.
GOSTEI 0
Aldus
23/05/2005
Usei assim e nada aconteceu:
O que mais posso tentar?
Mario
if NumeroInvalido then begin MessageDlg(NomeRep+´ inválido!´, mtConfirmation,[mbOk],0); Result:=Numero; Abort; end;
O que mais posso tentar?
Mario
GOSTEI 0
Marco Salles
23/05/2005
Nesta mesma rotina , ao verificar que o documento esta errado , porque que voce não devolve ao component em questão o Foco
Por exemplo:
Isto não funciona :?: :?: :?:
Por exemplo:
if NumeroInvalido then begin MessageDlg(NomeRep+´ inválido!´, mtConfirmation,[mbOk],0); Result:=Numero; FNomeFormulario.NomeComponente.SetFocus; end;
Isto não funciona :?: :?: :?:
GOSTEI 0
Aldus
23/05/2005
Olá Marco.
A função de validação está em uma unit genérica que utilizarei em todo o sistema, não só no form em questão.
A função de validação está em uma unit genérica que utilizarei em todo o sistema, não só no form em questão.
GOSTEI 0
Marco Salles
23/05/2005
A função de validação está em uma unit genérica que utilizarei em todo o sistema, não só no form em questão.
Não tem problema , Acrescente mais um parametro a esta função
na hora de chamar
NomeFunção(NomeDoEdit,Outros paramentros )
e na função
function NomeDaFunção(Editor : TEdit ; Outros paramentros):Retorno begin bla bla... if NumeroInvalido then begin MessageDlg(NomeRep+´ inválido!´, mtConfirmation,[mbOk],0); Result:=Numero; Editor.SetFocus; end; bal bla... end
GOSTEI 0
Aldus
23/05/2005
Marcos, para evitar a passagem de outro parâmetro, tem como descobrir o nome do componente com foco e passar um setfocus.
Pesquisei algo sobre, mas as dicas que encontrei são com o uso de ActiveControl, mas me dá erro que não foi declarado. Será que é porque não estou nos eventos ´onkey´.
Pesquisei algo sobre, mas as dicas que encontrei são com o uso de ActiveControl, mas me dá erro que não foi declarado. Será que é porque não estou nos eventos ´onkey´.
GOSTEI 0
Marco Salles
23/05/2005
tem como descobrir o nome do componente com foco e passar um setfocus.
[b:937cf55573] Jeito Tem[/b:937cf55573] , mas o problema é que este método que voce esta executando é nun evento OnExit , e o Foco ja foi para o OutroCOmponente .. Para contornar este problema sera necessário , muito mais digitação , do que acrescentar um novo parametro na sua função.
Pesquisei algo sobre, mas as dicas que encontrei são com o uso de ActiveControl,
mas me dá erro que não foi declarado. Será que é porque não estou nos eventos ´onkey´.
Não tem nada a ver ...
GOSTEI 0
Aldus
23/05/2005
Olá Marco, seguindo novamente instrução, procurei por algo que voltasse ao componente anterior e resolvi com o seguinte código:
Obrigado pela ajuda
Até
if NumeroInvalido then begin wRequest(NomeRep+´ inválido!´,1); Result:=Numero; Screen.ActiveForm.Perform(WM_NEXTDLGCTL,1,0); end;
Obrigado pela ajuda
Até
GOSTEI 0
Kotho
23/05/2005
Não se esqueça que, com o mouse, eu posso passar de um controle para outro do formulário, sem que esteja em alguma ordem... Vai disparar o OnExit, mas não irá retornar para o controle certo...
Acho que a melhor saida seria passar o controle como parmâmetro mesmo...
Acho que a melhor saida seria passar o controle como parmâmetro mesmo...
GOSTEI 0
Marco Salles
23/05/2005
Screen.ActiveForm.Perform(WM_NEXTDLGCTL,1,0);
:arrow: :arrow: eu não sabia que isto retornava ao Ultimo controle
Não se esqueça que, com o mouse, eu posso passar de um controle para outro do formulário, sem que esteja em alguma ordem... Vai disparar o OnExit, mas não irá retornar para o controle certo...
Acho que a melhor saida seria passar o controle como parmâmetro mesmo...
Afinal esta instrução retorna ou não para o ultimo controle :?: :?: :?:
GOSTEI 0
Aldus
23/05/2005
Realmente, coloquei o nome do objeto como parâmetro e agora está OK.
Até
Até
GOSTEI 0