TPrinter问题!!!急!!!!

KDE 2006-03-24 04:13:58
我在窗体上有4个Label

我使用printer打印我的4个Label的Caption,

我的4个Label如下:

123 456 789 abc

就是这么简单的横着排列。

但是打印出来后是:
124abc

有些被覆盖了。

代码:
printer->BeginDoc();
for(int i=0;i<4;++i)
{
printer->Canvas->TextOut(lbls[i]->Left,lbls[i]->Top,lbls[i]->Caption);
}
printer->EndDoc();

请问怎么能够将Label本身在窗体上的位置,正确的反映到printer的Canvas上》??????
...全文
119 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
KDE 2006-04-14
  • 打赏
  • 举报
回复
虽然办法不是很好用。但是非常感谢 JSP 季世平 大哥。

结贴,给分。
jishiping 2006-03-24
  • 打赏
  • 举报
回复
需要根据字体的不同,自己调整位置。比如:下面是一个简单的办法(当然不是最好)
printer->BeginDoc();
//大概计算一下放大倍数
double zx = 1.0*printer->Canvas->TextWidth("123")/Canvas->TextWidth("123");
for(int i=0;i<4;++i)
{
printer->Canvas->TextOut(lbls[i]->Left*zx, lbls[i]->Top*zx, lbls[i]->Caption);
}
printer->EndDoc();
jishiping 2006-03-24
  • 打赏
  • 举报
回复
因为Form的Canvas的字体和Printer()->Canvas的字体不同造成的,Printer()->Canvas的字体比Form上字体大。比如:在Form上,“123”的Left为10,宽度为20,“456”的Left为40,宽度也是20。但是到Printer()->Canvas上后,它的字体变大了,虽然“123”的Left还是10,但是宽度却可能变成了40,那么“123”后面的部分,就会被后面的“456”覆盖了。
KDE 2006-03-24
  • 打赏
  • 举报
回复
也就是说,如果我修改了Label的位置,那么Label的Left和Top坐标能够整确
的反应到纸上。

请unsigned(僵哥(送人以鱼,不如授人渔;授人以渔,不如渔人之鱼)) 再说说,
谢谢。
KDE 2006-03-24
  • 打赏
  • 举报
回复
我得意思是要使Label在窗体上的位置,映射到打印纸上。
僵哥 2006-03-24
  • 打赏
  • 举报
回复
TextOut所使用的坐标不能只是单按字符来加减计算,而应当使用象素来计算.
使用TextWidth来计算一个字符串的占用象素宽度,然后后面一个字符串输出时套接其后.

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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