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

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

支持Android 5.0:完全用Ruby的Ruboto框架迎1.2.0更新! 万物互联第一步:采用AllJoyn技术的智能硬件 【专访】敏捷专家何勉:让测试成为拉动组织敏捷实施的力量 Docker与微软合作 支持Windows Server 企业号热问热答——来深圳微信开发者大会聆听一线讲师的实战分享 AngularJS 1.3.0正式发布 超光速发展! 学个痛快!十款不容错过的Swift iOS开源项目 HTML5:助力智能电视生态实现新跃迁 MDCC 2014移动开发者大会公布全部议程 求更密集!Apple Watch SDK将于11月正式开放 【答疑】微信开放平台开发者资质认证 专访Informatica亚太和日本区副总裁Murray Sargant:中国公司正考虑数据资产货币化 Facebook又开源:让iOS应用界面极致流畅的ASDK框架 一周消息树:盘点史上最具毁灭性的软件Bug 微信公众平台设备功能支持个人开发者接入 2014中国移动开发者大调查第三批获奖名单曝光 微信企业号上线,带你看看它的真面目! OpenStack Juno版本发布——支持Spark和NFV 【十问十答】对话Go语言开发团队 苹果要求、Android开始,64位时代真的来了! MDCC 2014产品与设计论坛:带你发现产品之美 Java开发者值得关注的7款新工具 助力国产移动产品出海,UCloud部署北美节点 Zack Parker:用EC2在Cotap上打桩 用卫生棉杀敌冲关!两个高中女生的创意游戏 专访《Java程序员修炼之道》作者Ben Evans:保守的设计思想是Java的最大优势 Google收购Firebase 帮助程序员快速开发出移动App和Web App 微信支付开发关键点技术解析 游戏任玩!开源虚拟现实头戴式设备Open DoVision MDCC大会召开倒数10天 看Twitter、Facebook和国内“BAT”三大巨头最新动态 《近匠》Wijmo 5 CTO:从Web到移动,我的25年编程生涯 免费activex控件download去哪里download多 我的JBUILDER为什么不能创建 BEAN(详细在里面) 求租民族大学附近的小屋 请那位高人简单的讲解一下关于rs232接口通信的一些简单知识 如何把<%# DataBinder.Eval(Container.DataItem, "x") %>的值赋给一个字符变量 请教,如何压缩带密码的Access数据库?? 紧急求救!!!VF 编程 Factory 模式的优点 我靠,263也收费了!我们何去何从? vc下参数传递问题 Tomcat的服务程序怎么实现的 为什么在delphi中给sql server的image字段插入null值,在sql server却变为了0x? 请问大家除了自考之外,还有什么途径可以将学历升到本科 定义一个p[1000],会不会内存不够用? 爱情为什么会使我如此痛苦. 关于 《DELPHI》 与 《C++》 的对比!!!!!!!!!!!!! 如何在同一窗口启动Word 动态报表问题--如何动态打印一个主表和多个细表的问题?? 如何制作有身份验证的单机数据库程序? JAVA中的指针,引用及对象的clone 请教大家。为什么我用access做的数据库但是用VC创建工程时却被告之不识别的数据库格式。 50分!!!兄弟们,BCB6安装完之后还要一次注册,activation key,谁知道? 软件黑奴们,我们算是白领吗? 有关office助手 怎樣跟蹤Access數據庫的操作 关于 《DELPHI》 与 《C++》 的对比!!!!!!!!!!!!! 非技术问题,不一定经典 ASP中如何上传文件到SQL2k 怎么从crosstab中取列名? c++ primer 难!难! 难!如何得到选中文本加亮矩形区域?? 如何在北京找一个工作+学习的机会? sql7.0如何升级到sql2000并且数据不变 DBGrid顯示的范圍如何定? 请教:在VC++中编程时,为何有的文件能出现类成员提示,有的文件编辑时不出现提示,有的只出现该类的,却没有其基类的类成员提示? 一个很好拿的高分 我写了一个拨号网络记时的工具,可以设定时间自动断线,提供源码.... 怎么读取外部数据源中的某个表中的某列的数据类型? 如何注册一个DCOM,让它跑在别的机子上? 关于用Win32 API画 BMP 图片问题 !急急急急急急急急急急 !!! Delphi 6 的 lib path 丢失!! help?谁知道Tab Control 控件的用法,12分的感谢!!!! 请问:如何在一般用户环境下启动管理员程序? 我想捕获网卡收到的数据包,该怎么搞? vb中调用sql server和ORACLE数据库的问题 北京的朋友,有谁知道这东西那里有卖的?? 想在c#和java中选一个,给点意见.客观点. 如何得到在另外一个窗口中所选择的结果 dcc32如何使用? 大哥,大姐们,这到题没分给,但我真的想知道答案 求对VSS或者Team Source开发的例子 伏旱是有反气旋控制的么?为什么? 问下环氧树脂在黄金上凝固后的颜色谢谢我想环氧树脂在黄金上凝固后的颜色谢谢,因为工作原因不小心弄点环氧树脂不知道弄没弄到戒指上所以想知道谢谢 GO ON英文是什么意思 我看不懂下面的程序,default语句是什么意思!为什么结果中会有两个“!public class E {public static void main(String args[]){\x05char c='\0';\x05for(int i=1;i 环氧树脂 色泽(G)环氧树脂产品指标有一项是色泽,比如说扬农的1828色泽(G)≤1这色泽(G)的定义是什么?纯水的色泽有是多少呢? 英语里on和over是有在什么的上面的意思吧on和over哪个是指接触的在上面的,哪个是不接触的 C语言高手进 函数的这章我老看不懂 我是自学 谁有什么诀窍 还有下面这个程序为什么改了就不对了#include void main(){int max(int x,int y);int a,b,c;scanf("%d%d",&a,&b);c=max(a,b);printf("max is %d",c);}int max(int x 水星、土星、金星、木星、火星、地球、海王星、冥王星、天王星资料各200字左右,要精选,一定要精选,赖了天打五雷轰,各300字,刚说错了,一楼字太少,咱做电子报刊,不够用 北半球的气旋方向是怎样的?北半球的气旋和大气洋流的方向有什么关系? 做星空瓶用硬的水晶滴胶还是软水晶滴胶好? 电容器为什么在充电的过程中 1.电容器电荷量增加 2.电容器两极板间电压增大 3.电容器中电场强度减弱电容器为什么在充电的过程中 1.电容器电荷量增加 2.电容器两极板间电压增大 3.电容器 反气旋、气旋是什么?(简单概括一下)怎样判断气旋是在北半球还是在南半球? You Set My Heart On Fire 歌词 温度升高分子的变化 保温材料的导热系数高好还是低好 比如0.040和0.070 哪个保温效果好 Set me on 分子之间的作用力越小,分子间运动越快,温度就越高吗?一定要专业 准确, 物体的导热系数越大就代表其散的热性能越好,比如说,做LED灯时,包裹LED的车件多为铝的,为什么不能用铁的呢?我也知道铝的导热系数比铁要大!考虑用铝的是否是因为其比铁散热性能要好呢? 活化分子是能量高于平均能量的分子!加入催化剂只是降低了反应的临界能量,并没有改变分子的能量以及分子的平均能量,为什么增大了活化分子的百分率? Are you carrying a fire in your heart?求翻译 cfd是什么意思 什么叫做“有些分子的能量高于分子的平均能量,称为活化分子”,什么是“分子的平均能量” 唱英文歌的时候 单词发音什么时候省去最后一个音?比如set fire to the rain里面有句 my heart [t]就没发 CFD交易是什么,有谁玩过,好不好,请知道的或者这方面的专家说下 活化分子的定义是只要能量高于平均能量就行了吗还有活化分子一定会发生碰撞吗?碰撞后一定发生有效碰撞吗 We bout to set the roof on fire baby.you better get yours cuz.这句话用中文翻译下?如题 CFD是什么技术?还有在阀门中一些英文的缩写各代表什么意思?如SIB30,UIB30,SMC32,SM45,SSM21,HP45等 什么叫覆铜板?什么是覆铜板是用来干什么的最好给我多讲讲关于这方面的知识好么因为我面试的时候要用的 为什么水银温度计受热是水银柱会上升是因为分子间间隔变大了吗 如图1所示,Q是带正电的点电荷,P1和P2为其电场中的两点.若E1、E2为P1、P2两点的电场强度的大小,φ1、φ2φ1 铝基覆铜板中的绝缘层 用的是什么料,有用邻甲酚醛环氧树脂的吗? 水星、金星、火星、木星、土星、天王星、海王星大气主要成分,表面平均温度,是否有水.格式:行星名称 大气主要成份 表面平均温度 是否有水废话不要 请问流体力学里面的迎风差分格式到底是什么个意思啊如题 玻纤布在覆铜板里的作用是什么? 水星金星火星木星土星天王星海王星大气主要成分,表面平均温度(老师这变态),是否有水好好回答,好的话+++++50! AB胶和502哪个比较好? 电场强度与电容的关系已知一个平行的金属板电容器,两板距离4mm,充电后两极板电势差为120V,若电容为3uF,求每一个板的电荷量.新手学电学,基础比较差, 【紧急求助】温度 升高,分子的平均速率一定变大 这句话对吗 502胶水和AB胶水友什么区别? I will not make any comment on it中 on it是什么成分? 关于环氧树脂配成黄色加什么东西环氧树脂配成黄色要加什么东西,按什么比例配 在X轴上有两个点电荷,一个带正电Q1,一个带负电-Q2,Q1=2Q2.用E1和E2分别表示两个电荷所产生的场强大小,则在X轴上A.E1=E2之点只有一处,该处和场强为0B.E1=E2之点共有两处,一处合场强为0,另一 英语翻译Newtown is the headquarters of the National Sports Shooting Foundation,a gun advocacy organization.It says for it to comment on the local killings would be inappropriate at this time “out of respect for the families,the community and th 台风,梅雨、伏旱、寒潮、北方夏季暴雨的形成与哪些天气系统有关?贵阳“冬无三日晴”是怎样形成的? 在x轴上有两个点电荷,一个带正电Q1,另一个带负电-Q2,且Q1=2Q2,用E1和E2分别表示两个点电荷所产生的场强大小,则在x轴上(  )A.E1=E2之点只有一个,该处的合场强为零B.E1=E2之点共有两处,一 im lovin it的意思 什么东西能把环氧树脂融化 两个点电荷相距L.一个带正电,大小为Q1,另一个带负电,大小为Q2,Q1=Q2.E1和E2分别表示两个点电荷的电场 Im going to put it on.能写成Im going to put on it.词组put on一定要拆开用吗? 环氧树脂中小点是什么东西用环氧树脂E41和三乙烯四胺,混合后,形成小的树脂球,为什么树脂球表面有小点,是什么东西,哪个高手能指导一下? 在x轴上有两个点电荷,一个带正电Q1,另一个带负电-Q2,且Q1=2Q2,用E1和E2分别表示两个点电荷所产生的场A.E1=E2之点只有一个,该处的合场强为零B.E1=E2之点共有两处,一处合场强为零,另一处合场 Make a survey on people’s attitude toward the disabled and make a comment on it.要写成什么样的对 601环氧树脂的固化体系,做个涂料的试验,固化剂选什么,配比是什么 在x轴上有两个点电荷,一个带正电Q1,另一个带负电-Q2,且Q1=2Q2,用E1和E2分别表示两个点电荷所产生的场强大小,则在x轴上(  )A.E1=E2之点只有一个,该处的合场强为零B.E1=E2之点共有两处,一 我国北方秋高气爽天气有关的天气系统是A.准静止锋 B.快行冷锋 C.反气旋 D.气旋为什么选C.反气旋 的天气实例不是伏旱吗? 环氧树脂固含量怎么定义 发一篇科技与生活的作文给我,急用 “伏旱”天气的天气系统是?为什么是反气旋?如果是书上有请水下第几页, 如何改变环氧树脂颜色也保证其透明度环氧树脂一般是淡黄色,透明的,加什么性质的色浆可以改变其颜色?具体些, 【英语】在这一句话中,From now on I'll work harder that before .
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘