Sair de um único controle em um form

Delphi

13/06/2008

Olá galera!

Estou com uma dúvida boba e não sei como sair dela.
Tenho apenas um MaskEdit num form para entrada de data e gostaria de, após inserir essa data, o form fosse fechado. Testei no evento onKeyPress com o código :

If Length(txtDataAtual.Text) = 10 then
frmDataDevolucao.Close;

Mas o form é automaticamente fechado porque o maskedit mesmo sem valor nenhum, contém 10 espaços na máscara ´__/__/____´.

Como resolver isso?!

Obrigado.


Microbios

Microbios

Curtidas 0

Respostas

Brunodsr

Brunodsr

13/06/2008

Usa o onExit.

1. Valida se a data é válida;
2. Caso nao seja, informa ao usuario e mantem o foco no campo;
3. Caso a data seja valida, fecha o form.

Espero ter ajudado.


GOSTEI 0
Microbios

Microbios

13/06/2008

obrigado brunodsr, porém...

o onexit é disparado quando o controle PERDE o foco e no caso só há um controle no formulário, portanto ao terminar de preencher a data o foco permanece no controle, não há perda do foco. O que eu quero é exatamente isso: sair validando a data e fechando o form, com um só controle no form sem a passagem de foco pra outro contorle.

:wink:


GOSTEI 0
Lucas.corp

Lucas.corp

13/06/2008

tente com o onchange


GOSTEI 0
Brunodsr

Brunodsr

13/06/2008

Ola,

Desculpe o post anterior. Nao tinha entendido.

Vc ja pensou em obrigar o cara a pressionar ENTER para confirmar o campo?

Tipo:
  if key = #13 then
    ValidaData;


Espero ter ajudado


GOSTEI 0
Brunodsr

Brunodsr

13/06/2008

Ola, Desculpe o post anterior. Nao tinha entendido. Vc ja pensou em obrigar o cara a pressionar ENTER para confirmar o campo? Tipo:
  if key = #13 then
    ValidaData;
Espero ter ajudado


Desculpe.. Poe isso no keyPress do campo.


GOSTEI 0
Microbios

Microbios

13/06/2008

brunodsr;

O código que você citou seria o mais apropriado se eu não usasse um código em meu MDI que faz a troca do TAB por ENTER em toda a aplicação. Não sei por qual motivo, esse código [b:0722808d36]if key = #13 then [/b:0722808d36] no evento onkeypress não funciona. :lol: Qualquer outra tecla que eu testo, funciona. Menos o Enter. Vou continuar tentando achar uma solução. Por enquanto agradeço às sugestões dadas. :wink:


GOSTEI 0
Pestana_

Pestana_

13/06/2008

acho que a solução seria esta:
If (Length(txtDataAtual.Text) = 10) and (txtDataAtual.Text <> ´__/__/____´) then 
  frmDataDevolucao.Close;



espero ter ajudado!


GOSTEI 0
Marco Salles

Marco Salles

13/06/2008

usando a Maskara :

[b:d6ae2c3074]!99/99/9999;1;_[/b:d6ae2c3074]

a a Propriedade [u:d6ae2c3074]EditText[/u:d6ae2c3074], ao Inves do [u:d6ae2c3074]Text [/u:d6ae2c3074]

No evento [b:d6ae2c3074]OnChage[/b:d6ae2c3074] Anterior

procedure TForm2.txtDataAtualChange(Sender: TObject);
var
 data:TDateTime ;
begin
if trystrtodate(txtDataAtual.EditText,data) then
 close;
end;



GOSTEI 0
POSTAR