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

制作用于日期时间型字段的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的MasterKey再次出现bug 比特币挖矿必备工具 硬件性能大比拼 RDBMS vs. NoSQL:反派为什么会得以存活并发展壮大 帮助优化移动网站:谷歌发布新指南和PageSpeed Insights工具 增强Web可用性,你需要避免的七大设计错误 Python六大开源框架对比:Web2py略胜一筹 海外看中国:老外开发者间流传着的7件事儿 京东云峰:电商移动云平台背后的技术 初创公司DigitalOcean:55秒搭建一个云服务器 分布式系统事务原子性的非阻塞实现 IBM发布基于人脑特性设计的全新计算架构和编程语言 16款加速编码的HTML5在线工具 JFrog:开源项目的最大挑战是文档和许可 5个技巧打造完美用户体验,不到两年完成用户万到千万的增长 CDN未来的机遇和挑战 华为S12700全可编程交换机进一步挑战思科 OpenFient创始人:将平台创新进行到底 专访Ubisoft手游团队:“波斯王子”的时光机器 技术大牛Jiva DeVoe:App Store往事追忆录 移动周报:苹果iOS开发者中8位公认的“女神” Paul Graham:创业者如何说服投资人? 【CTO俱乐部深圳站】企业大数据建设案例分享 Gmail新设计影响邮件营销 Fcaebook间接获利 百度高德小米网易杭研讲师登场 SDCC 2013第二批议题发布(图) [开源推荐]JS-Git:一款纯JavaScript实现的Git项目 良心企业Lavabit、Slient Mail相继关闭,美国云安全已死? 一周观察:LXC真的是PaaS的未来吗? [企业开源系列]Google背后的开源力量 合作: “云”潮中淘金的金钥匙 Windows 8.1尚未发布 Build 9471版遭泄露网爆高清大图 Imangi创始人:我眼中的App Store 有会用SDL(Simple DirectMedia Layer)的么? 如何重新启动电脑啊 ooad 有人对xml文档及schema映射为数据库的记录和表作过研究吗? 窗体启动时,Load之后是什么事件 安装好了J2EESDK1。4后怎样运行JAVA程序? 有关DBGrid的问题 IBM的硬盘是不是很菜!惨啊!奉劝大家多多备份,不要买IBM的盘 合格的程序员应该具备哪些知识和技能? 在报表中如何显示出来----共n页/第几页 急寻广州深圳两地图书城管理软件公司 用jdk写出的application里的汉字很难看,有没有解决的办法? 面向对象分析与设计 那位有<<java大学教程>>的光盘,可不可以把光盘上的附录部分发给我!(100分) 关于win2000中的odbc的问题 vfw 软件工程师和程序员有什么不同? 一方有难,八方支援,我有疑难,你能否来? 唉。 发现有人还在吃糠。。。。痛心ing.............. 为什么我连不到mysql? 有什么比做ghost更好的硬盘数据备份方法? 请教:在dataGrid 中如何根据行值的不同,设置不同的颜色 一般菜的问题,不知道你遇到过没有,请大家过来看一下 分析与设计 3D場景鋸齒消除問題 一方有难,八方支援,我有疑难,你能否来? 发布新软件,请帮助测试 一个白痴问题!哪个函数可以去除字符串中的空格? 在两台服务器上的数据库间创建触发器的注意事项? 有一好的想法,但途中这个问题搞不定 各位高手,请问用API怎样获得本机的网卡的IP地址 面向对象ooad 有没有类似deltree功能的函数啊? weblogic初级问题 小问题, 如何把个DBIMAGE里的图片复制到剪贴板里去?? 如何正确更新ADO的记录 分全给出,各位大侠看一看为什么动态库中的窗体调不出来:。。。。 更佳编程之路(转贴) 菜鸟问什么是水晶报表? 我的第一次发问? 集思广益整理一下有关类型转换的函数!(出力的都有分!!!不够再加!!) 有高分!有高分!有高分!有高分! 大家都用什么工具来做J2ME开发?调查一下!!! 急!sql server中的数据备份我在用程序操作,应如何写那(在deplhi中) msdn的提问~~~ datagrid的滚动条上下滚动的事件是什么阿? OOAD提示 SOFT-ICE的使用! 在C++Builder中怎么将相对于1980年1月1日0分0秒的秒计数换算成日期? 链接服务器:OLE DB提供程序'MSDAORA'报错,连接失败 用VB创建了一个SQL表并填数,时间长了就没了,怎么回事(在线等) 全站仪水平度盘不动,转动望远镜水平读数为什么变化? (求过程)函数f(x)的图象如图所示,则它的最大值、最小值分别为:f(0),f(3/2)为什么? 3/5×6/5简算 全站仪引点时坐标读数是错的是什么问题?测站点和后视点都没有错.就是照准好了以后对中棱镜测点得出的坐标读数是错的.是不是全站仪坏了?有哪个见到这样的问题? 我做个很奇怪的梦不知道什么意思,希望谁能给我解答下~是这样的:梦里我住在一个四合院里,有一些模糊的人(这些人的脸很模糊看不清楚,而且我都不认识.但他们和我很熟悉)在和我一起 √6(√8+√3)-(√5+√3)(√5-√3)的简算过程以及答案 7x-x^2=10 x=? 一个男生给我看他的日记,还说这是我们之间的秘密,一天上自习他传纸条过来 他:给你看个东西,有兴趣没?我:嗯.什么?他:那你先答应不许笑我,而且替我保密.因为这里写的东西我从没让别人看 3.6+3.6*(3.6-3.6/3.6)/3.6如何简算 10-7x=x+2 有个同学给我发了一句奇怪的话,我看不懂,E6%96%87%E4%BB%B6%E8%90%BD%E5%AE%9E%E6%83%85%E5%86%B5&i=somanythings...他说让我自己想,5555555.好心的大哥大姐帮帮忙啊~ 、正方形ABCD 中,△BKC 是直角三角形,KB=2,KC=1. MN 平行于DC 交AD、BC 于M、N, PQ 平行于AD 交AB、DC正方形ABCD 中,△BKC 是直角三角形,KB=2,KC=1. MN 平行于DC 交AD、BC 于M、N,PQ 平行于AD 交AB、DC 于P、Q.那么 利用因式分解计算如何算?(1-1/2^2)×(1-1/3^2)×………………x(1-1/2013^2) 有谁知道铝粉在耐火材料中的作用请详细说明金属铝粉在耐火材料中是做什么用的,哪些耐火材料需要用铝粉? 如图,AD∥BC,AB∥DC,MN=PQ,试说明DE=BE的理由 怎么算因式分解 生产涂料,太阳能用铝粉时,不合格的铝粉可以用在哪些途径?耐火材料和烟花中可用吗?还有哪些途径可用?耐火砖和烟花用铝粉有哪些具体要求 参数标准 比如粒径,纯度或者其他? 在梯形ABCD中,AD平行BC,AB=DC=8,∠B=60°,BC=12,MN分别是AB DC的中点,连接MN .求 MN 帮我算一下.因式分解 函数y=3x+2的图像与y=1/x的图像交点的集合.请用描述法和列举法、写出过程谢谢. 发生在隋朝的历史事件(台湾) 铝粉的主要用途是什么? X²-3X-4=0用列举法怎么表示? 跪求隋朝发生的重大历史事件!是历史事件就给我!不要台湾的!加年代!589(或581)到618年的,还有每次发生任何一个事件都要写!每次的都写长点,好的给一堆分!再次说明一下:隋朝发生的历史事件, 色漆中铝粉的作用是什么? 9、10、11、12急! 猪笼草是一种食虫植物,为了验证猪笼草分泌液中有蛋白酶,详细分析下! 已知在10只产品中有2只次品,在其中取两次,每次任取一只,作不放回抽样求下列事件的概率:2只都是正品.一只是正品,一只是次品.第2次取出的是次品.是用排列还是组合啊. 铝粉用途 梯形ABCD中,AD∥BC,AD∥MQ,且分别交BD于N,AC于P,M在AB上,Q在CD上求证:MN=PQ, 【考试在线】有10件产品,其中有2件次品,每次抽取1件检验,抽检后不放回,共抽2次.求下列事件的概率问题一,两次抽到的都是正品问题二,第一次抽到正品,第二次抽到次品问题三,抽到的恰有一 铝粉主要有哪些?用途是什么 上海世博会的英文主题曲是什么这次上海有一首很好听的英文主题曲,是一名外国女歌手所唱的,不知道叫什么名字,希望知道的人能帮助我一下, 在10件产品中有2件次品,现从中无返回抽取3件,计算下列事件的概率:(1)恰有2件正品 (2)含有次品 牛的头数比羊的只数多25%,羊的只数比牛的头数少百分之几?要用方程法,要有算式、过程、结果. 1.2.3.4.5.6. 雪的周记500字 两个乘积的3/1是-6,其中一个数是-4的绝对值的八倍,求另一个数. 如图,AD//BC,AB//CD,MN=PQ,求证DE=BE 帮我写周记给分不要写雪 世界上到底有没有鬼这类的东西啊 有太多无法解释的事了! 如图,MN平行PQ,同旁内角的平分线AB,BC和AD,CD相交于点B,D,(1)求证:AB垂直BC(2)求证:四边形ABCD是矩形 上海市奉贤中学我能上吗?我现在户口在浦东新区,我妈妈想把我的户口迁到奉贤青村镇,我在长岛中学读初二,排名在年级前十左右(100分的卷子四门平均92左右,数学大概95左右)古筝7级,女,我 解方程组2x+3y=240 x+2y=150, 猪笼草里的液体是由哪几个部位构成的 “自从我上中学以后‘’用英语怎么表达 '奇妙'是什么意思了 神奇古怪草 猪笼草种得出来吗这个是假的吗 中学同学用英文怎么说啊?美国人真是的! “很神奇”有什么特别的意思? 1、A除B的商是2,则A∶B=( )∶( ).1、甲数的5/8等于乙数的5/12,甲数∶乙数=( )∶( ).RT 英语翻译 求1.2.3. 已知甲数除乙数等于16,把甲 乙两数同时扩大2倍,商是 英语翻译 一列火车在平面的铁轨上行驶,由于遇到紧急情况,火车以速度v(t)=5-t+55/(1+t)紧急刹车至停止.求 (1一列火车在平面的铁轨上行驶,由于遇到紧急情况,火车以速度v(t)=5-t+55/(1+t)紧急刹 乙数除甲数商是0.24,甲乙两数最简比是?( )×12=6/11 5×( )=1/4 1÷( )=2/7 =IF(ISNA(VLOOKUP($A$1,订单台帐!$A:$U,12,FALSE))," ",(VLOOKUP($A$1,订单台帐!$A:$U,12,FALSE)))详细的解释三个函数(IF,ISNA,VLOOKUP),它们各自的公式、意思及整体的意思. 火车经过12.5米的钢轨的时间是1.8秒,求火车的速度 有一个梯形 上底是3.14 下底是4.19 腰都是15 求面积
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘