如何在 FastReport 的 Memo 中替换字符串?

5

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

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

但是,在FastReport中没有替换文本的方法(或属性)。我该怎么做呢?

我正在使用Fast Report 4.9.72Delphi 2010

谢谢!

3个回答

6

由于FastReport中没有可用的StringReplace函数,因此我将从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;

2
您可以在Fast Report中使用此代码:
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;

1

我不知道 Rave Reports 中那段代码的目的,因为我从未使用过它,但我可以为 FastReport 提供替代方案:

  • 在 FastReport 中,所有的 Memo 对象都支持变量替换。设置一个报告变量名为 "my_str",编辑你的 Memo 并包含这个变量。Memo 中的文本将如下所示:[my_str]。这可能是最好的选择。括号中的内容实际上是一个完整的 Pascal 表达式,可以利用数据集字段、报告变量、注册函数等。你甚至可以编写一个 Delphi 函数,在 FastReport 中注册它,并从 [..] 中调用它,将数据集中的字段作为参数传递。可能性真的是无限的。
  • FastReport 的 Memos 可以从 Delphi 端进行操作,所以你可以使用任何函数来更改 Memo 的文本。
  • Memor 还可以从项目脚本(从报告内部而不是从 Delphi 中)进行操作,你也可以做任何你需要做的事情。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接