You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FireMonkey(Android)中是否有Windows单元RGB函数的等效替代?

FireMonkey替代VCL RGB函数与文本绘制的实现

随机颜色生成替代方案

原VCL依赖Windows单元的RGB函数生成颜色,FireMonkey无需依赖系统单元,直接通过TColorHelper的静态方法即可实现相同功能:

代码示例

// 引用必要单元
uses FMX.Types, FMX.StdCtrls;

var
  R, G, B: Byte;
  C: TAlphaColor;
begin
  R := Random(256);
  G := Random(256);
  B := Random(256);
  // 生成不透明的ARGB颜色(Alpha通道设为255,对应VCL无Alpha的RGB效果)
  C := TColor.FromArgb(255, R, G, B);
  
  // 给Label字体赋值颜色,用法与VCL一致
  Label1.Font.Color := C;
end;

说明:FireMonkey的TAlphaColor采用ARGB格式(Alpha通道在前),TColor.FromArgb方法可直接控制透明度,比VCL的RGB函数更灵活。

位图中文本绘制替代方案

原VCL的TextOut函数在FireMonkey中对应TBitmap.Canvas.FillText方法,需通过BeginScene和EndScene管理画布状态:

代码示例

uses FMX.Types, FMX.Graphics, FMX.StdCtrls;

var
  Bitmap: TBitmap;
  DrawRect: TRectF;
begin
  // 创建指定尺寸的位图
  Bitmap := TBitmap.Create(600, 300);
  try
    // 开启画布绘制上下文
    Bitmap.Canvas.BeginScene;
    try
      // 设置字体属性
      Bitmap.Canvas.Font.Size := 32;
      Bitmap.Canvas.Font.Family := '微软雅黑';
      Bitmap.Canvas.Font.Color := TColor.FromArgb(255, Random(256), Random(256), Random(256));
      
      // 定义文本绘制区域
      DrawRect := TRectF.Create(20, 20, Bitmap.Width - 20, Bitmap.Height - 20);
      
      // 绘制文本,支持对齐、换行等参数控制
      Bitmap.Canvas.FillText(
        DrawRect, 
        'FireMonkey位图文本绘制示例', 
        False,  // 是否自动换行
        1,      // 文本透明度(1为完全不透明)
        [],     // 可选文本效果
        TTextAlign.Leading,  // 水平左对齐
        TTextAlign.Center    // 垂直居中
      );
    finally
      // 结束绘制,确保内容提交到位图
      Bitmap.Canvas.EndScene;
    end;
    
    // 将绘制好的位图显示到TImage组件
    Image1.Bitmap := Bitmap;
  finally
    Bitmap.Free;
  end;
end;

说明:FireMonkey画布操作必须包裹在BeginScene和EndScene之间,这是与VCL画布操作的核心区别;FillText提供了更丰富的布局控制参数。

内容的提问来源于stack exchange,提问作者Mohsen Darrehshiri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 12:30:55