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

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

Splash Screen开场屏在Android中的实现 Android游戏开发性能改进要点 Android的Activity你知多少呢? JSONObject在Android上的应用 Android高性能文件类MemoryFile 判断Android文件名是否安全技巧 让你的Android程序兼容多种分辨率 Android Button按钮控件美化方法 Android堆内存也可自己定义大小 TextUtils类-Android字符串处理类 InputSream输入流转String字符串,Android开发工具类 Android中的正则表达式Regex使用 优化Dalvik虚拟机的堆内存分配 Android标题栏进度指示器使用方法 Thread和Looper以及Handler和Message详解 Android开发必读 layout资源包含,android开发必读 Android本地化开发技巧 Android开发网将推出每天一类专题 ExifInterface使用,Android 2.0新增类 GraphableButton类实现Android UI开发 Android控件开发之ToggleButton原理 Android标题栏TitleBar全攻略 AsyncTask实例代码演示Android异步任务 重绘TextView类演示Android的Handler Android的SoundPool类使用与利弊 AsyncTask解决Android UI堵塞问题 Android自定义View实例AnalogClock源码 Android UI开发专题(五) Bitmap和Canvas实例 Android UI开发专题(四) View自绘控件 Android UI开发专题(三) 各种Drawable 提高Android开发效率-Eclipse快捷键大全 分数不高,还请各位DX们指点以下:如何用DELPHI控制excel的格式(比如第一列的宽度,第五行的高度),以及如何在WORD中生成表格,其中填入数据库的数据. 各位情感高手请解答(没有谈过恋爱的免谈) 一个list控件,style设为checkbox,要怎样才能使列表中各项的默认值是选中状态,也就是说各项一开始都是打了勾的 阿虎菜问7:请问C与C++中的内封函数应该差不多吧? s_cube(竹子), s_cube(竹子)~!! 我爱你,s_cube(竹子) s_cube(竹子) ~!在哪里 简单问题(1) 如何不运行编译? 有谁知道怎么从perl里调用一个c库里的函数????????? 请问在CB中如何隐藏WINDOWS的任务栏呢? 今天不爽,下班后打星际,大家一起来。 指点!在PB中怎样用程序作成一张动态的交叉表 编辑控件怎样才能显示那些怪字符? 有没有人喜欢郑智化 大家推荐好听的几首歌吧! 请教:怎么学c++? 高手点拨! 各位网络高手.如何在程序里讲ip地址转化为域名 有什么方法,可使表单内的组件背景变成透明的而文字不透明,请看例子: 编辑控件怎样才能显示那些怪字符???? swall(壹心) 你还在深圳特区吗? 如何设置Session的密码?请高手指点迷经^^^^^ 哪位可以解释一下下面的代码? perl 的人气太差。罢了罢了。找本perl自己搞定 MsSQL7.0 当日志文件大小未限制而变得很大时,怎样清日志文件,使其减小? 请教诸位牛兄牛姐牛夫人---有难度哦(着急出活!) 基本问题:如何将一个.txt中的内容读入到内存再从内存中读出并存为另一个文件?谢了先!!!! 高手帮帮忙!!!!!!!!!!!!!! 又有台风了。。。。 在zip包中加入ASP推荐的PAD File有用吗????? PB连接SQL数数库,为什么显示的表会不全 如何把一个文件file.dat里的数据写入软盘0磁道0磁头1扇区. 我要骂人! chris2001(牛虻),不是东西 华为工程师 谁知道 vb 的序列号?????? VS.NET 有开了个新铺子。为什么我的ejb/j2ee还没有开张。气愤。 老大们:我是菜鸟,有问题要问,不过不要笑我。一定给分的 再次发问:关于在SQL SERVER中的某张表上建立触发器...... 没有有这样的病毒,或者文件 各位老大,如果有asp、sql基础学jsp和php是不是比较容易一些呀?言者有分哦! dll中怎样调用主程序中的函数? 新手请教接口聚合!!!!!!!!! 高分求教!有没有谁编写过WEB服务器程序? 微软OfficeXp女孩 请教一个报表问题? 小技巧!!! delphi中调用MessageBox出错,高手指点一下。 大家好,这是我提的第一个问题!我学DELPHI才两周!对您的指点,小弟万分感激! 请问sybase12。0中,游标能不能用动态sql申请 紧急求助:如何调用父对话框的函数 各位好,我在VB下做了一个ACTIVE 控件,但是加不到CBUILDER 上,但能加到VB里,为什么? 婚介所 九年级物理知识点总结 对知识点有解释的 下列说法正确的是A物体在它的运动状态发生改变时,惯性表现最明显 氢气在氯气中燃烧不用太详细,用比喻也可以,比如“可以烤肉的温度”……之类的,哈哈哈,当然, 九年级物理的知识点有哪些 物体的运动状态改变,的改变或?的改变或它们同时改变.要改变物体的运动状态,必须对物体 是氯气在氢气中燃烧,还是氢气在氯气中燃烧 (2013•苏州一模)随着夏季的来临,小明想为家庭设计一个54L简易太阳能晒水箱.他随着夏季的来临,小明想为家庭设计一个淋浴用的能装54L的简易太阳能晒水箱,他从资料中得知,地球上与 质量500g的金属,温度从20℃上升至10℃,吸收热量3.5*10^4J,求这种金属的比热容,并判断是哪种金属. 如何提升氢气燃烧火焰温度?需要添加何种助燃剂?在纯氧下一般温度为2860度,现需要提高到3400度以上,谢谢QQ123WE的建议,在此说明的是用于切割金属,现用添加汽油可提升温度,但现想找一 太阳能热水器哪个牌子好?谁来说下?太阳能介绍啊dhi8com谁有更好的? 甲乙两种物质,质量之比是4:1,放出热量之比是3:1,则它们的比热容之比和降低温度之比分别是下列四种情况可能满足题设的条件是:( )①1:1,3:4 ②2:1,1:3 ③1:2,3:2 ④1:3,9:4A.①② B.①③④ C.②③ D. 氢气,氯气,氧气A汞蒸气B水蒸气C碘蒸气D酒精蒸汽选出和上面三种同一类的物质,并说明理由 谁知道2013年的气候预测上班年是冷还是热? 甲、乙两种物质的比热容之比是2∶1,质量之比是3∶1,若它们吸收的热量相等,则甲、乙升高的温度之比为________;若它们升高相等的温度,则它们吸收的热量之比是__________________.若甲、乙两种 非金属性氧大于氯气,为什么氯气与氢气反应比氧气更容易 绝热节流前后,气体的焓不变,为什么温度还会变? 从现在到2013年的一月初三一共有多少天?看见的朋友要注明 从2008年的几月几号算起的 甲乙两物体,质量比为1:2,升高的温度比为2:1,吸收相同的热量,则甲乙的比热容之比为 什么叫节流?节流是个等焓过程,为什么? (2013连云港)27.下列关于氧气的说法中错误的是 A.氧气约占空气总体积的1/5 B.氧气可以支持燃烧,说明氧气具有可燃性 C.氧气供给呼吸,它和体内物质反应,释放能量,维持生命活动的需要 D _的某种物质 温度升高或降低_ 所吸收或放出的热量数值等于他的比热容 绝热可逆膨胀温度为什么变小 苏州地区哪里有的卖硫酸如题 谢谢了RT. 已知甲乙两物质,当他们的质量相同,甲的温度升高的比乙多,对于他们吸收热量与比热容之间的关系 请问绝热可逆过程和绝热不可逆过程的焓变有什么区别? 相同条件下,相同浓度的硫酸和盐酸相比,硫酸溶液的PH值小 这个说法对的还是错的 有甲乙2个物体,甲的比热容是乙的2倍,质量是乙的二分之五,若吸收热量相同,升高的温度比为几比几 湿空气在喷蒸汽加湿的过程中,含湿量,相对湿度,焓的变化 2013年苏州园林卡办理时间和地点 有甲、乙两个物体,质量之比为5:3,比热容之比为2:1,如果他们放出相同的热量,降低温度之比为? 为什么循环水喷淋空气处理过程是等焓加湿过程 推荐几个夏天天气不太热的城市 明年就读大学了. 想去一个天气好点儿的城市. 1 . 夏天最热月平均气温32度以下. 2 . 冬天最冷月平均气温0度以上. 最好是临海、经济发达 气体体积与压力大小的变化 为什么电热式加湿器会是等温加湿?而水洗加湿等是等焓加湿?等焓加湿说通俗点是什么意思?各位大侠们是怎么理解这个焓值的? 夏天中国哪个城市气温最低最好可以给出那些城市夏季的大约温度 压缩客气灌体积大小与它所冲装气体的压力有关吗 物体温度越高,所含热量越多. 这句话为什么是错的?这句话指的应该是同一个物体吧,也就是说100g99度的水和100g100度的水比,为什么不是100度的水所含热量多? 中国哪个城市气候最好冬天不冷夏天不热 80公斤气体压力有多大?80公斤气体压力是等于8mpa吗?这个压力有大?如果用这个压力推动50克重物能推多远? 温度越高物体含有的热量越多吗? 下列说法正确的是()A高温物体的内能一定大B物体的内能变小,温度一定降低C内能大的物体,温度一定高D物体的内能越大,温度可能不变 要理由 氧气和氢气,哪个容易液化请说明理由 物体的温度越高,它所含的热量就越多.这句话是对的还是错的 人们永远无法改变天气,这种说法对吗?为什么? 氢气氧气液化条件氢气需要多少pa的压强才能液化.氧气呢. 物体的温度越高 它所含热量就越多吗?理由 物体吸收了热量 温度一定会升高吗?理由 因为天气是变化无常的,所以人们永远无法改变天气,这种说法对吗?为什么? 为什么氨气易液化 ,而氮气和氢气通常情况下不易液化? 物体的温度越高,它含有的热量就越多. 天气变化是大气层变化的结果,所以人们永远无法改变天气.这种说法对吗?为什么? 天然气`液化石油气`氢气有什么共同性质 物理温度与内能的知识点填空 下列事实中 ,属于物体运动状态改变的有:A 用力拉弹簧 ,弹簧变长B跳伞运动员在空中匀速直线下降C正在进站的火车D运动员透出的标枪在空中运动带解析 、 氢气密度小,为什么会很难液化RT..密度小应该更容易啊. 九年级物理知识点 关于物体运动状态的改变,下列说法中正确的是 ( )A.物体运动的速率不变,其运动状态就不变B.物体运动的加速度不变,其运动状态就不变C.物体运动状态的改变包括两种情况:一是由静止到 氢气在空气中燃烧会怎样;在纯氧中燃烧有会怎样?一般我们用什么方法制造氢气,如何收集氢? 求初中物理内能详细知识点 关于运动和力,下面说法正确的是:A、物体运动,必须有力的作用.B、物体的运动状态要发生改变,必须有力的作用.C、没有力的作用,运动物体速度不可能快起来,但可以慢下来.D、物体受到力的 1.氢气在空气中燃烧颜色(),在纯氧中(),氢气纯度为100%时()2.一氧化碳在空气中燃烧颜色(),在纯氧中(),氢气纯度为100%时()3.写出C、CO、CO2、O2之间所有能发生的的化学方程式感
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn