RM报表的打印偏移
自己摸索一下 RMReport1.SaveReportOptions.AutoLoadSaveSetting := True;
RMReport1.SaveReportOptions.UseRegistry := False;
RMReport1.SaveReportOptions.IniFileName := 'S:\rm.ini';//和每个报表文件一一对应 //下面这行FileName 一定要加,而且在LoadFromFile 前面
//原因是,程序运行,首次执行LoadFromFile,其调用LoadFromStream, 在LoadFromStream的最后部分会调用 FSaveReportOptions.LoadReportSetting(Self, '', False);
这时FFileName的值是'Untitled'。
而LoadFromFile 中在调用LoadFromStream(lStream);后才会设置 文件名。FileName := aFileName;
所以,必须 在 LoadFromFile 前 先设置FileName值。
RMReport1.FileName := 'd:\mydoc\桌面\测试背景图片.rmf';
RMReport1.LoadFromFile('d:\mydoc\桌面\测试背景图片.rmf');
RMReport1.ShowReport;
或者
RMReport1.PrintReport;
这样无论是先预览 再点击工具栏的打印按钮
还是 直接打印 ,最后的打印对话框上,都会显示 过去调试的 打印偏移值。
要把 模版导出到 其他电脑,或者 相同电脑的其他文件夹 内容使用。
只要复制2个文件,*.rm 和 *.ini
:
男 lynu (lynu) ▲▲▲▲▲ -
盒子活跃会员
-- ::
楼: 这个我看过源码,PrepareReport会将PrintOffset归零的.
如果你不动手改rm源码,可以在
reportObj.PrepareReport;
//放在这里才有效
setoffset;
reportObj.PrintPreparedReport
procedure TRMReport.OnTimerPrepareReportEvent(Sender: TObject);
begin
FTimer.Enabled := False;
while FCurPreview = nil do
Application.ProcessMessages; PrepareReport;//这里,好像是线程准备报表
end;
procedure TRMReport.ShowReport;//
var
lSaveThreadFlag: Boolean;
// tmp: DWORD;
begin
if FBusy then Exit; if FTimer = nil then
begin
FTimer := TTimer.Create(nil);
with FTimer do
begin
Enabled := False;
Interval := ;
OnTimer := OnTimerPrepareReportEvent;//
end;
end;
procedure _RestoreReport;
var
i: Integer;
lSaveErrorFlag: Boolean;
lSaveErrorMsg: string;
lStream: TMemoryStream;
lReport: TRMReport;
begin
lSaveErrorFlag := ErrorFlag;
lSaveErrorMsg := ErrorMsg;
try
if Self is TRMCompositeReport then
begin
for i := to TRMCompositeReport(Self).Reports.Count - do
begin
lStream := lReportList[i];
lStream.Position := ;
lReport := TRMReport(TRMCompositeReport(Self).Reports[i]);
if Assigned(lReport.FOnEndDoc) then
lReport.FOnEndDoc(lReport);
lReport.LoadFromStream(lStream);
end;
end
else
begin
lStream := lReportList[];
lStream.Position := ;
LoadFromStream(lStream);//这里 第二次调用
end;
finally
for i := to lReportList.Count - do
begin
TMemoryStream(lReportList[i]).Free;
end;
lReportList.Free;
lReportList := nil;
ErrorFlag := lSaveErrorFlag;
ErrorMsg := lSaveErrorMsg;
end;
end;
TRMReport.PrepareReport 。。。 finally
// if ErrorFlag then
// EndPages.Clear; if (FCurPreview <> nil) then
begin
THackPreview(FCurPreview).EndPrepareReport(Self, FThreadPrepareReport);
end
else if FPreview <> nil then
begin
THackPreview(FPreview).EndPrepareReport(Self, False);
end; FreeProgressForm;
_RestoreReport;
procedure TRMReport.LoadFromStream(aStream: TStream);
var
lPos: Integer;
lStr: string;
begin
ConvertNulls := False;
RMCurReport := Self;
ErrorFlag := False;
ErrorMsg := '';
FDocMode := rmdmDesigning;
Clear;
if aStream.Size < then Exit; lStr := RMReadString(aStream);
if (lStr <> RM_ReportFlagStr + #) and (lStr <> RM_ReportFlagStr1 + #) then
begin
ErrorFlag := True;
ErrorMsg := 'Not ReportMachine Report File!';
Application.MessageBox(PChar(RMLoadStr(SNotRMFFile)), PChar(RMLoadStr(SError)),
mb_Ok + mb_IconError);
Pages.Clear;
Pages.AddReportPage;
Exit;
end; FReportVersion := RMReadWord(aStream);
if FReportVersion > RMCurrentVersion then
begin
Application.MessageBox(PChar(RMLoadStr(SRMFError)), PChar(RMLoadStr(SError)),
mb_Ok + mb_IconError);
Exit;
end; if FReportVersion > then
begin
RMReadWord(aStream); // HVersion
lPos := RMReadInt32(aStream);
end
else
lPos := ; ReportInfo.Title := RMReadString(aStream);
ReportInfo.Author := RMReadString(aStream);
ReportInfo.Company := RMReadString(aStream);
ReportInfo.CopyRight := RMReadString(aStream);
ReportInfo.Comment := RMReadString(aStream);
FColorPrint := RMReadBoolean(aStream);
FmmPrintOffsetTop := RMReadInt32(aStream);
FmmPrintOffsetLeft := RMReadInt32(aStream);
FmmPrintOffsetTop := ;//这里先读取后 又自己清0了
FmmPrintOffsetLeft := ;
FPageCompositeMode := TRMCompositeMode(RMReadByte(aStream));
PrintBackGroundPicture := RMReadBoolean(aStream);
DoublePass := RMReadBoolean(aStream);
PrinterName := RMReadString(aStream);
if FReportVersion >= then
RMReadWideMemo(aStream, FScript)
else
FScript.Text := RMReadAnsiMemo(aStream); if FReportVersion > then
begin
FReportFlags := RMReadWord(aStream);
if FReportVersion >= then
ConvertNulls := RMReadBoolean(aStream); aStream.Position := lPos;
end
else
begin
FReportFlags := ;
AutoSetPageLength := False;
end; try
Pages.LoadFromStream(FReportVersion, aStream);
except
on E: EClassNotFound do
Application.MessageBox(PChar('Opened report contains the following non-plugged components:' +
# + E.Message + 'Use appropriate component from RM component palette'), PChar(RMLoadStr(SError)),
mb_Ok + mb_IconError);
else
end; FSaveReportOptions.LoadReportSetting(Self, '', False);//读取报表文件外的设置
if FReportVersion < then
FPageCompositeMode := rmReportPerReport;
end;
RM报表的打印偏移的更多相关文章
- RM报表 实际打印的判断
procedure TFormDZMD.RMReport1PrintReportEvent(Sender: TObject); begin // Log('RMReport1PrintReportEv ...
- 关于Web报表FineReport打印的开发应用案例
报表打印是报表使用和开发过程中经常碰到的问题,这里汇总了关于Web报表开发打印功能的一些典型应用案例,以应用最广泛的FineReport为例. 案例一:java直接调用报表打印 当java后台定义定时 ...
- 吉特仓储管系统(开源WMS)--Web在线报表以及打印模板分享
很早之前就想写这篇文章与大家分享一下自己在吉特仓储管理系统中开发打印和报表的功能,在GitHub(https://github.com/hechenqingyuan/gitwms)上公开下载的代码中很 ...
- php部分:网页中报表的打印,并用CSS样式控制打印的部分;
网页中报表的打印,是通过调用window对象中的print()方法实现打印功能的: 调用浏览器本身的打印功能实现打印 <a href="#" onclick="wi ...
- ASP环境下轻松实现报表的打印 (转)
作者:zcg2000 一.前言 ASP在电子商务上应用广泛,报表的处理又有一些麻烦.本文介绍了在ASP中利用 本人写的Report Server Page脚本解释器实现报表的显示.打印. 二.准备工作 ...
- .NET下Excel报表的打印
说明:这是一个实验的小例子,在实际项目中使用时,一般Object[,] 对象的数据来源于数据库. 1. 实验环境 开发平台:Visual Studio 2010 测试模板:JBtest Excel:O ...
- Jmeter_打印当前时间戳&打印偏移时间戳
Jmeter中提供了一种函数,可以打印时间戳,如下图 年: yyyy 月:MM 日:dd 时: HH 分: mm 秒:ss 关于时间戳的格式,可以自由组合定义,这里我写成这样 yyyy-MM-dd H ...
- 大数据量报表APPLET打印分页传输方案
1 . 问题概述 当报表运算完成时,客户端经常需要调用润乾自带的runqianReport4Applet.jar来完成打印操作, 然而数据量比较大的时候,会导致无法加载完成,直至applet内存 ...
- 润乾V4报表批量打印
背景说明 在应用中,经常遇到,批量打印的需求,批量打印,顾名思义,就是点击一次打印按钮,能打印多张报表. 下面,我们来介绍一下怎么样实现批量打印的 应用举例: Jsp代码 <% //rep ...
随机推荐
- Java源码初学_AbstractList&AbstractCollection
一.AbstractCollection抽象类:(提供了Collection接口的骨干实现,以减少实现接口所需要的工作) 1.contains方法 contains方法,通过迭代器对于列表的每一个元素 ...
- 如何创建和使用XMLHttpRequest对象?
创建XMLHttpRequest对象,我有以下几种方法,顺带给大家介绍下他们的使用,一起来看看那吧. 1. 第一种,我们可以使用构造函数的方式.直接new的方式,这样我们就构造了这个对象. reque ...
- java 反射机制的实例
[案例1]通过一个对象获得完整的包名和类名 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package Reflect; /** * 通过一个对象获得完整的包名和类名 ...
- 抛弃优启Grub4dos和PE大多数时间可以这样用
在能够进入Windows的情况下,Grub4dos和PE大多数时间可以这样用 http://files.cnblogs.com/files/liuzhaoyzz/boot_moban.rar Grub ...
- 慎用GetOpenFileName
这两天发现了一个小问题,经过一上午的排查终于找到了问题的原因--Windows 7的API函数GetOpenFileName竟然有BUG! 请参考下面的MFC代码: CFileDialog dlg(T ...
- [maven] pom.xml 文件详解
参考资料: http://blog.csdn.net/uohzoaix/article/details/7035307 http://www.cnblogs.com/qq78292959/p/3711 ...
- HTML5自学笔记[ 10 ]简单的购物车拖拽
用html5拖拽功能实现了一个简单的购物车,样式简陋,得学学画画提高下审美了T^T: <!doctype html> <html> <head> <meta ...
- 《精通javascript》几个简单的函数
转载http://www.cnblogs.com/jikey/archive/2011/07/25/2116696.html /** * 隐藏元素 * @param {String} elem */f ...
- think in java 读书笔记 1 ——移位
目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 在Think in Java中 ...
- python获取文件的内容