实现 TComponentEditor 的自定义 Firemonkey 组件。在设计时将子控件添加到父控件
Custom Firemonkey Component that implements TComponentEditor. Add child control to parent at design time
我有一个自定义的 FireMonkey 控件 (TComboBox),它也有一个自定义的 TComponentEditor。当我覆盖 ExecuteVerb 方法并尝试添加子组件(自定义 TListBoxControl)自定义 TComboBox 时,它在设计时 shown
默认 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 时,出现以下错误:
Class TPpListBoxItem is not applicable to this module
我找到了答案。要实现此功能,您需要
确保您尝试作为子项添加到父项的组件也已注册:
USES TPpListBoxItem.pas, TPpComboBox.pas, DesignIntf, DesignEditors
//TComponentEditor Type Decleration //
procedure Register;
begin
RegisterComponents('Sample', [TPpListBoxItem]);
RegisterComponents('Sample', [TPpComboBox]);
RegisterComponentEditor(TPpComboBox, TComboComponentEditor);
end;
覆盖Parent Component的TComponentEditor的ExecuteVerb方法(在我的问题第一次编辑的地方找到代码):
基本上肉是:
...
PpComboItem := (TPpListBoxItem(Designer.CreateComponent(TPpListBoxItem, PpCombo, 10, 10, 100, 100)));
PpComboItem.Parent := PpCombo;
Designer.Modified;
...
瞧!
我有一个自定义的 FireMonkey 控件 (TComboBox),它也有一个自定义的 TComponentEditor。当我覆盖 ExecuteVerb 方法并尝试添加子组件(自定义 TListBoxControl)自定义 TComboBox 时,它在设计时 shown
默认 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 时,出现以下错误:
Class TPpListBoxItem is not applicable to this module
我找到了答案。要实现此功能,您需要
确保您尝试作为子项添加到父项的组件也已注册:
USES TPpListBoxItem.pas, TPpComboBox.pas, DesignIntf, DesignEditors
//TComponentEditor Type Decleration //
procedure Register;
begin
RegisterComponents('Sample', [TPpListBoxItem]);
RegisterComponents('Sample', [TPpComboBox]);
RegisterComponentEditor(TPpComboBox, TComboComponentEditor);
end;
覆盖Parent Component的TComponentEditor的ExecuteVerb方法(在我的问题第一次编辑的地方找到代码):
基本上肉是:
...
PpComboItem := (TPpListBoxItem(Designer.CreateComponent(TPpListBoxItem, PpCombo, 10, 10, 100, 100)));
PpComboItem.Parent := PpCombo;
Designer.Modified;
...
瞧!