使用Printer控制两台打印机进行打印的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 wzds_2000
  • 开始时间 开始时间
W

wzds_2000

Unregistered / Unconfirmed
GUEST, unregistred user!
同时连接两台打印机,一台针打,一台激光。
需要同时打印两项内容(一种打印机打印一项内容),
并且打印使用的纸张均为不规则纸型,
其中激光打印机在控制面板中设置为自定义纸型,
使用直接输出到打印机的方法进行打印,
第一次打印时两项内容均可正常打印但是,第二次打印时激光打印机的打印位置错位。
代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
Device,Driver,Post:PChar;
HDmode:THandle ;
PDmode:PDevMode;
begin
Device:=StrAlloc(cchDeviceName);
Driver:=StrAlloc(MAX_PATH);
Post:=StrAlloc(32);
try
printer.PrinterIndex:=PrintIndex1;//定为针打
Printer.GetPrinter(Device,Driver,Post,HDmode);
if HDmode<>0 then
begin
pdmode:=GlobalLock(HDmode);
if pdmode<>nil then
begin
PDmode.dmPaperSize:=256;
//PDmode^.dmPaperSize:=DMPAPER_USER;
PDmode^.dmPaperLength:=1450;
PDmode^.dmPaperWidth:=2350;
PDmode^.dmFields:=pdmode^.dmFields or DM_PAPERSIZE or DM_PAPERLENGTH or DM_PAPERWIDTH;
PDmode^.dmDefaultSource:=DMBIN_MANUAL;
GlobalUnlock(hdmode);
printer.PrinterIndex:=PrintIndex1;//定为针打
end;
end;
finally
StrDispose(Device);
StrDispose(Driver);
StrDispose(Post);
end;
Printer.begin
Doc;
Printer.Canvas.Font.Name:='黑体';
Printer.Canvas.TextOut(left,top,'********');//输出文本部分
.
.
.
Printer.Canvas.TextOut(left,top,'********');//输出文本部分
Printer.EndDoc;
Device:=StrAlloc(cchDeviceName);
Driver:=StrAlloc(MAX_PATH);
Post:=StrAlloc(32);
try
printer.PrinterIndex:=PrintIndex2;//定为针打
Printer.GetPrinter(Device,Driver,Post,HDmode);
if HDmode<>0 then
begin
pdmode:=GlobalLock(HDmode);
if pdmode<>nil then
begin
PDmode^.dmPaperSize:=256;
PDmode^.dmPaperLength:=1016;
PDmode^.dmPaperWidth:=1016;
PDmode^.dmFields:=pdmode^.dmFields or DM_PAPERSIZE or DM_PAPERLENGTH or DM_PAPERWIDTH;
GlobalUnlock(hdmode);
printer.PrinterIndex:=PrintIndex2;//定为针打
end;
end;
Printer.begin
Doc;
Printer.Canvas.Font.Name:='黑体';
Printer.Canvas.TextOut(left,top,'********');//输出文本部分
.
.
.
Printer.Canvas.TextOut(left,top,'********');//输出文本部分
Printer.EndDoc;
finally
StrDispose(Device);
StrDispose(Driver);
StrDispose(Post);
end;
end;

请大家帮忙看看打印错位的原因,谢谢!
 
同时连接两台打印机,一台针打,一台激光。
需要同时打印两项内容(一种打印机打印一项内容),
并且打印使用的纸张均为不规则纸型,
其中激光打印机在控制面板中设置为自定义纸型,
使用直接输出到打印机的方法进行打印,
第一次打印时两项内容均可正常打印但是,第二次打印时激光打印机的打印位置错位。
代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
Device,Driver,Post:PChar;
HDmode:THandle ;
PDmode:PDevMode;
begin
Device:=StrAlloc(cchDeviceName);
Driver:=StrAlloc(MAX_PATH);
Post:=StrAlloc(32);
try
printer.PrinterIndex:=PrintIndex1;//定为针打
Printer.GetPrinter(Device,Driver,Post,HDmode);
if HDmode<>0 then
begin
pdmode:=GlobalLock(HDmode);
if pdmode<>nil then
begin
PDmode.dmPaperSize:=256;
//PDmode^.dmPaperSize:=DMPAPER_USER;
PDmode^.dmPaperLength:=1450;
PDmode^.dmPaperWidth:=2350;
PDmode^.dmFields:=pdmode^.dmFields or DM_PAPERSIZE or DM_PAPERLENGTH or DM_PAPERWIDTH;
PDmode^.dmDefaultSource:=DMBIN_MANUAL;
GlobalUnlock(hdmode);
printer.PrinterIndex:=PrintIndex1;//定为针打
end;
end;
finally
StrDispose(Device);
StrDispose(Driver);
StrDispose(Post);
end;
Printer.begin
Doc;
Printer.Canvas.Font.Name:='黑体';
Printer.Canvas.TextOut(left,top,'********');//输出文本部分
.
.
.
Printer.Canvas.TextOut(left,top,'********');//输出文本部分
Printer.EndDoc;
Device:=StrAlloc(cchDeviceName);
Driver:=StrAlloc(MAX_PATH);
Post:=StrAlloc(32);
try
printer.PrinterIndex:=PrintIndex2;//定为针打
Printer.GetPrinter(Device,Driver,Post,HDmode);
if HDmode<>0 then
begin
pdmode:=GlobalLock(HDmode);
if pdmode<>nil then
begin
PDmode^.dmPaperSize:=256;
PDmode^.dmPaperLength:=1016;
PDmode^.dmPaperWidth:=1016;
PDmode^.dmFields:=pdmode^.dmFields or DM_PAPERSIZE or DM_PAPERLENGTH or DM_PAPERWIDTH;
GlobalUnlock(hdmode);
printer.PrinterIndex:=PrintIndex2;//定为针打
end;
end;
Printer.begin
Doc;
Printer.Canvas.Font.Name:='黑体';
Printer.Canvas.TextOut(left,top,'********');//输出文本部分
.
.
.
Printer.Canvas.TextOut(left,top,'********');//输出文本部分
Printer.EndDoc;
finally
StrDispose(Device);
StrDispose(Driver);
StrDispose(Post);
end;
end;

请大家帮忙看看打印错位的原因,谢谢!
 
后退
顶部