Z
zzh0918
Unregistered / Unconfirmed
GUEST, unregistred user!
使用delphi 提供的quickreport 控件进行打印时,对于自定义纸张的走纸问题始终没有得到解决
这个问题在最近本人也遇到。通过对quickrep 源程序进行分析和跟踪。发现导致不能正确走纸的
主要原因在于qrprntr.pas程序中第2073行开始的以下程序段。该段程序是实现自定义纸张的。在
windows 2000下 自定义纸张需要将DevMode中的字段dm_papersize的值设为0。另外通过跟踪发现
Supported(dm_paperlength),Supported(dm_PaperWidth)的值始终为假。也就是说,设置自定义
纸张长度的语句 DevMode^.dmPaperLength := PaperLength;和设置纸张宽度的语句
DevMode^.dmPaperWidth := PaperWidth;没有执行。这就是不能正确走纸的根本原因。只需将如下
语句
if PaperSize = Custom then
begin
if Supported(dm_paperlength) then
begin
SetField(dm_paperlength);
DevMode^.dmPaperLength := PaperLength;
end;
if Supported(dm_PaperWidth) then
begin
SetField(dm_paperwidth);
DevMode^.dmPaperWidth := PaperWidth;
end
end;
改为
if PaperSize = Custom then
begin
SetField(dm_papersize);
DevMode^.dmPapersize := 0;
// if Supported(dm_paperlength) then
不作判断
begin
SetField(dm_paperlength);
DevMode^.dmPaperLength := PaperLength;
end;
// if Supported(dm_PaperWidth) then
不作判断
begin
SetField(dm_paperwidth);
DevMode^.dmPaperWidth := PaperWidth;
end
end;
然后将该程序对应的dcu 删除,将qrprntr重新编译成dcu 即可。
注意:如果编译时提示qr版本问题,请删除所有qr*.dcu 然后重新编译。
赶快享受吧!!!!!!!!!!
这个问题在最近本人也遇到。通过对quickrep 源程序进行分析和跟踪。发现导致不能正确走纸的
主要原因在于qrprntr.pas程序中第2073行开始的以下程序段。该段程序是实现自定义纸张的。在
windows 2000下 自定义纸张需要将DevMode中的字段dm_papersize的值设为0。另外通过跟踪发现
Supported(dm_paperlength),Supported(dm_PaperWidth)的值始终为假。也就是说,设置自定义
纸张长度的语句 DevMode^.dmPaperLength := PaperLength;和设置纸张宽度的语句
DevMode^.dmPaperWidth := PaperWidth;没有执行。这就是不能正确走纸的根本原因。只需将如下
语句
if PaperSize = Custom then
begin
if Supported(dm_paperlength) then
begin
SetField(dm_paperlength);
DevMode^.dmPaperLength := PaperLength;
end;
if Supported(dm_PaperWidth) then
begin
SetField(dm_paperwidth);
DevMode^.dmPaperWidth := PaperWidth;
end
end;
改为
if PaperSize = Custom then
begin
SetField(dm_papersize);
DevMode^.dmPapersize := 0;
// if Supported(dm_paperlength) then
不作判断
begin
SetField(dm_paperlength);
DevMode^.dmPaperLength := PaperLength;
end;
// if Supported(dm_PaperWidth) then
不作判断
begin
SetField(dm_paperwidth);
DevMode^.dmPaperWidth := PaperWidth;
end
end;
然后将该程序对应的dcu 删除,将qrprntr重新编译成dcu 即可。
注意:如果编译时提示qr版本问题,请删除所有qr*.dcu 然后重新编译。
赶快享受吧!!!!!!!!!!