我的Delphi组件如何在设计时检测是否有任何其他组件被删除?
答案 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:Loaded
和ReadState
,以便在Loaded
&上找到这样的图标(在设计时)... ReadState
我将DesignInfo
指向(-100,-100),因此图标未显示
我已经oveloaded:WriteState
以避免Left&顶部保存到.dfm(在设计时)...在WriteState
上我把它放到点(0,0),所以它没有保存在.dfm
注意:我使用相同的技巧/技巧来保存我不想要的属性等...我真的只让Caption保存在.dfm中
问题/提示是:
也许user1580348
正在尝试类似的东西...或与自动对齐此类非视觉"控件" /"组件"。
换句话说:
我知道我的问题要容易得多,但我还没有解决它...我想隐藏那个IDE显示非可视组件的图标(仅适用于我的组件的控件)......但也许知道如何操作也会有助user1580348
。
正如我所说,这只是一个提示/线索。