Ver Mensaje Individual
  #14  
Antiguo 14-08-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Reputación: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Al parecer usan variables globales para crear los forms. Eso siempre da problemas

El bloque de código idiomático para crear y mostrar un form es:

Código Delphi [-]

procedure Foo;
var
  UnForm: TUnForm;
begin
  UnForm := TUnForm.Create(OwnerDelForm/nil);
  UnForm.Show/ShowModal;
end;

Si pasamos un owner que se encarga de liberar la memoria no hace falta más nada. Si pasamos nil y se invoca a ShowModal se debe usar un bloque try-finally para liberar el form; sino si se invoca a Show se debe interceptar el evento OnClose y asignar al parámetro Action el valor caFree

Más específicamente, yo suelo usar un ancestro que no es TForm en donde asigno caFree en el OnClose y siempre heredo de este form. De esta manera funciona bien siempre, incluso si implementa una interface. Recordando que TForm es heredero de TComponent por lo que el mecanismo de reference counting esta deshabilitado y se debe manejar la memoria manualmente
Responder Con Cita