贴已发一天没人答,在线等待,不好意思,没分了,大家给我看看动态报表,出错的原因在哪里? 拷贝一个运行就可以替我看看 (5分)

  • 主题发起人 主题发起人 small pig
  • 开始时间 开始时间
S

small pig

Unregistered / Unconfirmed
GUEST, unregistred user!
搞了将近一天,始终不知道出错在哪里?我的目的就是根据控件在窗体上的位置利用FASTREPORT来动态打印,谢谢各位大侠的参与回答.
var
m: TfrMemoView;
BandDetail: TfrBandView;
i: integer;
begin

frReport1.Pages.Clear;
frReport1.Pages.Add;
Page := frReport1.Pages[0];
//附加一页
BandDetail := TfrBandView(frCreateObject(gtBand, ''));
BandDetail.BandType := btMasterData;
BandDetail.Name := 'BandDetail';
Page.Objects.Add(BandDetail);
BandDetail.SetBounds(0, C_HEIGHT * 3, 0, 0);
m := TfrMemoView(frCreateObject(gtMemo, ''));
m.gapx := 0;
m.gapy := 0;
m.dx := 0;
for i := 0 to Form1.ComponentCount - 1do
begin
if (Components is TLabel) or (Form1.Components is TDBEdit) then
//把本窗体符合的控件打印出来
m.SetBounds(TControl(Components).Left, TControl(Components).Top,
TControl(Components).Width, TControl(Components).Height);
m.Name := TControl(Components).Name;
Page.Objects.Add(m);
end;
frReport1.ShowReport;
end;
 
我没试你的程序,看了看就觉得有问题。下面这部分是错误的
if (Components is TLabel) or (Form1.Components is TDBEdit) then
//把本窗体符合的控件打印出来
m.SetBounds(TControl(Components).Left, TControl(Components).Top,
TControl(Components).Width, TControl(Components).Height);
m.Name := TControl(Components).Name;
Page.Objects.Add(m);
因为,如果条件符合才能执行以下二行
m.Name := TControl(Components).Name;
Page.Objects.Add(m);
但实际这二行不管条件是什么都执行了。
 
还有的就是,你从头到尾都使用一个实例m(TfrMemoView)来添加,应该是不行的,你改为每个控件对应一个相应的FastReport对象实例试试
先声明,我没用过FastReport,只是按你的代码猜的[:D]
 
接受答案了.
 
后退
顶部