老问题:设置打印纸的大小(200分)

  • 主题发起人 主题发起人 Aland
  • 开始时间 开始时间
A

Aland

Unregistered / Unconfirmed
GUEST, unregistred user!
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;


procedure anewprint(theline,thepage:Integer);
var
oldy,oldx:integer;
begin

with Printerdo

begin

...
oldy:=pageheight;
oldx:=pagewidth;
SetPaperSize(pagewidth,pageheight);
...
end;

end;


我的问题是:
经过调用SetPagerSize()后,pagewidth,pageheight的值变小了。
这个SetPagerSize()过程有什么问题吗?(我想保留原值,另设纸张大小
打印,最后再恢复原值。)应该如何实现?

我用的是LQ1600K针打。
 
如果改变后的PageWidth和PageHeight是你想要的值,
那么把程序改一下:
...
SetPaperSize(pagewidth,pageheight);
SetPaperSize(oldx,oldy);
...
 
我在用這個函數時,還是不行.
我是在Quickrep1.Preview前調用的,雖然還是不能用,但跟沒有調用時比,還是有點差異.
 
先将LQ1600K的纸张大小设为自定义
 
请问原作者:
StrAlloc()的作用是什么?
cchDeviceName为何值,作用是什么?
GlobalLock(HDMode)的作用及用意是什么?
 
先将LQ1600K的纸张大小设为自定义
 
多人接受答案了。
 
后退
顶部