fastreport2.41 (laotian修改的) 打印预览问题? 预览页面大小与设计页面大小不一样?(高分)(200分)

  • 主题发起人 主题发起人 chinausa
  • 开始时间 开始时间
C

chinausa

Unregistered / Unconfirmed
GUEST, unregistred user!
预览页面大小与设计页面大小不一样?
在开发用的计算机上运行,是非常好的,页面大小保持一致,没有问题。
可是一旦在另外的计算机上运行,页面大小就不一致了!(比如:我设
计时用“自定义”纸类型,可在运行时却为本机的默认纸类型 A4 ,无法
完整预览,部分内容超出纸外,也影响打印)
不知纸张大小如何控制?
(一旦解决可以在加分)
 
.
.
.
frReport1.onBeforePrint:=frReport1BeforePrint;
.
.
.
procedure xxx.frReport1BeforePrint;
var page:tfrPage;
begin
Page := frReport1.Pages[0];
Page.width= xxx ;
page.Height= xxx ;
//或者page.size= integer;integer是打印纸型列表的ID
end;
 
To ht99:
你说的方法刚刚我试了,不行!
 
你的用户机器是什么系统?nt/2000?
 
我想到了一个现象:frReport的打印精度不太好控制,它在设计时用的像素点,
而且它的点距是0.277777777777毫米,不是0.26458,昨天我在调试套打发票时,
因为为个原因,用掉我四个小时
 
to ht99:
谢谢你的答复!我用的是:win2000编程,正常。win98下试用报表功能,不行!
 
可以和你用OICQ吗?我的是49663232
在Win2000下可以把自定义纸张命名,但在98下没有这个功能,如果你使用自己命名的纸张大小,
在98下没有相同的纸张,就取默认大小了。
你可以尝试在程序中把frDesigner加入,到用户机上做一下设计,看看是不是这样。
在fr_Class中frPage.Create中调用
procedure TfrPage.ChangePaper(ASize, AWidth, AHeight, ABin: Integer;
AOr: TPrinterOrientation);
begin
try
Prn.SetPrinterInfo(ASize, AWidth, AHeight, ABin, AOr, False);
Prn.FillPrnInfo(PrnInfo);
except
on exceptiondo
begin
Prn.SetPrinterInfo($100, AWidth, AHeight, -1, AOr, False);
Prn.FillPrnInfo(PrnInfo);
end;
end;
pgSize := Prn.PaperSize;
pgWidth := Prn.PaperWidth;
pgHeight := Prn.PaperHeight;
pgOr := Prn.Orientation;
if (ABin and $FFFF) <> $FFFF then
pgBin := Prn.Bin else
pgBin := $FFFF;
end;

procedure TfrPrinter.SetPrinterInfo(pgSize, pgWidth, pgHeight, pgBin: Integer;
pgOr: TPrinterOrientation;
SetImmediately: Boolean);
begin
if FPrinter.Printing then
Exit;
if not SetImmediately then
if IsEqual(pgSize, pgWidth, pgHeight, pgBin, pgOr) then
Exit;
PaperSize := pgSize;
PaperWidth := pgWidth;
PaperHeight := pgHeight;
Orientation := pgOr;
Bin := pgBin;
SetSettings;
end;

相关的函数:
procedure TfrPrinter.SetSettings;
var
i, n: Integer;
begin
if FPrinterIndex = FDefaultPrinter then
begin
FPaperNames.Clear;
for i := 0 to PAPERCOUNT - 1do
begin
FPaperNames.Add(PaperInfo.Name);
PaperSizes := PaperInfo.Typ;
if (PaperSize <> $100) and (PaperSize = PaperInfo.Typ) then
begin
PaperWidth := PaperInfo.X;
PaperHeight := PaperInfo.Y;
if Orientation = poLandscape then
begin
n := PaperWidth;
PaperWidth := PaperHeight;
PaperHeight := n;
end;
end;
end;
PaperSizesNum := PAPERCOUNT;
Exit;
end;

FPrinter.GetPrinter(FDevice, FDriver, FPort, FDeviceMode);
try
FMode := GlobalLock(FDeviceMode);
if PaperSize = $100 then
begin
FMode.dmFields := FMode.dmFields or DM_PAPERLENGTH or DM_PAPERWIDTH;
FMode.dmPaperLength := PaperHeight;
FMode.dmPaperWidth := PaperWidth;
end;

if (FMode.dmFields and DM_PAPERSIZE) <> 0 then
FMode.dmPaperSize := PaperSize;
if (FMode.dmFields and DM_ORIENTATION) <> 0 then
if Orientation = poPortrait then
FMode.dmOrientation := DMORIENT_PORTRAIT else
FMode.dmOrientation := DMORIENT_LANDSCAPE;
if (FMode.dmFields and DM_COPIES) <> 0 then
FMode.dmCopies := 1;
if ((FMode.dmFields and DM_DEFAULTSOURCE) <> 0) and ((Bin and $FFFF) <> $FFFF) then
FMode.dmDefaultSource := Bin;
FPrinter.SetPrinter(FDevice, FDriver, FPort, FDeviceMode);
finally
GlobalUnlock(FDeviceMode);
end;
GetSettings;
end;
祝你好运!
 
这应该不是FR241C的问题,关于自定义纸张,我试了一下,又查了一下资料,
得出以下结论:
1、WINNT40不支持自定义纸张功能,它会把你自定义的纸张设为NT中设定的大小。
2、Win98、95一般情况下可以,但还和具体的打印机有关。
3、Win2000,不知道,to ht99:Win2000下可以把自定义纸张命名?那在报表中如何利用?
在FR240的文档中有如下注解:
Note Not all printer drivers or printers support custom paper sizes,
(for example, printer driver “HP LaserJet 6L”do
es not support page
dimensions less than 76 * 127 mm;
printer driver “HP LaserJet 4L”do
es not
support a custom size page at all).
to chinausa:建议你到98中定义纸张,在nt2000中试一下。
 
我用的是 win2000+Delphi5.0 上开发,
在win98下测试,打印机为LQ1600K3, 一样出现以上问题,甚至使用A3纸都出现以上问题!

 
to chinausa: 我和你用的一样的软件,出了一样的问题,应该是自定义打印机纸张就
能解决!
 
to 旧雨:
如何用程序代码解决“自定义打印机纸张“问题?总不可能叫用户自己去设置打印机吧!
发源代码给我,好吗?
 
ht99那段程序就行,你试试吧.加到beforeprint里面,记着再加上一点在afterprint
里把设置再改回来。
 
to 旧雨:
把你具体调试的例子发给我好吗?
e-mail: chinausa@163.net
 
有谁知道 laotian的网址(下载fastreport241中文版的地方)
 
To zl:
tian.yeah.net
tian@zjmail.net
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部