Qreport的纸张自定义(50分)

  • 主题发起人 主题发起人 xll
  • 开始时间 开始时间
X

xll

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个套打程序,版面是在Qreport中设计的,在Qreport中定义如下:

Qreport的纸张类型为custom,长100mm,宽60mm,

打印时:From1.Qreprot.QRprinter.free;
From1.Qreprot.QRprinter:=nil;
From1.Qreprot.print;

为了自定义纸张类型,在Qreport的beforprint事件中加了下列程序:

setpagesize(60,100);


以下为 setpagesize 的过程

procedusr setpagesize(x,y:integer)
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

pDMode^.dmFields := pDMode^.dmFields or dm_PaperSize;
pDMode^.dmPaperSize := DMPAPER_FANFOLD_US;
end
else

begin

pDMode^.dmFields := pDMode^.dmFields or
DM_PAPERSIZE or
DM_PAPERWIDTH or
DM_PAPERLENGTH;
pDMode^.dmPaperSize := DMPAPER_USER;
pDMode^.dmPaperWidth := x
pDMode^.dmPaperLength := y
end;

GlobalUnlock(hDMode);
end;

end;

Printer.PrinterIndex := Printer.PrinterIndex;

end;


打印时打印机只是动了一下便无任何反应,????


 
在打印机管理器中设置打印机的自定义纸张的大小。
 
你改的是printer的设置,实际输出的是 quickrep.QRPrinter
 
纸张大小不当,及与win95/8不一致时,就是这样。使两者 匹配即可。
 
你有qreport源码吗。有就不要这么麻烦了
 
我同意Pipi,你设错地方了
 
请问有没有qreport的源代码,有的话请发一份到hbzh@email.com.cn,谢谢
 
http://xalion.yeah.net/
 
to xll:
你的问题我撞到过。完全是纸张自定义的BUG。
解决方法:
选(不是自定义)一张大小差不多的纸张,大一点点也不要紧,
QRBand条右边线不显示,控件不放那么靠边就可以了。

你的一大段代码把问题搞复杂了。没有必要。不符合RAD思想。
 
我正为此问题而烦恼,如果你现在已解决,请发个e-mail给我好吗,十分感谢!!
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
688
SUNSTONE的Delphi笔记
S
S
回复
0
查看
683
SUNSTONE的Delphi笔记
S
I
回复
0
查看
844
import
I
I
回复
0
查看
651
import
I
后退
顶部