说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

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

HTML文档下载 WORD文档下载 PDF文档下载
制作用于日期时间型字段的DELPHI数据感知控件

用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;

published

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中使用安全可靠。

豌豆“荚”油!B轮融资1.2亿美元的豌豆荚 2013年终盘点:10款最精巧的硬件开发板 SquareWear:可替代Lilypad Arduino的开发板 开放数据:2014年最热门的竞争领域 IE11虚拟机免费面向广大开发者 九城搭建的一个以Hadoop为基础的大数据平台 Windows 8复杂性的代价到底有多大? 在发布前,第一代iPhone其实并不完善 市场占有率调查:iOS 7秒杀Android 4.4 AWS会赢、OpenStack会消亡、Connected Cars可防僵尸攻击 谷歌以32亿美金收购iPod之父的创业公司Nest 物联网时代来临 微软2014,有你期待的吗? 映趣科技发布inWatch Z/inWatch X 后者采用全彩透明柔性屏 程序员没有天才:暴风影音首席架构师鲍金龙访谈 开放式创新改变世界——OpenStack生态系统将重新洗牌 Java 8最终发布日期敲定,即使有bug也要发布 Meteor PK Django,谁更适合开发实时Web应用? 学编程就像选家具:去宜家还是从种树开始? 前车之鉴 十二个年度最差设计网站汇集 冷暖交替,2014年编程兴衰趋势预测 诺基亚出Android手机,微软或将受惠 苹果不收购Nest的大猜想 Netflix开源S3一致性提升利器S3mper Fi 《近匠》第06期:UCloud——目标!完整云服务 小三上位:Windows Phone不容忽视的契机 “详解Visual Studio 2013”全国巡讲北京站:无忧开发iOS及Android应用 Chrome最新版:快速静音及在Win8中建Chrome OS系统 雅虎COO Henrique de Castro因业绩不佳被解雇 分析比特币背后的数据算法,抢占背后巨大市场先机 美食菜谱将会成创业风口的两大理由 Windows XP杀毒软件更新 将被延至2015年7月 在线等待!!sql 无法登陆 500分求菜单功能。 用VC写的dll在vb上怎么用? 这样的sql 怎样写 WIN2000和LINUX与APACHE的搭配的困惑 高分求助,各位进来帮一帮吧,有问题请教,急,急!!! 找不到包在线等 我就不相信CSDN没有高手,帖出代码求救!!! 在服务器端监视客户记录 怎样使用vc+soap kit调用web service,麻烦添加注解! 中国科普之我见(普鲁日尼科夫),一种局外人难得的评说,你一定要看! 怎么找到这个东西 jScrollPanel.getViewport这个里面的getViewport代表了什么?Viewport的作用是什么?谢谢 ███请问,如何判断"\\192.168.0.123\temp"这个目录是否存在?███ 谁可以告诉我如何通过msflexgrid实现查询? 高分相给! 迷茫啊................ 大家来看看1997--2002的历届Jolt震撼大奖名单~ mmqm.exe 篡改IE的问题。给分!! EJB设计模式.实战EJB.精通EJB......等等----一个超好网址 简单快速 资源不敢独占 拿出来分享 如何实现打印功能? 怎样才能填充由两条贝塞尔曲线围成的封闭区域,谢谢了 请教关于数据库连接的问题 在sstab控件上怎么动态添加控件! ★★★★★★应邀申请[专题开发]版主,谢谢大家支持!★★★★★★ 通过代理(采用XP自带internet共享)上网的奇怪问题! 怎样才能将3DMAX做的动画嵌入到DELPHI7中,各位求救啦!? 请教一个困扰我好长时间的问题? 【回复被误删,导致本人满性欲降低,悲痛欲绝,请版主回复本人性欲】 如何判断窗体已经Unload,但还没有成为Nothing? 怎样修改jboss-3.2.1_tomcat-4.1.24的端口号,请多指教 word文档怎么打不开 HELP!一道规划问题的优化! 问题描述(太长了,只好发到2个贴子) 怎么找到这个东西 怎样将一个16进制的数转换为2进制 刚接触vc,有关List Box控件的问题 你用手机上过网吗,怎么设置的? 你用手机上过网吗,怎么设置的? 为什么能安装98却装不了2000? QQ密码保护问题忘了……咋办? 如何在Jbuilder的数据驱动下拉菜单中得到微软的SQL server 驱动 如何解决系统“瓶颈”问题? 怎么用JExcelApi实现Excel图形呢?急!!! 求助,datagrid的一个简单问题? 如何实现打印的功能? 主板P4VXASD是否不支持DDR显存的显卡? 关于计算机四级的题目,请高手帮忙,谢谢 在动态调用DLL时,如何确定这个调用已经关闭! 帮我出出主意 谁可以告诉我如何用datagrid实现查询功能? 请教各位大虾 一个运行时错误,试过行了就结贴 GetExtendedStyle的返回值是dword类型的,请问他具体是什么类型? 积分 1/tanx+sinx) 2x-3-x=0过程 BASS是什么意思 、? 求积分∫x(tanx)^2dx 音响上S.在音响后面有一旋钮,上面写一行S.BASS.不是音量的意思什么叫超重低音? 贴吧里的diva是什么意思 如图A,B两村被小河所隔,经勘测后决定在D,E两处选点修桥若两岸平行,桥身垂直与两岸,且桥长DF=EC=30m,A,D,B,三点在同一条直线上,AD=50m,AE垂直于DE,AE=30m,请你判定,桥址应选在D处还是E处,能使A,B两村 supa dupa diva Dal shabet的歌, i am diva-licious是什么意思? codomain和range的区别中文解释都是‘值域’,但是wikipedia的解释是不同的,说只有在subjective function的情况下codomain=range. (X-3) 2X(X-3)=0 eBay卖二战纳粹大屠杀时期遗物获利斯诺登:揭发情报机构监控丑闻有利于社朴槿惠时隔39年访法 会晤奥朗德磋商罗姆尼:奥巴马医保网站问题频出 有损菅义伟:处理福岛核电站事故应加强政府新书称奥巴马曾向幕僚吹嘘:我擅长杀人印度北部村落遭武装分子袭击 造成7死埃及前总统穆尔西到达受审地点 将接受法两名记者在马里遇害 遗体遍布弹孔俄总统普京将访问越南 适逢俄越潜艇交喵星人出没!走进日本“猫岛”田代岛(主频最高2.5GHz+14nm工艺,双11小米电视天猫55/60英寸销量Y系登场!《海战世界》新版本11月2昨天女王上朝所有人都给跪了,只有一个为什么日本是世界上垃圾分类最为严格的新款大众帕萨特年底亮相 增1.8T高新版人民币今发行 网友约定:取上一沓美国废弃公交变身移动浴室 供流浪汉洗汉腾汽车首款车型申报图 众泰兄弟品牌美摄影师两千米高空俯拍大都市绚丽夜景Noah 2015 秋冬系列纪元之主我的幻想科技小魔妃三界尸皇妖翼遮天第七颗头骨异世为圣蓝色最终冷傲总裁的二手娇妻真婚享爱妖神养成记开元寺旅游新街口旅游八达岭温泉度假村旅游西峰旅游南峰旅游东峰旅游北峰旅游东关街旅游巩乃斯旅游岜沙苗寨旅游青山沟旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘