如何在程序里自顶义纸张?(50分)

  • 主题发起人 主题发起人 HEPAM
  • 开始时间 开始时间
H

HEPAM

Unregistered / Unconfirmed
GUEST, unregistred user!
利用TPrinter的SetPrinter函数, 对dmPageSize, dmPageWidth,
dmPageHeight等进行设置,自定义纸张在NT/95下不能用,请教
各位提供解决之道!
 
可以取设备描述信息,定义如下:

typedef struct _devicemode {
...
short dmPaperSize;

short dmPaperLength;

short dmPaperWidth;

...
}

这个问题我曾经解决过,可以肯定

如果需要详细的代码,写信给我。
 
请在控制面版中将打印机纸张设为自定义,试试看,应该没问题
 
WINDOWS NT下控制面版中可以将打印机纸张设为自定义?我没有找到?
很想知道李颖的解决知道!
 
用Getprinter取出DevMode结构的句柄,改写Paper Size等参数后,
再用SetPrinter设置即可.
 
yjzhang, 我原先就是采用你的方法,但是无效,不知你是否运用过?
烦你给我一个例子
 
procedure ChangePageHeight(value:do
uble);
// value in CM
var
sDrv: Pchar;
sPrt: Pchar;
DevAdr: THandle;
p: PDeviceModeA;
begin

sdrv := allocmem(256);
sprt := allocmem(64);
devadr := 0;
try
printer.GetPrinter(sdrv, sdrv, sprt, devadr);
p := ptr(devadr);
p^.dmFields := DM_PAGESIZE or DM_PAPERLENGTH;
p^.dmPageSize := 0;
// 自定义类型
p^.dmPaperLength := ceil(value * 100);
do
cumentProperties(0, printer.handle, sdrv, p^, p^,
DM_IN_BUFFER);
finally
freemem(sdrv, 256);
freemem(sprt, 64);
end;

end;



 
这段代码绝对可用。单位是0.1mm
procedure SetPaperSize(X, Y: Integer);
var
Device, Driver, Port: PChar;
HDMode: THandle;
PDMode: PDevMode;
begin

Device := StrAlloc(cchDeviceName);
Driver := StrAlloc(MAX_PATH);
Port := StrAlloc(32);
try
Printer.PrinterIndex := Printer.PrinterIndex;
Printer.GetPrinter(Device, Driver, Port, HDMode);
if HDMode <> 0 then
begin

PDMode := GlobalLock(HDMode);
if PDMode <> nil then
begin

with PDMode^do
begin

dmPaperSize := 256;
// ---
dmPaperWidth := X;
dmPaperLength := Y;
dmFields := dmFields or DM_PAPERSIZE or DM_PAPERWIDTH or DM_PAPERLENGTH;
GlobalUnlock(HDMode);
end;

Printer.PrinterIndex := Printer.PrinterIndex;
end;

end;

finally
StrDispose(Device);
StrDispose(Driver);
StrDispose(Port);
end;

end;


 
自定义纸张与打印驱动程序有关,若你的打印驱动程序不支持自定义纸张,
设置了也没有用。
 
barton,another_eYes的答案在WIN95下可行,但在NT4.0下不起作用?
在NT的Control Panel中打印机无自定义纸张,如何实现?
 
也告诉我一声
 
NT必须在打印机的属性设置中自定义一个打印机纸张大小,但不能超过打印机驱动程
序所能接受的最大尺寸,注意:不是该打印机本身的属性,而是整个打印管理的属性(在没有选中任何打印机时选择 文件->服务器属性)。
 
也告诉我一声
 
在NT的打印机中不用设纸张类型就没问题。
 
多人接受答案了。
 

Similar threads

后退
顶部