具体打印机的控制码不太一样,所使用的打印机为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]); //跳页根据上文,你应该在换页的时候向打印机发出一个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]); //跳页根据上文,你应该在换页的时候向打印机发出一个SendToPrinter([$0C]);可以实现
1.用canvas.Textout来打印
Canvas.TextOut(x,y,'hello');x,y为坐标
2.用canvas.textrect
with Printer do
begin
BeginDoc;
Canvas.TextRect(Rect(200,200,PageWidth-200,PageHeight-200),
200, 200, Memo1.Lines.Text);
EndDoc;
end;
end;然后用Printer.NewDoc来强制换页。
uses Printers;
begin
Printer.BeginDoc;
while (你的循环条件) do
begin
{在这里用Canvas的方法进行打印输出}
Printer.NewDoc;
end;
Printer.EndDoc;
end;
编译.win98下运行通过,win2000下有一点问题.需要的话,请留下 e-mail;
也给我一份看看吧!。
[email protected]