Problema com EditMask
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
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
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
Curtidas 0
Respostas
Marco Salles
13/11/2004
Nada :cry: :cry: :cry: :cry:
GOSTEI 0
Marco Salles
13/11/2004
Aguardo :P :P
GOSTEI 0
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
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
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
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
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
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]
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
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
13/11/2004
Ta Bravo.... :cry: :cry: :cry: :cry:
GOSTEI 0
Marco Salles
13/11/2004
Sobe :cry: :cry: :cry:
GOSTEI 0
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
Epero ter ajudado.
Falow
GOSTEI 0
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
13/11/2004
O Problema da mascara ja foi superado :P
Postei isto anteriormente
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