Fórum DATAS AUTOMÁTICAS COM EDIT #562711

22/09/2016

0

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

Responder

Post mais votado

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;

Natanael Ferreira

Natanael Ferreira
Responder

Gostei + 1

Mais Posts

22/09/2016

Mailson Janoca

Boa tarde!

Teria um modo de deixar os dias de vencimentos fixos e só mudar os meses e ano?
Responder

Gostei + 0

22/09/2016

Natanael Ferreira

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).
Responder

Gostei + 1

22/09/2016

Mailson Janoca

Então no meu caso vou evitar essas datas. Tem alguma rotina nesse sentido?
Responder

Gostei + 0

22/09/2016

Natanael Ferreira

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.
Responder

Gostei + 1

22/09/2016

Natanael Ferreira

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;
Responder

Gostei + 1

22/09/2016

Mailson Janoca

Muito obrigado!!!!!!!!!!!!!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar