0

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

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

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

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

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

4

2 回答 2

0

是否尝试为表单提供透明背景?然后你可以画任何你想要的“在顶部”。

快速的方法是将表单的透明属性设置为 True,但这会导致组合框出现问题。

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

如果您也想绘制自己的边框,则需要研究非客户区样式,但我目前没有指向好的资源的指针。

于 2013-02-10T17:07:04.283 回答
0

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

我希望这些信息对其他人有所帮助。

于 2013-02-12T08:34:31.403 回答