4

我的目标是创建一个简单的表单编辑器,就像我们在 Delphi IDE 上找到的那样。

现在,用户可以选择并添加组件,使其成为 TPanel 的父级,该 TPanel 是表单的持有者。为简单起见,还请考虑将 TPanel 作为添加到表单的可视组件。

我有 2 个缺失的部分,我想找出帮助完成的想法/代码:

1 - 如何移动创建的视觉组件?与在 IDE 中移动可视组件(例如 Tpanel)的效果相同,改变其顶部和左侧位置 2 - 如何在表单编辑器上为组件绘制挂钩 3 - 如何使用挂钩调整大小

我只想要与处理视觉部分相关的部分。我没有生成 DFM 或类似的东西。

4

3 回答 3

5

简单地说你的移动代码需要这样做:

  1. 当鼠标向下时,检查鼠标位置是否在可以拖动的控件上。如果是这样,则设置一个名为的变量FDragControl来引用该控件。此代码位于OnMouseDown事件处理程序中。
  2. 当鼠标移动时,如果FDragControl不为零,则移动控件。此代码位于OnMouseMove事件处理程序中。
  3. 当鼠标上升时,设置FDragControl为零。

这就是它的全部内容。主要的细微差别是您还必须记住拖动开始时鼠标的 X、Y 值。所以在你的OnMouseDown处理程序中你写:

FStartMousePos := Point(X, Y);
FStartDragControlPos := Point(FDragControl.Left, FDragControl.Top);

然后在OnMouseMove您的位置代码中显示:

FDragControl.Left := FStartDragControlPos.X + (X-FStartX);
FDragControl.Top := FStartDragControlPos.Y + (Y-FStartY);

当您开始拖动时,您还需要捕获鼠标。

调整大小的代码类似。同样,您需要决定OnMouseDown您正在调整大小而不是拖动,但代码仍然涉及处理鼠标向下、移动和向上事件。

至于绘画,每当您的事件处理程序之一更改将影响表单视觉外观的属性时,您都需要强制重新绘画。您可以使用 的值FDragControl来决定是否使用您的控件的特殊绘图并指示它正在被拖动。同样用于调整大小。

我没有编写完整的工作实现,因为您的问题是高级别的和概念性的。实施取决于您。

于 2013-05-10T12:54:30.257 回答
2

// 我已经回答了这个问题,因为我刚刚阅读了您的最新更新,该更新确实应该作为对您原始问题的编辑,但无论如何。

您可以下载 Cindy 组件包并使用 cyResizer 组件,它几乎可以满足您的所有需求,并且还可以自定义。

你可以从这里下载它:http: //sourceforge.net/projects/tcycomponents/

于 2013-05-10T20:05:20.677 回答
1

搜索更多答案,我可以找到这些文章:

如何在运行时移动和调整控件大小 http://delphi.about.com/library/weekly/aa102505a.htm

如何为在运行时调整大小的控件添加大小句柄 http://delphi.about.com/library/weekly/aa110105a.htm

几乎所有信息都可以通过源代码示例完成此任务。

这些文章展示了如何实现和使用 TMover 类。我已经做到了并且工作正常。

我还下载了 TcyComponents Pack 并使用了 TcyResizer。它是一个功能齐全的表单编辑器,几乎包含了类似 Delphi 的表单编辑器所需的一切。我建议。它带有源代码,适用于 XE2 版本。

于 2013-05-10T14:44:42.677 回答