Usando o DBDateTimePicker: DateTimePicker - Parte 2

Veja nesta quick como criar um componente DateTimePicker, e usar o mesmo como um DBEDit.

Olá galera, nesta Quick Tips, irei mostrar, basicamente, como podemos modificar nossos componentes do Delphi, veja este poderoso recurso que podemos fazer com um simples DateTimePicker, fazendo com que o mesmo possa exibir valores de nosso banco de dados, assim como o DBEdit.

 

Vamos inicialmente criar uma unit, e salvar a mesma como DBDateTimePicker.pas .

 

Na mesma vamos agora declarar a Classe TDateTimePicker

 

unit DBDateTimePicker;

 

interface

uses

SysUtils, Classes, Controls, ComCtrls, DBCtrls, DB, Messages;

 

type

 

TDateTimePicker = class(ComCtrls.TDateTimePicker)

private

{ Private declarations }

FDataLink: TFieldDataLink;

function GetDataField: string;

function GetDataSource: TDataSource;

procedure SetDataField(const Value: string);

procedure SetDataSource(const Value: TDataSource);

procedure DataChange(Sender: TObject);

protected

{ Protected declarations }

procedure UpdateData(Sender: TObject);

procedure Change; override;

procedure CMExit(var Msg: TMessage); message CM_EXIT;

public

{ Public declarations }

constructor Create(AOwner: TComponent); override;

destructor Destroy; override;

published

{ Published declarations }

property DataField: string read GetDataField write SetDataField;

property DataSource: TDataSource read GetDataSource write SetDataSource;

end;

 

implementation

 

uses

Variants;

 

{ TDBDateTimePicker }

 

procedure TDateTimePicker.Change;

begin

if not FDataLink.Editing then

FDataLink.Edit;

FDataLink.Modified;

inherited;

end;

 

procedure TDateTimePicker.CMExit(var Msg: TMessage);

begin

try

FDataLink.UpdateRecord;

except

on Exception do

SetFocus;

    end;

end;

 

constructor TDateTimePicker.Create(AOwner: TComponent);

begin

inherited;

FDataLink:=TFieldDataLink.Create;

FDataLink.OnDataChange := DataChange;

FDataLink.OnUpdateData := UpdateData;

Self.Date := Now;

end;

 

procedure TDateTimePicker.DataChange(Sender: TObject);

begin

if Assigned(FDataLink.DataSource) and Assigned(FDataLink.Field) then

begin

if FDataLink.Field.AsDateTime <> StrToDate( '30/12/1899' ) then

Self.Date:=FDataLink.Field.AsDateTime

 else

Self.Date := Now;

end;

end;

 

destructor TDateTimePicker.Destroy;

begin

FDataLink.Free;

inherited;

end;

 

function TDateTimePicker.GetDataField: string;

begin

Result:=FDataLink.FieldName;

end;

 

function TDateTimePicker.GetDataSource: TDataSource;

begin

Result:=FDataLink.DataSource;

end;

 

procedure TDateTimePicker.SetDataField(const Value: string);

begin

FDataLink.FieldName := Value;

end;

 

procedure TDateTimePicker.SetDataSource(const Value: TDataSource);

begin

FDataLink.DataSource := Value;

end;

 

procedure TDateTimePicker.UpdateData(Sender: TObject);

begin

FDataLink.Field.AsDateTime := Self.Date;

end;

end.

 

Fico por aqui até a próxima parte.

 

Um abraço

 

 

Wesley Y

wyamazack@rwsolution.com.br


 

Olá galera, nesta Quick Tips, iremos continuar vendo o nosso componente DBDateTimePicker, que serve para podermos trabalhar de forma igual a um DBEdit, só que usando o DateTimePicker.

 

Como usar então agora nosso DBDateTimePicker?

Simplesmente adicionar a Uses DBDateTimePicker.pas, no Formulário onde deseja ter este controle, neste caso, não irá funcionar automaticamente, pois precisamos configurar as propriedades do mesmo fisicamente, mesmo assim precisamos dar uma “pernada” no compilador do Delphi, como ?.

 

Vejamos como é simples, ao incluir um TDateTimePicker, e compilar o projeto, você verá que o mesmo se encarrega de dar uses em ComCtrl, unit esta que contém a classe TDateTimePicker. Até ai nenhum mistério. O uses é dado pelo Delphi. Vejamos agora ao adicionar a uses o nosso DBDateTimePicker.

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, DBDateTimePicker, ComCtrl;

 

Da maneira que esta, o Delphi não fará diferença ao executar, teste para ver, e entender melhor o exemplo.

 

Agora da maneira correta.

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, ComCtrl, DBDateTimePicker;

 

 

Vamos agora fazer o tão espero exemplo de comportamento, no evento onCreate do seu Formulário precisamos configura as propriedades DataField e DataSource, como fazemos com os componentes DBEdit, DBCombobox.

 

procedure TFrmPrincipal.FormCreate(Sender: TObject);

begin

EdtDataNascimento.DataField := 'DATANASCIMENTO';

EdtDataNascimento.DataSource:= DSCLIENTE;

 

EdtDataCadastro.DataField := 'DATACADASTRO';

EdtDataCadastro.DataSource:= DSCLIENTE;

 

EdtDataEmissao.DataField := 'DATAEMISSAO';

EdtDataEmissao.DataSource:= DSCLIENTE;

 

{ Obs: Podemos notar que não nos prendemos apenas a usar um unit DateTimePicker, mas sim vários, isso mesmo você pode usar agora seu DateTimePicker para vários controles na mesma tela, igual a um DBEdit, ou DBCombobox como mencionado  }

end;

 

Feito isso basta executar seu projeto, e veja o resultado como é simples. Antes podíamos configurar a propriedade EditMask, do nosso Field(dentro do ClientDataSet), agora não precisamos mais fazer isso, basta usarmos o famoso DateTimePicker, que por sinal no Windows Vista/ Win7, tem uns efeitos bem legais, dando um ar mais agradável para nossos sistemas e satisfazendo os clientes.

 

Até Fico por aqui ate à próxima Quick Tips.

 

Um abraço

 

 

Wesley Y

wyamazack@rwsolution.com.br

 

Artigos relacionados