Trabalhando com TDateTimePicker - Delphi

Veja neste artigo como podemos simular a navegação entre os meses usando o TDateTimePicker no Delphi.

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.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados