• FastReport几个使用技巧


    1.FastReport中如何共用TFrxreport及TfrxDBDataSet

    一个程序中,不管多么大的程序,只要打印或预览时是模式的,则完全可以共用一个TFrxreport

    变量及几个TfrxDBDataSet。只不过,要注意完成一个报表程序的步骤,主要是下面几步
    1)清除报表,得到一个全新的报表内容。
    Frxreport1.clear。
    2)设置要使用的TfrxDBDataSet的别名,如果不需要可以省略这一步,但一般最好不同的报表用不同的别名。
    注意这一步要在加载报表文件之前,因为一般设计报表文件时已经包含了别名信息。
    frxDBDataSet1.UserName:=别名;
    3)加载报表或动态建立一个TfrxReportPage。
    Frxreport1.LoadFromFile(报表文件的完整文件名);
    4)关联TfrxDBDataSet与TDataset,并设置要使用哪些TfrxDBDataSet。
    Frxreport1.DataSets.Clear;//先清除原来的数据集
    frxDBDataSet1.DataSet:=dataset1;//关联Fastreport的组件与TDataset数据集。
    Frxreport1.DataSets.Add(frxDBDataSet1);//加载关联好的TfrxDBDataSet到报表中。
    经过这几步后,就可以像单独使用一个Tfrxreport一样使用共用的报表组件了

    2.如何打印空白处?
    在打印报表的Band处的OnBeforePrint事件中添加代码:

    while FreeSpace > 20 do
      ShowBand(Child1)

    3.如何打印指定行数后换页?
    在master band中OnBeforePrint事件中写代码:

    var
       vLineCount: integer;
    begin
       vLineCount := vLineCount + 1;
       if vLineCount = 10 then
       begin
          vLineCount := 0;
          NewPage;
       end;
    end;


     

    4.fastreport中如何把数据显示为百分比
    DisplayFormat属性,其中的Kind你设置成fkNumeric,FormatStr

    [<frxDBDataset1."sjl">*100 #n%2.2f]%

    5.FastReport如何打印表格式的空行?

    var
       PageLine: integer;       //在現在頁列印到第幾行
       PageMaxRow: integer=15;  //設定每頁列數
       procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
       begin
           PageLine := <Line> mod PageMaxRow;
           if (PageLine = 1) and (<line> > 1) then
              Engine.newpage;
           child1.visible := False;
       end;
    //Footer1高度設為0
      procedure Footer1OnBeforePrint(Sender: TfrxComponent);
    
    
    
    
      var
          i: integer;
      begin
          i := iif(PageLine=0, PageMaxRow, PageLine);
          child1.visible := True;
          while i < PageMaxRow do
          begin
              i := i + 1;
              Engine.ShowBand(Child1);  //印空白表格
          end;
          child1.visible := False;
        end;
    begin
    end.

    6.在首页打印本页小计,最后一页打印本页小计和合计(如果只有一页,则打印本页小计和合计)

    frxReport1.PrepareReport();
      frxReport1.Variables["pageQ"] := pageQ;
      frxReport1.Variables["hander"] := QuotedStr(hander);
      frxReport1.Variables["doubleline"] := QuotedStr(StringOfChar("=", Length(hander) + 12));
    
    
    
    
      whName :="设备资产";
      frxReport1.Variables["p1"] := QuotedStr("仓库:" + whName);
      frxReport1.Variables["p9"] := QuotedStr("领用科室:" + DepName);
      frxReport1.Variables["p2"] := QuotedStr("日期:" + ywDate);
      frxReport1.Variables["p3"] := QuotedStr("单据号:" + VoucherNo);
    
    
    
    
      if warehouseno=3 then
      begin
        frxReport1.Variables["p8"] := QuotedStr("经手:");
        frxReport1.Variables["p4"] := QuotedStr("保管:");
        frxReport1.Variables["p5"] := QuotedStr("负责人:");
      end
      else
      begin
        frxReport1.Variables["p8"] := QuotedStr("采购:");
        frxReport1.Variables["p4"] := QuotedStr("验收:");
        frxReport1.Variables["p5"] := QuotedStr("科室签字:");
      end;
      frxReport1.Variables["p6"] := QuotedStr("操作员:"+Operator);
      frxReport1.Variables["p7"] := QuotedStr("打印日期:" + prDate);
      frxReport1.Variables["p10"] := QuotedStr("("+ShareGlobalVar.GlobalVar.GetUnitID+")");
      if IsPreView then
      begin
        frxReport1.ShowReport;
      end
      else
      begin
        frxReport1.PrintOptions.ShowDialog := False;
        frxReport1.PrepareReport();
        frxReport1.Print;
      end;
    end;


     

    在FastReport写入代码

    procedure ColumnFooter1OnBeforePrint(Sender: TfrxComponent);
    var
      bVisible: boolean;                                                         
    begin
      bVisible := <Page> = <pageQ>;
      Memo12.visible := bVisible;
      Memo21.visible := bVisible;
      Memo16.visible := bVisible;
      Memo14.visible := bVisible;      
      if not bvisible then
      begin              
        p8.Top := 27;
        p7.Top := 27;        
        p4.Top :=  27;
        p5.Top :=  27;
        p6.Top :=  27;        
      end
      else
      begin
        p8.Top := 49.46;
        p7.Top := 49.46;        
        p4.Top :=  49.46;
        p5.Top :=  49.46;
        p6.Top :=  49.46;      
      end;                      
    end;
    
    
    
    
    procedure Page1OnBeforePrint(Sender: TfrxComponent);
    var
      bVisible: boolean;                                                         
    begin
      bVisible := <Page> = <pageQ>;
      if not bvisible then
      begin              
        ColumnFooter1.Height:=48;
      end
      else
      begin
        ColumnFooter1.Height:=69.35;
       end;
    end;
    
    
    
    
    begin
    
    
    
    
    end.

    7.加入自定义函数

    (1)在delphi程序中定义函数

      frxReport1.AddFunction("function MoneyCn(mmje: Double): String;","Myfunction","小写金额转大写的函数");
      frxReport1.OnUserFunction :=frxUserFunction;

    (2)在frxUserFunction事件中加载函数

    function TFunComm.frxUserFunction(const MethodName: string;
      var Params: Variant): Variant;
    begin
      if UpperCase(MethodName) = UpperCase("MoneyCn") then
        Result := MoneyCn(Params[0]);
    end;

    (3)实现函数(数字转大写)

    function MoneyCn(mmje: Double): string;
    const
      s1: string = "零壹贰叁肆伍陆柒捌玖";
      s2: string = "分角元拾佰仟万拾佰仟亿拾佰仟万";
    
    
    
    
      function StrTran(const S, s1, s2: string): string;
      begin
        Result := StringReplace(S, s1, s2, [rfReplaceAll]);
      end;
    var
      S, dx: string;
      i, Len: Integer;
    begin
      if mmje < 0 then
      begin
        dx := "负";
        mmje := -mmje;
      end;
      S := Format("%.0f", [mmje * 100]);
      Len := Length(S);
      for i := 1 to Len do
        dx := dx + Copy(s1, (Ord(S[i]) - Ord("0")) * 2 + 1, 2) + Copy(s2, (Len - i)
          * 2 + 1, 2);
      dx := StrTran(StrTran(StrTran(StrTran(StrTran(dx, "零仟", "零"), "零佰",
        "零"),
        "零拾", "零"), "零角", "零"), "零分", "整");
      dx := StrTran(StrTran(StrTran(StrTran(StrTran(dx, "零零", "零"), "零零",
        "零"),
        "零亿", "亿"), "零万", "万"), "零元", "元");
      if dx = "整" then
        Result := "零元整"
      else
        Result := StrTran(StrTran(dx, "亿万", "亿零"), "零整", "整");
    end;

    (4) FastReport中引用函数

    如:[MoneyCn(<SUM(<frxDBDataset1."M3">,MasterData1,2)>)]




  • 相关阅读:
    Android Media Playback 中的MediaPlayer的用法及注意事项(二)
    Android Media Playback 中的MediaPlayer的用法及注意事项(一)
    34. Search for a Range
    33. Search in Rotated Sorted Array
    32. Longest Valid Parentheses
    31. Next Permutation下一个排列
    30. Substring with Concatenation of All Words找出串联所有词的子串
    29. Divide Two Integers
    28. Implement strStr()子串匹配
    27. Remove Element
  • 原文地址:https://www.cnblogs.com/fm168/p/2838881.html
Copyright © 2020-2023  润新知