Criando um DBDateTimePicker: DateTimePicker - Parte 1

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

Artigos relacionados