代码之家  ›  专栏  ›  技术社区  ›  Mawg says reinstate Monica

在Delphi中调用PasteFromClipboard()时,如何稍微偏移粘贴的组件?

  •  0
  • Mawg says reinstate Monica  · 技术社区  · 14 年前

    如果我在设计时使用Delphi,那么当我在设计时复制/粘贴一组组件时,粘贴的组件与原始组件略有偏移。

    但是,我正在开发一个GUI,它允许用户为另一个应用程序开发一个GUI。当我剪切/粘贴时,粘贴的组件直接位于原始组件之上。有没有办法稍微抵消它们?

    1 回复  |  直到 14 年前
        1
  •  3
  •   Deltics    14 年前

    由于您有基本的复制/粘贴工作,下一位是对您已经拥有的内容的一个相当简单的扩展。

    粘贴当然-大概-用复制的属性值粘贴复制的控件,所以是的,它们将覆盖在复制它们的原始控件之上。

    要停止设置行为,必须对粘贴的控件进行一些“轻推”。 之后 它们被贴上了。如果不能更直接地获取已粘贴控件的列表,则派生此类列表的一种方法是获取 组件 在粘贴前收集目标表单,然后在粘贴后迭代 组件 再次收集-任何现在在集合中而不是“原始”列表中的项目都必须已粘贴,您可以根据需要对这些项目应用左/上轻推。

      list := TList.Create;
      try
        for i := 0 to Pred(dest.ComponentCount) do
          list.Add(dest.Components[i]);
    
        // Do your pasting
    
        for i := 0 to Pred(dest.ComponentCount) do
          if list.IndexOf(dest.Components[i]) = -1 then
            // Nudge dest.Components[i]
      finally
        list.Free;
      end;
    

    这至少能让你朝着正确的方向前进。

    注意:以上代码假定您正在(可能)处理 T组分 派生类(即非可视组件)。如果你只处理 T控件 然后,您可以通过使用 控制计数 控制 目标容器控件(不一定是窗体)。

    另外,A的左/上位置 T组分 存储在公众的“Lo/Hi”字中 设计信息 属性,因此您的微调代码需要考虑并处理 T组分 派生控件不同于 T控件 如果使用的是非可视组件和可视控件。