Как я могу заменить строки в заметке (FastReport)? - PullRequest
5 голосов
/ 10 февраля 2012

В моем отчете есть объект memo, и необходимо заменить строки "% ...%".Например, в Rave Report:

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

Но не существует метода (или свойства) для замены текста в FastReport.Как я могу это сделать?

Я использую Fast Report 4.9.72 и Delphi 2010.

Спасибо!

Ответы [ 3 ]

6 голосов
/ 10 февраля 2012

Поскольку в 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;
1 голос
/ 10 февраля 2012

Я не знаю, какова цель этого кода в Rave Reports, так как я никогда не использовал его, но я могу предложить альтернативы для FastReport:

  • В быстром отчете все подстановки переменных поддержки Memo. Установите переменную отчета с именем «my_str», отредактируйте свою заметку и включите переменную. Текст в памятке будет выглядеть так: [my_str]. Это, наверное, лучший вариант. Содержимое этих скобок на самом деле представляет собой полноценное выражение на Паскале, которое может использовать поля набора данных, переменные отчета, зарегистрированные функции. Вы даже можете написать функцию Delphi, зарегистрировать ее в FastReport и вызывать ее из [..], передавая поле из набора данных в качестве параметра. Возможности действительно безграничны.
  • С напоминаниями FastReport можно манипулировать со стороны Delphi, поэтому вы можете использовать любую функцию, которую хотите изменить, для изменения текста заметки.
  • Памятками также можно управлять из сценария проекта (из отчета, а не из Delphi), вы также можете делать все, что вам нужно.
0 голосов
/ 13 января 2015

Вы можете использовать этот код в быстром отчете:

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;
...