实现TComponentEditor的自定义Firemonkey组件。在设计时将子控件添加到父级

时间:2016-08-17 19:46:19

标签: delphi components firemonkey custom-component delphi-10.1-berlin

我有一个自定义的FireMonkey控件(TComboBox),它也有一个自定义的TComponentEditor。当我覆盖ExecuteVerb方法并尝试添加子组件(自定义TListBoxControl)时,自定义TComboBox在设计时不会显示

默认TComboBox行为:

Default TComboBox behavior

自定义TComboBox

Custom 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不适用于此模块

1 个答案:

答案 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;

瞧!