给你一个我的示例程序,具体打印机的控制码不太一样,我所使用的打印机为SP320S
var
PrnHwnd:THandle;
procedure OpenLptPrn;
begn
PRNHwnd:=CreateFile(
'LPT1',
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
0);
if PRNHwnd=INVALID_HANDLE_VALUE then
Exception.Create('无效并行口');
end;
procedure SendToPrinter(SendBuf:array of byte);overload
var
tem:cardinal;
begin
WriteFile(PRNHwnd,SendBuf,High(SendBuf)+1,tem,OL);
end;procedure SendToPrinter(SendBuf:string);overload
var
i:integer;
begin
for i:=1 to Length(SendBuf) do
SendToPrinter([ord(SendBuf[i])]);
end;
SendToPrinter([$1B,$7A,$31]); //1/6"行距
SendToPrinter([$1B,$43,22]); //页长22行 即页长22/6" SendToPrinter([$1B,$41,72]); //设定36/72"行距
SendToPrinter([$1B,$4A,80]); //实行单次80/72"顺向跳行
SendToPrinter([$1B,$4A,29]); //实行单次32/72"顺向跳行 SendToPrinter([$1B,$44,8,25,0]); //设置横向制表 SendToPrinter([9]); //实行横向制表
SendToPrinter(PrintXv.Plaza); //打印
SendToPrinter([9]); //实行横向制表
SendToPrinter(PrintXv.LaneNo); //打印
SendToPrinter([$0A]); //跳行
SendToPrinter([$1B,$4A,24]); //实行单次80/72"顺向跳行 SendToPrinter([9]); //实行横向制表
SendToPrinter(PrintXv.ClerkNum); //打印
SendToPrinter([9]); //实行横向制表
SendToPrinter(PrintXv.Date); //打印
SendToPrinter([$0A]); //跳行
SendToPrinter([$1B,$4A,24]); //实行单次80/72"顺向跳行 SendToPrinter([9]); //实行横向制表
SendToPrinter(PrintXV.ClassCar); //打印
SendToPrinter([9]); //实行横向制表
SendToPrinter(PrintXV.MoneyNum); //打印
SendToPrinter([$0C]); //跳页
var
PrnHwnd:THandle;
procedure OpenLptPrn;
begn
PRNHwnd:=CreateFile(
'LPT1',
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
0);
if PRNHwnd=INVALID_HANDLE_VALUE then
Exception.Create('无效并行口');
end;
procedure SendToPrinter(SendBuf:array of byte);overload
var
tem:cardinal;
begin
WriteFile(PRNHwnd,SendBuf,High(SendBuf)+1,tem,OL);
end;procedure SendToPrinter(SendBuf:string);overload
var
i:integer;
begin
for i:=1 to Length(SendBuf) do
SendToPrinter([ord(SendBuf[i])]);
end;
SendToPrinter([$1B,$7A,$31]); //1/6"行距
SendToPrinter([$1B,$43,22]); //页长22行 即页长22/6" SendToPrinter([$1B,$41,72]); //设定36/72"行距
SendToPrinter([$1B,$4A,80]); //实行单次80/72"顺向跳行
SendToPrinter([$1B,$4A,29]); //实行单次32/72"顺向跳行 SendToPrinter([$1B,$44,8,25,0]); //设置横向制表 SendToPrinter([9]); //实行横向制表
SendToPrinter(PrintXv.Plaza); //打印
SendToPrinter([9]); //实行横向制表
SendToPrinter(PrintXv.LaneNo); //打印
SendToPrinter([$0A]); //跳行
SendToPrinter([$1B,$4A,24]); //实行单次80/72"顺向跳行 SendToPrinter([9]); //实行横向制表
SendToPrinter(PrintXv.ClerkNum); //打印
SendToPrinter([9]); //实行横向制表
SendToPrinter(PrintXv.Date); //打印
SendToPrinter([$0A]); //跳行
SendToPrinter([$1B,$4A,24]); //实行单次80/72"顺向跳行 SendToPrinter([9]); //实行横向制表
SendToPrinter(PrintXV.ClassCar); //打印
SendToPrinter([9]); //实行横向制表
SendToPrinter(PrintXV.MoneyNum); //打印
SendToPrinter([$0C]); //跳页
解决方案 »
- 如何让软件中的文本框向网站提交数据
- SQLSEVER数据库自增字段问题
- 对象的类方法create和对象方法create有什么不同呢?
- 如何捕获键盘输入的ASCII码?在线等!11点前结贴!!
- 如何在DELPHI中按CTRL+MOUSELEFT关联.pas文件。谢谢!
- 我要PDF
- 用这个Wise Installer 作安装程序,用它的那个版本好点?
- dbgrid、stringgrid+动态查询(急)
- 哪里可以下载D5的补丁!
- 一个简单问题,radiogroup中单选按钮如何横排?早来有分!
- ICMP,IP包头的Delphi声明怎么写?
- 小鸟问题:DELPHI带的那个INTERBASE默认的用户和密码是多少啊?
GetDeviceCaps(Printer.Handle, LOGPIXELSX);
//获取Y方向的每英寸的pix
GetDeviceCaps(Printer.Handle, LOGPIXELSY);
转换成mm就可以实现了精确打印
用Printer.Canvas.TextOut(x,y,'text')可以实现精确打印