2012-02-10 20 views
5

que tienen un objeto de notas en mi informe, y la necesidad de sustituir "% ...%" cuerdas. Por ejemplo, en el delirio del Informe:¿Cómo puedo reemplazar cadenas en una nota (FastReport)?

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

Sin embargo, no existe un método (o propiedad) para sustituir el texto, en el FastReport. ¿Como puedo hacer esto?

estoy usando Fast Report 4.9.72 y Delphi 2010.

Gracias!

Respuesta

6

Como no hay StringReplace disponible en FastReport, lo haría desde el código Delphi. Es posible importar funciones de alguna manera, pero esto me parece mejor arreglado. Tenga en cuenta que, en este primer ejemplo, supongo que existe el Memo1 (de lo contrario, obtendría una infracción de acceso).

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; 

Si no está seguro sobre el nombre del componente o tipo usted debe usar algo como esto:

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 ! ¡Gracias hombre! –

0

no sé cuál es el propósito de que el código estaba en Rave Reports como nunca lo usé, pero puedo sugerir alternativas para FastReport:

  • En el informe rápido apoyo sustitución de variables todo de Memo. Configure una variable de informe llamada "my_str", edite su Memo e incluya la variable. El texto en la nota se vería así: [my_str]. Esta es probablemente la mejor opción. El contenido de esos paréntesis es en realidad una expresión pascal completa que puede hacer uso de campos de conjuntos de datos, variables de informe, funciones registradas. Incluso se podría escribir una función de Delphi, registrarlo con FastReport y lo llaman desde dentro de la [..], pasando un campo del conjunto de datos como un parámetro. Las posibilidades realmente son infinitas.
  • memos FastRepor pueden ser manipulados desde el lado Delphi, por lo que puede utilizar cualquier función que desea cambiar el texto de la nota.
  • memos también pueden ser manipulados desde el guión del proyecto (desde el informe, no desde Delphi), también se puede hacer lo que tiene que hacer.
0

puede utilizar este código en el informe rápido:

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; 
Cuestiones relacionadas