• 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
    不会报错。
  • 相关阅读:
    wait/sleep/yield的区别
    54点提高PHP编程效率(转)
    ftp 使用
    转义 html 里特殊含义字符
    查看端口是否被占用
    webservice 获取调用者IP
    字符编码
    你有读过软件的协议或是网站的服务条款吗?
    使用TSQL的Rand函数生成随机数的艰苦历程
    几个.NET方面的问题——参考答案
  • 原文地址:https://www.cnblogs.com/CodeGear/p/4584353.html
Copyright © 2020-2023  润新知