【问题标题】:How to select and move multiple controls at runtime如何在运行时选择和移动多个控件
【发布时间】:2010-11-19 04:14:21
【问题描述】:

我在 Delphi 中创建了一些自定义控件 (TCustomControl),我可以在运行时移动它们,但只能一一移动。如何在运行时再次选择这些控件中的两个或多个,然后用鼠标一起移动它们?

谢谢。

【问题讨论】:

    标签: delphi custom-controls movable


    【解决方案1】:

    如果您找不到更简单的方法,您可以随时手动完成。保留所有选定控件的列表。当拖动操作开始时,创建另一个列表,该列表包含 TPoint 值,指示每个控件的 Top 和 Left 属性在两个轴上距鼠标位置的距离。然后,当用户拖动控件时,不断更新选定的控件以将它们保持在与鼠标指针相对应的正确位置。

    【讨论】:

    • 我在想你的建议,虽然它只需要主控件的位置增量值,我将移动这些增量并将这些增量应用于其他控件。因此,如果 control1 更改 .Left 3 个像素和 .Top 10 个像素,则 controlN.Left := controlN.Left + DeltaX; controlN.Top := controlN.Top + DeltaY;我已经对此进行了一些测试,但在移动主控时我无法移动其余控件。
    【解决方案2】:

    commercial solution 怎么样?屏幕截图显示了对齐工具,这表明它支持多选。

    【讨论】:

    • 这是我查看的第一个库,但我决定自己实现它,因为我已经编写了所需的大部分功能。
    【解决方案3】:

    另一个商业解决方案来自 DevExpress:LayoutControl。它允许在运行时拖放、分组、完全重新排列、隐藏和添加组件。

    【讨论】:

    • 我真的不想因为这么简单的事情而锁定第三方供应商,尤其是 DevExpress。
    【解决方案4】:

    我曾经使用过一个名为handles 的组件,如果我没记错的话,更新到更高版本的Delphi 并支持多选并不太难。

    【讨论】:

    • 我使用了这个组件并添加了多选并进行了一些更改。唯一的视觉错误是控件下方的鼠标选择矩形(因为我在父画布上绘制它)并且实际控件的偏移量在两个轴上都是 +2 像素。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多