5

レポートにメモ オブジェクトがあり、"%...%" 文字列を置き換える必要があります。たとえば、Rave レポートでは次のようになります。

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

ただし、テキストを置き換えるメソッド (またはプロパティ) は、FastReport. どうすればこれを行うことができますか?

と を使用Fast Report 4.9.72してDelphi 2010います。

ありがとう!

4

3 に答える 3

6

StringReplace利用可能な FastReportがないため、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 に答える