2012-02-10 14 views
5

Ho un oggetto memo nel mio rapporto e un bisogno sostituire le stringhe "% ...%". Per esempio, in Rave Report:Come posso sostituire le stringhe in un memo (FastReport)?

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

Ma, non esiste un metodo (o proprietà) per sostituire il testo, nel FastReport. Come posso farlo?

Sto usando Fast Report 4.9.72 e Delphi 2010.

Grazie!

risposta

6

Poiché non è disponibile lo StringReplace in FastReport, lo farei dal codice Delphi. È possibile importare le funzioni in qualche modo, ma questo mi sembra meglio organizzato. Si noti che in questo primo esempio suppongo che esista lo Memo1 (altrimenti si otterrebbe una violazione di accesso).

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; 

Se non si è certi sul nome del componente o tipo si dovrebbe usare qualcosa di simile:

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 ! Grazie amico! –

0

non so quale sia lo scopo di tale codice era in rapporti Rave come ho mai usato, ma posso suggerire alternative per FastReport:

  • Nel rapporto veloce supporto sostituzione delle variabili tutti di Memo. Imposta una variabile di rapporto denominata "my_str", modifica il tuo Memo e includi la variabile. Il testo nel promemoria sarebbe il seguente: [my_str]. Questa è probabilmente l'opzione migliore. Il contenuto di queste parentesi è in realtà un'espressione pascal completa che può utilizzare campi di set di dati, variabili di report, funzioni registrate. È anche possibile scrivere una funzione Delphi, registrarla con FastReport e richiamarla dall'interno dello [..], passando un campo dall'insieme di dati come parametro. Le possibilità sono davvero infinite.
  • I memo di FastReport possono essere manipolati dal lato Delphi, quindi è possibile utilizzare qualsiasi funzione che si desidera modificare il testo del memo.
  • I memo possono anche essere manipolati dallo script del progetto (all'interno del report, non da Delphi), puoi anche fare tutto ciò che devi fare.
0

è possibile utilizzare questo codice in rapporto veloce:

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; 
Problemi correlati