zoukankan      html  css  js  c++  java
  • 为RB定制支持参数的自定义函数

    为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

  • 相关阅读:
    PHP实现没有数据库提交form表单到后台并且显示出数据列表(Vuejs和Element-UI前端设计表单)
    vueJs开发音乐播放器第二篇(点击歌单跳出详情页)
    VueJs创建网易音乐播放器和vueJs常见错误处理
    VueJS和Javascript实现文字上下滚动效果
    Javascript返回顶部和砸金蛋,跑马灯等游戏代码实现
    md5 加密
    面向对象相关
    网络编程
    初始面向对象
    模块和包
  • 原文地址:https://www.cnblogs.com/leonkin/p/2363667.html
Copyright © 2011-2022 走看看