我创建了一个类似于从 Tcustomcontrol 派生的 PageControl 组件,该组件托管从 TcustomPanel 派生的子选项卡表。
Tabsheets 由宿主 pagecontrol 通过 newpage 方法或通过创建新的 tabsheet 并设置其 PageControl 属性来创建,与标准 pagecontrol 几乎相同。
我使用“添加页面”动词为 Pagecontrol 创建了属性编辑器。
由于 Tabsheet 不在组件托盘上,因此我在设计器代码中创建了 RegisterClass 条目。
这一切正常,我可以创建子标签页,甚至在设计器中选择它们并设置属性。
麻烦的是,新页面没有名称,在对象检查器中显示为“未命名”,并且没有显示在表单结构树图中。
经过一番搜索,我在 Stackoverflow 上找到了一个示例,该示例表明
RegisterNoIcon([Myclass]) 需要与 registerClass 一起添加。
我这样做了,组件现在显示在表单树上,但作为通用“组件 [14]”,并且子项在对象检查器中仍显示为“未命名”。
显然,集成的 Pagecontrol/tabsheet 有一些额外的酱汁可以向设计器正确注册组件,但我很难找到它是什么。
财产登记目前看起来像
procedure Register;
begin
RegisterComponents('My Page Control', [TMyPageControl,TMytitlebar,TMyTabset]);
RegisterComponentEditor (TMypageControl, TMyCompEditor);
RegisterComponentEditor (TMyTabSet, TMyTabEditor);
RegisterClass(TMytabSheet);
RegisterNoIcon([TMytabSheet]);
end;
并且编辑代码是
procedure TMyCompEditor.ExecuteVerb(Index: Integer);
var ts:MyTabsheet;
begin
inherited;
case Index of
0: with Component as TMyPageControl do
begin
Ts:=TmyTabsheet.Create(Owner);
Ts.Pagecontrol:=(Component as TMyPageControl);
end;
end;
end;
作为属性编辑器中的测试,我尝试向自定义控件添加一个标准按钮,结果相同。
有任何想法吗?