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 或