论坛登陆 用户: 密码:
联系我们
设为首页
加入收藏
业界新闻 网络编程 程序开发 网页图象 聊天通讯 软件应用 网络安全 硬件学堂 教育频道 站长club
  ·推荐新闻
 
·美前任官员认为amd告倒英特
·搜索引擎关键字排行简介
·网站优化教程(一)
·msn近期遭受木马病毒骚扰 用
·用qq管理你的系统^_^ 
·测评中心金山毒霸联合发布7
·qq群聊实名 普通用户不受影
·雅虎思科联手推数字邮件签名
·这18条背下来没人敢和你忽悠
·自己动手,拯救丢失的硬盘数
  ·资料搜索
 
  ·相关文章
·数据库应用程序开发中图像数据
·delphi 中使用计算出的字段
·dbgrid中的下拉列表和查找字段
·在delphi中建立和使用别名
·用delphi实现将纯文本资料转入
·tdbgrid控件中对多个记录的处理
·在delphi动态生成定义数据库
·用delphi编程访问sqlserver数据
·在dbgrid中实现copy、paste功能
  ·热门新闻
首页>>程序开发>>delphi >>文章正文

制作用于日期时间型字段的delphi数据感知控件


 日期:2005-7-18 9:00:44     来源:易特网络技术   编辑:黑鹰  点击:
p>  用delphi开发c/s应用方便而快速,因为它拥有大量易于使用的数据访问和数据感知控件。然而万事总是难以完美,delphi的dbedit控件用于输入日期时间型字段却很不方便,为了改善这一缺点,笔者开发了一个dbdatetime数据感知控件,大大方便了时间和日期的输入。

  创建一个构件时,最重要的一步是选择正确的父类,这样可以减少代码的编写。delphi的构件库中已有一个tdatetimepicker构件,可以以下拉日历或利用spinbutton递增、递减的方式方便地输入和改变日期、时间,但它没有数据感知的能力。因此,我们可以以它为父类,派生出一个新的控件,加上能与数据集通信的数据感知功能。

  数据感知控件通过datalink对象与datasource进行交互,所以为控件增加数据感知能力需要创建一个tdatalink(或其派生类)对象作为控件的成员,并为控件创建公开的datafield和datasource属性;然后需响应tdatalink对象的ondatachange和onupdatedata事件。下面是控件的主要源代码,并带有相应的注释:

{定义从tdatetimepicker派生的tdbdatetime类。注意,在单元接口的uses中应加入db,dbctrls引用}type
tdbdatetime=class(tdatetimepicker)
private
fdatalink:tfielddatalink;
//tfielddatalink是tdatalink的派生类,处理单个字段与datasource的交互
proceduredatachange(sender:tobject);
//当dataset的记录改变(如浏览记录)时触发ondatachange事件,datachange将作为该事件的事件处理句柄
procedureupdatedata(sender:tobject);
//更新dataset前触发onupdatedata事件,updatedata将作为该事件的事件处理句柄
functiongetdatasource:tdatasource;
proceduresetdatasource(value:tdatasource);
functiongetdatafield:string;
proceduresetdatafield(value:string);
procedurecmexit(varmessage:tcmexit);message cm_exit;//当控件失去焦点时触发cm_exit消息
protected
procedurechange;override;//控件中日期、时间改变时触发onchange事件
procedurenotification(acomponent:tcomponent;
operation:toperation);override;
//当某一控件从form上移走时delphi的ide调用该方法通知其它控件
public
constructorcreate(aowner:tcomponent);override;
destructordestroy;override;
lished
propertydatasource:tdatasourcereadgetdatasource
writesetdatasource;//为控件增加datasource属性,使它能与datasource构件连接
propertydatafield:stringreadgetdatafield
writesetdatafield;
end;//为控件增加datafield属性,
使它指向代表某一字段的tfield对象

procedureregister;//注册构件

implementation

proceduretdbdatetime.cmexit;
begin
try
fdatalink.updaterecord;
//控件失去焦点时更新dataset,这将触发onupdatedata事件
except
setfocus;
raise;
end;
doexit;
end;

constructortdbdatetime.create(aowner:tcomponent);
begin
inheritedcreate(aowner);
//创建datalink对象,挂接ondatachange、
onupdatedata事件处理句柄
fdatalink:=tfielddatalink.create;
fdatalink.ondatachange:=datachange;
fdatalink.onupdatedata:=updatedata;
end;

destructortdbdatetime.destroy;
begin
fdatalink.ondatachange:=nil;
fdatalink.onupdatedata:=nil;
fdatalink.free;
inheriteddestroy;
end;

functiontdbdatetime.getdatasource:tdatasource;
begin
result:=fdatalink.datasource;
end;

proceduretdbdatetime.setdatasource(value:tdatasource);
begin
fdatalink.datasource:=value;
end;

functiontdbdatetime.getdatafield:string;
begin
result:=fdatalink.fieldname;
end;

proceduretdbdatetime.setdatafield(value:string);
begin
fdatalink.fieldname:=value;
end;

proceduretdbdatetime.datachange(sender:tobject);
begin
datetime:=now;
//若控件连了活动的dataset则数据集变动时
控件显示当前记录的相应字段值
iffdatalink.field nilthen
iffdatalink.field.text then
datetime:=fdatalink.field.asdatetime;
end;

proceduretdbdatetime.updatedata(sender:tobject);
begin
fdatalink.field.asdatetime:=datetime;
//用控件中的日期、时间更新相应字段
end;

proceduretdbdatetime.change;
begin
//当用户改变了控件中的内容时将dataset置为编辑状态
fdatalink.modified;
ifnotfdatalink.editingthen
fdatalink.edit;
inheritedchange;
end;

proceduretdbdatetime.notification(acomponent:
tcomponent;operation:toperation);
begin
inheritednotification(acomponent,operation);
//当与控件相连的tdatasource
被删除时将控件的datasource属性置为空
if(operation=opremove)and(fdatalink nil)
and(acomponent=datasource)then
datasource:=nil;
end;

procedureregister;
begin
registercomponents(datacontrols,
[tdbdatetime]);//控件注册后安装于datacontrols页
end;

end.

  本控件安装后能以下拉日历和递 增递减方式改变数据库的日期时间型字段,并能以长、短两种格式显示日期,方便实用。控件在delphi3、delphi4中使用安全可靠。

上一篇:数据库应用程序开发中图像数据的存取技术
下一篇:没有了
[发送给好友] [打印本页] [关闭窗口] [返回顶部转载请注明来源:http://www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 黑鹰 投稿作者: 易特网络
信息来源: 易特网络技术 录入时间: 2005-7-18 9:00:44
浏览次数: 投稿信箱: shtghy@163.com
设置首页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
copyrights ©2004-2005 iyit.net all rights reserved. 网站合作、广告联系qq:147007642、466949678
易特网络技术 点击这里给我发消息