现在的位置: 首页 > 综合 > 正文

DbDateEdit_Component

2013年12月10日 ⁄ 综合 ⁄ 共 2867字 ⁄ 字号 评论关闭

unit DbDateEdit;

 

interface

//Uses DB,DBCTRLS,ComCtrls,SysUtils;
uses
  DBCTRLS,DB,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,ComCtrls;

type
TDBDateTime=class(TDateTimePicker)
private
FDataLink:TFieldDataLink;
//TFieldDataLink是TDataLink的派生类,处理单个字段与DataSource的交互
procedure DataChange(sender:Tobject);
//当DataSet的记录改变(如浏览记录)时触发OnDataChange事件,DataChange将作为该事件的事件处理句柄
procedure UpdateData(sender:Tobject);
//更新DataSet前触发OnUpdateData事件,UpdateData将作为该事件的事件处理句柄
function GetDataSource:TDataSource;
procedure SetdataSource(value:TDataSource);
Function GetDataField:String;
procedure SetdataField(Value:String);
//procedure CMexit(varMessage:TCMExit);message CM_EXIT;//当控件失去焦点时触发CM_EXIT消息
protected
procedure Change;override;//控件中日期、时间改变时触发OnChange事件
procedure Notification(AComponent:TComponent;
Operation:Toperation);override;
//当某一控件从FORM上移走时DELPHI的IDE调用该方法通知其它控件
public
constructor Create(AOwner:Tcomponent);override;
destructor Destroy;override;
published
property DataSource:TDataSource read GetDataSource
write SetDataSource;//为控件增加DataSource属性,使它能与DataSource构件连接
property DataField:String read GetDataField
write SetDataField;
end;//为控件增加DataField属性,
//使它指向代表某一字段的TField对象

procedure Register;//注册构件

implementation
{procedure TDBDateTime.CMExit;
begin
try
FDataLink.UpdateRecord;
//控件失去焦点时更新DataSet,这将触发OnUpdateData事件
except
Setfocus;
raise;
end;
DoExit;
end;  }

constructor TDBDateTime.Create(Aowner:Tcomponent);
begin
inherited Create(Aowner);
//创建DataLink对象,挂接OnDataChange、
//OnUpdateData//事件处理句柄
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;
//若控件连了活动的DataSet则数据集变动时
//控件显示当前记录的相应字段值
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
//当用户改变了控件中的内容时将DataSet置为编辑状态
FDataLink.Modified;
if not FDataLink.Editing then
FdataLink.Edit;
inherited Change;
end;

procedure TDBDateTime.Notification(AComponent:
TComponent;Operation:TOperation);
begin
inherited Notification(Acomponent,Operation);
//当与控件相连的TdataSource
//被删除时将控件的DataSource属性置为空
if (Operation=opRemove) and (FDataLink= nil)
and (AComponent=Datasource) then
DataSource:=nil;
end;

procedure Register;
begin
RegisterComponents('system',       //DataControls,
[TDBDateTime]);//控件注册后安装于DataControls页
end;

end. 

抱歉!评论已关闭.