fastreport 动态生成memo

benqlch 2009-05-25 08:14:51
fastreport 动态生成memo(在MasterData中)
...全文
57 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
benqlch 2009-05-25
  • 打赏
  • 举报
回复
在那个事件下面写代码
bdmh 2009-05-25
  • 打赏
  • 举报
回复

var
a:TfrxMemoView;
begin
a:=TfrxMemoView.Create(frxReport1.findobject('Page1'));
a.Memo.Add('xxxxx');
a.Height:=10;
a.Width:=500;
a.Top:=10;
a.Left:=10
a.WordWrap:=True;
a.CreateUniqueName;
a.Visible:=True;
frxReport1.showReport;
end;
benqlch 2009-05-25
  • 打赏
  • 举报
回复
根据查询字段个数,自己生成N 个 Memo
de410 2009-05-25
  • 打赏
  • 举报
回复
当然是你的报表预览按钮下了~~
fastreport快速上手手册 这个也是从别的地方下载的 目 录 入门 5 绪言 6 关于FASTREPORT的说明 6 FASTREPORT的历史 6 创建报表 7 数据 8 参数 8 窗体 9 处理 10 准备报表 10 举例:设计一个简单报表 11 FASTREPORT内核 14 DELPHI控件面板 15 “FastReport”页 15 “FRTools”页 17 TfrReport控件 17 TfrDBDataSet控件 20 TfrUserDataSet控件 21 FASTREPORT对象 21 “Text”对象 22 “Band”对象 26 “Image”对象 29 “SubReport”对象 30 “Line”对象 30 “CheckBox”对象 30 “RichText”对象 30 “OLE”对象 31 “Chart”对象 32 “Shape”对象 34 “Barcode”对象 34 “RichText 2.0”对象 35 创建报表 36 FastReport中的Bands 36 简单报表(列表) 39 主-从报表 40 主-细-子细报表 40 交叉报表 40 动态报表 41 bands分隔 42 分栏报表 43 带封面的报表 43 嵌套报表(子报表) 43 主-从-从报表 44 复合报表 44 包含BLOB字段报表 44 没有band的报表 44 分组报表 44 图表报表 45 设计器 46 设计器 47 使用控制键 47 使用鼠标 48 报表选项 48 页面选项 49 设计器选项 51 对象观察器 52 “插入数据字段”窗口 53 数据字典 53 表达式编辑器 58 工具栏 60 “标准”工具栏 60 “格式”工具栏 61 “边框”工具栏 62 “对齐”工具栏 62 程序设计 64 事件 65 TfrReport对象的其它事件 65 变量 66 扩展FASTREPORT函数 68 设计你自己的预览窗口 68 扩展函数列表 69 报表示例 71 报表示例 72 在报表中插入图表 72 运用OnManualBuild事件控制报表逻辑结构 74 运行时使用代码手工合成报表 76 打印可变栏数或未知栏数的报表 77 打印可变栏数和栏宽可变的报表 78 最终用户特性 80 介绍 81 对话框 81 对话框窗体控件 82 Label 83 Edit 83 Memo 84 Button 84 CheckBox 85 RadioButton 85 ListBox 86 ComboBox 86 输入信息到报表中 87 数据访问控件 88 FastReport数据感知控件简介 89 TfrBDELookupComboBox 89 TfrBDETable 89 TfrBDEQuery 92 TfrBDEDataBase 93 创建报表 94 简单的“表格式”报表 94 带参数的报表 95 TFRDATASTORAGE控件 96 连接到一个数据库 97 打开一个数据表 98 生成一个查询 99 字段编辑器 99 创建查询字段 100 查询参数编辑器 101 联接数据 101 参数对话框 102 参数对话框设计器 102 内置语言 103 脚本语言和对象 104 编写代码 105 对象修改 107 内置函数 107 对象的属性和方法 110 解释器的使用 119
FastReport问题集 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()/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 或 .你所想要做的任何事情

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧