You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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

火山引擎 最新活动