• FR报表 FileName


    在设计或者打印预览时,如果设置了FileName,可能反而出错。

    procedure TfrxReport.ShowPreparedReport;
    var
      WndExStyles: Integer;
    begin
      FPreviewForm := nil;
      if FPreview <> nil then
      begin
        FPreview.Init(Self, FPreviewPages); //进入
    //    FPreview.FReport := Self;
    //    FPreview.FPreviewPages := FPreviewPages;
    //    if not FPreview.Init then
    //      FPreview.AddPreviewTabOrSwitch(Report, '', '', False);
      end
      else
      begin
        FPreviewForm := TfrxPreviewForm.Create(Application);
        with TfrxPreviewForm(FPreviewForm) do
        begin
          Preview.FReport := Self;
          Preview.FPreviewPages := FPreviewPages;
    function TfrxPreview.Init(aReport: TfrxReport; aPrevPages: TfrxCustomPreviewPages): Boolean;
    begin
      Result := False;
      if FCalledFromPreview Then Exit;
      Report := aReport;
      PreviewPages := aPrevPages;
      if FInitialized then
        if EachReportInTab then
        begin
          AddPreviewTabOrSwitch(Report, '', '', False);
          Exit;
        end;
    
      if Parent is TfrxPreviewForm then
        FPreviewForm := TForm(Parent);
    
      FWorkspace.PreviewPages := PreviewPages;
      FThumbnail.PreviewPages := PreviewPages;
      TextFound := False;
      FWorkspace.FLastFoundPage := 0;
      LastFoundRecord := -1;
      FAllowF3 := False;
      if not FInitialized then
      begin
        if Report.FileName <> '' then
          AddPreviewTab(Report, ExtractFileName(Report.FileName))  //这里
        else
          AddPreviewTab(Report, Report.ReportOptions.Name);
      end
      else
      begin
    function ExtractFileName(const FileName: string): string;
    var
      I: Integer;
    begin
      I := LastDelimiter(PathDelim + DriveDelim, FileName);//这里
      Result := Copy(FileName, I + 1, MaxInt);
    end;
    function LastDelimiter(const Delimiters, S: string): Integer;
    var
      P: PChar;
    begin
      Result := Length(S);
      P := PChar(Delimiters);
      while Result > 0 do
      begin
        if (S[Result] <> #0) and (StrScan(P, S[Result]) <> nil) then//这里
          Exit;
        Dec(Result);
      end;
    end;

     奇怪的是单独 调用 

    ExtractFileName ,LastDelimiter
    不会报错。
  • 相关阅读:
    scss的初级学习随笔小计
    trimpash实现jd选项卡首次输入
    透明度动画
    js原生动画一匀速动画
    filter滤镜的使用
    scss实现不同方向的三角
    模板方法模式-考题抄错,会做也白搭
    设计模式概述
    mysql数据库
    夜饮东坡醒复醉
  • 原文地址:https://www.cnblogs.com/CodeGear/p/4584353.html
Copyright © 2020-2023  润新知