当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++ Builder教程

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

用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(父类)

 

 

相关内容
赞助商链接