delphi指令打印横向位移问题

北京-飞 2015-04-14 04:33:47
最近在做delphi指令打印,我用以下程序打印时横向位移参数n1不能大于127,如果大于,导致打印位置错误,小于127时就没有任何问题,请问这个问题怎么解决?
AssignFile(F,'lpt1');
Rewrite(F);
//ESC \ n1 n2
Write(f,chr(27)+chr(36)+chr(180)+chr(0));//n1=180,打印无水平位移,应该移动180/60英寸才对,当n1=120的时候则没有问题
write(f,'a');
CloseFile(f);

...全文
194 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
北京-飞 2015-04-15
  • 打赏
  • 举报
回复

就是这么个情况了,到底是哪里的问题。。。
北京-飞 2015-04-15
  • 打赏
  • 举报
回复
ESC 绝对点位置定位 ASCII ESC $ n1 n2 0<=(n1+n2*256)<300 DEC 27 36 n1 n2 HEX 1B 24 n1 n2 以当前左边限为基准 右移打印头 (n1+n2*256)/60 英寸,若该距离超越右边限,此设定无效,最大设置距离为 5 英寸
北京-飞 2015-04-15
  • 打赏
  • 举报
回复
引用 1 楼 lyhoo163 的回复:
这与打印的支参数持有关。 打印机支持的宽度(字符)是有限制的。
我用的得实1000的针式打印机它的文档中是这么说的 ESC 绝对点位置定位 ASCII ESC $ n1 n2 0 n1+n2 256 300 DEC 27 36 n1 n2 HEX 1B 24 n1 n2 以当前左边限为基准 右移打印头 n1+n2 256 /60 英寸 若该距离超越右边限 此设定无 效 最大设置距离为 5 英寸 按这个文档,我设置n1=180应该在距左侧一寸的距离打印才对,可是打印位置却是在起始位置开始打印的,请问我的理解有错吗
lyhoo163 2015-04-15
  • 打赏
  • 举报
回复
这与打印的支参数持有关。 打印机支持的宽度(字符)是有限制的。
Tiger_Zhao 2015-04-15
  • 打赏
  • 举报
回复
可能是delphi版本的问题。
以前Char类型是AnsiChar,现在是WideChar。
北京-飞 2015-04-15
  • 打赏
  • 举报
回复
解决了,感谢大家。 因为不太懂delphi的缘故,在网上找的打印的代码都是用的chr()方法连接命令的,现在知道了chr()这个方法对于大于127的没辙。 现在用这种写法就没问题了
Write(f,AnsiChar(27)+AnsiChar(36)+AnsiChar(150)+AnsiChar(itemp2));
ansichar的范围是#0到#255. 散分
Tiger_Zhao 2015-04-15
  • 打赏
  • 举报
回复
你不要用字符方式打印,改为二进制方式打印试试。
北京-飞 2015-04-15
  • 打赏
  • 举报
回复
引用 5 楼 Tiger_Zhao 的回复:
这个说明太没品了。 n1、n2 到底是数字字符串值还是字节值? 字节值到底是无符号Byte还是有符号的SByte? 还有Delphi里超过#127的会不会和后一个字节合起来当作DBCS解释?
Write(f,chr(27)+chr(36)+chr(180)+chr(1));//假定是SByte,试试这个
这样是不行的,chr是把ascii码转为字符的方法,是不是因为delphi里边chr大于127就不正常了,那大于127的要怎么来转换呢
Tiger_Zhao 2015-04-15
  • 打赏
  • 举报
回复
这个说明太没品了。
n1、n2 到底是数字字符串值还是字节值?
字节值到底是无符号Byte还是有符号的SByte?
还有Delphi里超过#127的会不会和后一个字节合起来当作DBCS解释?
Write(f,chr(27)+chr(36)+chr(180)+chr(1));//假定是SByte,试试这个

5,392

社区成员

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

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