打印机画布的一点大疑问

CB123 2003-09-15 10:37:53
用CANVAS在打印机的画布上画图,总感到怪怪的,我画的是条形码,
printer.canvas.pen.width=1或2或3 可让用户调整。printer.canvas.font.size=9.
printer.canvas.font.name='宋体' 用 printer.canvas.textheight('') 或abs(printer.canvas.font.height)来控制条码和文字说明之间的间矩,因为字体大小不变,所以我认为间矩也应不变且正常。但打印出来发形无论是用
printer.canvas.textheight('') 或abs(printer.canvas.font.height)都不正常。间矩在几次的打印中不同,让我不解,这样做的软件是根本没法用的。还有一个问题。printer.canvas.pen.moveto(x,y)坐标是像素单位还是逻辑单位,在VC的资料上说是逻辑单位,printer.canvas.moveto(x,y),printer.canvas.lineto(x2,y)是画了一个逻辑单位(和映射模式有关)为ABS(X2-x)的直线。而delphi上的资料却说是像素单位。
让人不解,我想我一试就明白了。不过还是觉得封装不应改变原来MSDN的特性,这样让人容易理解,毕竟比起VC,DELPHI高级一点的资料还是太少了。
...全文
174 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
CB123 2003-11-05
  • 打赏
  • 举报
回复
做过小票打印的大虾请指点。
如何控制小票打印机的字体,字体名称和大小,我见过很多小票打印的源码,都是向打印机发送字符,我想字符数也只有多试试才知道,但如何保证通用性,你不知道打印机上有什么硬字体
ayukowa 2003-11-05
  • 打赏
  • 举报
回复
哲学家说过:天底下没有完全相同的两片树叶,这就是事物的唯一性!
搂主自己领会吧!
CB123 2003-11-05
  • 打赏
  • 举报
回复
你们怎么一时还没看明白,只是我说明的文字太长,让人花了眼了,我说过了我设置的是宋9,打印机是有这种字体的,我在打印时行是由printer.canvas.textheight控制的,只是字体名称大小都不变。在多次打印后发现行宽竟然不同也即printer.canvas.textheight不同,为什么会这样呢
zhouguoyao 2003-10-14
  • 打赏
  • 举报
回复
因为屏幕上的分辨率和打印机的分辨率是不一样的,所以你在打印输出之前应该先进行计算。并且
打印机的字体是可以设定的,如果它不支持你所设置的字体,他会自动为你选择一个相近的字体。
//获得打印机的分辨率
px:=getdevicecaps(printer.Handle,logpixelsx);
py:=getdevicecaps(printer.Handle,logpixelsy);
//设置图片的打印区域
with rect do
begin
left:=trunc(strtofloat(edit1.Text)/2.54*px);
top:=trunc(strtofloat(edit2.Text)/2.54*py);
right:=trunc(image1.Picture.Width*px*strtofloat(edit3.text)/100)+left;
bottom:=trunc(image1.Picture.Height*py*strtofloat(edit3.text)/100)+top;
end;
CB123 2003-10-14
  • 打赏
  • 举报
回复
cybercake(数字蛋糕) ,
你的意思是用图元文件做缓存,这个我也想过,只是如用它来打条码,会有放缩,影响扫描器的识别。我想最好是在打印机的画布上画, 这样清晰。
只是在对打印行进行控制时我用printer.canvas.textheight()来控制行高。我想只要字体不变。printer.canvas.textheight()的高度总应该是相同,每次打出的效果应该是相同的,可是在打印多次后比较,printer.canvas.textheight()的值在同样的字体时竟不是一个定值。导致打印页面时好时坏。
数字蛋糕 2003-09-30
  • 打赏
  • 举报
回复
在默认情况下,一个逻辑单位就是一个像素。
之所以在打印机下会出现奇怪的现象,是因为打印机的精度要高得多(屏幕一般是96dpi,打印机都在300以上)。如果你不需要实现高精度的打印,可以先创建一个元文件(它的默认分辨率应该就是屏幕的),然后在元文件上画图,最后直接Draw到打印机上。因为元文件的绘制引擎能够自动识别目标的分辨率,所以画到打印机上的图像能够保持在屏幕上的比例。
CB123 2003-09-17
  • 打赏
  • 举报
回复
LineTo等都是指象素而言。这句话我估计是有问题的,为什么呢,我查过VC方面的资料和
一些C++BUILDER的资料,说是按逻辑单位(打印机默认的模式(MM_TEXT)一个像素即是一个逻辑单位),而DELPHI的资料都说是按像素,我想试一试即会明白,只是现忙其它的,改天吧。
lxpbuaa 2003-09-16
  • 打赏
  • 举报
回复
1、用textheight应该是对的,返回当前字体设置下,字符所占高度(象素)。
2、LineTo等都是指象素而言。

—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
tccb 2003-09-16
  • 打赏
  • 举报
回复
在playicq上找找,有源码。。。
CB123 2003-09-16
  • 打赏
  • 举报
回复
LineTo等都是指象素而言。这句话我估计是有问题的,为什么呢,我查过VC方面的资料和
一些C++BUILDER的资料,说是按逻辑单位(打印机默认的模式(MM_TEXT)一个像素即是一个逻辑单位),而DELPHI的资料都说是按像素,我想试一试即会明白,只是现忙其它的,改天吧。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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