如何防止firemonkey表单绘制自己(用于调用自己的绘图函数)?

时间:2013-02-08 09:51:34

标签: delphi opengl firemonkey

我尝试将现有的OpenGL-Application从基于VCL的表单转换为C ++ Builder XE3中基于FMX的表单。

为此,我使用Firemonkey表单的句柄来创建OpenGL设备上下文,并使该表单成为另一个表单的子表单,以模仿我在基于VCL的应用程序中的表单内的面板。

现在的问题是,在调整大小事件之后或者在调用Invalidate()之后,表单将以其背景呈现。这会导致闪烁甚至更糟:有时会显示背景而不是我的OpenGL渲染场景。

如何防止在Firemonkey-OpenGL表单位置重新绘制区域。或者,我可以定义一个Ownerdraw函数或其他东西吗?

请注意,我无法使用Firemonkey-3d-Form。

2 个答案:

答案 0 :(得分:0)

尝试过为表单提供透明背景吗?然后你可以在顶部绘制你想要的任何东西。

快速方法是将表单Transparent属性设置为True,但这会产生ComboBoxes的问题。

另一种方法是在表单上放置一个TRectangle。将它的StyleName设置为'backgroundstyle'。将它的Fill.Color设置为claNull。将Stroke.Thickness设置为0.这将替换表单的默认背景样式。

如果你想绘制自己的边框,你需要调查非客户区域样式,但我目前没有指向好资源的指针。

答案 1 :(得分:0)

经过几个小时的实验,我找到了解决方案:“TCommonCustomForm”具有所需的属性:(1)它不会自行绘制,(2)它有一个可用于OpenGL初始化的句柄。

我希望这些信息能够帮助他人。