用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高级一点的资料还是太少了。
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高级一点的资料还是太少了。
解决方案 »
- 安装盗版delphi和ODAC窘态
- 在delphi下实现net use \\ip指令,登录服务器进行访问
- 没劲,看还有几个人在。散分
- 急!!关于开发文档的问题
- Delphi6中使用ADO连接Access2000,视图查询出错,急!!!!
- 問一個簡單問題,用什麼函數把某個窗體(mdichild)設為ActiveForm,我想肯定有這個函數
- quickreP做报表时对二进制字段怎么处理用控件能绑定吗?
- 怎么样才能得到 DateTimePicker1 控件所选的日期
- 奇怪问题??关于edit只能输入数字的问题
- 有一个奇怪的问题,寻高手解决
- 分少,但情义在,SQL查询语句问题!!!!!!!!
- 为何SPCOMM为何没有触发事件?
2、LineTo等都是指象素而言。—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
一些C++BUILDER的资料,说是按逻辑单位(打印机默认的模式(MM_TEXT)一个像素即是一个逻辑单位),而DELPHI的资料都说是按像素,我想试一试即会明白,只是现忙其它的,改天吧。
一些C++BUILDER的资料,说是按逻辑单位(打印机默认的模式(MM_TEXT)一个像素即是一个逻辑单位),而DELPHI的资料都说是按像素,我想试一试即会明白,只是现忙其它的,改天吧。
之所以在打印机下会出现奇怪的现象,是因为打印机的精度要高得多(屏幕一般是96dpi,打印机都在300以上)。如果你不需要实现高精度的打印,可以先创建一个元文件(它的默认分辨率应该就是屏幕的),然后在元文件上画图,最后直接Draw到打印机上。因为元文件的绘制引擎能够自动识别目标的分辨率,所以画到打印机上的图像能够保持在屏幕上的比例。
你的意思是用图元文件做缓存,这个我也想过,只是如用它来打条码,会有放缩,影响扫描器的识别。我想最好是在打印机的画布上画, 这样清晰。
只是在对打印行进行控制时我用printer.canvas.textheight()来控制行高。我想只要字体不变。printer.canvas.textheight()的高度总应该是相同,每次打出的效果应该是相同的,可是在打印多次后比较,printer.canvas.textheight()的值在同样的字体时竟不是一个定值。导致打印页面时好时坏。
打印机的字体是可以设定的,如果它不支持你所设置的字体,他会自动为你选择一个相近的字体。
//获得打印机的分辨率
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;