Invalid input value. Use escape key to abandon changes

24/03/2004

41

Eu tenho um TDbEdit ligado a um campo data. Este campo data no FieldsEditor tem uma máscara.

Acontece que se a pessoa começar a digitar algo no campo e depois apagar o conteúdo do mesmo e sair acontece a mensagem:

Invalid input value. Use escape key to abandon changes


Eu não quero que esta mensagem apareça, quero tratá-la para que o usuário possa sair normalmente do campo sem ser interrompido.

Já tentei isso no [b:9f6e46a7d0]onExit, onKeyPress, onKeyDown[/b:9f6e46a7d0] do controle e nos eventos [b:9f6e46a7d0]onChange, onValidate e onGetText [/b:9f6e46a7d0]do campo no FieldsEditor.


valeu


Responder

Post mais votado

25/03/2004

Galera, coloquei um TMaskEdit e contornei o assunto.
Na propriedade Mask coloquei.

[color=red:6d3eb4d224][b:6d3eb4d224]!99/99/9999;1;_[/b:6d3eb4d224][/color:6d3eb4d224]
Quando se coloca 9 ao invés de 0, você consegue sair do campo sem digitar totalmente a data, do jeito que eu quero. Se colocar 0, é obrigatório terminar a digitação, me corrijam se eu estiver errado pois foi o que pude perceber.

Ai com esse controle eu tenho mais ´controle´ sobre o objeto. no OnExit coloquei:

  Try
    if not (RemoveEspaco(dbNasc.Text) = ´//´) and
       not (ActiveControl = btnSair)          and
       not (ActiveControl = btnCancelar)
    then
      StrToDate(dbNasc.Text);
  Except
    Mensagem(´O campo "Data de Nascimento" contém um valor inválido.´ + #13 + ´Data: ´ + dbNasc.Text);
    if dbNasc.CanFocus then
      dbNasc.SetFocus;
  end;


Ai funcionou, o único problema é que tenho que atualizá-lo manualmente, mas até ai beleza.

valeu galera.


Responder

Mais Posts

24/03/2004

Paulo_amorim

Olá

Isso enche o saco mesmo...acontece tambem no TMaskEdit. Até hoje não achei código que suspenda esse maldito aviso...

Eu sempre emito mensagens de erro, menos nesse caso que mantenho o do componente.

Até+


Responder

24/03/2004

Delphi32

cara, vou ver sincero, não testei o que estou te passando, mas tenho a impressão que o caminho é o mesmo que você vai ver em:

[url]http://delphiforum.icft.com.br/forum/viewtopic.php?t=38904[/url]

Se você descobrir, poste aki, ok?

bb!


Responder

24/03/2004

Ariovaldo

Pessoal eu contornei esta situação usando uma função para validar a data tanto que nen uso maskedit um dbedit normal

// Função para Validar Data
function CheckDate(Sender: TField; Text: String): Boolean;
begin
Result := False;
if (Text = ´ / / ´) or (Text = ´ / / ´) then
begin
Sender.Clear;
Result := True;
end
else
begin
try
Sender.AsString := Text;
Result := True;
except
Showmessage(´Data Inválida !!!´, mtInformation,[mbOk],0 );
if Screen.Cursor = crHourGlass then begin
Screen.Cursor := crDefault;
end;
end;
end;
end;

e no evento On SetText do Field da data eu tenho este código
if not ( CheckDate(Sender,Text) ) then begin
Abort;
end;
end;

na propriedade display format do field eu coloco
dd/mm/yyyy
Na propriedade Edit mask do field eu coloco isso
#//


Responder

25/03/2004

Delphi32

Pessoal eu contornei esta situação usando uma função para validar a data tanto que nen uso maskedit um dbedit normal // Função para Validar Data function CheckDate(Sender: TField; Text: String): Boolean; begin Result := False; if (Text = ´ / / ´) or (Text = ´ / / ´) then begin Sender.Clear; Result := True; end else begin try Sender.AsString := Text; Result := True; except Showmessage(´Data Inválida !!!´, mtInformation,[mbOk],0 ); if Screen.Cursor = crHourGlass then begin Screen.Cursor := crDefault; end; end; end; end; e no evento On SetText do Field da data eu tenho este código if not ( CheckDate(Sender,Text) ) then begin Abort; end; end; na propriedade display format do field eu coloco dd/mm/yyyy Na propriedade Edit mask do field eu coloco isso #//


era exatamente isso! thx!


Responder

14/12/2018

Atilio

Eu tenho a solução. A falha ocorre quando o seu campo possui alguma validação de máscara obrigatória, após "limpar o campo" não vai funcionar qualquer evento.Clear.... Porque? ele está aguardando um valor antes mesmo de passar em qualquer evento, qual a solução?

Vai adicionar um evento ONCHANGE no botão
if TDBIMASKEDIT(SENDER).GETVALUE = '' (Ou com TRIM = Caractere Fixo)
then
TDBIMASKEDIT(SENDER).Modified := False;

Assim toda vez que limpar o campo vai ser como se nunca tivesse modificado o mesmo para ele ficar "aguardando um valor"
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar