`
宋科明
  • 浏览: 101580 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

FastReport帮助

阅读更多

1、FastReport如何打印表格式的空行?
var 
  PageLine: integer;       //在現在頁列印到第幾行 
  PageMaxRow: integer=15;  //設定每頁列數
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin 
  PageLine := <Line> mod PageMaxRow; 
  if (PageLine = 1) and (<line> > 1) then   
    Engine.newpage;
  child1.visible := False;
end;
//Footer1高度設為0
procedure Footer1OnBeforePrint(Sender: TfrxComponent);

var 
  i: integer;
begin 
  i := iif(PageLine=0, PageMaxRow, PageLine); 
  child1.visible := True;
  while i < PageMaxRow do
  begin   
    i := i + 1;
   Engine.ShowBand(Child1);  //印空白表格
  end;
  child1.visible := False;
end;
begin
end.
2\FastReport自整理技巧
http://www.delphibbs.com/keylife/iblog_show.asp?xid=22483

3\Delphi中用FastReport制作报表
http://www.delphibbs.com/keylife/iblog_show.asp?xid=22375

此为转贴:
[FORMATDATETIME(‘mm-dd‘, [IBqryShipDate."CLOSEDATE"])]
[FORMATDATETIME(‘mm/dd/yy‘, [IbqryOrderForm."ORDERDATE"])]
金额总计:[FORMATFLOAT(‘#########0.00‘, [TotalAmount])]
订单数量:[COUNT(band1)]
数量合计:[SUM([IBqryShipDate."QUANTITY"])]
婚否:[IF([IbqryPersonal."ISMARRIAGED"]=1, ‘是‘, ‘否‘)]
[IF([qryData."CLOSEDATE"]=0,‘‘,[FORMATDATETIME(‘mm-dd-yy‘, [qryData."CLOSEDATE"])])]

[IF([qryPrint."CURDATE"]=0,‘‘,[FORMATDATETIME(‘mm-dd‘,[qryPrint."CURDATE"])])]
[IF([qryPrint."STYPE"]=‘0‘, [Ban], [Huo])]

if Length(Trim([MainADOQuery."工序名称"])) mod 35 =0 then
begin
bMData.height := 20 * INT(Length(Trim([MainADOQuery."工序名称"]))/35);
Memo39.Height := 20 * INT(LENGTH(TRIM([MainADOQuery."工序名称"]))/35);
end
else begin
bMData.height := 20 * (INT(Length(Trim([MainADOQuery."工序名称"]))/35)+1);
Memo39.Height := 20 * (INT(LENGTH(TRIM([MainADOQuery."工序名称"]))/35)+1);
end


Fast Report 问题集

nxyc_twz@163.com

---------------- 使用自定义函数 ----------------------------------------

Q: 我怎样添加我的自定义函数?
A: 使用 TfrReport.OnUserFunction 事件. 这里有一个简单的例子:

procedure TForm1.frReport1UserFunction(const Name: String;
p1, p2, p3: Variant; var val: Variant);
begin
if AnsiCompareText(‘SUMTOSTR‘, Name) = 0 then
val := My_Convertion_Routine(frParser.Calc(p1));
end;

然后,你就可以在报表(任何表达式或脚本)的任何地方使用 SumToStr 函数了。


Q: 但是它仅仅能工作在一个TfrReport组件中。可我想在任何地方(在所有的TfrReport组件中)使用的我的自定义函数?
A: 使 OnUserFunction event 句柄作为所有组件的公用句柄。如果你不能做到这一点,你需要创建函数库:

type
TMyFunctionLibrary = class(TfrFunctionLibrary)
public
constructor Create; override;
procedure DoFunction(FNo: Integer; p1, p2, p3: Variant;
var val: Variant); override;
end;

constructor TMyFunctionLibrary.Create;
begin
inherited Create;
with List do
begin
Add(‘DATETOSTR‘);
Add(‘SUMTOSTR‘);
end;
end;

procedure TMyFunctionLibrary.DoFunction(FNo: Integer; p1, p2, p3: Variant;
var val: Variant);
begin
val := 0;
case FNo of
0: val := My_DateConvertion_Routine(frParser.Calc(p1));
1: val := My_SumConvertion_Routine(frParser.Calc(p1));
end;
end;

要注册函数库,调用
frRegisterFunctionLibrary(TMyFunctionLibrary);
要卸载函数库,调用
frUnRegisterFunctionLibrary(TMyFunctionLibrary);


Q: 我怎样将我的函数添加到函数列表中 (用表达式生成器)?
A: 使用 frAddFunctionDesc 过程 (在FR_Class 单元中):

frAddFunctionDesc(FuncLib, ‘SUMTOSTR‘, ‘My functions‘,
‘SUMTOSTR(<Number>)/Converts number to its verbal presentation.‘);

注意: "/" 符号是必须的! 它从它的描述中分隔函数语法。
FuncLib 被声明为你自己的函数库 (如果你不使用函数库可以将其设置为nil). 当函数库未注册时,所有它的函数将自动从函数列表中删除。


---------------- 使用变量 -------------------------------------

Q: 我怎样编程实现填充变量列表(在数据词典中)?

A: 数据词典中的所有变量及分类都被存储在 TfrReport.Dictionary.Variables 中.

with frReport1.Dictionary do
begin
// 创建分类(名称用空白)
Variables[‘ New category‘] := ‘‘;
// 创建变量
Variables[‘New Variable‘] := ‘CustomerData.Customers."CustNo"‘;
Variables[‘Another Variable‘] := ‘Page#‘;
end;

Q: 我定义了字符串变量:

with frReport1.Dictionary do
Variables[‘Month‘] := ‘March‘;

但是当我运行报表是,出现了错误,为什么?

A: 因为 FastReport 假定数据词典中的字符串变量值是一个表达式,它需要分析、计算它。
可以使用其它的方法:

with frReport1.Dictionary do
Variables[‘Month‘] := ‘‘‘‘ + ‘March‘ + ‘‘‘‘;

或者, 使用 frVariables 来传输固定数据到报表。


Q: 我不想在数据词典中显示某些数据集?

A: 使用 TfrReport.Dictionary.DisabledDatasets:

with frReport1.Dictionary do
begin
// 关闭该数据集
DisabledDatasets.Add(‘CustomerData.Bio‘);
// 或者, 关闭整个数据模块/窗体
DisabledDatasets.Add(‘CustomerData*‘);
end;


Q: 我怎样将数据传送到报表?

A: 有几个方法可以实现它. 第一是使用全局对象 frVariables (在 FR_Class 单元中被定义):

frVariables[‘My variable‘] := 10;

这段代码创建了一个名称为“My variable”,值为 10 的变量。这是最好的传输固定数据的报表的方法。

第二种方法是使用 TfrReport.OnGetValue 事件. 这可以使用这个方法来传送动态数据、记录等。

procedure TForm1.frReport1GetValue(ParName: String; var ParValue: Variant);
begin
if ParName = ‘MyField‘ then
ParValue := Table1MyField.Value;
end;

最后, 第三种方法是通过编程在数据词典中定义变量(可以参考以前的问题):

with frReport1.Dictionary do
begin
Variables[‘MyVariable‘] := ‘CustomerData.Customers."CustNo"‘;
Variables[‘Another Variable‘] := ‘10‘;
end;


Q: 我能在报表和程序间传送数据吗?
A: 使用 frVariables 对象. 如果你在报表的任何对象的脚本中写入以下代码:

MyVariable := 10

那么,在你的程序中,你可以使用以下代码来获取 MyVariable 的值:
v := frVariables[‘MyVariable‘];


---------------- 脚本 (FastReport Pascal) ---------------------------------

Q: Band 中是否可以使用脚本?

A: 当然. 选择 band ,然后按 Ctrl+Enter 或在对象浏览器中选择 "OnBeforePrint" 属性。

Q: 报表页中是否可以使用脚本?

A: 当然. 选择页 (在空白处单击) ,然后在对象浏览器中选择 "OnBeforePrint" 属性。如果该页是一个对话框窗体,那么这个属性就是 "OnActivate".


Q: 我有两个对象: Memo1 和 Memo2. 我能否在 Memo1 的脚本中调用 Memo2 的属性和方法?

A: 当然, 例如,你可以这样做: 对象名.属性名.


Q: 在脚本中,我可以使用对象的哪些属性?

A: 几乎所有你能在对象浏览器中看到的属性。例如,可以使用 Font.Name, Font.Size等来存取字体属性。


---------------- 其它问题 --------------------------------------------

Q: 怎样改变多页报表中某一页的顺序?

A: 拖动页标签到目的位置。


Q: 我想查看所有的字段及变量,我想在报表中使用列表来实现它?

A: 设置 TfrReport.MixVariablesAndDBFields := True.现在,所有的数据字段及变量可在“插入数据字段”对话框中可存取了。


Q: 我不想显示导入选项对话框?

A: 在导入组件(比如,TfrTextExport)中设置所有必需的选项,然后通过设置ShowDialog属性为False来关闭此对话框。


Q: 为什么 TotalPages 变量不起作用? 它总是返回 0.

A: 在你的报表中设置 Two-pass 选项. 要设置它,你需要在报表设计器的“文件”菜单中,打开“报表选项”对话框。


Q: 我用BLOB字段来存储我的报表。当我运行报表设计器时,它显示我的报表未命名?

A: 在运行报表设计器前,这样做:

frReport1.FileName := ‘Name of my report‘;


Q: 我想在重新定义报表设计器中的“打开”及“保存”按钮的功能?


A: 查看 TfrDesigner 组件. 它有几个必需的事件: OnLoadReport 和
OnSaveReport. 这里有一小段代码例子:

procedure TForm1.frDesigner1LoadReport(Report: TfrReport;
var ReportName: String; var Opened: Boolean);
begin
with MyOpenDialog do
begin
Opened := ShowModal = mrOk;
if Opened then
begin
Report.LoadFromBlobField(...);
ReportName := ...;
end;
end;
end;

procedure TForm1.frDesigner1SaveReport(Report: TfrReport;
var ReportName: String; SaveAs: Boolean; var Saved: Boolean);
begin
if SaveAs then
with MySaveDialog do
begin
Saved := ShowModal = mrOk;
if Saved then
begin
Report.SaveToBlobField(...);
ReportName := ...;
end;
end
else
Report.SaveToBlobField(...);
end;


Q: 在 QR 中, 我可以写这样的代码: QRLabel1.Caption := ‘Some text‘. 我可以用FR这样做吗?

A: FR 对象并不是一个组件 (这并不像 QR, RB). 但使用 TfrReport.FindObject 方法可以通过对象名称找到该对象。

var
t: TfrMemoView;
begin
t := TfrMemoView(frReport1.FindObject(‘Memo1‘));
if t <> nil then
t.Memo.Text := ‘FastReport‘;
end;


Q: 我想在用户预览(TfrPreview组件)中自定义热键?

A: 这个组件有个窗口: TForm 属性. 将自定义句柄指定到 Window.OnKeyDown 属性.


Q: Fast Report 2.4 不能装载 FreeReport 2.21 文件?

A: 这仅需要使用16进制数改变报表文件的第一字节,然后在源代码中修改下面的部分。在这些修改之后, 装载报表并保存它. 最后,返回到源代码处.

FR_Class:

function ReadString(Stream: TStream): String;
begin
{ if frVersion >= 23 then}
Result := frReadString(Stream) {else
Result := frReadString22(Stream);}
end;

procedure ReadMemo(Stream: TStream; Memo: TStrings);
begin
{ if frVersion >= 23 then}
frReadMemo(Stream, Memo){ else
frReadMemo22(Stream, Memo);}
end;


FR_Utils:

procedure frReadMemo(Stream: TStream; l: TStrings);
var
s: String;
b: Byte;
n: Word;
begin
l.Clear;
l.Text := frReadString(Stream); exit;
Stream.Read(n, 2);
if n > 0 then
repeat
Stream.Read(n, 2);
SetLength(s, n);
Stream.Read(s[1], n);
l.Add(s);
Stream.Read(b, 1);
until b = 0
else
Stream.Read(b, 1);
end;

function frReadString(Stream: TStream): String;
var
s: String;
n: Integer;
b: Byte;
begin
Stream.Read(n, 4);
SetLength(s, n);
Stream.Read(s[1], n);
if (n > 0) and (s[n] = #$0A) then
SetLength(s, n - 2);
// Stream.Read(b, 1);
Result := s;
end;


Q: 怎样不在打印预览中打印报表?
A: 这里有一段代码:

frReport1.PrepareReport;
frReport1.PrintPreparedReport(‘‘, 1, True, frAll);

frReport1.PrintPreparedReportDlg;


Q: 我想在报表中旋转图片。问题是这张图片是由我的应用程序生成的。是否有方法可以在打印前将这幅图片装载到报表中?

A: 使用 TfrReport.OnBeforePrint 事件:

if View.Name = ‘Picture1‘ then
TfrPictureView(View).Picture.LoadFromFile(...) 或
.Assign 或
.你所想要做的任何事情 


4、fastreport中如何把数据显示为百分比
DisplayFormat属性,其中的Kind你设置成fkNumeric,FormatStr
[<frxDBDataset1."sjl">*100 #n%2.2f]%”。

分享到:
评论

相关推荐

    FastReport帮助文档(PDF\WORD\CHM三种格式)

    PDF格式的FastReport帮助文档通常具有良好的阅读体验,可以方便地打印和离线查阅。这份文档会详细介绍FastReport的各项功能,包括但不限于报表设计界面、组件库、数据源连接、表达式编辑器、预览和导出选项等。PDF...

    fastreport控件帮助与开发文档

    在这个“FastReport控件帮助与开发文档”中,我们将探讨FastReport的核心功能、设计原理以及如何在实际项目中应用。 1. **FastReport简介** - FastReport是一种基于组件的报表解决方案,它允许开发者在应用程序中...

    Fastreport 4-help/FastReport 4 帮助文档

    《FastReport 4 帮助文档》是一个全面介绍FastReport 4及其4.6版本的资源集合,旨在为用户提供详尽的技术支持和指南。FastReport是一款强大的报表设计和开发工具,广泛应用于Windows Forms、ASP.NET、VCL、...

    Fastreport手册

    fastreport快速上手手册 这个也是从别的地方下载的 目 录 入门 5 绪言 6 关于FASTREPORT的说明 6 FASTREPORT的历史 6 创建报表 7 数据 8 参数 8 窗体 9 处理 10 准备报表 10 举例:设计一个简单报表 11 FASTREPORT...

    fastreport2.4中文帮助

    《FastReport 2.4 开发指南中文帮助》是一份详尽的文档,旨在为开发者提供在使用FastReport 2.4过程中所需的关键信息和技术支持。FastReport是一款强大的报表设计和开发工具,广泛应用于.NET Framework环境下的应用...

    FastReport2.5 和 FastReport2.5中文帮助文档

     件来实现快速灵活的报表制作和打印,其中有名的控件是FR-Software & A.Tzyganenko 的FastReport。FastReport提  供了能与DELPHI无缝集成的从设计到打印的完整控件包,提供的设计界面友好灵活,对于开发可让用户...

    FastReport 中文帮助

    在这个“FastReport中文帮助”中,我们主要会探讨FastReport的基本概念、使用方法以及一些高级特性。 1. **基本概念**: - **报表设计界面**:FastReport的报表设计界面类似常见的图形编辑器,用户可以通过拖放...

    FastReport英文帮助文本集合

    FastReport英文帮助文本集合,包括UserManual-en.chm,rogrammerManual-en.chm,EnterpriseEn.chm,DeveloperManual-en.chm等四个文档。

    FastReport4报表工具中文手册

    FastReport4是一款强大的报表设计和生成工具,专为开发者提供高效、灵活的报表解决方案。这款软件支持多种编程环境,如.NET Framework和Delphi,能够帮助程序员轻松地在应用程序中集成复杂的报表功能。以下是对...

    FastReport.NET中文语言包

    标签中的"FastReport"和"FastReport中文"是关键词,它们帮助用户搜索和识别与FastReport.NET中文版本相关的资源。"FastReport"代表了报表开发工具本身,而"FastReport中文"则特指这个中文语言包。 在压缩包内的...

    VS2010+QT+FastReport例子含FastReport安装文件

    在提供的示例中,FastReportExample.zip可能包含了使用VS2010和Qt集成FastReport的代码实例,帮助开发者了解如何在项目中集成和使用FastReport。 FastReport_Activex_4.9.114_Soda_不完全破解.7z这个文件可能是...

    fastreport.dll,fastreport.editor.dll,fastreport,bars.dll合集下载,直接引用即可,本人亲测!!!

    此外,FastReport还提供了丰富的SDK和文档,帮助开发者快速上手和深入学习。 总之,FastReport是一款强大的报表工具,通过合理利用其提供的组件和API,开发者可以构建出高效、美观的报表系统,满足不同业务场景的...

    fastReport教程(demo、官方文档、中文帮助)三合一

    delphi fastReport至今最全的三合一教程,内含fastreport中文教程(doc),FastReport_5_demo例子,fastreport官方文档(chm)。看过之后,基本上就能全部掌握fastreport。

    用FastReport制作二维码

    在IT行业中,生成和处理二维码已经成为一种常见的需求,特别是在移动应用、数据交换和跟踪系统...同时,理解这些文件的作用和FastReport的API能帮助你更好地控制二维码的生成过程,从而提升应用程序的功能和用户体验。

    fastreport asp.net 打印 预览

    在ASP.NET应用中,FastReport能帮助开发者快速创建、展示和打印复杂的数据报告。 一、FastReport的基本概念 1. 报表模板:FastReport允许用户通过可视化的设计器创建报表模板,这些模板包含了数据源、表格、图表、...

    .net fastreport汉语包

    4. 在线帮助文档:配合汉语包,FastReport的在线帮助文档也会同步翻译成中文,提供详尽的使用指南和API参考,便于开发者查阅和学习。 5. 多语言支持:FastReport的多语言特性不仅适用于用户界面,还可以应用于报表...

    FastReport4.10中文帮助手册

    **FastReport 4.10 中文帮助手册详解** FastReport是一款强大的报表设计和打印工具,主要用于.NET Framework和Delphi应用程序。FastReport 4.10版本提供了丰富的功能,包括自定义报告设计、数据源连接、预览和打印...

    fastreport绿色无水印.rar

    描述中的"附demo"意味着这个压缩包包含了演示示例,这些示例可以帮助用户快速理解和学习如何使用FastReport。通过运行这些Demo,用户可以看到FastReport的各种特性如何实际应用,比如如何创建报告模板,如何处理数据...

    FastReport中文教程大全

    本教程大全将深入讲解FastReport的各项功能,帮助用户从初学者到熟练掌握,以下是根据教程内容可能会涵盖的知识点: 1. **安装与设置**:介绍如何下载并安装FastReport,以及在Visual Studio等开发环境中集成...

    FastReport .net 中文详细教程及Demo

    指南将帮助你开始用FastReport创建报表,但它不能告诉你怎样使用其它基本的报表设计器。 如果你不熟悉报表设计器,我们建议你参考QuickReport的帮助系统。QuickReport的指南已经包含在你的Delphi拷贝中。...

Global site tag (gtag.js) - Google Analytics