在Delphi中检测设计时插入新组件

时间:2012-11-03 13:51:00

标签: delphi components delphi-xe2 design-time

我的Delphi组件如何在设计时检测是否有任何其他组件被删除?

3 个答案:

答案 0 :(得分:6)

您应该覆盖组件的Notification方法;类似的东西:

type
  TMyComponent = class(TComponent)
//..
  protected
    procedure Notification(AComponent: TComponent;
      Operation: TOperation); override;
  end;


procedure TMyComponent.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
  inherited Notification(AComponent, Operation);
  if (Operation = opInsert) and (csDesigning in ComponentState) then begin
// AComponent was dropped on the form
  end;
end;

答案 1 :(得分:2)

如果您的意思是删除控件而不是组件,如果您的意思是放弃组件而不是放在表单上,​​那么:

  • 添加CM_CONTROLLISTCHANGE消息处理程序,以便在插入控件之前跟踪控件,或
  • 添加CM_CONTROLCHANGE消息处理程序,以便在插入控件后跟踪控件(WParam指向控件),
  • csLoading超出ComponentState之前不要这样做,以防止在IDE创建表单期间进行跟踪。

答案 2 :(得分:0)

只是一个提示,如果它有帮助......我遇到了类似的问题:

  • 我想隐藏非可视组件图标(对于我的TMyLabel=class(Classes.TComponent)组件),当我从IDE中删除表单,面板等...

我已经oveloaded:LoadedReadState,以便在Loaded&上找到这样的图标(在设计时)... ReadState我将DesignInfo指向(-100,-100),因此图标未显示

我已经oveloaded:WriteState以避免Left&顶部保存到.dfm(在设计时)...在WriteState上我把它放到点(0,0),所以它没有保存在.dfm

注意:我使用相同的技巧/技巧来保存我不想要的属性等...我真的只让Caption保存在.dfm中

问题/提示是:

  • 当我放弃一个新的"控制" (我的组件)进入表单,这样的图标在我放下它的位置是可见的...如何隐藏它?

也许user1580348正在尝试类似的东西...或与自动对齐此类非视觉"控件" /"组件"。

换句话说:

  • 如何在表单,面板等上删除新的(我们的组件)控件时控制图标位置...

我知道我的问题要容易得多,但我还没有解决它...我想隐藏那个IDE显示非可视组件的图标(仅适用于我的组件的控件)......但也许知道如何操作也会有助user1580348

正如我所说,这只是一个提示/线索。