各位高手好:Quick Report4.如何解决2000/xp中的纸张自定义问题??? ( 积分: 100 )

  • 主题发起人 主题发起人 zmhzj
  • 开始时间 开始时间
Z

zmhzj

Unregistered / Unconfirmed
GUEST, unregistred user!
用Quick Report4.如何解决2000/xp中的纸张自定义问题,我用的打印机是LQ1600KIII,打印机也设置了自定义纸张的格式253mm*485mm。但是走纸还是A4,而且是把我报表中的数据都缩小在A4纸的范围内.我必须得用QR,检索了原来,看着答案都不太满意
 
用Quick Report4.如何解决2000/xp中的纸张自定义问题,我用的打印机是LQ1600KIII,打印机也设置了自定义纸张的格式253mm*485mm。但是走纸还是A4,而且是把我报表中的数据都缩小在A4纸的范围内.我必须得用QR,检索了原来,看着答案都不太满意
 
用以下函数创建一个自定义纸张(对win98无效),然后纸张类型选择成formname就行了,别忘了use winspool
procedure PrnAddForm(const FormName: string;
PaperWidth, PaperLength:integer;const leftmargin:integer=0;const rightmargin:integer=0;const topmargin:integer=0;const bottommargin:integer=0);
var
PrintDevice, PrintDriver, PrintPort : array[0..255] of Char;
hDMode : THandle;
hPrinter: THandle;
FormInfo: TFormInfo1;
PaperSize: TSize;
PaperRect: TRect;
errcode: integer;
s: string;
begin
Printer.GetPrinter(PrintDevice, PrintDriver, PrintPort, hDMode);
OpenPrinter(PrintDevice, hPrinter, nil);
if hPrinter = 0 then
raise Exception.Create('Failed to open printer!');
FormInfo.Flags := FORM_USER;
FormInfo.pName := PChar(FormName);
PaperSize.cx := PaperWidth*1000;
PaperSize.cy := PaperLength*1000;
PaperRect.Left := 0;
PaperRect.Top := 0;
PaperRect.Right := paperwidth*1000;
PaperRect.Bottom :=paperlength*1000;
paperrect.TopLeft.X :=leftmargin*1000;
paperrect.topleft.y:=topmargin*1000;
paperrect.BottomRight.X :=paperwidth*1000-rightmargin*1000;
paperrect.BottomRight.y:=paperlength*1000-bottommargin*1000;
FormInfo.Size := PaperSize;
FormInfo.ImageableArea := PaperRect;
if not AddForm(hPrinter, 1, @FormInfo) then
begin
errcode := GetLastError;
if errcode <> ERROR_FILE_EXISTS then
// Form name exists?
begin
case errcode of
ERROR_ACCESS_DENIED: s := '拒绝操作!';
ERROR_INVALID_HANDLE: s := '无郊的打印机!';
ERROR_NOT_READY: s := '打印机未准备好!';
ERROR_CALL_NOT_IMPLEMENTED:
s := '操作系统不支持此项添加自定义纸张的功能!';
else
s := 'Failed to add a Form (paper) name!';
end;
raise Exception.Create(s);
end;
end;
ClosePrinter(hPrinter);
end;
 
你好,7030的朋友,首先要非常的谢谢你,我想问一下,输入的参数是以什么为单位?
 
再就是现在在线不?我的Q是35623143,我想再继续请教一下!
 
单位是毫米,这个你自己试一下就知道了
PrnAddForm('abc',222,222,6,6,6,6);
 
你好,谢谢,这个我知道了。我再想问一下,如何和我的QuickRep结合起来,这样只是能设置一个自定义纸张。我的工具:delphi5+2000pro,quickRep中的纸张选择中的纸张类型只是预定好的那几种。
 

Similar threads

后退
顶部