我仍在尝试绘制平面图(在BCB 6中)。
我已经问了几个问题。由于Seeking floorplan design VCL toolbar我购买了TMC组件。
Looking for non-rectangular panel VCL component让我离我很近,但不是那里。
所以,让我们再试一次......
我想是某种小组。边缘周围有很好的粗边框(墙),可能是5或甚至10像素,因此默认面板不会这样做。
我不能单独绘制线条,因为它们需要使用表单调整大小。所以,要么我将行绑定到面板(所有者属性)并重绘它们......(何时?表单调整大小?,面板调整大小?)
或者我可以创建自己的面板组件。
在任何一种情况下,我都需要能够打开带门开口的线路 - 或者我是否添加了门组件?但是,如果表单调整大小,我需要将其与面板联系起来。
如何最好地实施?它不一定是太花哨,但是像这样......
=============================================
| || || |
| || || |
| || || |
| || || |
=== ============= ============= ======
| || |
| |
| || |
=============================================
请参阅?多门也;优选地,非矩形房间(至少L形)并且可以与形状一起调整大小。
有什么想法吗?
答案 0 :(得分:2)
我不知道这是否适合您的场景,但如果我要设计一个类似的应用程序,我想我会利用在VCL框架中使用新组件扩展的简单性。我会为各种图形元素,门,墙等构建组件。我会创建一个可以继承的共同对象。
例如,我创建了一个TFloorplanElement
组件,我的所有图形组件都可以从中继承,我将TFloorplanElement
继承自TGraphicControl
以利用{{1}由Anchor
提供的属性和TControl
提供的Canvas
。我不会为此使用自定义TGraphicControl
,我不认为此处需要TPanel
提供的窗口句柄的开销。
对于墙壁,我会创建一个继承自TWinControl
的组件,该组件有两个端点连接墙,这可能是一侧的门和另一侧的另一面墙,或任何其他TFloorplanElement
后代的组合。当需要移动这些角中的任何一个时,您需要进行某种事件处理,在这种情况下您需要做的只是将墙的坐标重新调整到角元素的坐标。
使用表单大小调整解决问题的一种方法是使用TFloorplanElement
组件的容器控件,我想这就是Diagramming Studio正在做的事情,但是如果你创建了一个容器组件({{例如,您可以指定元素的位置(以百分比表示),或者具有在调整容器大小时调整的缩放因子。容器当然会使用它的锚属性将它绑定到自己容器的边界(即表单)。
每当调整容器大小时,您都会重绘包含的元素。正如我刚开始所说,我不确定这是否适合您,或者您使用的图表工作室,但如果我在您的位置,这是我会考虑的一种方法。
答案 1 :(得分:2)
看看TSimpleGraph,它可能会让你在这方面有一个很大的开端。它在: http://www.delphiarea.com/products/delphi-components/simplegraph/
这是一个免费的组件,它提供了一个面板,为事件处理程序提供了各种各样的方法,属性和位置,效果非常漂亮。他们提供了一个很好的exe演示,展示了一些可能性。他们已经为各种形状和线条定义了对象,但是通过一些工作,我认为你可以添加自己的库存物品,如墙壁等。
如果它适合你,TSimpleGraph将提供一个漂亮的住房,同时让你专注于你的应用程序的肉。