我的 Delphi 组件如何在设计时检测是否有任何其他组件被拖放到表单上?
问问题
1674 次
3 回答
7
您应该覆盖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;
于 2012-11-03T14:04:38.097 回答
2
如果您的意思是放置控件而不是组件,并且如果您的意思是放置在组件上而不是放置在表单上,那么:
- 添加
CM_CONTROLLISTCHANGE
消息处理程序以在插入控件之前跟踪控件,或者 - 添加
CM_CONTROLCHANGE
消息处理程序以在控件插入后跟踪控件(WParam
指向控件), - 在 IDE 创建表单期间不要执行此
csLoading
操作,ComponentState
以防止跟踪。
于 2012-11-03T17:12:09.353 回答
0
只是一个提示,如果它有帮助......我有一个类似的问题:
- 当我将非可视组件图标(对于我的
TMyLabel=class(Classes.TComponent)
组件)从 IDE 拖放到表单、面板等中时,我想隐藏它...
我已经超载了:Loaded
并且ReadState
让这样的图标看不见(在设计时)......Loaded
我ReadState
把DesignInfo
指向(-100,-100),所以图标没有显示
我已经超载:WriteState
为了避免 Left & Top 被保存到 .dfm(在设计时)......WriteState
我把它放在点(0,0)上,所以它没有保存在 .dfm 中
注意:我使用相同的技术/技巧来不保存我不想要的属性等......我真的只让 Caption 保存在 .dfm 中
问题/提示是:
- 当我将一个新的“控件”(我的组件)放到表单中时,这样的图标就在我放置它的地方可见......如何隐藏它?
也许user1580348
正在尝试类似的东西......或者与自动对齐这些非视觉“控件”/“组件”相关的东西。
换句话说:
- 在表单、面板等上放置新的(我们的组件)控件时,我们如何控制图标位置...
我知道我的问题要容易得多,但我还没有解决它......我只想隐藏 IDE 为非可视组件显示的图标(仅适用于我的组件的控件)......但也许知道如何它也会有所帮助user1580348
。
正如我所说,这只是一个提示/线索。
于 2014-07-14T12:00:13.213 回答