Formatar Data em edit Delphi

Delphi

01/02/2017

Gostaria de saber a função de autocompletar data em um edit.
Por exemplo:
Coloco 01/16 e ao pressionar TAB puxar automático no edit 2016, sendo assim 01/2016
Mas isto com qualquer período que o o usuário digitar.
Gxf

Gxf

Curtidas 0

Melhor post

Gxf

Gxf

01/02/2017

Boa noite,
Criei a função e está funcionando como você deseja, veja se realmente ajuda.


private
{ Private declarations }
Function Formate_Data(Dados_Atual:String):String;


implementation
{$R *.dfm}
Function TForm1.Formate_Data(Dados_Atual:String):String;
begin
Result:=
Copy(Dados_Atual,1,2)+//Pegamos o mês ou seja os dois primeiros digitos da esquerda para a direita
'/'+
Copy(DateToStr(now),7,2)+//Pegamos os dois digitos do ano Atual

Copy(Dados_Atual,4,2);//Pegamos os dois ultomos digitos Informado

//Exemplo:
//Onde uma vez foi digitado 01/17
// A função entede que 01 é o mês e 17 é o ano.
// Então será convertido para 01/2017.
end;


//Chamando a Função
No evento onexit do edit desejado cole.
Edit1.Text:=Formate_Data(Edit1.Text);

Bônus do Canal: Aprendiz Delphi.
Abraço.


P2, muito obrigado!!!! Era isso mesmo, certinho!!!
GOSTEI 1

Mais Respostas

Gxf

Gxf

01/02/2017

Gostaria de saber a função de autocompletar data em um edit.
Por exemplo:
Coloco 01/16 e ao pressionar TAB puxar automático no edit 2016, sendo assim 01/2016
Mas isto com qualquer período que o o usuário digitar.


Alguém?
GOSTEI 0
Gxf

Gxf

01/02/2017

Gostaria de saber a função de autocompletar data em um edit.
Por exemplo:
Coloco 01/16 e ao pressionar TAB puxar automático no edit 2016, sendo assim 01/2016
Mas isto com qualquer período que o o usuário digitar.


Alguém?


Ninguém? :((((
GOSTEI 0
Pestana

Pestana

01/02/2017

se for para formatar a data tente assim:

FormatDateTime('mm/yyyy',date)
GOSTEI 0
Gxf

Gxf

01/02/2017

se for para formatar a data tente assim:

FormatDateTime('mm/yyyy',date)


Agradeço a atenção.

Não seria bem formatar, e sim completar.

Por exemplo:

se digito 01/16 quando apertar tab e pular par outro campo queria que completasse como 01/2016...
se digito 07/15 quando apertar tab e pular par outro campo queria que completasse como 07/2015...

E assim com qualquer mês ano que for informado no edit
GOSTEI 0
Raimundo Pereira

Raimundo Pereira

01/02/2017

Boa noite,
Criei a função e está funcionando como você deseja, veja se realmente ajuda.


private
{ Private declarations }
Function Formate_Data(Dados_Atual:String):String;


implementation
{$R *.dfm}
Function TForm1.Formate_Data(Dados_Atual:String):String;
begin
Result:=
Copy(Dados_Atual,1,2)+//Pegamos o mês ou seja os dois primeiros digitos da esquerda para a direita
'/'+
Copy(DateToStr(now),7,2)+//Pegamos os dois digitos do ano Atual

Copy(Dados_Atual,4,2);//Pegamos os dois ultomos digitos Informado

//Exemplo:
//Onde uma vez foi digitado 01/17
// A função entede que 01 é o mês e 17 é o ano.
// Então será convertido para 01/2017.
end;


//Chamando a Função
No evento onexit do edit desejado cole.
Edit1.Text:=Formate_Data(Edit1.Text);

Bônus do Canal: Aprendiz Delphi.
Abraço.
GOSTEI 0
Gxf

Gxf

01/02/2017

Boa noite,
Criei a função e está funcionando como você deseja, veja se realmente ajuda.


private
{ Private declarations }
Function Formate_Data(Dados_Atual:String):String;


implementation
{$R *.dfm}
Function TForm1.Formate_Data(Dados_Atual:String):String;
begin
Result:=
Copy(Dados_Atual,1,2)+//Pegamos o mês ou seja os dois primeiros digitos da esquerda para a direita
'/'+
Copy(DateToStr(now),7,2)+//Pegamos os dois digitos do ano Atual

Copy(Dados_Atual,4,2);//Pegamos os dois ultomos digitos Informado

//Exemplo:
//Onde uma vez foi digitado 01/17
// A função entede que 01 é o mês e 17 é o ano.
// Então será convertido para 01/2017.
end;


//Chamando a Função
No evento onexit do edit desejado cole.
Edit1.Text:=Formate_Data(Edit1.Text);

Bônus do Canal: Aprendiz Delphi.
Abraço.


Caso for dia/mês/ano , muda muita coisa?
GOSTEI 0
Nomad

Nomad

01/02/2017

Estou com a mesma dúvida..

Como ficaria no caso de dia/mês/ano?

Não consegui converter mesmo analisando o código. :/
GOSTEI 0
Raimundo Pereira

Raimundo Pereira

01/02/2017

Para retornar dia, mês e ano, ficaria assim:

Function TForm1.Formate_Data(Dados_Atual:String):String;
begin
Result:=
Copy(Dados_Atual,1,6)+
Copy(DateToStr(now),7,2)+
Copy(Dados_Atual,7,2);
end;

Para chamar realiza o mesmo procedimento no evento onexit:
Edit1.Text:=Formate_Data(Edit1.Text);
GOSTEI 0
Gxf

Gxf

01/02/2017

Para retornar dia, mês e ano, ficaria assim:

Function TForm1.Formate_Data(Dados_Atual:String):String;
begin
Result:=
Copy(Dados_Atual,1,6)+
Copy(DateToStr(now),7,2)+
Copy(Dados_Atual,7,2);
end;

Para chamar realiza o mesmo procedimento no evento onexit:
Edit1.Text:=Formate_Data(Edit1.Text);


P2, muito obrigado! É isso mesmo.

Se não for muito incômodo, teria como me explicar o motivo da seqüência de números? Estudei o código mas não consegui compreender.

Se preferir pode me enviar por email: gabryel.silva@ledware.com.br
GOSTEI 0
Raimundo Pereira

Raimundo Pereira

01/02/2017

O primeiro número indica a posição inicial a ser copiada.
O segundo número indica a até aonde o conteúdo será copiado.

Exemplo:
Conteúdo 03/02/2017
Para Copiar apenas o mês irei usar (4- Começo a copiar o caractere de 4º posição)
Então da 4º posição quero apenas 2 caracteres.
Então o copy ficará assim >> ,4,2);
GOSTEI 0
Gxf

Gxf

01/02/2017

O primeiro número indica a posição inicial a ser copiada.
O segundo número indica a até aonde o conteúdo será copiado.

Exemplo:
Conteúdo 03/02/2017
Para Copiar apenas o mês irei usar (4- Começo a copiar o caractere de 4º posição)
Então da 4º posição quero apenas 2 caracteres.
Então o copy ficará assim >> ,4,2);


Muito obrigado P2, me ajudou bastantate.
GOSTEI 0
Gxf

Gxf

01/02/2017

Mas caso eu passe pelo campo mais de UMA vez com o TAB, altera os dados que já estão preenchidos nele.

Teria alguma forma de bloquear isto?
GOSTEI 0
Raimundo Pereira

Raimundo Pereira

01/02/2017

Sim altere a função, colocando um if
Se a quantidade de caracteres do campo for menor que 8 "03/02/2017 " Ele roda a função.
Certo?
GOSTEI 0
Raimundo Pereira

Raimundo Pereira

01/02/2017

private
{ Private declarations }
Function Formate_Data(Dados_Atual:String;Quantidade_Char:integer):String;


Function TForm1.Formate_Data(Dados_Atual:String;Quantidade_Char:integer):String;
begin
// Data completa tem 03/02/2017 = 10.
if Quantidade_Char<10 then //Se não estiver formatada será aplicado a conversão.
begin
Result:=
Copy(Dados_Atual,1,6)+
Copy(DateToStr(now),7,2)+
Copy(Dados_Atual,7,2);
end
else
begin
Result:=Dados_Atual;
end;

end;

Chamando a nova função:

Edit1.Text:=Formate_Data(Edit1.Text,Length(Edit1.Text));
//Edit1.Text, é o conteúdo do campo para ser analisado pela função
//Length(Edit1.Text), é a quantidade de carracteres no campo
//Se for menor que 10, será aplicada a conversão.
//Se = 10, permanecerá o valor atual
GOSTEI 0
Raimundo Pereira

Raimundo Pereira

01/02/2017

Para validar apenas mês ano:
01/2017 = 7 então verificasse se é menor que 7

Para validar dai, mês e ano:
01/01/2017=10 então verificasse se é menor que 10
GOSTEI 0
Gxf

Gxf

01/02/2017

Para validar apenas mês ano:
01/2017 = 7 então verificasse se é menor que 7

Para validar dai, mês e ano:
01/01/2017=10 então verificasse se é menor que 10


Desta forma deu certinho no edit, porém se for um mask edit não vai :/
GOSTEI 0
Raimundo Pereira

Raimundo Pereira

01/02/2017

Para o mask edit, você precisará mudar a mascara.
Provavelmente você está usando apenas 00/00 .
Depois de antes de chamar a função você precisará mudar para 00/00/0000
GOSTEI 0
Gxf

Gxf

01/02/2017

Para o mask edit, você precisará mudar a mascara.
Provavelmente você está usando apenas 00/00 .
Depois de antes de chamar a função você precisará mudar para 00/00/0000


Eu estava usando "99/99/9999"

pois utilizando "00/00/0000", quando coloco 01/01/16 e dou TAB ocorre 'Invalid input value. Use escape key to abandon changes'.
GOSTEI 0
Pestana

Pestana

01/02/2017

Para retornar dia, mês e ano, ficaria assim:

Function TForm1.Formate_Data(Dados_Atual:String):String;
begin
Result:=
Copy(Dados_Atual,1,6)+
Copy(DateToStr(now),7,2)+
Copy(Dados_Atual,7,2);
end;

Para chamar realiza o mesmo procedimento no evento onexit:
Edit1.Text:=Formate_Data(Edit1.Text);


E se você inserir uma data neste formato 1/1/16 (que também é uma data válida), o que acontece?
GOSTEI 0
Pestana

Pestana

01/02/2017

Ou se a data do Windows estiver com um outro formato, p.ex: d/m/aa (que também é uma data válida)?
GOSTEI 0
Raimundo Pereira

Raimundo Pereira

01/02/2017

Neste caso usar uma variável tipo date.
Preenchendo esta variável no formato dd/mm/yyyy.
Todo o tratamento é dado em cima de um determinado formato.

Quando citei >>Depois de antes de chamar a função você precisará mudar para 00/00/0000
Na verdade eu quiz dizer para você mudar dd/mm/yyyy.
GOSTEI 0
Gxf

Gxf

01/02/2017

Neste caso usar uma variável tipo date.
Preenchendo esta variável no formato dd/mm/yyyy.
Todo o tratamento é dado em cima de um determinado formato.

Quando citei >>Depois de antes de chamar a função você precisará mudar para 00/00/0000
Na verdade eu quiz dizer para você mudar dd/mm/yyyy.


Como ficaria a implementação nesse caso?
GOSTEI 0
POSTAR