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

sonypioneer 2012-09-24 09:56:24
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的解决方法
...全文
218 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
我不懂电脑 2012-09-24
  • 打赏
  • 举报
回复
TPrinter *printer = new TPrinter();
sonypioneer 2012-09-24
  • 打赏
  • 举报
回复
带括号的话,提示
[bcc32 Error] Unit1.cpp(41): E2015 Ambiguity between '_fastcall Fmx::Printer::Printer()' and 'Fmx::Printer'
勉励前行 2012-09-24
  • 打赏
  • 举报
回复
TPrinter *printer = Printer();
sonypioneer 2012-09-24
  • 打赏
  • 举报
回复
我已解决,谢谢2为朋友
sonypioneer 2012-09-24
  • 打赏
  • 举报
回复
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 + printer->Canvas->TextWidth(s);
y2 = y1 + printer->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();

c++ builder 的代码,刚才的有误
sonypioneer 2012-09-24
  • 打赏
  • 举报
回复
TRectF MyRect;
int x1, y1, x2, y2;
TPrinter *printer = new TPrinter();
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 + printer->Canvas->TextWidth(s);
y2 = y1 + printer->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();

不行...
sonypioneer 2012-09-24
  • 打赏
  • 举报
回复
[bcc32 Error] Unit1.cpp(41): E2352 Cannot create instance of abstract class 'TPrinter' Full parser context
[bcc32 Error] Unit1.cpp(41): E2353 Class 'TPrinter' is abstract because of '_fastcall TPrinter::ActivePrinterChanged() = 0'
还是提示错误.

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧