FastReport问题集[2]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 rickylan 的 blog

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 或

本文关键:FastReport问题集
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top