Fórum Como cancelar a passagem do foco para outro componente? #282640

23/05/2005

0

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


Aldus

Aldus

Responder

Posts

23/05/2005

Massuda

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.


Responder

Gostei + 0

23/05/2005

Aldus

Usei assim e nada aconteceu:

   if NumeroInvalido then
      begin
         MessageDlg(NomeRep+´ inválido!´, mtConfirmation,[mbOk],0);
         Result:=Numero;
         Abort;
      end;


O que mais posso tentar?

Mario


Responder

Gostei + 0

23/05/2005

Marco Salles

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:

   if NumeroInvalido then 
      begin 
         MessageDlg(NomeRep+´ inválido!´, mtConfirmation,[mbOk],0); 
         Result:=Numero; 
         FNomeFormulario.NomeComponente.SetFocus;
      end;


Isto não funciona :?: :?: :?:


Responder

Gostei + 0

23/05/2005

Aldus

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.


Responder

Gostei + 0

23/05/2005

Marco Salles

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



Responder

Gostei + 0

23/05/2005

Aldus

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´.


Responder

Gostei + 0

23/05/2005

Marco Salles

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 ...


Responder

Gostei + 0

23/05/2005

Aldus

Olá Marco, seguindo novamente instrução, procurei por algo que voltasse ao componente anterior e resolvi com o seguinte código:

   if NumeroInvalido then
      begin
         wRequest(NomeRep+´ inválido!´,1);
         Result:=Numero;
         Screen.ActiveForm.Perform(WM_NEXTDLGCTL,1,0);
      end;


Obrigado pela ajuda

Até


Responder

Gostei + 0

23/05/2005

Kotho

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...


Responder

Gostei + 0

23/05/2005

Marco Salles

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 :?: :?: :?:


Responder

Gostei + 0

23/05/2005

Aldus

Realmente, coloquei o nome do objeto como parâmetro e agora está OK.

Até


Responder

Gostei + 0

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

Aceitar