2012-02-10 40 views
5

Tôi có đối tượng ghi nhớ trong báo cáo của mình và cần thay thế chuỗi "% ...%". Ví dụ: trong Báo cáo Rave:Làm thế nào tôi có thể thay thế chuỗi trong một bản ghi nhớ (FastReport)?

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

Nhưng, không tồn tại phương pháp (hoặc thuộc tính) để thay thế văn bản, trong FastReport. Làm thế nào tôi có thể làm điều này?

Tôi đang sử dụng Fast Report 4.9.72Delphi 2010.

Cảm ơn!

Trả lời

6

Vì không có StringReplace trong FastReport, tôi sẽ làm điều đó từ mã Delphi. Có thể nhập chức năng bằng cách nào đó nhưng điều này dường như tôi sắp xếp tốt hơn. Xin lưu ý rằng trong ví dụ đầu tiên này, giả sử rằng Memo1 tồn tại (bạn sẽ bị vi phạm quyền truy cập).

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; 

Nếu bạn không chắc chắn về tên thành phần hoặc gõ bạn nên sử dụng một cái gì đó như thế này:

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

Hey, TLame ! Cảm ơn bạn! –

0

Tôi không biết những gì mục đích của mã đó là trong Báo cáo Rave như tôi không bao giờ sử dụng nó, nhưng tôi có thể đề nghị lựa chọn thay thế cho FastReport:

  • Trong báo cáo nhanh hỗ trợ biến thay thế tất cả của Memo. Thiết lập biến báo cáo có tên "my_str", chỉnh sửa Bản ghi nhớ của bạn và bao gồm biến. Văn bản trong thư báo sẽ trông giống như sau: [my_str]. Đây có lẽ là lựa chọn tốt nhất. Nội dung của các dấu ngoặc đó thực sự là biểu thức pascal đầy đủ có thể sử dụng các trường tập dữ liệu, các biến báo cáo, các hàm đã đăng ký. Bạn thậm chí có thể viết một hàm Delphi, đăng ký nó với FastReport và gọi nó từ bên trong [..], đi qua một trường từ tập dữ liệu dưới dạng tham số. Những khả năng là vô tận.
  • Ghi chú FastReport có thể được thao tác từ phía Delphi, vì vậy bạn có thể sử dụng bất kỳ chức năng nào bạn muốn thay đổi Văn bản của bản ghi nhớ.
  • Các bản ghi nhớ cũng có thể được thao tác từ tập lệnh của dự án (từ bên trong báo cáo, không phải từ Delphi), bạn cũng có thể làm bất cứ điều gì bạn cần làm.
0

bạn có thể sử dụng mã này trong báo cáo nhanh:

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; 
Các vấn đề liên quan