请教大家:动态创建fastReport报表时,如何定位各位控件位置???急呀

dickman 2005-01-20 04:21:00
以下是fastReport自带的动态报表demo, 显示了如何动态创建bandView及MemoView,其位置由SetBounds方法设置(其座标相对于整个页面)。 但在实际的应用当中,会有多个bandView、多个MemoView ,如果光在程序中用setbound方法设置各对象位置,将相关麻烦.

能否这样: 先在frReport1中画好几个bandView, 在程序中动态创建MemoView,关其定位在指定的BandView中(设置座标时相对于这个指定的BandView,就象Delphi中Panel里的控件),这样将大大减小工作量,或者各位朋友有什么更多好的方案???

小弟先谢了

procedure TForm1.Button1Click(Sender: TObject);
var
v: TfrView;
b: TfrBandView;
Page: TfrPage;
begin
frReport1.Pages.Clear;
frReport1.Pages.Add; // create page
Page := frReport1.Pages[0];

b := TfrBandView.Create; // create Title band
b.SetBounds(0, 20, 0, 20); // position and size in pixels
b.BandType := btReportTitle; // (only Top and Height are significant
Page.Objects.Add(b); // for the band)

v := TfrMemoView.Create; // create memo
v.SetBounds(20, 20, 200, 16);

v.BandAlign := baWidth;
v.Prop['Alignment'] := frtaCenter; // another way to access properties
v.Prop['Font.Style'] := 2;
v.Memo.Add('Your text is: [Edit1.Text]');
Page.Objects.Add(v);

b := TfrBandView.Create; // create MasterData band
b.SetBounds(0, 60, 0, 20);
b.BandType := btMasterData;
b.Dataset := 'frDBDataSet1'; // band's dataset
Page.Objects.Add(b);

v := TfrMemoView.Create; // create data field
v.SetBounds(20, 60, 200, 16);
v.Memo.Add('[Table1."Company"]');
Page.Objects.Add(v);

frReport1.Pages.Add; // create second page
Page := frReport1.Pages[1];
Page.PageType := ptDialog;
Page.Width := 200;
Page.Height := 170;
Page.Caption := 'Test';

v := TfrEditControl.Create; // create editbox
v.SetBounds(60, 50, 75, 21);
v.Name := 'Edit1';
Page.Objects.Add(v);

v := TfrButtonControl.Create; // create button
v.SetBounds(60, 100, 75, 25);
TfrButtonControl(v).Button.Caption := 'Test!';
TfrButtonControl(v).Button.ModalResult := mrOk;
Page.Objects.Add(v);

frReport1.ShowReport;
end;
...全文
458 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sr_jn 2005-01-21
  • 打赏
  • 举报
回复
fastreport控件可以在运行状态下修改打印格式和打印内容,其本身就带有一个demo
广州接入 2005-01-20
  • 打赏
  • 举报
回复
而且如果你愿意,还可以让用户自己修改模板。
广州接入 2005-01-20
  • 打赏
  • 举报
回复
没必要动态创建,采用一个个模板会更好,而且模板还可以在不用修改程序的情况下修改。
dickman 2005-01-20
  • 打赏
  • 举报
回复
在线等待
源码直接下载地址: https://pan.quark.cn/s/a4b39357ea24 ### 信号与系统(郑君里 第三版)课后习题解析 #### 1. 信号与系统中δ函数的尺度变换特性 在《信号与系统》(郑君里 第三版)这一著作中,作者阐述了δ函数的尺度变换特性,并借助一个特定的习题进行了详尽的阐释。该习题的任务在于验证以下等式: \[ \delta(at) = \frac{1}{|a|}\delta(t) \] **论证:** 为了验证此等式,我们首先需要掌握δ函数的基本属性以及它如何响应自变量的变动。依据题目的指示,我们知道当自变量为\( t \),脉冲的底部长度为\( \tau \),而当自变量转变为\( at \),底部长度调整为\( |a|\tau \)。 我们能够借助图形化的手段来获得直观的认识。设想一个用三角形来逼近的δ函数图像,其底边长度为\( \tau \),高度为\( h \),那么三角形的面积计算为\( A = \frac{1}{2} \tau h \)。当自变量变为\( at \),为了维持三角形的高度恒定,底边长度必须更新为\( |a|\tau \),此三角形的面积变为\( A = \frac{1}{2} |a|\tau h = |a|A \)。 由于δ函数的积分特性被定义为单位面积,即在任何区间\( [-\infty, +\infty] \)内的积分结果均为1,因此无论底部长度如何变化,积分值均保持恒定。这表明,当自变量转变为\( at \),为了确保积分值维持在1,δ函数的幅度必须相应地调整为原值的\( \frac{1}{|a|} \)倍。由此,我们得以证明该等式: \[ \int_{-\infty}^{+\infty}...

5,943

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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