FastReport动态报表(299分)

  • 主题发起人 主题发起人 icc
  • 开始时间 开始时间
I

icc

Unregistered / Unconfirmed
GUEST, unregistred user!
动态生成的报表,怎么给里面的控件加事件?
大侠们,大哥,大姐帮帮我!
 
谁解决了这个问题把这300分的%90给他
 
那要看楼主的报表是如何动态生产的了。
 
举个例子吧,假如楼主是动态生产一个报表,一临时文件的方式保存在硬盘,
假如是c:/1.fr3。
begin
//动态创建报表,并且保存在'c:/1.fr3'
......
//动态给报表的组件增加事件
//以下是给报表里面一个名为Memo1的组件增加一个在预览的时候触发的事件。
frxReport1.FileName := 'c:/1.fr3';
frxReport1.ScriptLanguage := 'PascalScript';
frxReport1.ScriptText.Clear;
frxReport1.ScriptText.Add('procedure Memo1OnAfterPrint(Sender: TfrxComponent);
begin
;ShowMessage(''ddd'');
end;
begin
;
end.
');
frxReport1.ShowReport();
end;
//如果报表不以文件的形式保存,例如用流的方式给frxReport1赋值,方法也是类同。
 
liyinwei:
如果是在设计器里拉控件,每个控件都是事件,你可以在事件里写上脚本,现在你这样,脚本代码是有了,控件也有了
我在delphi里定义一个变量
var
frMemo: TFrxMemoview;
begin
frMemo:= TFrxMemoview.Create(FrPage);
//然后 我想叫这个 frMemo的OnBeforePinrt事件执行的脚本的代码为 ShowMessage('This is a Memo');该如何写?
end;
 
这个不难。
我的系统只有一个报表,然后所有报表都是通过它执行的。
技术交流QQ:136293586
 
type
TForm1 = class(TForm)
public
//自定义事件
procedure OnBeforePrint(Sender:TObject);
//类方法,不是普通方法
end;

frMemo.OnBeforePrint := OnBeforePrint;
试一下
 
var
fr: TfrxReport;
ReportPage: TfrxReportPage;
MemoView: TfrxMemoView;
begin
fr:= Form1.fr;
fr.Clear;
ReportPage:= TfrxReportPage.Create(fr);
ReportPage.CreateUniqueName;
MemoView:= TfrxMemoView.Create(ReportPage);
MemoView.CreateUniqueName;
MemoView.SetBounds(100, 100, 300, 50);//位置
MemoView.Frame.Typ:= [ftLeft, ftBottom, ftTop, ftRight];//加边框
MemoView.Text:= 'Hello, hello world!';
//现在问题来了,我想让这个MemoView的OnBeforePrint事件执行的脚本为下面的一句代码
//ShowMessage('This is A Memo');

fr.DesignReport;
//或者fr.ShowReport;
end;

LiYinWei的那段代码没有工作起来,这个Memo没有触发这个事件,问题是怎么连上这个事件?
 
Mr uiit:
frMemo.:= OnBeforePrint;
这样的代码行不通,因为OnBeforePrint是个 string ,不是个指针,赋不了值
 
就是让你把它定义成事件,然后再赋给你你的动态创建的控件
type
TForm1 = class(TForm)
public
//自定义事件
procedure OnBeforePrint(Sender:TObject);
//类方法,不是普通方法
end;

procedure TForm1.OnBeforePrint(Sender: TObject);
begin
..
end;
// 在你需要的时候
frMemo.OnBeforePrint := OnBeforePrint;
 
TfrxNotifyEvent = type String;
property OnBeforePrint: TfrxNotifyEvent read FOnBeforePrint write FOnBeforePrint;
procedure OnBeforePrint(Sender:TObject);
//类方法,不是普通方法
但个动态事件我懂呀,但这里不是这回事
类型不兼容怎么赋值呀,一个是对象指针,一个是字符串
 
愿意的话,qq上4835386来讨论
我们说的不是一回事
 
关注啊。。。。。。。。。。。。。。。。。
 
问题自己解决,FastReport她太强了
现在开始散分,接分吧
这是脚本代码
================================
procedure Chart1OnBeforePrint(Sender: TfrxComponent);
begin
Chart1.SeriesData.Items[0].XSource:= <frds.&quot;姓名列表&quot;>;
Chart1.SeriesData.Items[0].YSource:= <frds.&quot;分数列表&quot;>;
end;

begin

end.
==================================
这是程序代码
====================================
var
ChartView: TfrxChartView;
ChartSerie: TBarSeries;
MasterData: TfrxMasterData;
ReportPage: TfrxReportPage;
MemoView: TfrxMemoView;
begin
fr.Clear;
fr.DataSets.Add(frds);
ReportPage:= TfrxReportPage.Create(fr);
ReportPage.CreateUniqueName;
MasterData:= TfrxMasterData.Create(ReportPage);
MasterData.CreateUniqueName;
MasterData.DataSet:= frds;
MasterData.Height:= 200;
ChartView:= TfrxChartView.Create(MasterData);
ChartView.CreateUniqueName;
ChartView.SetBounds(0, 0, 700, 200);
ChartSerie:= TBarSeries.Create(ChartView.Chart);
ChartSerie.Marks.Style:= smsValue;
ChartView.Chart.AddSeries(ChartSerie);
ChartView.SeriesData.Add;
ChartView.SeriesData.Items[0].DataType:= dtFixedData;
fr.ScriptText.LoadFromFile('C:/fr_script.pas');
ChartView.OnBeforePrint:= 'Chart1OnBeforePrint';
fr.DesignReport;
//或者fr.ShowReport;
end;
===================================
 
接分~~~~,嘻嘻 [:D][:D][:D]
 
多人接受答案了。
 
后退
顶部