我有一个自定义的FireMonkey控件(TComboBox),它也有一个自定义的TComponentEditor。当我覆盖ExecuteVerb方法并尝试添加子组件(自定义TListBoxControl)时,自定义TComboBox在设计时不会显示
默认TComboBox行为:
自定义TComboBox
我的ExecuteVerb代码:
var
PpComboItem : TPpListBoxItem;
PpCombo: TPpComboBox;
begin
if (Component is TPpComboBox) then
PpCombo := (Component as TPpComboBox) else
exit;
PpComboItem := TPpListBoxItem.Create(PpCombo);
PpComboItem.Parent := PpCombo;
end
我试图跟踪TComboBox尝试执行此操作的方式,但似乎无法找到具有正确实现的单元
**编辑**
好的 - 我已经设法看看来自TMS的人如何用他们的组件(购买和付费)实现这一点,并且我设法推断以下
var
PpComboItem : TPpListBoxItem;
PpCombo: TPpComboBox;
begin
inherited;
if (Component is TPpComboBox) then
PpCombo := (Component as TPpComboBox) else
exit;
PpComboItem := (TPpListBoxItem(Designer.CreateComponent(TPpListBoxItem, PpCombo, 10, 10, 100, 100)));
PpComboItem.Parent := PpCombo;
Designer.Modified;
end;
但是当我单击ComponentEditor中的AddTPpListBoxItem时,我收到以下错误:
类TPpListBoxItem不适用于此模块
答案 0 :(得分:1)
我找到了答案。为了实现这一目标,您需要
确保您尝试作为子项添加到父级的组件也已注册:
"_"
覆盖父组件的TComponentEditor的ExecuteVerb方法(找到我的问题中第一次编辑的代码):
基本上肉是:
USES TPpListBoxItem.pas, TPpComboBox.pas, DesignIntf, DesignEditors
//TComponentEditor Type Decleration //
procedure Register;
begin
RegisterComponents('Sample', [TPpListBoxItem]);
RegisterComponents('Sample', [TPpComboBox]);
RegisterComponentEditor(TPpComboBox, TComboComponentEditor);
end;
瞧!