Problema com EditMask

Delphi

13/11/2004

Tenho um campo [b:2b48629591]Data_Admissao Do Tipo Date [/b:2b48629591]( Tabela Piradox)...
Criei o DataField para trabalhar com o valor deste campo a nivel de projeto
No Objecto Inspector Desse campo , Na Propriedade [b:2b48629591]EditMask[/b:2b48629591] Selecionei a Mascara: [b:2b48629591]99/99/9999;0;_[/b:2b48629591]
Gostaria de assim que [b:2b48629591]abrir[/b:2b48629591] um novo registro o valor da [b:2b48629591]data atual [/b:2b48629591]fosse atribuida para este campo :wink:
Insiro valores atraves de[b:2b48629591] DbEdits [/b:2b48629591]e uso [b:2b48629591]DataSource[/b:2b48629591] e [b:2b48629591]Table[/b:2b48629591]
Então escrevi o Seguinte Código
procedure TFormCadastroFuncionarios.frabotoes1novoClick(Sender: TObject);
begin
  Modulo.TBfun.Append;
  Modulo.TbfunData_Admissao.Value:=Date;//Aqui atribuo
end;

o que esta acontecendo e que no DbEdit :cry: Inves de aparecer a data
Por exemplo [b:2b48629591]´13/11/2004´[/b:2b48629591] esta aparecendo a String
[b:2b48629591]´13//1/1/2004´[/b:2b48629591]

Como eu resolvo isto, [b:2b48629591]em outra palavras como eu posso colocar a data atual e usar a mascara ao mesmo tempo[/b:2b48629591] :lol: :lol:

end;

Valeu amigos


Marco Salles

Marco Salles

Curtidas 0

Respostas

Marco Salles

Marco Salles

13/11/2004

Nada :cry: :cry: :cry: :cry:


GOSTEI 0
Marco Salles

Marco Salles

13/11/2004

Aguardo :P :P


GOSTEI 0
Ariovaldo

Ariovaldo

13/11/2004

Marcos eu resolvi assim:

Coloquei um DBEdit no Form Normalmente
No Field da Table Coloquei a seguinte Mascara
Display Format = dd/mm/yyyy
EditMask = #//

Agora fiz uma função para validar data que é a seguinte
Begin
Result := False;
if (Text = ´ / / ´) or (Text = ´ / / ´) then
begin
Sender.Clear;
Result := True;
end
else
begin
try
Sender.AsString := Text;
Result := True;
except
messagedlg(´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 Coloquei isso

if not ( CheckDate(Sender,Text) ) then begin
Abort;
end;


Essa função se fez necessária porque quando vc usa maskEdit uma vez que vc entrar no Field vc nãoconsegue sair com ele vazio


GOSTEI 0
Marco Salles

Marco Salles

13/11/2004

[b:faa50a03f6]Amigo , Sua mascara me foi muito util[/b:faa50a03f6]

Voce nao disse aonde colocar o Método descrito :?: :?: :?:

Acredito que deva ser No Evento OnExit do DbEdit :!: :!: :!:


O Problema que nen sempre o Evento OnExit e Executado :cry: :cry:

Teclas de atalho, os botoes do tipo SpeedButton não recebem foco,
mesmo que clique com o mouse sobre um Speed-Button o foco continuará no DbEdit.. O que pode gerar um erro..

Se Digitarmos uma data invalida e dar Um Ctrl S (Tecla de atalho para Salvar, Por exemplo), o usuário receberá uma mensagem do compilador


if not ( CheckDate(Sender,Text) ) then begin Abort; end; Essa função se fez necessária porque quando vc usa maskEdit uma vez que vc entrar no Field vc não consegue sair com ele vazio


Eu uso Delphi 5.0 e parece que esta função não existe.. O Porgrama nao compila. Da erro ´Undeclared Indetifier´

Mas vamos Chegar la :P :P :P


GOSTEI 0
Ariovaldo

Ariovaldo

13/11/2004

Marcos a função vc vai ter que declarar ela em alguma Unit eu por exemplo tenho uma unit que é só de função ai é só chamar a Unit.Funcao que funciona sim, por exemplo copia todo este texto em negrito e cola em uma unit sozinha, para isso vai lá em arquivo==> New==> Unit Apaga tudo e cola salva esta unit como funcao depois coloca este código

if not ( Funcao.CheckDate(Sender,Text) ) then begin
Abort;
end;

no evento on set text do Field, nota bem que antes de chamar a funcao eu passei em qual unit ela esta correto.

Espero ter te ajudado


[b:c805f75341]unit Funcao;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, DB, Controls, Forms, Dialogs,
Mask, DBCtrls;

function CheckDate(Sender: TField; Text: String): Boolean;

implementation

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
messagedlg(´Data Inválida !!!´, mtInformation,[mbOk],0 );
if Screen.Cursor = crHourGlass then begin
Screen.Cursor := crDefault;
end;
end;
end;
End;
End.[/b:c805f75341]


GOSTEI 0
Marco Salles

Marco Salles

13/11/2004

Marcos a função vc vai ter que declarar ela em alguma Unit

OK

eu por exemplo tenho uma unit que é só de função

Eu Tb Tenho :P :P

Espero ter te ajudado

Ta ajudando e muito :P :P :P :P

Essa função se fez necessária porque quando vc usa maskEdit uma vez que vc entrar no Field vc nãoconsegue sair com ele vazio

De Fato , esta função permite que se sai do Field com um valor Vazio :P :P
Mas agora atente ao fato curioso. ao digitar uma data em um campo, o usuário tem algumas opçoes:

1)[b:e1b976758e]continuar[/b:e1b976758e] a digitação etre outros campos :arrow: A Função CheckDate
ira analisar a data Digitada. Ok :wink:

2)[b:e1b976758e]Salvar[/b:e1b976758e] a data digitada.. Clicando em um botao correspondende ou usando uma tecla de atalho :arrow: A Função CheckDate
ira analisar a data Digitada. Ok :wink:

3)[b:e1b976758e]Cancelar [/b:e1b976758e]a Data Digitada..Clicando em um botao correspondende ou
usando a tecla de atalho :arrow:A Função CheckDate
ira analisar a data Digitada. Ok :!: :!: :cry: :cry: Mas suponha que o usuário , tenha digitado uma data [b:e1b976758e]ERRADA[/b:e1b976758e]. E Neste Momento , ele queira [b:e1b976758e]cancelar[/b:e1b976758e] a operação... Ele gostaria simplismente de [b:e1b976758e]Retornar[/b:e1b976758e] ao estado Anterior dos Dados(Modo Browse)... Mas antes de qualquer coisa o evento [b:e1b976758e]OnSetText [/b:e1b976758e]e chama a função [b:e1b976758e]CheckDate [/b:e1b976758e]que ira retornar uma [b:e1b976758e]mensagem de erro [/b:e1b976758e]para o usuário :cry: :cry: :cry: Uma situação , um pouco [b:e1b976758e]desagradável[/b:e1b976758e]... Que acho que deveriamos contornar.[/b]

Na realidade eu estou tentando corrigir, que para mim, e uma imperfeição(Ta certo que pode passar por muito Tempo despercebido pelo usuário.)
[size=18:e1b976758e][b:e1b976758e]Em um outro tópico[/b:e1b976758e][/size:e1b976758e], tento lançar mao de uma idéia , que acho pode resolver esta questão.. Se voce quiser participar, ou se nao concorda que de fato isto seje uma ´imperfeição´, ou se tem outra visão, outra idéia,etc e quiser compartilhar , por favor, sinta--se a vontade :P :P

P:s neste tópico a [b:e1b976758e]sua[/b:e1b976758e] função [b:e1b976758e]CheckDate[/b:e1b976758e] e a [b:e1b976758e]minha ConfirmarData[/b:e1b976758e].
a unica diferenca e que datas vazias da ERRO ([b:e1b976758e]To concebendo o projeto asssim[/b:e1b976758e]),e que o método esta
todo descrito [b:e1b976758e]dentro [/b:e1b976758e]do evento[b:e1b976758e] OnSetText[/b:e1b976758e], ao inves de
Passar parametros para uma outra funçaõ de outra unit.

[b:e1b976758e]o Tópico e este:[/b:e1b976758e]
http://delphiforum.icft.com.br/forum/viewtopic.php?p=170907#170907


GOSTEI 0
Marco Salles

Marco Salles

13/11/2004

Ta Bravo.... :cry: :cry: :cry: :cry:


GOSTEI 0
Marco Salles

Marco Salles

13/11/2004

Sobe :cry: :cry: :cry:


GOSTEI 0
Seccatto

Seccatto

13/11/2004

kra vá no painel de controle abra opções regionais e de idiomas depois clique em personalizar e depois clique na aba DATA, ai voce coloca em formato da data abreviada como ´DD/MM/AAAA´, pq provavelmente deva estar la como d/m/aaaa.
Epero ter ajudado.
Falow


GOSTEI 0
E_gama

E_gama

13/11/2004

No Objecto Inspector Desse campo , Na Propriedade EditMask Selecionei a Mascara: 99/99/9999;0;_


Utilize a máscara: [b:6a40f44bef]99/99/9999;1;_[/b:6a40f44bef]


GOSTEI 0
Marco Salles

Marco Salles

13/11/2004

O Problema da mascara ja foi superado :P
Postei isto anteriormente
Amigo , Sua mascara me foi muito util

O Outro problema que surge e evitar uma mensagem de erro, quando o usuário querer puro e simplesmente Cancelar a operação... 



GOSTEI 0
POSTAR