unit DBDateTime;interfaceuses
SysUtils, Classes, Controls, ComCtrls,DB,DBCtrls;type
TDBDateTime=class(TDateTimePicker)
private
FDataLink:TFieldDataLink;
procedure DataChange(sender:Tobject);
procedure UpdateData(sender:Tobject);
function GetDataSource:TDataSource;
procedure SetdataSource(value:TDataSource);
Function GetDataField:String;
procedure SetdataField(Value:String);
procedure CMexit(var Message:TCMExit); message CM_EXIT;
protected
procedure Change;override;
procedure Notification(AComponent:TComponent;Operation:Toperation);override;
public
constructor Create(AOwner:Tcomponent);override;
destructor Destroy;override;
published
property DataSource:TDataSource read GetDataSource write SetDataSource;
property DataField:String read GetDataField write SetDataField;
end;
procedure Register;implementationprocedure TDBDateTime.CMExit;
begin
try
FDataLink.UpdateRecord;
except
Setfocus;
raise;
end;
DoExit;
end;constructor TDBDateTime.Create(Aowner:Tcomponent);
begin
inherited Create(Aowner);
FDataLink:=TFieldDataLInk.Create;
FDataLink.OnDataChange:=DataChange;
FDataLink.OnUpdateData:=Updatedata;
end;Destructor TDBDateTime.Destroy;
begin
FDataLink.OnDataChange:=nil;
FDataLink.OnUpdateData:=nil;
FDataLink.Free;
inherited Destroy;
end;function TDBDateTime.GetdataSource:TdataSource;
begin
result:=FDataLink.DataSource;
end;procedure TDBDateTime.SetDataSource(Value:TDataSource);
begin
FDataLink.DataSource:=Value;
end;function TDBDateTime.GetDatafield:String;
begin
result:=FDataLink.FieldName;
end;procedure TDBDateTime.SetDataField(value:String);
begin
FdataLink.FieldName:=value;
end;procedure TDBDateTime.DataChange(Sender:Tobject);
begin
DateTime:=now;
if FDataLink.Field <> nil then
if FDataLink.Field.Text<>'' then
DateTime:=FDatalink.Field.AsDateTime;
end;procedure TDBDateTime.UpdateData(sender:Tobject);
begin
FDatalink.Field.AsDateTime:=DateTime;
end;procedure TDBDateTime.Change;
begin
FDataLink.Modified;
if not FDataLink.Editing then
FdataLink.Edit;
inherited Change;
end;procedure TDBDateTime.Notification(AComponent:
TComponent;Operation:TOperation);
begin
inherited Notification(Acomponent,Operation);
if(Operation=opRemove)and(FDataLink<>nil) and(AComponent=Datasource)then
DataSource:=nil;
end;procedure Register;
begin
RegisterComponents('Data Controls', [TDBDateTime]);
end;end.
SysUtils, Classes, Controls, ComCtrls,DB,DBCtrls;type
TDBDateTime=class(TDateTimePicker)
private
FDataLink:TFieldDataLink;
procedure DataChange(sender:Tobject);
procedure UpdateData(sender:Tobject);
function GetDataSource:TDataSource;
procedure SetdataSource(value:TDataSource);
Function GetDataField:String;
procedure SetdataField(Value:String);
procedure CMexit(var Message:TCMExit); message CM_EXIT;
protected
procedure Change;override;
procedure Notification(AComponent:TComponent;Operation:Toperation);override;
public
constructor Create(AOwner:Tcomponent);override;
destructor Destroy;override;
published
property DataSource:TDataSource read GetDataSource write SetDataSource;
property DataField:String read GetDataField write SetDataField;
end;
procedure Register;implementationprocedure TDBDateTime.CMExit;
begin
try
FDataLink.UpdateRecord;
except
Setfocus;
raise;
end;
DoExit;
end;constructor TDBDateTime.Create(Aowner:Tcomponent);
begin
inherited Create(Aowner);
FDataLink:=TFieldDataLInk.Create;
FDataLink.OnDataChange:=DataChange;
FDataLink.OnUpdateData:=Updatedata;
end;Destructor TDBDateTime.Destroy;
begin
FDataLink.OnDataChange:=nil;
FDataLink.OnUpdateData:=nil;
FDataLink.Free;
inherited Destroy;
end;function TDBDateTime.GetdataSource:TdataSource;
begin
result:=FDataLink.DataSource;
end;procedure TDBDateTime.SetDataSource(Value:TDataSource);
begin
FDataLink.DataSource:=Value;
end;function TDBDateTime.GetDatafield:String;
begin
result:=FDataLink.FieldName;
end;procedure TDBDateTime.SetDataField(value:String);
begin
FdataLink.FieldName:=value;
end;procedure TDBDateTime.DataChange(Sender:Tobject);
begin
DateTime:=now;
if FDataLink.Field <> nil then
if FDataLink.Field.Text<>'' then
DateTime:=FDatalink.Field.AsDateTime;
end;procedure TDBDateTime.UpdateData(sender:Tobject);
begin
FDatalink.Field.AsDateTime:=DateTime;
end;procedure TDBDateTime.Change;
begin
FDataLink.Modified;
if not FDataLink.Editing then
FdataLink.Edit;
inherited Change;
end;procedure TDBDateTime.Notification(AComponent:
TComponent;Operation:TOperation);
begin
inherited Notification(Acomponent,Operation);
if(Operation=opRemove)and(FDataLink<>nil) and(AComponent=Datasource)then
DataSource:=nil;
end;procedure Register;
begin
RegisterComponents('Data Controls', [TDBDateTime]);
end;end.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货