如何防止firemonkey窗体绘制自己(用于调用自己的绘制函数)



我尝试在C++Builder XE3中将现有的OpenGL应用程序从基于VCL的表单转换为基于FMX的表单。

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

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

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

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

是否尝试为表单提供透明背景?然后你可以在上面画任何你想要的东西。

快速的方法是将forms Transparent属性设置为True,但这会导致ComboBoxes出现问题。

另一种方法是在表单上放置一个TRectangle。将其StyleName设置为"backgroundstyle"。设置为"填充"。要claNull的颜色。设置笔划。厚度为0。这将替换表单的默认背景样式。

如果你也想画自己的边界,你需要研究非客户区域的风格,但我目前还没有一个好的资源。

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

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

最新更新