Delphi--error-1400-identificador-ventana-no-válido

Me salta en tiempo de ejecución el siguiente error : Código de Error 1400, El identificador de ventana no es válido.

Mi aplicación básicamente consta de 2 elementos un TreeView que uso a modo de menu y PageControl donde muestro los formularios que se corresponden con elementos del menu del árbol.
El error que comento solo me salta cuando salgo de la aplicación, antes de hacer unas correcciones en el código me saltaba siempre que cerraba un formulario de los que creo en tiempo de ejecución y para eso no me sucedía con todos los formularios, solo con los que tenían elementos que se creaban en tiempo de ejecución.
Antes de nada uso Delphi 7.
En el formulario principal los trozos de código que tienen que ver con el error o por lo menos lo que yo creo que son:
El procedimiento que muestra el formulario en el pageControl
El procedimiento que elimina el formulario del PageControl
El procedimiento que crea el formulario en cuestión
El procedimiento que destruye el formulario

Para mostrar un formulario en el pagecontrol uso el siguiente código
procedure TForm1.AnadirFormAPestana( Form : TForm ; Titulo : String );
var
  lPestana : TTabSheet;
begin
 
// creo la pestaña
  lPestana := TTabSheet.Create(nil);
 
// Asigno la pestaña al page Control
 
lPestana.PageControl := PageControl1;
 
// Le pongo un titulo a la pestaña
  lPestana.Caption := Titulo;
 
// Selecciono la pestaña que acabo de crear
  PageControl1.ActivePage := lPestana;
 
// Hago que la pestaña sea visible
   lPestana.Visible := true;
 
// Asigno el formulario a la pestaña
  Form.ParentWindow := lPestana.Handle;
 
// Hago visible el formulario
  Form.Visible := true;
 
// Posiciono el formulario en la pestaña
  form.Top := 0;
  form.Left := 0;
 
// Elimino los bordes del formulario
  form.BorderStyle := bsNone; // Quita los bordes la ventana del formulario
 
// Asigno el color de fondo al formulario
  form.Color := EsquemaBBDD.Color;
 
// Registro la acccion en el log
  gREgistro.Log(T_TRA,now,'Abriendo Formulario :' + Titulo);
end;

Para eliminar el formulario del pagecontrol
procedure TForm1.EliminarPestana;
begin
  // Registro la accion en el log
  gREgistro.Log(T_TRA,now,'Cerrando Formulario : ' + PageControl1.ActivePage.Caption + ' ...');
  // Elimino la pestaña activa
  PageControl1.Pages[PageControl1.ActivePageIndex].Destroy;
end;

Para crear el formulario desde el menu (treeview)
if gMenu.Arbol.Selected = gMenu.NodoBaseDatos then
begin
    // Creo el formulario
    FormOrigenDatos := TFrmOrigendeDatos.Create(nil);

   // Asigno el procedimiento de eliminar pestaña al evento de cerrar formulario
    FormOrigenDatos.onCerrarFormulario := EliminarPestana;
   // Asigno procedimiento de Aceptar conexion al evento Aceptar Conexion
    FormOrigenDatos.onAceptarConexion := AceptarOrigenDatos;
    // Inicializo el formulario
    FormOrigenDatos.Iniciar_Formulario;
    // Añado el formulario al PageControl
    AnadirFormAPestana(FormOrigenDatos,'Origen de Datos');
end;

ESte código ya va dentro del código del formulario que es el que uso para cerrarlo
procedure TFrmOrigendeDatos.Button1Click(Sender: TObject);
begin
// Si el evento esta asignado ejecutar lo ss
if assigned(fonCerrarFormulario) then
begin
    // Libero la memoria del componente OpenDialog
    FreeAndNil(OpenDialog1);
    CleanupInstance;
    Destroy;

    // Lanzo el evento de cerrar Formulario
    fonCerrarFormulario;
   end;
end;

Hace una semana o así no había puesto la lineas que aparecen en negrita y el error me saltaba cuando cerraba el formulario en cuestión, pero ahora me salta el error cuando cierro la aplicación. Este error solo me salta cuando se trata de un formulario que crea algún componente en tiempo de ejecución como puede ser un TEdit, TComboBox, etc en el ejemplo un OpenDialog, pero esto me sucede con el resto de formularios que he creado y les añado algo en tiempo de ejecución.

1 respuesta

Respuesta
1
Prueba liberando los objetos antes de cerrar los formularios.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas