Não permitir digitar mês e ano superior que o atual

Delphi

02/05/2003

Como faço pra impedir que o usuário digite uma data onde o [b:ad8096456f]mês e o ano[/b:ad8096456f]seja maior que o atual?

Exemplo,
estamos em Maio/2003, [b:ad8096456f]o usuário só podia digitar no máximo[/b:ad8096456f] 31/05/2003


e também se ele tentar um ano que não seja o atual tem que dar mensagem!


Já agradeço muito qualquer ajuda,

Alex


Alex_

Alex_

Curtidas 0

Respostas

Aroldo Zanela

Aroldo Zanela

02/05/2003

Colega,

No pacote da RxLib tem uma unit denominada DateUtil.pas, lá tem uma função para obter o último dia do mes, considando inclusive, quando é ano bisexto. No delphi7 isso já é nativo. Se você não conseguir, me avisa que eu te mando.


GOSTEI 0
Schwarze

Schwarze

02/05/2003

tente assim:

function UltDiaMes(Data: TDateTime): TDateTime;
var a, m, d: word;
begin

  DecodeDate(Data, a, m, d);
  //mudar dia da data para dia 1º de data
  Data:= EncodeDate(a, m, 1); 

  //mudar data pra algum dia do mês seguinte
  Data:= Data + 32; 

  //removendo o dia, a data fica sendo o último dia do mês
  DecodeDate(Data, a, m, d);
  Data:= Data - d; 

end;



GOSTEI 0
Schwarze

Schwarze

02/05/2003

E, claro, não esqueça da última linha:
result:= Data;



GOSTEI 0
Aroldo Zanela

Aroldo Zanela

02/05/2003

Para Delphi7:

Declare DateUtils na lista de uses;

Teste o exemplo:

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  If not isValidDate(DateTimePicker1.Date) then
    ShowMessage(´Data inválida´);
end;

function TForm1.IsValidDate(EnteredDate: TDateTime): Boolean;
var Ano, Mes, Dia: Word;
begin
  DecodeDate(Date, Ano, Mes, Dia);
  Result := Trunc(EnteredDate) <= EncodeDate(Ano,Mes,DaysInMonth(Date));
end;



GOSTEI 0
POSTAR