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

Delphi中调用Printer.Canvas.TextOut报未声明标识符错误如何解决?

解决FMX Printer.Canvas.TextOut未声明标识符的问题

问题根源

FMX的Printer.Canvas属于FMX.Graphics.TCanvas类,而TextOut是VCL框架中TCanvas的专属方法,两者并非同一类。RAD Studio文档可能混淆了VCL与FMX的API体系,导致你产生误解。

修正方案

方案1:使用FMX原生文本绘制方法(推荐)

FMX的TCanvas提供了FillText方法替代TextOut,这是跨平台的标准实现,示例代码如下:

var
  PrintArea: TRectF;
begin
  if Printer.Active then
  begin
    // 定义文本绘制的矩形区域
    PrintArea := RectF(100, 100, 600, 200);
    // 绘制文本,可指定对齐方式、透明度等参数
    Printer.Canvas.FillText(PrintArea, '要打印的内容', False, 1, [], TTextAlign.Leading);
  end;
end;

方案2:调用Windows GDI的TextOut API(仅Windows平台)

如果必须使用TextOut,需要先获取FMX Canvas对应的Windows设备上下文(HDC),再直接调用系统API,代码示例:

uses
  FMX.Platform.Win, Winapi.Windows;

var
  CanvasHDC: HDC;
  PrintText: string;
begin
  if Printer.Active then
  begin
    PrintText := '要打印的内容';
    // 获取FMX Canvas对应的HDC
    CanvasHDC := TWinCanvas(Printer.Canvas).Handle;
    // 调用Windows API的TextOut
    TextOut(CanvasHDC, 100, 100, PChar(PrintText), Length(PrintText));
  end;
end;

注意:此方法依赖Windows平台代码,会破坏FMX的跨平台特性,仅适合纯Windows场景。

重要提示

  • 严格区分VCL和FMX的API差异:VCL的TCanvas封装了GDI接口,而FMX的TCanvas是跨平台抽象层,方法名、参数逻辑均不同。
  • 优先采用FMX原生方法,确保代码在不同平台的兼容性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:24:56