Fórum Como fazer com que o foco saia do MaskEdit ao final. #207442

19/01/2004

0

--> como fazer com que o foco saia do MaskEdit ao final da digitação.

Eu tenho um maskedit com máscara de data (__/__/____). Preciso que caia em um edit quando ele for todo preenchido sem usar enter ou tab.

Eu tentei usar a função Length para fazer a verificação, porém não funcionou pois o Length já de cara já contava 10... (contou os caracteres da máscara).

Preciso de ajuda,

Grato.

Paulo


Paulo Silva

Paulo Silva

Responder

Posts

19/01/2004

Draven

Você já tentou usar um While... ou seja quando você estiver digitando os dados você ponde usar uma variável para contar..

Enquanto a variável não chegar a dez ele continua digitando, se chegou a dez o foco sai do campo, e claro que isso é feito no evento Keypress

var Cont : integer;

cont := 0;
while cont <> 10 do
begin
cont := cont + 1;
end;
edit1.setfocus;


Responder

Gostei + 0

19/01/2004

Paulo Silva

Mas o problema, é que se a pessoa der um backspace, a variável não será decrementada... e com isso irá se perder....

Creio que há um solução mais prática,

Mas da mesma forma agradeço a ajuda, :wink:

Paulo.


Responder

Gostei + 0

19/01/2004

Fabio.hc

Tente assim:

procedure TForm1.MaskEdit1Change(Sender: TObject);
begin
   if Length(MaskEdit1.Text) = 8 then
      Edit1.SetFocus;
end;



Responder

Gostei + 0

19/01/2004

Paulo Silva

Não deu certo...

:arrow: Como disse na primeira mensagem, se fizer isso ele conta no Length 10 caracteres logo de cara... ele já considera a máscara como caracter digitado.

Mas agradeço você também pela ajuda,

Caso alguém tenha a solução favor postar,

No aguardo, e quebrando a cabeça,

Paulo.


Responder

Gostei + 0

19/01/2004

Maicongabriel

[quote:8711a46b12=´paulo silva´]Eu tentei usar a função Length para fazer a verificação, porém não funcionou pois o Length já de cara já contava 10... (contou os caracteres da máscara).[/quote:8711a46b12]
Ele já tentou Fabio! E não funciona mesmo!


Responder

Gostei + 0

19/01/2004

Maicongabriel

Bem, eu fiquei curiozo e fui ´Fuçar´...

Mascara do MaskEdit = !99/99/0000;1;_

No OnChange do MaskEdit coloque

  if Length(Trim(MaskEdit1.Text)) = 10 then
  begin
    try
      StrToDate(MaskEdit1.Text);
      Edit1.SetFocus;
    except
      showmessage(´Data inválida!´);
    end;
  end;


Acho que é mais ou menos isso ai!
Onde ´Edit1.SetFocus;´ você troca pela sua função de tabulação.
:D


Responder

Gostei + 0

19/01/2004

Fabio.hc

Se a mascara do MaskEdit1 for:

!99/99/0000;1;_

então use esta rotina;

procedure TForm5.MaskEdit1Change(Sender: TObject);
var data:string;
begin
   Data:=trim(copy(MaskEdit1.Text,7,4));
   if Length(data) = 4 then
      Edit1.SetFocus;
end;


Ou

Se a mascara do MaskEdit1 for:

!99/99/0000;0;_

então use esta rotina;

procedure TForm5.MaskEdit1Change(Sender: TObject);
var data:string;
begin
   Data:=trim(copy(MaskEdit1.Text,5,4));
   if Length(data) = 4 then
      Edit1.SetFocus;
end;



Responder

Gostei + 0

19/01/2004

Paulo Silva

Ae Fábio, agora sim deu certo. :D

Obrigado pela força,

E a todos que tentaram também!!!

:arrow: Abraços,

Paulo.


Responder

Gostei + 0

19/01/2004

Fabio.hc

Só esclarescendo:

Tente assim:
procedure TForm1.MaskEdit1Change(Sender: TObject);
begin
   if Length(MaskEdit1.Text) = 8 then
      Edit1.SetFocus;
end;


A rotina acima funciona para a mascara do MaskEdit1:

!99/99/0000;0;_

e para a mascara do MaskEdit1:

!99/99/0000;1;_

procedure TForm1.MaskEdit1Change(Sender: TObject);
begin
   if Length(trim(MaskEdit1.Text)) = 10 then
      Edit1.SetFocus;
end;


Esta é mais uma dica.


Responder

Gostei + 0

19/01/2004

Maicongabriel

procedure TForm1.MaskEdit1Change(Sender: TObject);
begin
   if Length(trim(MaskEdit1.Text)) = 10 then
      Edit1.SetFocus;
end;
Esta é mais uma dica.


Eu postei esse mesma dica acima, porem com um bloco ´try except end´ dentro, validando a data !


Responder

Gostei + 0

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

Aceitar