自制组件中,如何限制对象属性在设计期时下拉列表里的显示?

Libran 2003-06-22 01:14:57
例如,编辑TPageControl的ActivePage属性时,打开下拉列表,里面只会显示所有属于当前PageControl对象的TabSheet列表;而对于其它PageControl里的TabSheet,虽然同样是TTabSheet类,就不会显示出来。
请教该怎么实现?
...全文
149 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
runnerrunning 2003-06-23
  • 打赏
  • 举报
回复
up
kingcaiyao 2003-06-22
  • 打赏
  • 举报
回复
上面写的是类似TDataField一样的属性,该属性用于获得所有字段名称。
kingcaiyao 2003-06-22
  • 打赏
  • 举报
回复
属性编辑器肯定是要写的,不过先要判断一下各个TabSheet与PageControl的从属关系,也就是要用到Parent属性。写属性编辑器很简单,以什么样的属性编辑器类作为父类进行继承,这要看你的要求(你的问题中不一定要用TEnumPropertyEditor类)。在头文件定义一个属性编辑器类,在.cpp文件对它进行注册,一般属性编辑器的实现方法都是内联函数,比如说:
class TDataOfFieldProperty:public TStringProperty
{
public:
TPropertyAttributes __fastcall GetAttributes()
{
return TPropertyAttributes()<<paValueList;
}
void __fastcall GetValues(TGetStrProc Proc)
{
Proc("None");
TStrings *pList=new TStringList();;
TKingKing *pDCBX=dynamic_cast<TKingKing*>(GetComponent(0));
if(pDCBX)
{
if(pDCBX->DataSource)
{
TDataSet *pDataSet=pDCBX->DataSource->DataSet;
if(pDataSet)
{
pDataSet->GetFieldNames(pList);
for(int i=0;i<pList->Count;i++)
{
Proc(pList->Strings[i]);
}
}
}
}
delete pList;
}

};

.cpp文件中对其进行注册:
namespace Tkingking
{
.............................................
RegisterPropertyEditor(AnsiStringInfo(),__classid(TKingKing),"DataField",__classid(TDataOfFieldProperty));
}


Siney 2003-06-22
  • 打赏
  • 举报
回复
你需要从在特性编辑器的基类,根据你的要求你应该继承自TEnumProperty,实现其中的几个方法:GetAttributes,GetValue,SetValue等,然后注册特性编辑器:
RegisterPropertyEditor
extern PACKAGE void __fastcall RegisterPropertyEditor(Typinfo::
PTypeInfo PropertyType, System::TMetaClass* ComponentClass, const
AnsiString PropertyName, System::TMetaClass* EditorClass);

具体请参看help topic,和一些元件设计的书籍。
Lewolf 2003-06-22
  • 打赏
  • 举报
回复
编写属性编辑器,属性编辑器肯定是在当前的PageControl中查找TabSheet的,TabSheet的Parent就是容纳其的PageControl,也就是在PageControl中根据Child中的对象来决定现实的内容,这个你要看看属性编辑器部分的内容,帮助上有介绍,C++ Builder中也有例子。

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧