Formularios

Hola, un saludo :)
Resulta que tengo un formulario principal y según que momento puedo tener otros formularios, en los cuales unos tienen un TMediaPlayer y varias imágenes, otros imágenes, etc.
Mi problema es que si abro y cierro un formulario continuamente, al final me da un error de memoria.
Creo que no me libera la memoria adecuadamente y no se que hacer porque creo que hago todo bien.
Si me pudiera alguien indicar los pasos necesarios para liberar un formulario completamente de memoria y todos sus objetos, el programa creo que me funcionaría.
Muchas gracias por las molestias y un saludo.
Oscar

1 Respuesta

Respuesta
1
Sólo tienes que hacer un free de la instancia que has creado.
Ej.
var
f1 : Tform1;
procedure crear;
begin
if not assigned(f1) then
f1 := Tform1.create(nil);
end;
procedure eliminar;
begin
if assigned(f1) then
f1.free;
end;
Es verdad.
Hago .Free y luego lo = a nil.
Pero, ¿si tienes un componente creado por otra persona, y lo quieres liberar, igual con poner .Free, no es suficiente?.
En mi caso, lo creo y lo borro cada cierto tiempo, y al final me casca.
Supongo que algo no se me libera bien y pierde memoria y solo en un caso uso punteros, pero creo que los libero bien.
Otra cosa.
Cuando me has puesto esta linea...
f1 := Tform1.create(nil);
¿Por qué has puesto nil?
Lo del componente ya es otra cosa.
Si está bien programado, con hacerle un free en el destroy del form bastaría. Lo que te pasa es que no acabas de liberar bien todo lo que creas. Sé minucioso y ánimo tú puedes.
Opp! Perdon, pensaba q te había contextado. Pues, ya lo he arreglado, a base de meter horas y ser minucioso, como tú decías. El problema, por si le interesa a alguien, era q tenía unos divx q no eran compatibles, lo solucioné poniendo divx pro q si era compatible y el fallo se me producia al de 1 hora de juego aproximadamente. Otra cosa, en vez de Free, he puesto Release, q supongo q hará 3 cuartos de lo mismo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas