ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:17.82KB ,
资源ID:11328824      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11328824.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(delphi制作自定义数据感知控件并装入包dpk文件中与dbtext类似的数据感知控件.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

delphi制作自定义数据感知控件并装入包dpk文件中与dbtext类似的数据感知控件.docx

1、delphi制作自定义数据感知控件并装入包dpk文件中与dbtext类似的数据感知控件Delphi 制作自定义数据感知控件并装入包(dpk文件)中(与DBText类似的数据感知控件) 一、基础知识简介:1、包的命名介绍: 包的命名没有规则,但是建议遵守包的命名约定:包的命名与包的版本相关,包的名称前面几个字符通常表示作者或公司名,也可以是控件的一个描述词,后面紧跟的Std表示运行期包,Dsgn表示设计期包,然后是版本号。如:MyDataEditStd60,MyDataEditDsgn60。 2、对象浏览器【Object Inspector】中一个属性感知一类控件的原理: 控件属性的感知只不过是

2、将它的一个属性声明为将要感知的控件类而已,例如要感知Image控件,则:property MyImage:TImage read GetImage write SetImage;这样之后,窗体中的所有的TImage类型的控件,它都能感知到。 3、数据感知控件与其他相关控件进行交互的方法: 数据感知控件通过DataLink对象与DataSource进行交互,所以为控件增加数据感知能力需要创建一个TDataLink(或其派生类)对象作为控件的成员,并为控件创建公开的DataField和DataSource属性;然后需响应TDataLink对象的OnDataChange和OnUpdateData事件

3、。 我们用到了一个重要的类TFieldDataLink。它是控件内部的数据联接对象,从TDataLink继承下来,它的作用是与TDataSource组件相互通信,连接单个字段进行数据提取。我们将要处理这个对象的OnDataChange事件,这样,当字段或记录有所改变时就会得到通知,进行相应的数据处理。 4、当其中一个控件被删除或者断开时,通知其他控件的通知函数: 感知组件需要和DataSource数据源控件和DataSet数据集控件相组合才能实现数据库数据的读写,那么当删除其中一个时,如果其他两个控件不知道,就会出现异常,甚至导致死机。那么我们怎样才能做到通知其他组件呢?Value.FreeN

4、otification(Self)就是做这个工作的!FreeNotification(self)将会把我们的组件置入其通知对象列表中,被撤消时,它会依次调用通知对象列表中所有对象的Notification方法。每个数据控件都有一个Notification方法,当某一控件从窗体上移走时,DELPHI的IDE调用该方法通知其它控件。 二、制作数据感知控件的具体步骤:本文以制作一个类似于DBEdit的控件为例。1、 创建组件,并安装在新包中。1>、首先使用组件向导从TEdit(StdCtrls)下继承下来,命名TMyDataBaseEdit,单元名为MyDataBaseEdit.pas,2&g

5、t;、安装在一个新的包文件中,起名为MyDataEditStd60.Dpk。 (此种不需要dpr工程) (【Delphi 编写Pas文件类型的组件】 中的 【二、制作一个简单的组件基本步骤】 有介绍) 2、 添加属性。1>、声明一个内部数据连接对象:TfieldDataLink,用于与TDataSource进行通信。 在Private中添加代码: FDataLink: TFieldDataLink; / Uses DBCtrls;2>、添加数据源感知属性:DataSource 和字段感知属性:DataField ;其值就显示Text中,处理事件是DataChange 和Update

6、Data。 只需在Pubished域添加以下代码: property DataSource: TDataSource read GetDataSource write SetDataSource;/ Uses DB: property DataField: string read GetDataField write SetDataField;3>、按下【shift ctrl C】组合键完成属性的自动结构化功能, private域自动添加四个函数: procedure SetDataSource(const Value: TDataSource); function GetDataSou

7、rce: TDataSource; procedure SetDataField(const Value: string); function GetDataField: string;4>、上面四个函数的实现方法: function TMyDataBaseEdit.GetDataSource: TDataSource; begin Result := FDataLink.DataSource; end; procedure TMyDataBaseEdit.SetDataSource(const Value: TDataSource); begin if not(FDataLink.Da

8、taSourceFixed and (csLoading in ComponentState) then begin FDataLink.DataSource := Value; end; if Value <> nil then begin / 将会把我们的组件置入其通知对象列表中,被撤消时,它会依次调用通知对象列表 / 中所有对象的Notification方法, Value.FreeNotification(Self); end; end; function TMyDataBaseEdit.GetDataField: string; begin Result := FDataL

9、ink.FieldName; end; procedure TMyDataBaseEdit.SetDataField(const Value: string); begin FDataLink.FieldName := value; end; 3、 添加方法: 1>、实现通知函数(必须的)。当某一控件从窗体上移走时,DELPHI的IDE调用该方法通知其它控件。这样,当关联的参考控件被删除时,控件就会得到消息,来处理事件,防止异常的发生,否则将会导致Delphi开发环境的不稳定甚至死机。在protected中添加代码: procedure Notification(AComponent:

10、TComponent;Operation: TOperation);override;添加实现的代码: procedure TMyDataBaseEdit.Notification(AComponent: TComponent; Operation: TOperation); begin inherited Notification(AComponent, Operation); / 当与控件相连的TdataSource控件被删除时将控件的DataSource属性置为空 if (Operation = opRemove) and (FDataLink <> nil) and (AC

11、omponent = DataSource) then DataSource := nil; end; 2>、实现数据处理过程当DataSet的记录改变(如在DBGrid中滑动滚轮的浏览记录)时触发OnDataChange事件,DataChange作为该事件的事件处理句柄。在Private中添加代码: procedure DataChange(Sender: TObject);添加实现的代码: procedure TMyDataBaseEdit.DataChange(Sender: TObject); begin /若控件连接了的DataSet,则数据集变动时控件显示当前记录的相应字段值

12、 if FDataLink.Field <> nil then begin Text := FDataLink.Field.Text; end; end; 3>、实现数据更新过程:更新DataSet前将触发OnUpdateData事件,UpdateData将作为该事件的事件处理句柄;在Private中添加代码: procedure UpdateData(Sender: TObject);添加实现的代码: procedure TMyDataBaseEdit.UpdateData(Sender: TObject); begin / 用控件中的Text更新到相应的字段 FDataL

13、ink.Field.Text := Text; end; 4>、实现控件失去焦点时的消息处理函数:当控件失去焦点时触发CM_EXIT消息在private中添加代码: procedure CMExit(var Message: TCMExit);Message CM_Exit;添加实现的代码: procedure TMyDataBaseEdit.CMExit(var Message: TCMExit); begin try / 控件失去焦点时更新DataSet,这将触发OnUpdateData事件 FDataLink.UpdateRecord; except setFocus; /这里是将

14、发生的异常显现出来。因为用了try except end后就不会显示出异常和错误。 raise; end; DoExit; end; 5>、重新编写构造函数:在构造函数中创建DataLink对象,连接OnDataChange、OnUpdateData事件处理句柄。在public中添加代码: constructor Create(AOwner: TComponent);Override;添加实现的代码: constructor TMyDataBaseEdit.Create(AOwner: TComponent); begin inherited Create(AOwner); /必须加上这

15、句话; /创建DataLink对象,连接OnDataChange、OnUpdateData事件处理句柄 FDataLink := TFieldDataLink.Create; FDataLink.OnDataChange := DataChange; FDataLink.OnUpdateData := UpdateData; end; 6>、重新编写析构函数:在析构函数中销毁DataLink对象,并释放对OnDataChange、OnUpdateData事件的连接。确保使用完之后销毁FDataLink的实例,释放空间,无论是写组件还是写程序我们都要严格注意声明的对象,一定要在使用完之后释

16、放!在public中添加代码: destructor Destroy;override;添加实现的代码: destructor TMyDataBaseEdit.Destroy; begin FDataLink.OnDataChange := nil; FDataLink.OnUpdateData := nil; FreeAndNil(FDataLink); Inherited ; end; 三、DPK文件类型(包)的调试1、在创建新包dpk或者选择已经存在的包之后,点击【Ok】之后会出现安装【dpk文件对话框】,按其中的【Compile】就可以检查你编写的代码是否存在错误,但不能检测逻辑错误。

17、2、【Project】>【Build XXX】也能检测代码中的错误。但是直接打开Pas文件,这个按钮不可用。可以先点击打开其所在的dpk,然后打开pas文件, 但不能检测逻辑错误.3、安装完自定义控件后,在自定义控件的Pas中修改代码,会直接影响到调用他的程序中,所以可以直接在自定义控件的Pas文件中设置断点,进入调试, 可以检测逻辑错误;4、在自定义控件的Pas文件中,添加的新属性、事件。在应用程序中能通过代码直接调用,但是在对象监控器【Object Inspector】中不会显示,只能重新加载自定义控件,才能显示。 四、安装dpk文件类型的组件:第一种方法:1、【File】->

18、 【Open Project】命令,然后在对话框中选择文件类型为【*.dpk;*.dpkw】的文件;2、然后【打开】,会出现【dpk文件对话框】,点击【Compile】>【Install】,进行安装.。 第二种方法:1、直接在dpk文件上双击,就会出现【dpk文件对话框】,点击【Compile】>【Install】,进行安装.。 五、删除控件:1、【Component】>【Install Packages】,出现一个对话框。2、然后在【Designs Packages】 中找到当前包相对应的同名bpl文件。3、然后【Edit】->【Yes】,打开【dpk文件对话框】,然后选择对应的文件,点击【Remove】删除。 然后再编译安装。 (也可以直接找到相应的DPK文件,双击进入【dpk文件对话框】,一般默认在lib下) 查看组件所属的包: 在【组件面板】上相应的组件上【右击】>【Properties】,然后打开对话框,可以在【Palette】中,右侧栏中看【Components】中看到name,和它所处的包。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1