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;
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.