我在CBuilder中使用FireMonkey,我尝试制作一个透明窗体,这样窗体上的组件就可以显示出来,但是在没有组件的空间中,您可以看到窗体下面的内容(透明)...
我已经将窗体的Transparency
属性设置为true
,但是窗体中应该透明的区域看起来像BLACK。
我在网上搜索过,找到了 Delphi 的解决方案,但没有C的。
我试着把这个写进清单里:
SetActivityAttribute(MYFormTransparent ,android:theme, @android:style/Theme.Translucent.NoTitleBar)
但还是一样的问题。
有什么想法吗?
1条答案
按热度按时间0pizxfdo1#
这是一个在10.3 Rio中引入的已知问题,已经报告给Embarcadero(不幸的是,它已被关闭为“按预期工作”):
RSP-22314: Transparency Property
马尔科·坎图对该报告评论说:
很抱歉没有更早地发表评论。我们已经为上次更新做了一些研究,但决定推迟修复。
核心问题(简而言之)是我们使用Android SurfaceView,这是该平台控件的一个限制(只有2个SurfaceView示例可用)。我们使用此平台元素是因为它允许我们混合样式和平台控件(我们在10.30中引入的一个功能)。通过改变内部实现,透明度变得不可用。
有一个通过TextureView表单的替代实现,但到目前为止,我们的测试已经表明,渲染速度慢2倍,我们不想放慢所有的FMX应用程序在Android上的这个功能.
有一些变通办法,其中之一是用框架代替窗体。2它能很好的工作,并且比单独的窗体使用更少的资源。3对于现有的代码,最快的方法是在窗体中添加一个布局,并将控件放在里面。当你需要显示透明的窗体时,你可以把布局从特定的窗体作为子窗体移到主窗体,然后在内容上对齐它对齐=内容**。
其他评论者指出:
我用formStyle = popup和stylelookup = popupboxstyle测试了一个替代方案,其中窗体中有一个矩形,透明度= 0.4,还有一些用setBounds调整窗体大小的说明
结果可接受
正如埃尔韦Escriou所说,一个解决方法是将表单的formstyle属性设置为“Popup”。这将使表单再次透明。但这将导致wsMaximized样式无法正常工作。您可以通过在表单中添加以下代码来解决此问题:...