Как я могу заменить строки в заметке (FastReport)?

У меня есть объект памятки в моем отчете, и мне нужно заменить строки "%...%". Например, в Rave Report:

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

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

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

Спасибо!


person André    schedule 10.02.2012    source источник


Ответы (3)


Поскольку в 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;
person TLama    schedule 10.02.2012

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

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

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

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;
person MohsenB    schedule 13.01.2015