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