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