为RB定制支持参数的自定义函数
2012-02-22 19:20
218 查看
为RB定制支持参数的自定义函数
通过昨天的短文,检阅过的朋友已经了解如何为Report Builder的RAP建立一个简单的自定义函数,同时我亦提到,发挥自已的想象力,就可以将诸多的Delphi原生代码呈现给你的用户,当然也包括你自身,站在用户角度去完成应用报表的最终定义,从而将编程与应用分为,减少开发者的麻烦。在我的编程经历中,最讨厌的就是为用户画报表,太无聊亦无意义的事情,莫过如此。我宁愿花几小时的时候去调试我的代码,也不愿花10分钟去为用户画一个报表。不知道你有没有同感……正因为如此,所以我想尽可能的通过自定义函数的形式,去增加用户可用的报表定义功能,是一件非常用意义的事情。
为了感谢大家对我的鼓励,所以想继续完成上文中没有提到的部分,作一个支持带参数的自定义函数,先确定一下具体的任务,实现下面的函数,在RAP中返回如下的页数格式‘第n页共m页’,原型如下:
Function ChinesePageNo(PageNo,PageCount):String;
现在,任务已经确定,接下来看一下如何在Delphi中完成这样的任务。
第一步,为ChinesePageNo定义类;
TMyChinesePageNoFunction=class(TmyNewCategoryFunction)
public
procedure ExecuteFunction(aParams:TraParamList);override;
class function GetSignature:String;override;
end;
第二步,实现类ChinesePageNo;
这里的关键是如何实现ExecuteFunction,使用户能够在RAP中通过参数调用ChinesePageNo。为此,按下面步骤进行即可:
1.从aParams取得参数;
2.调用delphi的实现过程;
3.利用aParams返回结果;
下面是具体的实现代码:
procedure TmyChinesePageNoFunction.ExecuteFunction(aParams:TraParamList);
var
lsInteger1,lsInteger2:integer;
lsResult:String;
begin
GetParamValue(0,lsInteger1);
GetParamValue(1,lsInteger2);
lsResult:=Format('第%d页共%d页',[lsInteger1,lsInteger2]);
SetParamValue(2,lsResult);
end;
在上述代码中,通过GetParamValue取得传进的参数,SetParamValue返回结果。
其次,为了让最终用户能够在RAP中看到并使用ChinesePageNo,还需要实现类方法
class function GetSignature:String;overrive;并在单元的Initialization部分注册这个函数。
以下是实现代码:
class function TmyChinesePageNoFunction.Getsignature:String;
begin
result:='Function ChinesePageNo(const PageNo,TotalPage:Integer):String;';
end;
initialization
raRegisterFunction('ChinesePageNo',TmyChinesePageNoFunction);
end.
综上,我们已经完成了整个函数的定义。最后来看看如何在RAP中调用。以下过程是在Report Builder的RAP中实现的。
1.在报表的Footer条上放一个Variable,右键选取“计算”菜单,进入具体的编码过程;
2.假定使用的ppReport的UserName为[Report],则为Variable写如下代码:
Value :=ChinesePageNo(Report.PageNo , Report.PageCount);
3.最后,预览一下报表,会看到在Variable处正确的显示了’第1页共1页’。
欢迎转载,但请保留出处,本文章转自[华软源码],原文链接:http://www.hur.cn/special/Delphitech/02658.htm
通过昨天的短文,检阅过的朋友已经了解如何为Report Builder的RAP建立一个简单的自定义函数,同时我亦提到,发挥自已的想象力,就可以将诸多的Delphi原生代码呈现给你的用户,当然也包括你自身,站在用户角度去完成应用报表的最终定义,从而将编程与应用分为,减少开发者的麻烦。在我的编程经历中,最讨厌的就是为用户画报表,太无聊亦无意义的事情,莫过如此。我宁愿花几小时的时候去调试我的代码,也不愿花10分钟去为用户画一个报表。不知道你有没有同感……正因为如此,所以我想尽可能的通过自定义函数的形式,去增加用户可用的报表定义功能,是一件非常用意义的事情。
为了感谢大家对我的鼓励,所以想继续完成上文中没有提到的部分,作一个支持带参数的自定义函数,先确定一下具体的任务,实现下面的函数,在RAP中返回如下的页数格式‘第n页共m页’,原型如下:
Function ChinesePageNo(PageNo,PageCount):String;
现在,任务已经确定,接下来看一下如何在Delphi中完成这样的任务。
第一步,为ChinesePageNo定义类;
TMyChinesePageNoFunction=class(TmyNewCategoryFunction)
public
procedure ExecuteFunction(aParams:TraParamList);override;
class function GetSignature:String;override;
end;
第二步,实现类ChinesePageNo;
这里的关键是如何实现ExecuteFunction,使用户能够在RAP中通过参数调用ChinesePageNo。为此,按下面步骤进行即可:
1.从aParams取得参数;
2.调用delphi的实现过程;
3.利用aParams返回结果;
下面是具体的实现代码:
procedure TmyChinesePageNoFunction.ExecuteFunction(aParams:TraParamList);
var
lsInteger1,lsInteger2:integer;
lsResult:String;
begin
GetParamValue(0,lsInteger1);
GetParamValue(1,lsInteger2);
lsResult:=Format('第%d页共%d页',[lsInteger1,lsInteger2]);
SetParamValue(2,lsResult);
end;
在上述代码中,通过GetParamValue取得传进的参数,SetParamValue返回结果。
其次,为了让最终用户能够在RAP中看到并使用ChinesePageNo,还需要实现类方法
class function GetSignature:String;overrive;并在单元的Initialization部分注册这个函数。
以下是实现代码:
class function TmyChinesePageNoFunction.Getsignature:String;
begin
result:='Function ChinesePageNo(const PageNo,TotalPage:Integer):String;';
end;
initialization
raRegisterFunction('ChinesePageNo',TmyChinesePageNoFunction);
end.
综上,我们已经完成了整个函数的定义。最后来看看如何在RAP中调用。以下过程是在Report Builder的RAP中实现的。
1.在报表的Footer条上放一个Variable,右键选取“计算”菜单,进入具体的编码过程;
2.假定使用的ppReport的UserName为[Report],则为Variable写如下代码:
Value :=ChinesePageNo(Report.PageNo , Report.PageCount);
3.最后,预览一下报表,会看到在Variable处正确的显示了’第1页共1页’。
欢迎转载,但请保留出处,本文章转自[华软源码],原文链接:http://www.hur.cn/special/Delphitech/02658.htm
相关文章推荐
- 如何定制支持用户自定义boot参数的基于debian os的live cd
- 在C++中用虚函数及模版实现委托(支持自定义参数)(转)
- 在C++中用虚函数及模版实现委托(支持自定义参数)
- Oracle不支持在select语句中调用自定义函数时使用自定义类型作参数?
- 如何定制支持用户自定义boot参数的基于debian os的live cd
- 关于Java函数不支持参数默认值的讨论,最后一条亮了 2333
- oc自定义不定参数函数
- SpringMVC第四篇【参数绑定详讲、默认支持参数类型、自定义参数绑定、RequestParam注解】
- Python自定义函数的创建、调用和函数的参数详解 .argmax
- javascript提取URL的搜索字符串中的参数(自定义函数实现)
- [C语言]支持命名参数的函数调用
- 纯js自动批量引入js、css插件,支持自定义参数
- python中的堆支持自定义的比较函数 - Heap in Python with comparator.
- Matlab中如何将(自定义)函数作为参数传递给另一个函数
- 第九讲 自定义函数参数预定义
- c/c++支持可变参数的函数,即函数的参数是不确定的。
- 自己写的一个php分页类,支持onclick和详细定制参数
- C库中对函数的可变参数的支持
- Python自定义函数基础:参数预定义值
- 为什么C#不支持函数默认参数呢