Olá pessoal, recebi um e-mail de um amigo, perguntando o seguinte:
“Wesley como eu posso fazer para criar uma tela de navegação com o TDateTimePicker, onde ao clicar no botão que represente ">" ele avance 1 mês, e quando clicar no "<" ele retroceda 1 mês.”
Pensando nisto, eu fiz um layout básico e montei uma estrutura com o seguinte.
Listagem 1: Lista de Componentes
Label1: TLabel;
Label2: TLabel;
EdtDataFinal: TDateTimePicker;
BtnMesProximo: TBitBtn;
BtnMesAnterior: TBitBtn;
EdtDataInicial: TDateTimePicker;
Veja como ficou meu layout
Figura 1. Layout
A minha ideia foi a seguinte, sempre pegar o último dia do mês(Data Final) e não alterar o dia inicial( Data Inicial ), mas isso você pode modificar sem problemas.
Iniciaremos Declarar uses na unit DateUtils.
Listagem 2: Declarando uses em DataUtils
unit uFrmPrincipal;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ComCtrls, DateUtils;
Bom temos 2 TBitBtn, o primeiro se chama BtnMesProximo e o segundo BtnMesAnterior, vamos implementar o clique do BtnMesProximo.
Listagem 3: Implementando o onClick do BtnMesProximo
procedure TFrmPrincipal.BtnMesProximoClick(Sender: TObject);
Var
xDia, xMes, xAno : Word;
xDataFinal : TDateTime;
begin
EdtDataInicial.DateTime := IncMonth(EdtDataInicial.DateTime,1);
xDataFinal := IncMonth(EdtDataFinal.DateTime,1);
DecodeDate(xDataFinal, xAno, xMes, xDia);
xDia := DaysInMonth(xDataFinal);
EdtDataFinal.DateTime := EncodeDate(xAno,XMes, xDia);
end;
Neste momento vamos implementar o click do BtnMesProximo
Listagem 4: Implementando o onClick do BtnMesProximo
procedure TFrmPrincipal.BtnMesAnteriorClick(Sender: TObject);
Var
xDia, xMes, xAno : Word;
xDataFinal : TDateTime;
begin
EdtDataInicial.DateTime := IncMonth(EdtDataInicial.DateTime,-1);
xDataFinal := IncMonth(EdtDataFinal.DateTime,-1);
DecodeDate(xDataFinal, xAno, xMes, xDia);
xDia := DaysInMonth(xDataFinal);
EdtDataFinal.DateTime := EncodeDate(xAno,XMes, xDia);
end;
Clicando no BtnMesProximo você irá ver o seguinte:
Figura 2. Clicando no BtnMesProximo
Clicando no BtnMesAnterior você irá ver o seguinte:
Figura 3. Clicando no BtnMesAnterior
Neste artigo foi mostrado como podemos utilizar as funções IncMonth e DaysInMonth, conforme foi falado, neste código iremos sempre apontar para o último dia do mês no EdtDataFinal, mas isso pode ser modificado.
Você pode usar este “recursos” para relatórios, ou qualquer outro tipo de filtro dentro do seu sistema onde você tenha um recurso de filtragem por data.
Um abraço e até o próximo artigo.