Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-11-2004
Avatar de sitrico
[sitrico] sitrico is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Caracas, Venezuela
Posts: 295
Poder: 22
sitrico Va por buen camino
Optener un Stream como "Result" en una funcion

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);  
// Toma el Registro 1 + el que me interesa
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); // estan comprimidos
      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
// Mismo codigo de antes para leer y descomprimir
// pero en lugar de:
// html.SaveToFile(Destino);
// Usar
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
__________________
Sitrico

Última edición por sitrico fecha: 24-11-2004 a las 17:42:16.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 00:35:17.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi