社区
Delphi
帖子详情
frReport2.5 中设置主项数据后可以选择虚拟数据集并且可以设置显示的记录数,请问大家在程序中怎么用变量设置。
definition
2007-10-09 03:53:34
frReport2.5 中设置主项数据后可以选择虚拟数据集并且可以设置显示的记录数,请问大家在程序中怎么用变量设置。就是怎么写语句实现。先谢谢了。
...全文
47
1
打赏
收藏
frReport2.5 中设置主项数据后可以选择虚拟数据集并且可以设置显示的记录数,请问大家在程序中怎么用变量设置。
frReport2.5 中设置主项数据后可以选择虚拟数据集并且可以设置显示的记录数,请问大家在程序中怎么用变量设置。就是怎么写语句实现。先谢谢了。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
laowang2
2007-10-09
打赏
举报
回复
程序中要把数据源和数据集关联起来,你可以看看他的demo.很丰富的。
fr
report
非常好的报表控件
Fast
Report
.v
2.5
找到source目录,
选择
对应版本的dpk文件安装就行了解,非常方便,如:我用的是D6,
选择
FR
6.dpk.
fr
report
打印小票实例源码
fr
report
打印小票实例源码,带3种打印方式,实例为某商业广场小票打印示例
Fast
Report
问题集
Fast
Report
问题集 Q: 我怎样添加我的自定义函
数
? A: 使用 T
fr
Report
.OnUserFunction 事件. 这里有一个简单的例子: procedure TForm1.
fr
Report
1UserFunction(const Name: String; p1, p2, p3: Variant; var val: Variant); begin if AnsiCompareText(‘SUMTOSTR‘, Name) = 0 then val := My_Convertion_Routine(
fr
Parser.Calc(p1)); end; 然后,你就可以在报表(任何表达式或脚本)的任何地方使用 SumToStr 函
数
了。 Q: 但是它仅仅能工作在一个T
fr
Report
组件
中
。可我想在任何地方(在所有的T
fr
Report
组件
中
)使用的我的自定义函
数
? A: 使 OnUserFunction event 句柄作为所有组件的公用句柄。如果你不能做到这一点,你需要创建函
数
库: type TMyFunctionLibrary = class(T
fr
FunctionLibrary) 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(
fr
Parser.Calc(p1)); 1: val := My_SumConvertion_Routine(
fr
Parser.Calc(p1)); end; end; 要注册函
数
库,调用
fr
RegisterFunctionLibrary(TMyFunctionLibrary); 要卸载函
数
库,调用
fr
UnRegisterFunctionLibrary(TMyFunctionLibrary); Q: 我怎样将我的函
数
添加到函
数
列表
中
(用表达式生成器)? A: 使用
fr
AddFunctionDesc 过程 (在
FR
_Class 单元
中
):
fr
AddFunctionDesc(FuncLib, ‘SUMTOSTR‘, ‘My functions‘, ‘SUMTOSTR()/Converts number to its verbal presentation.‘); 注意: "/" 符号是必须的! 它从它的描述
中
分隔函
数
语法。 FuncLib 被声明为你自己的函
数
库 (如果你不使用函
数
库可以将其
设置
为nil). 当函
数
库未注册时,所有它的函
数
将自动从函
数
列表
中
删除。 ---------------- 使用
变量
------------------------------------- Q: 我怎样编程实现填充
变量
列表(在
数
据
词典
中
)? A:
数
据
词典
中
的所有
变量
及分类都被存储在 T
fr
Report
.Dictionary.Variables
中
. with
fr
Report
1.Dictionary do begin // 创建分类(名称用空白) Variables[‘ New category‘] := ‘‘; // 创建
变量
Variables[‘New Variable‘] := ‘CustomerData.Customers."CustNo"‘; Variables[‘Another Variable‘] := ‘Page#‘; end; Q: 我定义了字符串
变量
: with
fr
Report
1.Dictionary do Variables[‘Month‘] := ‘March‘; 但是当我运行报表是,出现了错误,为什么? A: 因为 Fast
Report
假定
数
据
词典
中
的字符串
变量
值是一个表达式,它需要分析、计算它。 可以使用其它的方法: with
fr
Report
1.Dictionary do Variables[‘Month‘] := ‘‘‘‘ + ‘March‘ + ‘‘‘‘; 或者, 使用
fr
Variables 来传输固定
数
据
到报表。 Q: 我不想在
数
据
词典
中
显示
某些
数
据
集
? A: 使用 T
fr
Report
.Dictionary.DisabledDatasets: with
fr
Report
1.Dictionary do begin // 关闭该
数
据
集
DisabledDatasets.Add(‘CustomerData.Bio‘); // 或者, 关闭整个
数
据
模块/窗体 DisabledDatasets.Add(‘CustomerData*‘); end; Q: 我怎样将
数
据
传送到报表? A: 有几个方法可以实现它. 第一是使用全局对象
fr
Variables (在
FR
_Class 单元
中
被定义):
fr
Variables[‘My variable‘] := 10; 这段代码创建了一个名称为“My variable”,值为 10 的
变量
。这是最好的传输固定
数
据
的报表的方法。 第二种方法是使用 T
fr
Report
.OnGetValue 事件. 这可以使用这个方法来传送动态
数
据
、
记录
等。 procedure TForm1.
fr
Report
1GetValue(ParName: String; var ParValue: Variant); begin if ParName = ‘MyField‘ then ParValue := Table1MyField.Value; end; 最后, 第三种方法是通过编程在
数
据
词典
中
定义
变量
(可以参考以前的问题): with
fr
Report
1.Dictionary do begin Variables[‘MyVariable‘] := ‘CustomerData.Customers."CustNo"‘; Variables[‘Another Variable‘] := ‘10‘; end; Q: 我能在报表和
程序
间传送
数
据
吗? A: 使用
fr
Variables 对象. 如果你在报表的任何对象的脚本
中
写入以下代码: MyVariable := 10 那么,在你的
程序
中
,你可以使用以下代码来获取 MyVariable 的值: v :=
fr
Variables[‘MyVariable‘]; ---------------- 脚本 (Fast
Report
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:
设置
T
fr
Report
.MixVariablesAndDBFields := True.现在,所有的
数
据
字段及
变量
可在“插入
数
据
字段”对话框
中
可存取了。 Q: 我不想
显示
导入选项对话框? A: 在导入组件(比如,T
fr
TextExport)
中
设置
所有必需的选项,然后通过
设置
ShowDialog属性为False来关闭此对话框。 Q: 为什么 TotalPages
变量
不起作用? 它总是返回 0. A: 在你的报表
中
设置
Two-pass 选项. 要
设置
它,你需要在报表设计器的“文件”菜单
中
,打开“报表选项”对话框。 Q: 我用BLOB字段来存储我的报表。当我运行报表设计器时,它
显示
我的报表未命名? A: 在运行报表设计器前,这样做:
fr
Report
1.FileName := ‘Name of my
report
‘; Q: 我想在重新定义报表设计器
中
的“打开”及“保存”按钮的功能? A: 查看 T
fr
Designer 组件. 它有几个必需的事件: OnLoad
Report
和 OnSave
Report
. 这里有一小段代码例子: procedure TForm1.
fr
Designer1Load
Report
(
Report
: T
fr
Report
; var
Report
Name: String; var Opened: Boolean); begin with MyOpenDialog do begin Opened := ShowModal = mrOk; if Opened then begin
Report
.Load
Fr
omBlobField(…);
Report
Name := …; end; end; end; procedure TForm1.
fr
Designer1Save
Report
(
Report
: T
fr
Report
; var
Report
Name: String; SaveAs: Boolean; var Saved: Boolean); begin if SaveAs then with MySaveDialog do begin Saved := ShowModal = mrOk; if Saved then begin
Report
.SaveToBlobField(…);
Report
Name := …; end; end else
Report
.SaveToBlobField(…); end; Q: 在 QR
中
, 我可以写这样的代码: QRLabel1.Caption := ‘Some text‘. 我可以用
FR
这样做吗? A:
FR
对象并不是一个组件 (这并不像 QR, RB). 但使用 T
fr
Report
.FindObject 方法可以通过对象名称找到该对象。 var t: T
fr
MemoView; begin t := T
fr
MemoView(
fr
Report
1.FindObject(‘Memo1‘)); if t <> nil then t.Memo.Text := ‘Fast
Report
‘; end; Q: 我想在用户预览(T
fr
Preview组件)
中
自定义热键? A: 这个组件有个窗口: Tform 属性. 将自定义句柄指定到 Window.OnKeyDown 属性. Q: Fast
Report
2.4 不能装载
Fr
ee
Report
2.21 文件? A: 这仅需要使用16进制
数
改变报表文件的第一字节,然后在源代码
中
修改下面的部分。在这些修改之后, 装载报表并保存它. 最后,返回到源代码处.
FR
_Class: function ReadString(Stream: Tstream): String; begin { if
fr
Version >= 23 then} Result :=
fr
ReadString(Stream) {else Result :=
fr
ReadString22(Stream);} end; procedure ReadMemo(Stream: Tstream; Memo: Tstrings); begin { if
fr
Version >= 23 then}
fr
ReadMemo(Stream, Memo){ else
fr
ReadMemo22(Stream, Memo);} end;
FR
_Utils: procedure
fr
ReadMemo(Stream: Tstream; l: Tstrings); var s: String; b: Byte; n: Word; begin l.Clear; l.Text :=
fr
ReadString(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
fr
ReadString(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: 这里有一段代码:
fr
Report
1.Prepare
Report
;
fr
Report
1.PrintPrepared
Report
(‘‘, 1, True,
fr
All); 或
fr
Report
1.PrintPrepared
Report
Dlg; Q: 我想在报表
中
旋转图片。问题是这张图片是由我的应用
程序
生成的。是否有方法可以在打印前将这幅图片装载到报表
中
? A: 使用 T
fr
Report
.OnBeforePrint 事件: if View.Name = ‘Picture1‘ then T
fr
PictureView(View).Picture.Load
Fr
omFile(…) 或 .Assign 或 .你所想要做的任何事情
Fast
Report
动态列
Fast
Report
动态列生产方法 ,MemoN := T
fr
xMemoView.Create(MasterData1); with MemoN do begin HAlign := haCenter;//行居
中
VAlign := vaCenter;//列居
中
WordWrap := True;//自动换行 Font.Size:=9; StretchMode := smMaxHeight;//对象伸缩行为 HideZeros := True;
Fr
ame:=Memo3.
Fr
ame;
Delphi
5,931
社区成员
262,938
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章