DATAS AUTOMÁTICAS COM EDIT

Delphi

22/09/2016

Bom dia pessoal!

Tenho 12 campos EDITS no primeiro campo vai receber a data de forma manual e quero que os outros edits receba as outras datas de vencimentos de forma automática. Como posso implementar isso?
Mailson Janoca

Mailson Janoca

Curtidas 0

Melhor post

Natanael Ferreira

Natanael Ferreira

22/09/2016

Qual a diferença de dias entre as datas?

Se for um mês e o nome dos Edits forem sequenciais (Edit1, Edit2,.., Edit12), tente:

Adicione [b]DateUtils[/b] na uses form.

var
  i: Integer;
  Data: TDate;
begin
  try
    Data := StrToDate(Edit1.Text);
  except
    ShowMessage('Data Inválida');
    Exit;
  end;

  for i := 2 to 12 do
  begin
    Data := IncMonth(Data);
    TEdit(FindComponent('Edit' + IntToStr(i))).Text := DateToStr(Data);
  end;
end;
GOSTEI 1

Mais Respostas

Mailson Janoca

Mailson Janoca

22/09/2016

Boa tarde!

Teria um modo de deixar os dias de vencimentos fixos e só mudar os meses e ano?
GOSTEI 0
Natanael Ferreira

Natanael Ferreira

22/09/2016

O problema seria se o usuário deixar fixo os dia 29, 30 ou 31, você teria uma inconsistência porque nem todos os meses tem esses dias.

Fevereiro = Tem 28 ou 29 dias (Bissexto ou não).
Setembro = Tem 30 dias.
Janeiro = Tem 31 dias.

Por exemplo, se o usuário escolher a data 31/01/2016.

Você terá uma inconsistência, porque não existe a data 31/02/2016 (Fevereiro foi até 29 este ano).
GOSTEI 1
Mailson Janoca

Mailson Janoca

22/09/2016

Então no meu caso vou evitar essas datas. Tem alguma rotina nesse sentido?
GOSTEI 0
Natanael Ferreira

Natanael Ferreira

22/09/2016

Teste o código abaixo, testando inclusive os dias 28, 29, 30 e 31.

var
  i, cont: Integer;
  Data: TDate;
begin
  try
    Data := StrToDate(Edit1.Text);
  except
    ShowMessage('Data Inválida');
    Exit;
  end;

  cont := 1;

  for i := 2 to 12 do
  begin
    TEdit(FindComponent('Edit' + IntToStr(i))).Text := DateToStr(IncMonth(Data, cont));
    Inc(cont);
  end;
end;


Se a data for um dia inexistente, o código buscará a data anterior válida.
GOSTEI 1
Natanael Ferreira

Natanael Ferreira

22/09/2016

Se quiser evitar que o usuário escolha esses dias (29, 30 ou 31), teste:

var
  i: Integer;
  Data: TDate;
begin
  try
    Data := StrToDate(Edit1.Text);
  except
    ShowMessage('Data Inválida');
    Exit;
  end;

 if DayOf(Data) in [29 .. 31] then
  begin
    ShowMessage('Dia Inválido');
    Exit;
  end;
 
  for i := 2 to 12 do
  begin
    Data := IncMonth(Data);
    TEdit(FindComponent('Edit' + IntToStr(i))).Text := DateToStr(Data);
  end;
end;
GOSTEI 1
Mailson Janoca

Mailson Janoca

22/09/2016

Muito obrigado!!!!!!!!!!!!!
GOSTEI 0
POSTAR