如何在FireMonkey iOS/Android应用中为FMX.Objects.TRectangle设置半透明?
嘿,这个需求我太熟悉了!要在FireMonkey的iOS/Android应用里给FMX.Objects.TRectangle设置半透明效果,用来模拟表单禁用的浅灰遮罩,其实有几种简单又靠谱的方法,我给你一步步讲清楚:
方法一:直接调整
Opacity属性(最直观) 这是FireMonkey控件自带的全局透明度控制,取值范围是0(完全透明)到1(完全不透明)。你要的浅灰半透明效果,把数值设到0.3-0.5之间就很合适。
- 设计时操作:在Object Inspector里找到TRectangle的
Opacity属性,直接输入类似0.4的数值,再把Fill.Color设为claGray或者你偏好的浅灰色就行。 - 代码动态设置:
// 假设你的矩形控件名为rectOverlay rectOverlay.Fill.Color := TAlphaColors.Gray; rectOverlay.Opacity := 0.4;
⚠️ 注意:这个属性会影响整个控件(包括边框,如果有的话),如果只想让填充透明、边框保持不透明,就用下面的方法。
方法二:使用带Alpha通道的颜色值(精准控制填充)
FireMonkey的颜色原生支持Alpha通道,你可以直接给Fill.Color设置一个带透明度的灰色,这样不会干扰边框的透明度。
- 设计时操作:打开颜色选择器,选好灰色后拖动Alpha滑块(通常在颜色面板底部),或者直接输入十六进制颜色值——格式是
$AA RR GG BB,其中前两位AA是Alpha值(比如$66对应约40%的不透明度),后面六位是灰色的RGB值(比如808080是中性灰)。 - 代码动态设置:
// 用TAlphaColorHelper创建带Alpha的颜色,参数依次是红、绿、蓝、Alpha(0-255) rectOverlay.Fill.Color := TAlphaColorHelper.RGB(128, 128, 128, 100); // 或者直接写十六进制值,Alpha在前:$64808080(64是100的十六进制表示) rectOverlay.Fill.Color := $64808080;
这个方法的优势是,你可以单独控制填充区域的透明度,边框如果需要保持完全不透明,只要把Stroke.Opacity设为1就好。
方法三:叠加遮罩实现完整的表单禁用效果
如果你的目标是在表单上方盖一个半透明矩形来禁用所有交互,别忘了把矩形的HitTest属性设为True——这样它会拦截下方所有控件的触摸事件,真正实现“禁用”的交互效果。
完整代码示例:
var rectOverlay: TRectangle; begin rectOverlay := TRectangle.Create(Self); try rectOverlay.Parent := Self; // 将遮罩添加到当前表单 rectOverlay.Align := TAlignLayout.Client; // 让遮罩铺满整个表单区域 rectOverlay.Fill.Color := TAlphaColors.Gray; rectOverlay.Opacity := 0.4; rectOverlay.HitTest := True; // 拦截触摸事件,阻止下方控件响应 rectOverlay.BringToFront; // 确保遮罩显示在所有控件的最上层 except rectOverlay.Free; raise; end; end;
内容的提问来源于stack exchange,提问作者Mahmoud




