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

制作用于日期时间型字段的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中使用安全可靠。

《英雄联盟》支撑最高750万同时在线用户的聊天服务打造 深圳云软技术副总黄榕振:招行信用卡微信公众号开发高级篇 来自未来的你,MDCC 2014新奇智能硬件揭秘 Twitter开源云环境时间序列数据断层检测工具BreakoutDetection 浅析Facebook软件架构:Tao和BLOB的实现原理 【图文实录】CTO俱乐部:走近Keen Team,走近智能设备Hack 2014聚合开发者大会(JDDC)在京召开 专访腾讯反病毒实验室:揭秘TAV引擎,哈勃分析系统两大利器 Cocos Studio v2.0 Beta0正式发布!多维升级,合三为一 环信即时通讯云获3000万融资 用于研发运维 苹果谷歌都无力?前员工开发跨设备无缝同步应用 带你看会带你飞!MDCC 2014移动开发者大会参会指南 Meteor 1.0发布 构建更好的Web应用 【专访】敏捷专家吴穹:敏捷测试的行业应用与实战解析 英特尔中国研究院最新成果亮相 展示智能衣服瓷杯机器人等创新作品 Node.js 打造实时多人游戏框架 深圳微信开发者大会购票企业特征分析 上门汽车服务“e保养”完成A轮500万美元融资 Docker之父Solomon Hykes谈项目开发的初衷和挑战 浪潮是如何实现单日5000台x86服务器交付互联网的? Bootstrap 3.3.0发布 版本4不再支持IE8 漏洞预警:FTP曝严重远程执行漏洞 影响多个版本Unix 【简讯】W3C小组宣布HTML5标准制定完成 AMD发布GPUPerfAPI 2.14,GPU性能检测更Easy! 开放能力升级——微信公众号登陆授权开启公测! 百度最“智能”的新型推荐技术——智能因子分解机 消灭Bug!18款最佳的问题跟踪管理应用程序 Google Analytics为什么会这么快 【MDCC 2014】Xamarin深入体验营——开发实战大揭秘 【MDCC 2014】电信技术专场:运营商与开发者如何合作共赢 【MDCC 2014】高德LBS大赛闭幕式暨颁奖典礼:下一个50亿应用花落谁家? CWnd中的声明空成员函数OnSize究竟有何作用? 有谁知道关于电子版的windows api相关的书下载的网址呀。我在线等呀。 怎样用网卡对接电脑 抗议!IE是否自动为收藏夹做过备份? 如何通过NDIS编程取得以太网地址 今晚有多少人通宵? socket客户端能发,不能收是怎么回事? FDISK不能用了吗?真是奇怪呀?谁能帮我啊!!! 想通过sql语句找出这样重复的记录?如何写这个语句? 如何在delphi中显示和编辑sql server中超过256字节的字段 《程序员》的合定本有卖了吗? 最近我防问了一个黑客网站。一下中啦。桌面没有图标我看完啦。有没有高人帮我一下啊。 现有一个dll转为静态库的问题 请问怎样添加一个从CObject继承而来的新类啊? 如何在VB中用Outlook发电子邮件??? 妈呀,上午54,下午33,有戏吗?我完了。 请教:通过VB+ADO访问SQL Server 7数据不能更新记录? 低分低级问题 简单问题,送分喽!!文件调用问题!!! 如何定义IOCTL代码: 谁能推荐一本有关网络与通信的入门书? 看官们注意HttpURLConnection!!! 如何获得Edit控件中当前输入的是第几个字符? 大家是如何调试WDM程序的 在游标中如何更新数据表的当前行 哪里有内幕新闻看? 怎么突然不能解析了,不只是什么原因,昨天我的asp.net都配好了,今天.aspx怎么又不能解释了? 好奇怪!为何不执行Page_Load()函数? 简单问题:关于一个控件,50个大洋。 广州的科友听过没有?听说是搞网络安全的,挺牛B的。全是C,unix高手。。。 如何使用vbs,javas,修改注册表??? 睡不着觉的快来数绵羊啊——什么?你要数星星呀?那也行啊;-p 我只使用了一个MScomctLib里面的listview,我不想把整个dll包进去,怎么办?。。。 谁知道Microsoft的CAB文件用什么工具可以解开? 我对ADO访问MDB比较菜. 这是我的做的练习请大家帮我看一看 有关针对特定人的邮件用特殊格式显示的可行性探讨 SQL SERVER中的怪问题 几年下来,我们一直用着英文版的VC,不知道VS.NET中有没有中文版的VC? 还没有睡觉的兄弟过来帮我看看这段代码,为什么有错?? ADO最新版哪儿有下载啊? 捆饶很久的问题!!! 急,明天就要交程序了,请问怎么才能知道产生的异常的名称,并拦截? 上午56、下午68,散分先 jsp站点的web服务器需要什么都??怎么设置??那里有说明文档没有啊 怎样在窗口没有显示出来之前将数个小位图“拼成”一个大位图并可以保存,急! win2000的怪问题 快救救我!!!!!!!!!!!!!!! 一个关于c++builder的ado的问题! PACK6是不是有问题? MFC程序的结构问题? 一个酷似chinaasp的社区,需要你的支持。嘿……实在做得很好,送分!!!随便给朋友做做广告 小鱼在水里游来游去.改为拟人句 月球绕地球运转的周期是多少? 短文孔子的故事中画线的句子的含义 鱼儿在水里游来游去改成拟人句 月球绕地球的周期? 作文《话语人生》 小河的水向前流淌着.(改为拟人句) 月亮绕地球运转的周期是多少 读短文中画线的句子,找出一组意思相近的词语写下来,体会这样写的好处有的一律是玻璃的,有的清一色是牛角的,有的都是纱灯,有的通通彩绘全部《红楼梦》或《水浒传》故事告诉我相近的 济南的冬天,文中 水也不忍得冻上 羧甲基纤维素钠的物理属性是什么?包括分子量、性状、折光率、比重、熔点、沸点、溶解度(水、醇、醚)以及苏丹Ⅲ、偶氮苯、对乙酰氨基酚的溶解度! 月亮绕地球的周期是多少? 《济南的冬天》 中 写"水也不忍得冻上"?,水为什么"不忍得冻上"?表达了作者怎样的思想感情? 在直流发电机和直流电动机里都会产生感应电动势和电磁转矩,它们在发电运行和电机运行中分别起什么作用 月球绕地球一周要多长时间? 济南的冬天,10题,评价‘天儿越晴,水藻越绿,就凭这些绿的精神,水也不忍得冻上’这句话 话说济南的冬天,10题,评价‘天儿越晴,水藻越绿,就凭这些绿的精神,水也不忍得冻上’这句话 话说看 直流电机的励磁电流和转矩有什么关系?最好有两者的关系图, 1%羧甲基纤维素钠溶液的配制问题我要做测定土壤纤维素酶活性,查到的资料上要用1%的羧甲基纤维素钠溶液,要把1g羧甲基纤维素钠溶到50%的乙醇里,我不明白这种用意,而且,容不了,很浑浊,羧甲 《济南的冬天》中描写的水,为什么"不忍得冻土"? 请问励磁电流和力矩电流在电机运转时分别起的什么作业?利用矢量变频器启动负载电机时,是增加的励磁电流还是力矩电流. 质量分数为1%的羧甲基纤维素钠溶液如何配置 月球在太阳和地球中间的时候会怎么样 地球一小时是几月几日 我国现在的生物柴油产能中有多少是以地沟油为原料,有多少是以植物为原料?能给出百分比最好,甚至能给出最近几年每年的该比例更好! 问地球绕太阳运行 月球绕地球运行 的周期大小一共有2个问题哦~~ 地球一小时是几月几号 酒和水的区别是什么 地球绕太阳一周、月亮绕地球一周的精确时间是多少? 保护地球1小时在几月几日? 地球和 月球什么时候碰撞 月球在悄悄的离开地球,地球会不会悄悄的离开太阳?(时间为若干年) 就凭这点绿的精神,水也不忍得冻上.中的精神是啥意思? 励磁电流和转矩电流各自的目的是什么矢量控制中将电流解耦成励磁电流和转矩电流,既然解耦,励磁电流和转矩电流 各自的控制对象是什么 请问羧甲基纤维素钠的取代度和粘度的关系是怎样的?羧甲基纤维素钠的取代度增大,其粘度是减小还是增大?分子量是否也增大? 地球一小时是几月几日2011 一般来说直流电机是如何实现正反转互换的?是改变电枢电流方向还是改变励磁方向?忘了说了,是他励直流电机 汽车牌号的含义它们这7个符号, 就凭这些绿的精神,水也不忍得冻上.(不忍得的表达作用) 月亮:地球的刹车 汽车牌号是川A·UA789是什么意思? 地球关灯一小时是每年的几月几号 月球:地球的刹车 阅读答案6、“地球的动态”是指第一节中的 7、第二节中,为什么说这0.02秒是个极小的数字,也是个极重要的数字? 9、 第三节中“月亮真正的作用似乎是为人类的文明做准 “就凭这些绿的精神,水也不忍得冻上,况且那些长枝的垂柳还要在水里照个影呢!”(济南的冬天)赏析 请高手指点羧甲基纤维素钠在水中怎样溶解快.如题 我用50克CMC加100克糖混匀,溶于2500ML80摄氏度的热水中,搅拌20分钟后任然有不溶的小块,如何在短时间内可以完全溶解. 6、“地球的动态”是指第一节中的 、 、 、.7、第二节中,为什么说这0.02秒是个极小的数字,也是个极重要的数字?9、 第三节中“月亮真正的作用似乎是为人类的文明做准备”一句照应下文哪 天越晴水藻绿凭这绿的精神水不忍得冻上且那些长枝的垂柳还在水里照个影呢 体会这个句子的手法指出好在哪里 怎样使羧甲基纤维素钠溶解于乙醇 三相异步电动机在电源电压一定时,若负载转矩增大电动机的转子电流和定子电流将如何变化/ 文章结尾写道:“就凭这些绿的精神,水也不忍得冻上,况且那些长枝的垂柳还要在水里照个影儿呢!”其中的“绿的精神”蕴涵着怎样的深意? 为什么线绕式异步电动机在转子串电阻启动时,启动电流减小而启动转矩反而增大? 羧甲基纤维素钠到底怎么制备 月球与地球的距离在什么时候测量出的? 对于绕线转子三相异步电动机,如果电源电压一定,转子回路电阻适当增大,则起动转矩_______,最大转矩___ 羧甲基纤维素钠如何做增稠剂 谁知到山和水的拟人句要是50字以上的!必须是山和水的拟人句不是我跟你单挑! 三相异步电动机采用转子串电阻启动时,电阻越大,启动转矩越大, 你是怎么理解“酒越喝越暖,水会越喝越寒”这句话的如题 小鱼在水里游来游去如何改拟人句 1.文学是人类感情的最丰富最生动的表达,是人类历史的最形象的诠释.2.一个民族的文学,是这个民族的历史.3.一个时代的优秀文学作品,是这个时代的缩影,是这个时代的心声,是这个时代千姿百 柳,酒,月,水四种意象在离别诗中常见的含义与作用
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn