xe3 c++ buider下 fmx打印报错,而拿delphi写就没问题,求解

sonypioneer sonypioneer 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
C++ builder下

TRectF MyRect;
int x1, y1, x2, y2;
TPrinter *printer = Printer;
String s = "打印测试!";

// if(PrintDialog1->Execute() ) {
printer->Refresh();
printer->ActivePrinter->SelectDPI(100, 100);
// prn->ActivePrinter->ActiveDPIIndex = 1;
printer->Canvas->Font->Size = 15;
printer->Canvas->Font->Family = "Arial";

Printer->Canvas->Fill->Color = claBlack;
Printer->Canvas->Fill->Kind = TBrushKind(1);

printer->BeginDoc();

x1 = 10;
y1 = 10;
x2 = x1 + prn->Canvas->TextWidth(s);
y2 = y1 + prn->Canvas->TextHeight(s);

MyRect.init(x1, y1, x2, y2);

printer->Canvas->FillText(MyRect, s, false, 1,
TFillTextFlags() << TFillTextFlag::ftRightToLeft, TTextAlign::taLeading,
TTextAlign::taLeading);
printer->EndDoc();


delphi下,可以正常
var
l,t,r,b: Integer;
s: String;
source, dest : TRectF;
begin
//Set default DPI for the printer. The SelectDPI routine defaults
//to the closest available resolution as reported by the driver.
Printer.ActivePrinter.SelectDPI(1200, 1200);
Printer.BeginDoc;

//Print country name on top.
Printer.Canvas.Font.Size := 15;
Printer.Canvas.Font.Family := 'Arial';
Printer.Canvas.Font.Style := [TFontStyle.fsbold];
Printer.Canvas.Fill.Color := claBlack;
Printer.Canvas.Fill.Kind := TBrushKind.bkSolid;

s := '打印测试';
l := 10;
t := 10;
r := l + Round(Printer.Canvas.TextWidth(s));
b := t + Round(Printer.Canvas.TextHeight(s));

Printer.Canvas.FillText(TRectF.Create(l, t, r, b), s, false, 1, [TFillTextFlag.ftRightToLeft], TTextAlign.taLeading, TTextAlign.taLeading);

Printer.Canvas.Font.Size := 20;
Printer.Canvas.Font.Family := '黑体';
s := '打印测试';
l := 20;
t := 70;
r := l + Round(Printer.Canvas.TextWidth(s));
b := t + Round(Printer.Canvas.TextHeight(s));

Printer.Canvas.FillText(TRectF.Create(l, t, r, b), s, false, 1, [TFillTextFlag.ftRightToLeft], TTextAlign.taLeading, TTextAlign.taLeading);

Printer.Canvas.Font.Size := 30;
Printer.Canvas.Font.Family := '宋体';
s := '打印测试';
l := 30;
t := 130;
r := l + Round(Printer.Canvas.TextWidth(s));
b := t + Round(Printer.Canvas.TextHeight(s));
Printer.Canvas.FillText(TRectF.Create(l, t, r, b), s, false, 1, [TFillTextFlag.ftRightToLeft], TTextAlign.taLeading, TTextAlign.taLeading);

Printer.EndDoc;
求c++ builder的解决方法
...全文

相关推荐

Delphi XE6 Android编程实战入门指南

Delphi XE6提供了一个功能强大的集成开发环境(IDE),其中包括代码编辑器、图形设计面板、调试工具和版本控制系统。它支持VCL和FMX两种框架,允许开发者创建高性能的本地Windows应用程序和跨平台的应用程序。网络编程中最为核心的概念之一便是网络协议。网络协议定义了数据传输的规则和格式,确保不同设备和操作系统之间能够通信。在互联网中,TCP/IP(传输控制协议/互联网协议)是最为广泛使用的协议集,提供了数据包传输、路由选择、数据包分片与重组、错误检测等功能。

在新宿痛饮

Delphi XE7安卓开发实战:FMX跨平台框架与JNI桥接踩坑全记录

跨平台开发一直是移动应用领域的热门话题,而Object Pascal语言通过Delphi XE7实现了从桌面到安卓的延伸。其核心在于FMX(FireMonkey)自绘UI框架与ARM原生编译技术的结合,既能复用业务逻辑,又能直接生成机器码,保证了执行效率。利用Delphi XE7,开发者无需编写Java即可完成安卓App的搭建,尤其适合工具型、业务型应用场景。但在实际工程中,JDK版本匹配、SDK/NDK配置、FMX控件自绘特性、JNI桥接原生API、权限声明及多分辨率适配等环节,都需要针对安卓平台特性进行

陳子浩

Delphi_XE10移动应用开发框架详解与实践

Delphi_XE10作为Embarcadero公司推出的重量级开发工具,为移动应用开发领域带来了全新的契机。本章将为您提供一个对Delphi_XE10框架的全面概述,帮助您理解其作为高效跨平台移动应用开发框架的潜力和特性。Delphi允许开发者创建自定义组件,以满足特定的开发需求。开发自定义组件首先需要定义组件的属性、事件和方法。这通常通过继承现有的组件类来完成,并添加或重写所需的功能。例如,您可能需要一个特殊的按钮,它具有特定的颜色渐变效果。

谛听汪

Delphi XE7登录窗体设计与实现完整示例

Delphi支持使用ShortCut组件或直接绑定控件的OnClick事件。例如,可以为“记住用户名”添加一个快捷键(如Ctrl+R):begin// 注册快捷键 Ctrl+Rend;beginShowMessage('快捷键 Ctrl+R 被按下');end;逻辑分析:将字符串转换为快捷键对象。用于集中管理快捷键绑定。是快捷键触发后的执行逻辑。流程图:快捷键绑定流程graph TDA[窗体创建] --> B[注册快捷键]

深刻如此

Delphi XE FMX StringGrid 点击表头排序原理与实战

在桌面与移动应用开发中,表格数据的快速排序是提升操作效率的常见需求。FireMonkey(FMX)作为 Delphi 的跨平台 UI 框架,其 TStringGrid 控件虽内置了排序状态字段,却未提供点击表头排序的完整实现。开发者需要理解控件的事件体系与数据比较原理,通过自定义逻辑来扩展该功能。本文从 FMX 表格控件的选型出发,对比 TGridView 与 TStringGrid 的适用场景,剖析表头点击的交互约定,并给出可直接复用的排序引擎代码。同时,针对数据类型混合、中文排序、大数据量性能等工程问题

股海求生
评论 7
收藏 已收藏
分享
返回顶部
sonypioneer
C++ Builder 13,871 成员 102,696 内容