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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-07-2007
Delar Delar is offline
Miembro
 
Registrado: oct 2006
Posts: 90
Poder: 18
Delar Va por buen camino
Abrir archivos en TMemo o equivalente

A ver, no es lo que el titulo dice exactamente, pues eso si que lo se hacer. Lo que necesito saber, es, como abrir por ejemplo un .jpg en un TMemo (como texto, no como imagen) y que pulsando un boton el contenido de ese TMemo se extraiga en el nombre deseado. Aquí dejo el codigo que tengo, y que abriendo un .exe solo lee las 3 primeras letras.
Código Delphi [-]
OpenD1.Execute;
Memo1.Lines.LoadFromFile(OpenD1.FileName);
Y al pulsar el botón:
Código Delphi [-]
SaveD1.Execute;
Memo1.Lines.SaveToFile(SaveD1.FileName);

Saludos y gracias de antemano!
Responder Con Cita
  #2  
Antiguo 24-07-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
¿Por que quieres abrir un jpg, o un .exe en un memo? Ten en cuenta que el memo piensa que lo que esta abriendo es un archivo de texto, y por lo tanto que cada byte se corresponde con un carácter. En lo archivos que tu nombras, hay muchos bytes que no se corresponden con ningún carácter "imprimible" y por lo tanto no se pueden mostrar, es mas, el byte 0 se considera como final del texto, por eso en el caso del .exe solo te muestra las 3 primeras letras, porque la cuarta siempre es 0.

En resumen, por que no explicas mejor lo que quieres conseguir con esto e intentamos buscar una solución mejor
Responder Con Cita
  #3  
Antiguo 24-07-2007
Delar Delar is offline
Miembro
 
Registrado: oct 2006
Posts: 90
Poder: 18
Delar Va por buen camino
Es como un "copiador" de archivos. Ya se que hay metodos mucho más fáciles, pero es por experimentar.
También probé con un TStringList, pues no ha de "imprimir" los carácteres, pero tampoco funciona.
Saludos!

Última edición por Delar fecha: 24-07-2007 a las 14:16:58.
Responder Con Cita
  #4  
Antiguo 24-07-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Bien, así que se trata de copiar archivos. Pues como ya has visto, el TMemo no es la mejor opción. Hay algunas mejores.

Tenemos la evidente:
Código Delphi [-]
  CopyFile(PChar('Origen.exe'),PChar('Destino.exe'),FALSE);

Esta otra hace un buen uso de los stream:
Código Delphi [-]
var
  Origen, Destino: TFileStream;
begin
  Origen:= TFileStream.Create('Origen.jpg', fmOpenRead or fmShareDenyWrite);
  try
    Destino:= TFileStream.Create('Destino.jpg', fmCreate);
    try
      Destino.CopyFrom(Origen,0);
    finally
      Destino.Free;
    end;
  finally
    Origen.Free;
  end;
end;

Y por que no, siempre quedan los clasicos:
Código Delphi [-]
var
  Buffer: Array[1..10*1024] of Char;
  Origen, Destino: File;
  Leidos, Escritos: Cardinal;
begin
  Filemode:= 0;
  AssignFile(Origen,'Origen.jpg');
  {$I-}
    Reset(Origen,1);
  {$I+}
  if IOResult = 0 then
  try
    AssignFile(Destino,'Destino.jpg');
    {$I-}
      Rewrite(Destino,1);
    {$I+}
    if IOResult = 0 then
    try
      repeat
        BlockRead(Origen,Buffer,Sizeof(Buffer),Leidos);
        BlockWrite(Destino,Buffer,Leidos,Escritos);
      until Leidos < Sizeof(Buffer);
    finally
      CloseFile(Destino);
    end;
  finally
    CloseFile(Origen);
  end;
end;
Responder Con Cita
  #5  
Antiguo 24-07-2007
Delar Delar is offline
Miembro
 
Registrado: oct 2006
Posts: 90
Poder: 18
Delar Va por buen camino
Esos codigos son geniales, pero me interesa que si se borra el archivo que he de copiar se quede almacenado en el programa para que aunque ya no esté el archivo pueda seguir copiandolo.

Saludos!
Responder Con Cita
  #6  
Antiguo 24-07-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Bien, entonces volvamos sobre los Streams. Existen un tipo de Stream, llamado TMemoryStream, que nos permiten almacenar datos en memoria. Así que solo tenemos que crear un Stream de este tipo, cargar el archivo y guardarlo donde queramos.

Vamos con un poco de código:
Código Delphi [-]
// Primero declaramos el Stream como variable global
Stream: TMemoryStream;

// En el evento OnCreate, por ejmplo, lo creamos
Stream:= TMemoryStream.Create;

// En el evento OnClose, por ejmplo, lo desturimos
Stream.Free;

// Para cargar el archivo
Stream.LoadFromFile('Origen.jpg');

// Para guardar el archivo
Stream.SaveToFile('Destino.jpg');

¿Nos vamos acercando a lo que tu quieres?

Última edición por seoane fecha: 24-07-2007 a las 14:50:39.
Responder Con Cita
  #7  
Antiguo 24-07-2007
Delar Delar is offline
Miembro
 
Registrado: oct 2006
Posts: 90
Poder: 18
Delar Va por buen camino
Sip, es eso lo que ando buscando.
Y podria hacer por ejemplo, Stream[1], Stream[2], ... o e de utilizar variables diferentes?

Saludos y gracias!
Responder Con Cita
  #8  
Antiguo 24-07-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por Delar
Y podria hacer por ejemplo, Stream[1], Stream[2], ... o e de utilizar variables diferentes?
Si sabes el numero máximo de Streams que vas a necesitar, puedes usar algo como esto:
Código Delphi [-]
// Declaramos un array de 10 Streams
Stream: array[1..10] of TMemoryStream;

// En el evento OnCreate, por ejmplo, los creamos
var
  i: Integer;
begin
  for i:= Low(Stream) to High(Stream) do
    Stream[i]:= TMemoryStream.Create;
end;

// En el evento OnClose, por ejmplo, los desturimos
var
  i: Integer;
begin
  for i:= Low(Stream) to High(Stream) do
    Stream[i].Free;
end;

// Para cargar el archivo
Stream[5].LoadFromFile('Origen.jpg');

// Para guardar el archivo
Stream[5].SaveToFile('Destino.jpg');
Responder Con Cita
  #9  
Antiguo 24-07-2007
Delar Delar is offline
Miembro
 
Registrado: oct 2006
Posts: 90
Poder: 18
Delar Va por buen camino
OK ahora si que está listo. Saludos y gracias!!!
Responder Con Cita
Respuesta



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema al abrir archivos adjuntos vick Internet 1 24-03-2007 07:20:41
Abrir varios archivos asociados a la aplicacion JMGR Varios 2 11-02-2007 00:12:39
abrir de Archivos as400? Ryu Conexión con bases de datos 1 19-11-2005 00:44:31
Abrir archivos pdf luxus OOP 1 22-10-2005 23:37:24


La franja horaria es GMT +2. Ahora son las 06:39:04.


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