C++ Builder高手进阶 (三)用BCB设计DBTreeView组件(小结)

王朝c/c++·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

用BCB设计DBTreeView组件小结

续二的最后一个函数,你是不是感到很纳闷:这个函数到底是用来干什么的呢?下面听我慢慢道来:我使用这个函数主要是用来实现定制属性编辑器。细心的读者一定还记得,我设计的控件中有三个关键的数据成员:ParentID,PrimaryIDField,DisplayField,这三个成员的函义是什么?相信不用我多说。为了使它们的设置更人性化,我选择了用下拉框的方式显示它,而其具体内容则由数据表中的字段而来,那么很自然我便采用了TFieldNameProperty,通过对它的定制,我实现了属性编辑器的定制。

TTypeInfo* AnsiStringTypeInfo(void)

{

//定义类型信息

TTypeInfo* TypeInfo = new TTypeInfo;

TypeInfo->Name = "AnsiString";

TypeInfo->Kind = tkLString;

return TypeInfo;

}

namespace Dbtreeview

{

//注册组件

void __fastcall PACKAGE Register()

{

RegisterPropertyEditor(AnsiStringTypeInfo(), __classid(TDBTreeView), "ParentIDField", __classid(TFieldNameProperty));//注册属性

RegisterPropertyEditor(AnsiStringTypeInfo(), __classid(TDBTreeView), "PrimaryIDField", __classid(TFieldNameProperty));//注册属性

RegisterPropertyEditor(AnsiStringTypeInfo(), __classid(TDBTreeView), "DisplayField", __classid(TFieldNameProperty));//注册属性

TComponentClass classes[1] = {__classid(TDBTreeView)};

RegisterComponents("Data Controls", classes, 0);//注册组件

}

}

到此为止,我已给出了用BCB实现DBTreeView的所有思路及代码,不知您感觉如何?要是觉得好就给点鼓励;要是觉得差,您也可以直言(好像是江湖卖艺^),我希望大家共同进步!

通过对这个组件的编写实践,你应该会用BCB进行一些组件的开发了吧?这里我再总结一下该组件设计中的要点,并为您以后设计组件提供一点建议:

1. 编写一个新的组件,首先要考虑从哪派生。你需要熟悉一下VCL结构,大致各种可视组件、不可视组件、窗口组件等的继承关系。建议你看看《C++Builder 5开发人员指南》和《C++ Builder 深度历险》。

2. 事件定义。事件其实就是某件事情发生时要做的处理,以DBTreeView中定制带参数的方法为例,我阐述一下定义的件的方法:

typedef void __fastcall (__closure *TDBTVSetImageIndexEvent)(System::TObject* Sender, int ID, int ParentID, int Level, int& ImageIndex, int& SelectedIndex);

TDBTVSetImageIndexEvent是自定义的事件类型,ID,ParentID等是事件所需的参数。那么就可以这样定义事件:

Private:

TDBTVSetImageIndexEvent FonSetImageIndex;

__published:

__property TDBTVSetImageIndexEvent OnSetImageIndex = {read=FOnSetImageIndex, write=FOnSetImageIndex};

3. 定义消息。虽然我的DBTreeView中没使用消息,但消息的作用绝不容忽视。在BCB中定义消息的方法如下:

private:

void __fastcall OnMyMessage(Tmessage &Msg);//定义消息函数

BEGIN_MESSAGE_MAP

MESSAGE_HANDLE(消息,消息类型,消息函数)

END_MESSAGE_MAP(父类)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航