5

我的报告中有一个备忘录对象,需要替换“%...%”字符串。例如,在狂欢报告中:

MemoBuf.ReplaceAll('%my_str%',  "new string", false);

但是,在FastReport. 我怎么能做到这一点?

我正在使用Fast Report 4.9.72Delphi 2010

谢谢!

4

3 回答 3

6

由于StringReplaceFastReport 中没有可用的,我会从 Delphi 代码中执行此操作。可以以某种方式导入函数,但在我看来这似乎更好。请注意,在第一个示例中,我假设Memo1存在(否则您会遇到访问冲突)。

procedure TForm1.Button1Click(Sender: TObject);
var
  Memo: TfrxMemoView;
begin
  Memo := frxReport1.FindObject('Memo1') as TfrxMemoView;
  Memo.Text := StringReplace(Memo.Text, '%my_str%', 'new string', [rfReplaceAll]);
  frxReport1.ShowReport;
end;

如果您不确定组件名称或类型,您应该使用以下内容:

procedure TForm1.Button2Click(Sender: TObject);
var
  Memo: TfrxMemoView;
  Component: TfrxComponent;
begin
  Component := frxReport1.FindObject('Memo1');
  if Component is TfrxMemoView then
  begin
    Memo := Component as TfrxMemoView;
    Memo.Text := StringReplace(Memo.Text, '%my_str%', 'new string', [rfReplaceAll]);
    frxReport1.ShowReport;
  end;
end;
于 2012-02-10T12:45:11.017 回答
2

您可以在快速报告中使用此代码:

function StringReplace(const S, OldPattern, NewPattern: string;
  iReplaceAll: boolean=true; iIgnoreCase :boolean=true): string;
var
  SearchStr, Patt, NewStr: string;
  Offset: Integer;
begin
  if iIgnoreCase then begin
    SearchStr := UpperCase(S);
    Patt := UpperCase(OldPattern);
  end else begin
    SearchStr := S;
    Patt := OldPattern;
  end;
  NewStr := S;
  Result := '';
  while SearchStr <> '' do begin
    Offset := Pos(Patt, SearchStr);
    if Offset = 0 then begin
      Result := Result + NewStr;
      Break;
    end;
    Result := Result + Copy(NewStr, 1, Offset - 1) + NewPattern;
    NewStr := Copy(NewStr, Offset + Length(OldPattern), MaxInt);
    if not iReplaceAll then begin
      Result := Result + NewStr;
      Break;
    end;
    SearchStr := Copy(SearchStr, Offset + Length(Patt), MaxInt);
  end;
end;
于 2015-01-13T20:46:31.350 回答
1

我不知道该代码在 Rave Reports 中的用途是什么,因为我从未使用过它,但我可以建议 FastReport 的替代方案:

  • 在快速报告中,所有备忘录的支持变量替换。设置一个名为“my_str”的报告变量,编辑您的备忘录并包含该变量。备忘录中的文本如下所示:[my_str]. 这可能是最好的选择。这些括号的内容实际上是一个完整的帕斯卡表达式,可以使用数据集字段、报表变量、注册函数。您甚至可以编写一个 Delphi 函数,将其注册到 FastReport 并从[..]. 可能性真的是无穷无尽的。
  • FastReport 备忘录可以从 Delphi 端进行操作,因此您可以使用任何您想要更改备忘录文本的功能。
  • 备忘录也可以从项目的脚本中操作(在报告中,而不是从 Delphi 中),你也可以做任何你需要做的事情。
于 2012-02-10T12:06:26.683 回答