
杭州应用工程技术学院学报c builder添加类, 第 12 卷第 1 期, 2000 年 3月收稿日期:1999-07-20Journal of Hangzhou Institute of Applied EngineeringVol。12 No。1, March 2000C++Builder 中用户自定义组件的推动潘俊强(杭州应用项目科技大学信电系杭州 310012)摘要介绍在C++Builder 环境中客户自定义组件的推动, 包括自定义组件的属性、事件跟步骤。关键词C++Builder 用户自定义组件属性 事件方式中图分类号TP368。5C++Builder 是 Borland 公司继 Delphi 之后开发的既一个完全面向 32 位的 、具有通用客户/服务器结构的研发工具 ,使用它可以很容易地编写Windows应用程序,是现在继Visual Basic 、Delphi 之后在32 位 Windows 环境下最具吸引力的开发工具。C++Builder 的集成开发环境融入了更多的、Delphi 所没有的Windows 控制模块, 建立的部件分类也更为详细, 包括标准模块 、Win32 组件 、Internet 组件 、数据访问模块 、数据控制部件等 ,程序员使用模块可以很容易地完成各类界面 、操作等的设计跟编程,如信息录入界面的设计 、各种 Internet 的操作等。

但有时用户为了完成特殊的任务必须自己设计一个组件, 这时就要使用客户自定义组件 ,用户自定义组件包含可视的和非可视的 ,本文介绍的是可视用户组件的谋求。一个组件包含属性 、事件跟步骤,下面就怎么实现客户自定义组件的属性、事件跟步骤作一预测 ,本文以 C ++ Builder 环境中 Samples 组件页下的Ccalendar(日历)组件为例来表明。1 创建一个新模块在C++Builder 主菜单的Component 菜单项中点击New Component ,弹出一New Components 对话窗口 ,让你选用或填入祖先类型、新部件的类名、新模块将添加在那一模块页等信息 ;在本文所举例中,Ccalendar 组件以 TCustomGrid 为祖先类型 , 组件类名为 TCCalendar , 组件添加在 Samples 组件页中,确定正确后单击 OK,C++Builder 将自动在当前的项目中为你生成 ccalendar 。cpp 和 ccalendar。h 。其中, ccalendar 。h 文件包括了对 TCCalendar 类的定义 ,ccalendar。cpp 包含了对 TCCalendar 类详细实现的代码 。

2 用户自定义组件属性的推动从应用编程的视角来看, 组件的属性就象是函数, 开发人员可以像对数据成员操作一样设定跟读取, 但是属性比数据成员的功能更强大 ,第一,它可以在程序设计阶段赋值,在对象观察器(ObjectInspector)[ 1]的属性页中可以发现相应部件的所有属性, 在这里,开发人员可以设定跟读取各个属性值;第二,它可以隐藏实现细节 ,在体现值跟实际存储值之间可以存在复杂的算法。作为客户自定义组件的属性, 如何做到以上两点呢? 现以组件 Ccalendar 的 Day 属性(用来设定 CCalendar 组件实例的当前日)来表明 。2。1 让 Day 属性存在于对象观察器的属性页中在 ccalendar。h 中有如下说明 :class PACKAGE TCCalendar:public TCustomGrid{private :…//此处为其它表明的省略 ,以下同TDateTime FDate ;//记录日历的当前日期…Integer fastcall GetDateElement(Integer Index);//读取日期的变量…void fastcall SetDateElement(int Index ,int Value);//设置日期的变量protected:…public:…published:…property Integer Day ={read=GetDateElement ,write =SetDateElement ,stored =false, index =3,node-fault};…};property Integer Day 说明 Day 将成为 Ccalendar 的属性出现在对象观察器的属性页中 , 类型为整型;read =GetDateElement 说明属性 Day 的调用操作由数组 GetDateElement 来完成 ;write =SetDa-teElement 说明属性 Day 的设定操作由函数 SetDateElement 来完成;index =3 说明 GetDateElement 和SetDateElement 两个函数中的实参 index 的值等于 3。

2。2 让 Day 属性与准确存储值对应在以上的表明中我们将要知道 ,属性Day 的抓取和修改操作分别由函数 GetDateElement 和 Set-DateElement 来推动 ,那么通过对这两个函数的编程就可以做到属性与准确存储值的对应;下面是变量的源代码:int fastcall TCCalendar:GetDateElement(int Index){Word AYear ,AMonth ,ADay ;16 杭州应用工程技术学院学报 第 12卷int result ;DecodeDate(FDate , AYear , AMonth, ADay);//DecodeDate 负责将当前日期 FDate 分解为 Year ,Month,Dayswitch(Index){case 1://Index =1 为取Yearresult =AYear;break;case 2://Index =2 为取Monthresult =AMonth;break;case 3://Index =3 为取Dayresult =ADay ;break ;default :result =-1 ;};return result ;};void fastcall TCCalendar:SetDateElement(int Index ,int Value){Word AYear ,AMonth ,ADay ;bool Update =false ;if (Value>0){DecodeDate(FDate,AYear,AMonth ,ADay);switch(Index){case 1://设置 Yearif (AYear ! =Value){AYear =Value ;Update =true;}break;case 2://设置 Monthif ((Value <=12)&&(Value ! =AMonth)){AMonth=Value ;Update =true;}break;case 3://设置 Dayif ((Value <=DaysThisMonth())&&(Value ! =ADay))17 第 1期 潘俊强:C ++ Builder 中用户自定义组件的实现{ADay =Value ;Update =true;}break;}if (Update){FDate =EncodeDate(AYear ,AMonth,ADay);//将 Year,Month,Day 组合成日期类别UpdateCalendar();//更新日历Change();//调用OnChange 事件 ,见事件实现中的表明}};};当程序员向应用插入 Ccalendar 组件时,Day 属性发生在对象观察器的属性页中 ,最初该属性显示的值为模块初始化时赋予当前日期FDate 的Day 部分,由函数GetDateElement 取得;当向 Day 属性框中输入合法数值后 ,组件将调用 SetDateElement 函数重新修改当前日期FDate 的值。

3 用户自定义组件事件的推动C++Builder 中的每一个可视组件, 在对象观察器的事件页中均可发现若干事件项 ,如 OnClick等,在其中可以定义事件函数(事件触发时执行的代码)的线程。对于客户自定义组件, 如果必须定义一个用户事件 ,则需要做下面两步工作 ,本文以 Ccalendar 组件中的 OnChange 事件(每当Ccalendar组件实例的当前日期改变后将触发该事件)为例来表明 :第一 ,必须定义用户事件 ,在 TCCalendar 类定义的 private 段表明一类别为TNotifyEvent 的变量 FOnChange,用以记录事件函数的线程;同时类似于属性的推动c builder添加类,在TCCalendar 类定义的 published 段中说明 property TNotifyEvent OnChange ={read=FOnChange ,write =FOnChange},使 OnChange 事件项出现对象观察器的事件页中, 同时定义了对 On-Change 事件项的操作就是对变量 FOnChange 的读取跟设定, 这样, 在应用中程序员一旦完成了对OnChange 事件的设定 ,变量 FOnChange 也就获取了事件函数的赋值。
第二 ,必须在适合的地方调用用户定义的事件函数 ,在本文所举例中 ,每当 Ccalendar 组件的当前日期出现差异后 ,就调用 Change函数 ,Change 函数实现如下:void fastcall TCCalendar:Change(){if(FOnChange)//如果用户未对 OnChange 事件项定义FOnChange(this);//则调用事件函数(FOnChange 保存了用户定义的事件函数的线程)}4 用户自定义组件方式的推动组件的技巧有时也称为组件的行为 ,是指该模块可以执行的动作或操作。C++Builder 为模块提供了许多缺省方法 ,如 Button 组件的 Click 方法(可以让程序员在程序中仿真鼠标的单击操作)18 杭州应用工程技术学院学报 第 12卷等。用户自定义组件方式的推动很简单 ,只要。h 文件中模块类定义的 public 段中加入方式原型说明,然后在。cpp 文件中加入方式的详细实现代码即可, 如本文所举例中 , Ccalendar 组件提供了NextMonth(使Ccalendar 组件实例的当前日期往后移一个月)的方式,它的实现如下:首先在 TCCalen-dar 类定义的 public 段中加入 void fastcall NextMonth();的方式原型说明 ,然后在 ccalendar。
cpp 文件中加入下述实现代码 :void fastcall TCCalendar :NextMonth(){ChangeMonth(1);//往后移一个月的用户自定义函数}在应用中, 程序员可以借助以下方式读取该模块的技巧 :组件实例名->NextMonth()。5 安装客户定义模块在完成了以上所有的工作后, 就要安装客户自己定义的部件了 ,在 C++Builder 主菜单的 Com-ponent 菜单项中点击 Install Component ,弹出一 Install Components 对话窗口 ,让你输入插件的源文件名、搜索模式或者安装到哪一个组件包等信息, 在本文所举例中 ,源文件名为 ccalendar 。cpp ,组件包文件名为 bcbsmp35 。bpk(此包为 C ++ Builder 自带 ,提供了Samples组件页下的所有模块),搜索模式为缺省路径 ,确定恰当后单击OK,C++Builder 会按照用户输入信息生成(即编译连接)或重新生成组件包文件 ,生成成功后, 用户自定义组件将手动挂在用户指定的模块页中 , 在本文所举例中 ,Ccalendar 组件将挂在 Samples 组件页下 。
6 结束语通过客户自定义组件 ,程序员可以很容易地扩展和维护自己的模块库 ,为应用程序的研发提供极大的便捷。笔者只是简单介绍了一个用户自定义组件的推动 ,除了文中所述, 还有许多科技要点和推动方法,有兴趣者可以参考C++Builder 的随机文档和实例,并进行深入探究 。参 考 文 献1广正工作室。C ++ Builder 实用教程。北京:机械工业出版社, 1998。23How to create custom components in C ++ BuilderPan Junqiang(Information &Electronic Engineering, Hangzhou Institute of Applied Engineering, Hangzhou 310012)AbstractThis paper introduces how to create properties,methods and events for custom components inC++Builder 。Key wordsC++Builder custom componentsproperty event method19 第 1期 潘俊强:C ++ Builder 中用户自定义组件的实现
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-143776-1.html
或者军事表演秀