Buenas:
Estoy mejorando una aplicación y se me ocurrio usar Streams en lugar de archivos temporales pero no he podido "pasar" el resultado de una funcion como un stream.
El caso es el siguiente:
Tengo una aplicacion que usa campos memo para almacenar archivos html (comprimidos) (En el registro 1 guardo los encabezados, y en los siguientes los diferentes contenidos, lo trabajé así para ahorrar espacio ya que como los html son generados desde winword los encabezados de los archivos eran identicos y muy, MUY grandes) entonces para poder usar el archivo html completo uso:
Código Delphi
[-]
FiltrarTextos(db,Encabezados,Codigo,IdLibro);
Html := TMemoryStream.Create;
InputStream := TMemoryStream.Create;
OutputStream := TMemoryStream.Create;
Temp := TMemoryStream.Create;
db.First;
While Not(db.Eof) do
Begin
InputStream.Clear;
OutputStream.Clear;
Temp.Clear;
TBlobField(db.FieldByName('Data')).SaveToStream(Temp);
InputStream.LoadFromStream(temp);
If InputStream.Size <> 0 Then
Begin
ZDecompressStream(InputStream,OutputStream); Html.CopyFrom(OutputStream,0);
End;
db.Next;
End;
html.SaveToFile(Destino);
Temp.Free;
OutputStream.Free;
InputStream.Free;
html.Free;
Como pueden ver eso me deja con un archivo temporal (destino)
Que cargo en un componente WebBrowser: TEmbeddedWB que permite usar:
WebBrowser.LoadFromFile(Destino);
Pero revizandolo un poco más tambien permite cargarlo desde:
WebBrowser.LoadFromStream(Destino);
Lo que quisiera hacer es convertir el procedimiento anterior en una funcion donde al final poga algo como:
Código Delphi
[-]
Function CargarStreamHTML:TMemoryStream;
Begin
Result := html;
End;
He hecho algunas pruebas y he tenido problemas con los create's y Free's ya que al final no sé si debo liberar el objeto asignado al result o si tengo que crear un objeto para asignarle el resultado.
En fin lo que necesito es un ejemplo de una funcion en la que el resultado pueda ir directo a un método "LoadFromStream".
Gracias
Uso delphi 7 + el TEmbeddedWB (
http://www.euromind.com/iedelphi/embeddedwb.htm)
Toda la aplicación corre localmente y se usa para consultar unos informes históricos