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