在设计或者打印预览时,如果设置了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
不会报错。
 posted on 2015-06-17 20:58  宝兰  阅读(480)  评论(0编辑  收藏  举报