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
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo