自己摸索一下

  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报表的打印偏移的更多相关文章

  1. RM报表 实际打印的判断

    procedure TFormDZMD.RMReport1PrintReportEvent(Sender: TObject); begin // Log('RMReport1PrintReportEv ...

  2. 关于Web报表FineReport打印的开发应用案例

    报表打印是报表使用和开发过程中经常碰到的问题,这里汇总了关于Web报表开发打印功能的一些典型应用案例,以应用最广泛的FineReport为例. 案例一:java直接调用报表打印 当java后台定义定时 ...

  3. 吉特仓储管系统(开源WMS)--Web在线报表以及打印模板分享

    很早之前就想写这篇文章与大家分享一下自己在吉特仓储管理系统中开发打印和报表的功能,在GitHub(https://github.com/hechenqingyuan/gitwms)上公开下载的代码中很 ...

  4. php部分:网页中报表的打印,并用CSS样式控制打印的部分;

    网页中报表的打印,是通过调用window对象中的print()方法实现打印功能的: 调用浏览器本身的打印功能实现打印 <a href="#" onclick="wi ...

  5. ASP环境下轻松实现报表的打印 (转)

    作者:zcg2000 一.前言 ASP在电子商务上应用广泛,报表的处理又有一些麻烦.本文介绍了在ASP中利用 本人写的Report Server Page脚本解释器实现报表的显示.打印. 二.准备工作 ...

  6. .NET下Excel报表的打印

    说明:这是一个实验的小例子,在实际项目中使用时,一般Object[,] 对象的数据来源于数据库. 1. 实验环境 开发平台:Visual Studio 2010 测试模板:JBtest Excel:O ...

  7. Jmeter_打印当前时间戳&打印偏移时间戳

    Jmeter中提供了一种函数,可以打印时间戳,如下图 年: yyyy 月:MM 日:dd 时: HH 分: mm 秒:ss 关于时间戳的格式,可以自由组合定义,这里我写成这样 yyyy-MM-dd H ...

  8. 大数据量报表APPLET打印分页传输方案

     1 . 问题概述 当报表运算完成时,客户端经常需要调用润乾自带的runqianReport4Applet.jar来完成打印操作, 然而数据量比较大的时候,会导致无法加载完成,直至applet内存 ...

  9. 润乾V4报表批量打印

     背景说明 在应用中,经常遇到,批量打印的需求,批量打印,顾名思义,就是点击一次打印按钮,能打印多张报表. 下面,我们来介绍一下怎么样实现批量打印的 应用举例: Jsp代码 <% //rep ...

随机推荐

  1. Eclipse用Tomcat插件部署Java Web项目

    Eclipse版本3.7.2,Tomcat插件是3.3 详细步骤如下: 1.下载tomcatPlugin插件 tomcatPlugin下载地址http://download.csdn.net/deta ...

  2. 转:copy initialization

    转自: http://en.cppreference.com/w/cpp/language/copy_initialization copy initialization   C++   C++ la ...

  3. 搭建一个简单的Struts2框架

    1  创建一个web项目. 2 导入必要的JAR文件. 放在WEB-INF下lib包里. 3 添加web.xml配置,添加启动配置. <?xml version="1.0" ...

  4. 最大堆的插入/删除/调整/排序操作(图解+程序)(JAVA)

    堆有最大堆和最小堆之分,最大堆就是每个节点的值都>=其左右孩子(如果有的话)值的完全二叉树.最小堆便是每个节点的值都<=其左右孩子值的完全二叉树. 设有n个元素的序列{k1,k2,..., ...

  5. SqlServer_事务

    事务处理是在数据处理时经常遇到的问题,经常用到的方法有以下三种总结整理如下:方法1:直接写入到sql 中在存储过程中使用 BEGIN TRANS, COMMIT TRANS, ROLLBACK TRA ...

  6. fedora 关闭、禁止selinux

    Fedora关闭/禁用SELinux三种方法 在Fedora中有时候我们想关闭SELinux,因为有时候本是合法的操作也总是弹出窗口阻止我们的操作.下面介绍三种方法来关闭/禁用SELinux. 1.在 ...

  7. hiho1091_clicker背包问题

    问题 类似有限背包问题,题目链接:clicker 实现 #include<stdio.h> #include<cmath> #include<iostream> # ...

  8. Structs1 -配置例子(转)

    转自:(http://blog.csdn.net/xys_777/article/details/7542095) Action, ActionForm, ActionForward ,这三个对象构成 ...

  9. Windows7睡眠后自动唤醒

    笔者的电脑(Windows7 64位旗舰版)睡眠后,隔段时间后会自动唤醒.经两项配置后,解决了该问题. 1 禁用唤醒定时器 控制面板里进入"电源选项""更改计划设置&qu ...

  10. UIStepper

    @在IOS5中增加了一个UIStepper的新控件,UIStepper可以连续增加或减少一个数值.控件的外观是两个水平并排的按钮构成,一个显示为“+”,一个显示为“-”. 1. 初始化控件 UISte ...