0

我的 Delphi 组件如何在设计时检测是否有任何其他组件被拖放到表单上?

4

3 回答 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让这样的图标看不见(在设计时)......LoadedReadStateDesignInfo指向(-100,-100),所以图标没有显示

我已经超载:WriteState为了避免 Left & Top 被保存到 .dfm(在设计时)......WriteState我把它放在点(0,0)上,所以它没有保存在 .dfm 中

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

问题/提示是:

  • 当我将一个新的“控件”(我的组件)放到表单中时,这样的图标就在我放置它的地方可见......如何隐藏它?

也许user1580348正在尝试类似的东西......或者与自动对齐这些非视觉“控件”/“组件”相关的东西。

换句话说:

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

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

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

于 2014-07-14T12:00:13.213 回答