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

原创 2003年01月29日 13:57:00
 

BCB设计DBTreeView组件小结<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

续二的最后一个函数,你是不是感到很纳闷:这个函数到底是用来干什么的呢?下面听我慢慢道来:我使用这个函数主要是用来实现定制属性编辑器。细心的读者一定还记得,我设计的控件中有三个关键的数据成员: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(父类)

 

 

 

 

 

 

 

delphi DBTreeview与数据库连接的数据存取

//操作: procedure TForm1.act_GetListExecute(Sender: TObject); begin FieldList := TStringList.create...
  • hansoy
  • hansoy
  • 2015年04月08日 14:48
  • 2337

使用BCB6-TValueListEditor控件

TValueListEditor控件可实现类似属性选择窗口的功能。当然相比至下功能还是少了很多,不过很多情况下也够用了。通过重载类函数及控制控件消息响应的方式,打造一个自己满意的控件那不是当下我想做的...
  • akinosun
  • akinosun
  • 2012年03月10日 14:28
  • 630

c++builder按钮设计特效三例

在程序的使用过程中,使用频率最高的可视化组件可以说就是按钮了。如果在我们设计程序时为按钮增加一些特殊的显示效果,那么一定会为你的应用程序增添不少情趣,下面笔者为大家介绍三种特殊图像按钮显示特效,其运行...
  • yedezhanghao
  • yedezhanghao
  • 2011年07月20日 18:49
  • 4060

C++Builder6彻底研究

  • 2008年10月25日 15:28
  • 4.73MB
  • 下载

c++builder 设计师之路

  • 2014年11月09日 21:14
  • 22.25MB
  • 下载

BCB控件制作和消息处理

1 前言作为和delphi类似的rad(rapid application development)工具,c++ builder的强大功能不仅体现在数据库开发方面,也凸现于应用程序开发上(令人称绝的是...
  • iiprogram
  • iiprogram
  • 2005年03月02日 08:48
  • 1158

BCB 动态生成控件

窗体上的所有对象与窗体本身都成为一个类:TForm1,我们就是将类成员与类成员函数写到TForm1类中,程序运行时,实际上就是通过TForm1 类生成Form1对象, 所以,Unit1.cpp...
  • u014438664
  • u014438664
  • 2015年03月29日 23:46
  • 525

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

 C++Builder 高手进阶  nxyc_twz@163.com 前段时间买了本书《C++ Builder深度历险》,暂且不论这本书写的如何,但其作者独特的写作角度令我折服。于是我就有了个想法,能...
  • nxyc_twz
  • nxyc_twz
  • 2003年01月29日 13:58
  • 1486

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

 //续二void __fastcall TDBTreeView::FillChildTreeNodes(int ParentID, TTreeNode* Node, bool Nest){//用指定...
  • nxyc_twz
  • nxyc_twz
  • 2003年01月29日 14:06
  • 1600

BCB开发可Dockable的工具栏和视窗

个人的理解:Dock解释为“固定在...”;Docksite 解释为:其上的控件作为他(比如一个panel)的停靠控件;当panel拖动时,这些停靠控件作为panel的一部分进行移动,从而不会导致pa...
  • TBWood
  • TBWood
  • 2011年02月23日 16:28
  • 2450
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ Builder高手进阶 (三)用BCB设计DBTreeView组件(小结)
举报原因:
原因补充:

(最多只允许输入30个字)