Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Out of Memory al hacer FreAndNil (https://www.clubdelphi.com/foros/showthread.php?t=75142)

Chaja 01-08-2011 14:10:45

Out of Memory al hacer FreAndNil
 
Hola:
tengo este problema... no me ocurrio nunca hasta que puse en el form para visualizar fotos. Las cuales las cargo en un Timage, con el LoadFromFile().
Resulta que habro el formulario de ABM Articulos y al cerrar destruyo su DataModule Asociado. y ahora cuando ejecuta el FreeandNil(DatosStock), previamente haber cerrado los Dataset y querys, salta el error. Y no se como capturar el error. La misma operacion de destruir los DM lo hago en todos los form sin problema. Alguna Sugerencia???

Luis Roldan
Mar del Plata
Argentina

Chaja 01-08-2011 14:22:21

Agrego: ahora sacando lo que habia puesto de las imagenes , tambien me da el error la verdad no se si destruyo algo por que me da error de memoria :confused::confused::confused::confused:

duilioisola 01-08-2011 15:19:35

Para liberar la memoria de un TImage hay que hacer:

Código Delphi [-]
var
   Imagen: TImage;
begin
   //Cargar Imagen
   Imagen.Picture.LoadFromFile('C:\Imagen.bmp');

   // Liberar memoria utilizada por TImage
   Imagen.Picture.Free;
end;

Chaja 01-08-2011 15:41:32

Gracias, por la respuesta , hace falta hacer si cargo una imagen despues de otra? es decir hice una tabla con los path de las imagenes, y cuando seleciono un reg nuevo levanto el path y hago el loadimage(), o se va pisando dentro del Image una con otra?..
de todos modos el problema se resolvio. Pienso que es por esto. para no tener que ir a la paleta de comp. aveces copio y pego los que tengo dentro del DM y los asgino a su nuevo query y todo eso. bueno Borre el CDS, DSP y los puse de nuevo desde la paleta y no dio mas el error. hace el freeandnil del datamodule sin problema...... no se si hay una explicacion......

:rolleyes::rolleyes::confused::confused:

Luis Roldan

gracias por leerme

ecfisa 05-08-2011 20:15:49

Cita:

cuando seleciono un reg nuevo levanto el path y hago el loadimage(), o se va pisando dentro del Image una con otra?
Hola Luis.

Eso depende de como realices la creación.

Por ejemplo, de este modo se crea una instancia de TImage, se van cargando las imágenes sobre la mísma y por último se libera:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  with TImage.Create(nil) do
  try
    Stretch:= True;
    Parent:= Self;
    Picture.LoadFromFile('Imagen1.jpg');
    Application.ProcessMessages;
    Sleep(1000);
    Picture.LoadFromFile('Imagen2.jpg');
    Application.ProcessMessages;
    Sleep(1000);
    Picture.LoadFromFile('Imagen3.jpg');
    Application.ProcessMessages;
    Sleep(1000);
  finally
    Free;
  end;
end;
Si pones un componente TImage en tiempo de diseño se comporta de forma similar.

Pero de este, se crea y libera una instancia de TImage por cada imágen:
Código Delphi [-]
procedure CargarImagen(Frm: TForm; Nombre: string);
begin
  with TImage.Create(nil) do
  try
   Stretch:= True;
   Parent:= Frm;
   Picture.LoadFromFile(Nombre);
   Application.ProcessMessages;
   Sleep(1000);
  finally
   Free
  end
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  CargarImagen(Form1,'Imagen1.jpg');
  CargarImagen(Form1,'Imagen2.jpg');
  CargarImagen(Form1,'Imagen3.jpg');
end;


Saludos.


La franja horaria es GMT +2. Ahora son las 03:57:53.

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