如何自定义打印的纸张?(20分)

  • 主题发起人 主题发起人 dana
  • 开始时间 开始时间
D

dana

Unregistered / Unconfirmed
GUEST, unregistred user!
我定义了custom size,可是纸一放进去,就自动走纸,走出来了,没法打印,这是为什么?
 
www.pcjingning.com看看去。大哥
 
大家快来帮帮忙!
 
procedure TForm1.SetPaperSize(X, Y: Integer);
// 这段代码绝对可用。单位是0.1mm
// A4时 Printer.Pagewidth:=1440; A5时 Printer.Pagewidth:=1049;
// B5时 Printer.Pagewidth:=1290; 16K时 Printer.Pagewidth:=1035;
// lq1600宽行打印机这个值宽度最大为42cm左右, 长度大约2m。
//改变devicemode结构
var
Device: array[0..255] of char;
Driver: array[0..255] of char;
Port: array[0..255] of char;
hDMode: THandle;
PDMode: PDEVMODE;
begin
Printer.PrinterIndex := Printer.PrinterIndex;
Printer.GetPrinter(Device, Driver, Port, hDMode);
if hDMode <> 0 then
begin
pDMode := GlobalLock(hDMode);
if pDMode <> nil then
begin
if (x = 0) or (y = 0) then
begin
{Set to legal}
pDMode^.dmFields := pDMode^.dmFields or dm_PaperSize;
{pDMode^.dmPaperSize := DMPAPER_LEGAL;
changed by wulianmin}
pDMode^.dmPaperSize := DMPAPER_FANFOLD_US;
end
else
begin
{Set to custom size}
pDMode^.dmFields := pDMode^.dmFields or
DM_PAPERSIZE or
DM_PAPERWIDTH or
DM_PAPERLENGTH or DM_SCALE;
pDMode^.dmPaperSize := DMPAPER_USER;
pDMode^.dmScale :=1;
pDMode^.dmPaperWidth := x {SomeValueInTenthsOfAMillimeter};
pDMode^.dmPaperLength := y {SomeValueInTenthsOfAMillimeter};
end;
{Set the bin to use}
pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL;
pDMode^.dmDefaultSource := DMBIN_MANUAL;
GlobalUnlock(hDMode);
end;
end;
Printer.PrinterIndex := Printer.PrinterIndex;
//以下开始打印
end;
 
to Nizvoo:怎么在我的论坛中看不到你呢?对了,新版出来了,要不要试试?
 
可以我就去报到
 
简单好用。
procedure printer_set(aLength,aWidth :Integer);
var
Device:Array[0..256] of Char;
Driver:Array[0..256] of Char;
Port:Array[0..32] of Char;
hDMode:THandle;
pDMode:PDevMode;
begin
Printer.GetPrinter(Device,Driver,Port,hDMode);
if hDMode<>0 then
pDMode:=GLobalLock(hDMode);
if pDMode<>nil then
begin
pDMode^.dmPaperSize:=256;
pDMode^.dmPaperLength:=aLength;//长
pDMode^.dmPaperWidth:=aWidth;//宽
pDMode^.dmFields:=pDMode^.dmFields or DM_PAPERSIZE;
pDMode^.dmFields:=pDMode^.dmFields or DM_PAPERLENGTH;
pDMode^.dmFields:=pDMode^.dmFields or DM_PAPERWIDTH;
end;
ResetDC(Printer.Handle,pDMode^);
GLobalUnLock(hDMode);
end;
 
在quickreport上点右键,点属性,在表单的最上面,可以设置了,最好在控制面板的打印机
一栏,也设一下。
 
用TQuickRep?还是TPrinter or API函数实现呢?
 
无论我怎么设都无法控制走纸。DFW上的方法也都试了,我的打印机还是一直走完整张纸出来,
如何才能让它不走纸,
我用的是panasonic PK-1121打印机,有关系吗?
 
你要想完全控制打印机,只能使用打印机的指令来打印了。
我以前作过的边采集数据,边打印曲线就是利用针式打印机的控制指令来实现的。想打印
2米长的曲线都没有问题。
具体的控制指令只能参考打印机的说明书。
 
用指令如何写?
 
FR报表和控制面板的打印机属性中都必须把自定义纸张设为默认值!~
 
多人接受答案了。
 
后退
顶部