Invalid input value. Use escape key to abandon changes
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:
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
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
Adriano Santos
Curtidas 2
Melhor post
Adriano Santos
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:
Ai funcionou, o único problema é que tenho que atualizá-lo manualmente, mas até ai beleza.
valeu galera.
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.
GOSTEI 1
Mais Respostas
Paulo_amorim
24/03/2004
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é+
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é+
GOSTEI 0
Delphi32
24/03/2004
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!
[url]http://delphiforum.icft.com.br/forum/viewtopic.php?t=38904[/url]
Se você descobrir, poste aki, ok?
bb!
GOSTEI 0
Ariovaldo
24/03/2004
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
#//
// 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
#//
GOSTEI 0
Delphi32
24/03/2004
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!
GOSTEI 0
Atilio
24/03/2004
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"
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"
GOSTEI 1