我尝试将现有的OpenGL-Application从基于VCL的表单转换为C ++ Builder XE3中基于FMX的表单。
为此,我使用Firemonkey表单的句柄来创建OpenGL设备上下文,并使该表单成为另一个表单的子表单,以模仿我在基于VCL的应用程序中的表单内的面板。
现在的问题是,在调整大小事件之后或者在调用Invalidate()之后,表单将以其背景呈现。这会导致闪烁甚至更糟:有时会显示背景而不是我的OpenGL渲染场景。
如何防止在Firemonkey-OpenGL表单位置重新绘制区域。或者,我可以定义一个Ownerdraw函数或其他东西吗?
请注意,我无法使用Firemonkey-3d-Form。
答案 0 :(得分:0)
尝试过为表单提供透明背景吗?然后你可以在顶部绘制你想要的任何东西。
快速方法是将表单Transparent属性设置为True,但这会产生ComboBoxes的问题。
另一种方法是在表单上放置一个TRectangle。将它的StyleName设置为'backgroundstyle'。将它的Fill.Color设置为claNull。将Stroke.Thickness设置为0.这将替换表单的默认背景样式。
如果你想绘制自己的边框,你需要调查非客户区域样式,但我目前没有指向好资源的指针。
答案 1 :(得分:0)
经过几个小时的实验,我找到了解决方案:“TCommonCustomForm”具有所需的属性:(1)它不会自行绘制,(2)它有一个可用于OpenGL初始化的句柄。
我希望这些信息能够帮助他人。