我的目标是创建一个简单的表单编辑器,就像我们在Delphi IDE上找到的那样.
现在,用户可以选择并添加组件,使其成为表单持有者的TPanel的父级.为简单起见,请将TPanel视为添加到表单中的可视组件.
我有2个缺少的部分,我想找出想法/代码来帮助完成:
1 - 如何移动创建的可视组件?在IDE中用于移动可视组件的效果相同,例如Tpanel,围绕它的顶部和左侧位置2 - 如何使用焦点在表单编辑器3上绘制组件的钩子 - 如何使用钩子调整大小
我只想要与处理视觉部分相关的部分.我没有生成DFM或类似的东西.
只需将您的移动代码需要执行此操作:
FDragControl来引用该控件.此代码位于OnMouseDown事件处理程序中.FDragControl不是nil,则移动控件.此代码位于OnMouseMove事件处理程序中.FDragControl为nil.这就是它的全部内容.主要的细微差别是你必须记住拖动开始时鼠标的X,Y值.所以在你的OnMouseDown处理程序中你写:
FStartMousePos := Point(X, Y);
FStartDragControlPos := Point(FDragControl.Left, FDragControl.Top);
Run Code Online (Sandbox Code Playgroud)
然后在OnMouseMove你的位置代码中读取:
FDragControl.Left := FStartDragControlPos.X + (X-FStartX);
FDragControl.Top := FStartDragControlPos.Y + (Y-FStartY);
Run Code Online (Sandbox Code Playgroud)
开始拖动时还需要捕获鼠标.
调整大小代码类似.同样,您需要确定OnMouseDown要调整大小而不是拖动,但代码仍然涉及处理鼠标按下,移动和向上事件.
至于绘画,只要你的一个事件处理程序更改了一个会影响表单视觉外观的属性,就需要强制重绘.您可以使用值FDragControl来决定是否使用控件的特殊图形并指示它是否被拖动.同样适合调整大小.
我没有编写完整的工作实现,因为你的问题是高级和概念性的.实施取决于您.