有关打印的问题(倾我所有了)(100分)

  • 主题发起人 主题发起人 erictim
  • 开始时间 开始时间
E

erictim

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在做一个程序分别要用到两种不同的纸张,一种是自定义192mm X 140mm;
另一种是一般的窄行打印纸,其中第一种情况用得比较多,我这样写的:
procedure PrinterData;

var
f:TextFile;

begin

Assignprn(f);

Rewrite(f);

Printer.Canvas.Font.size := 10;

writeln(f,'');

writeln(f,'');

writeln(f,'');

Printer.Canvas.Font.size := 12;

writeln(f,TableT3.AsString);

writeln(f,TableT1.AsString);

writeln(f,tableT5.asstring+);

writeln(f,'');

writeln(f,'工费'+ tablegong.AsString
+ '费用1'+ tablefee1.AsString+ '费用2'+tablefee2.AsString);

writeln(f,'');

writeln(f,'合计费用'+table_oper_tmptotal+FloatToStr+'元');

writeln(f,'');

System.Close(f);

end;



现将打印机的默认纸张设为192 X 140 mm打印时没有问题。
第二种任务使用QR来完成打印,因为要使用窄行打印纸,所以将其纸张改为标准的
8.5inch X 11 inch,也可以打印。
问题是:在使用了第二中任务后,在用第一种打印,却无法达到自定义纸张的格式,
总是超过打印的范围(即纸张的高度大于140mm)
请问:是否可以在上面的程序中修改打印机的纸张成默认的自定义纸张?
 
可以设置的。
好象用PRINTER单元设置纸张等高度和宽度是用PIXEL,你可以使用GETDEVICECAPS
取得打印设备的分辨率。,再来实行打印
 
var
ADevice, ADriver, APort: array[0..255] of Char;
DeviceHandle: THandle;
DevMode: PDeviceMode;
begin

//初始化打印机
Printer.GetPrinter(ADevice, ADriver, APort, DeviceHandle);
if DeviceHandle = 0 then

begin

Printer.PrinterIndex := Printer.PrinterIndex;
Printer.GetPrinter(ADevice, ADriver, APort, DeviceHandle);
end;

if DeviceHandle = 0 then

Raise Exception.Create('不能初始化打印机!')
else

DevMode := GlobalLock(DeviceHandle);
if DeviceHandle <> 0 then

begin

GlobalUnLock(DeviceHandle);
with DevMode^do

begin

dmFields := dmFields or DM_PAPERSIZE;
dmPaperSize := DMPAPER_A3;
//设置打印机默认纸张
{ dmPaperSize := DMPAPER_USER;
//设置自定义打印纸张
dmPaperWidth := 3400;
dmPaperLength := 2400;
}
Printer.SetPrinter(ADevice, ADriver, APort, DeviceHandle);
end;

end;

 
To sachow:你说的 dmPaperWidth是一什么为单位的啊?是不是以mm?另外,
如果我定义了多种自定义的纸张,都可以这样设定吗?
还有,这样设好后,就可以使用我在上面所写的方式打印了吗?
谢谢
 
而且,我试了一下,好象没什么效果,它还是与系统打印机中舌定有关
 
多人接受答案了。
 
后退
顶部