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
不会报错。

转载于:https://www.cnblogs.com/CodeGear/p/4584353.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值