我需要在 Delphi 中开发一个应用程序,其中我有一个 TDrawGrid 控件,并且根据我选择的布局类型在网格的单元格中显示图像。我在单元格的画布上画了一条线。我需要提供的功能是画一条线,在单元格旁边的一个图像上画多条线,选择任何一条线并移动它,展开它,删除它。
有什么方法可以在运行时将线条作为控件,以便它们都响应鼠标事件。
我建议不要将您的绘图对象实现为非窗口 VCL 控件。您不会从中获得太多收益,但有些事情(如命中测试)会比您自己编写代码要困难得多。
VCL 控件是矩形的,因此对于平行对角线,一个控件至少部分位于另一个之上。通常鼠标事件仅到达 Z 顺序中最顶层的控件。这是您必须在自己的代码中更正的内容。
选定的线应标记端点,以便用户知道在何处抓取它们以进行移动或调整大小。同样,自定义控件不提供的东西(在运行时),因此您必须对此进行编码。
我可能会简单地创建一个线对象类,并自己实现创建、绘制、选择、移动和调整大小、删除线的所有功能。
您可以创建自定义控件。(请务必查看组件编写器手册,因为有一些问题)。
您可以开始查看 TShape 控件。它用于简单的形状。也许您可以扩展它以支持线路。
在过去,我创建了一个使用形状、文本和连接线的网络设计应用程序。我使用了 DevExpress 的ExpressFlowChart产品,虽然它有一些缺点,但使任务相对简单。
正如 mghie 所提到的,命中测试是一个特别有问题的痛点。很高兴有人为你做一些繁重的工作。