レポートにメモ オブジェクトがあり、"%...%" 文字列を置き換える必要があります。たとえば、Rave レポートでは次のようになります。
MemoBuf.ReplaceAll('%my_str%', "new string", false);
ただし、テキストを置き換えるメソッド (またはプロパティ) は、FastReport
. どうすればこれを行うことができますか?
と を使用Fast Report 4.9.72
してDelphi 2010
います。
ありがとう!
レポートにメモ オブジェクトがあり、"%...%" 文字列を置き換える必要があります。たとえば、Rave レポートでは次のようになります。
MemoBuf.ReplaceAll('%my_str%', "new string", false);
ただし、テキストを置き換えるメソッド (またはプロパティ) は、FastReport
. どうすればこれを行うことができますか?
と を使用Fast Report 4.9.72
してDelphi 2010
います。
ありがとう!
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;
このコードを高速レポートで使用できます。
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;
Rave Reports でそのコードを使用したことがないため、そのコードの目的はわかりませんが、FastReport の代替案を提案できます。
[my_str]
。これはおそらく最良の選択肢です。これらの括弧の内容は、実際には、データセット フィールド、レポート変数、登録済み関数を利用できる本格的なパスカル式です。Delphi 関数を作成して FastReport に登録し、 内から呼び出して[..]
、データセットのフィールドをパラメータとして渡すこともできます。可能性は本当に無限大です。