关于vcl:在Delphi中创建一个表单编辑器 | 珊瑚贝

Creating a forms editor in Delphi


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

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

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

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

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


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

  • 当鼠标向下时,检查鼠标位置是否在可以拖动的控件上。如果是这样,则设置一个名为 FDragControl 的变量来引用该控件。此代码位于 OnMouseDown 事件处理程序中。
  • 当鼠标移动时,如果 FDragControl 不为零,则移动控件。此代码位于 OnMouseMove 事件处理程序中。
  • 当鼠标上升时,将 FDragControl 设置为 nil。
  • 这就是它的全部内容。主要的细微差别是您还必须记住拖动开始时鼠标的 X、Y 值。所以在你的 OnMouseDown 处理程序中你写:

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

    然后在 OnMouseMove 中,您的位置代码为:

    1
    2
    FDragControl.Left := FStartDragControlPos.X + (XFStartX);
    FDragControl.Top := FStartDragControlPos.Y + (YFStartY);

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

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

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

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

    • 太棒了!但是对于调整大小来说,在控件周围放置这些钩子和框架很重要,怎么做?
    • @eelias 使用表单 OnPaint 事件在表单画布上绘制它
    • 有一个非常好的组件,它是名为 Cindy 组件的包的一部分 – 您想要的组件称为 cyResizer,它可以移动、调整大小并防止超出面板边界等…链接:sourceforge.net/项目/tcycomponents 看看你认为它是非常可定制的……
    • 这就是它的样子:a.fsdn.com/con/app/proj/tcycomponents/screenshots/234287.jpg


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

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

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

    • @eelias我认为您的回答不应该是对该问题的更新。但我也不认为这是一个很好的答案。这只是网络搜索的结果。任何人都可以这样做。所以我不认为你的回答实际上回答了这个问题。或者,如果确实如此,那么这个问题应该被关闭,因为它不是一个真正的问题。


    寻找更多答案我可以找到这些文章:

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

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

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

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


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


    来源:https://www.codenong.com/16482635/

    微信公众号
    手机浏览(小程序)

    Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

    Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

    Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9503.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
    0
    分享到:
    没有账号? 忘记密码?