Ver Mensaje Individual
  #1  
Antiguo 09-10-2016
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Reputación: 21
santiago14 Va por buen camino
Thumbs up Enviar Stream a un frxRichView de FastReport

Buenas, realmente FastReport es bueno, pero es dificultoso encontrar algunas cosas.
En mi caso particular estuve buscando por varios días el como pasar datos desde un RichEdit hacia un frxRichView.
Luego de bastante buscar encontré lo siguiente. Si hay algo mejor, por favor, lo agregan.
Gracias.

Primeramente hay que pasar un Stream a OleVariant, lo hice con un pequeño módulo que encontré en este lugar

Por las dudas, lo copio también:
Código Delphi [-]
function MemoryStreamToOleVariant(Strm: TMemoryStream): OleVariant;
var
  Data: PByteArray;
begin
  Result := VarArrayCreate ([0, Strm.Size - 1], varByte);
  Data := VarArrayLock(Result);
  try
    Strm.Position := 0;
    Strm.ReadBuffer(Data^, Strm.Size);
  finally
    VarArrayUnlock(Result);
  end;
end;

function OleVariantToMemoryStream(OV: OleVariant): TMemoryStream;
var
  Data: PByteArray;
  Size: integer;
begin
  Result := TMemoryStream.Create;
  try
    Size := VarArrayHighBound (OV, 1) - VarArrayLowBound(OV, 1) + 1;
    Data := VarArrayLock(OV);
    try
      Result.Position := 0;
      Result.WriteBuffer(Data^, Size);
    finally
      VarArrayUnlock(OV);
    end;
  except
    Result.Free;
    Result := nil;
  end;
end;

Ahora, tengo un componente frxRichView llamado 'rchTextoMembrete', una variable de FastReport llamada 'TextoMembrete'
Hago click derecho sobre 'rchTextoMembrete' --> Editar... y allí coloco la variable, de la siguiente forma: [TextoMembrete]

El código para pasar los datos hacia el FastReport:
Código Delphi [-]
procedure TfrmEditorDocumentoMembretado.btnConfirmarTextoEditadoClick(
  Sender: TObject);
var
  stream:TMemoryStream;
begin
  stream:=TMemoryStream.Create;
//Guardamos el contenido como un flujo en stream
  Editor.Lines.SaveToStream(stream);
  dmReportes.dmReportesCarahuasi.frxImpresionMembrete.Variables['TextoMembrete']:=MemoryStreamToOleVariant(stream);
  dmReportes.dmReportesCarahuasi.frxImpresionMembrete.ShowReport();
end;

En el documento FastReport podemos ver lo que escribimos en el editor RichEdit, respetando el formato, que es lo que queríamos.
Bueno, espero sirva.

Santiago.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita