FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Abstract Error al cerrar aplicación
Buenas a todos.
Tengo un problemón. Tengo mi aplicación Delphi (con Delphi 7) que permite cambiar de tipo de usuario desde dentro, sin cerrar la aplicación. En el cambio de usuario, dependiendo del usuario, tiene unos permisos u otros, muestra y esconde menús, componentes.... El caso es que si cambio más de una vez de usuario, al cerrar la aplicación, me da el típico Abstract Error o/y Access Violation y aunque sé que tiene que ver con destroys y demás, no consigo encontrar donde. Os pongo parte de mi código a ver si se os ocurre algo. Gracias de antemano procedure TFormMain.BitBtnChangeUserClick(Sender: TObject); var ok : boolean; begin if ((Application.MessageBox(pChar(BwUserChange), pchar(BcAtencion), mb_ICONQUESTION or mb_OKCANCEL) = IDOK)) then begin Application.Initialize; Application.Title := 'madd02'; //leemos parametros de ejecucion ok := BfProSetOpen(); if Assigned(FormListOutput) then begin FormListOutput.Close; FormListOutput.Destroy; end; if Assigned(FormSelectAvanzado) then begin FormSelectAvanzado.Close; end; FormMain.Destroy; // Seleccion de usuario Application.CreateForm(TFormMain, FormMain); FormMain.IniForm(ok); if (BvUserApli = BcProUserCentral) then begin BvUserApli := BcProUserMuni; end else begin BvUserApli := BcProUserCentral; end; // comprobamos si se ha selecionado usuario if (BvUserApli <> '') then begin // cargamos entorno SetLength(Permisos, 0); BfProLoadOptionUser(); // Validamos entorno BfForEntorno(FormMain); // Lista de Output Application.CreateForm(TFormListOutput, FormListOutput); // inicializamos el estado de autenticación para el informe corporativo // restringido BvProValidInfCorpRes := false; if (BvUserApli = BcProUserCentral) then begin // desactivamos menus propios de SADD FormListOutput.FLBInfSelected.Visible := false; // selector avanzado //Application.CreateForm(TFormSelectAvanzado, FormSelectAvanzado); end; // inicio Application.Run; end; end; end; En el evento OnClose del Main tengo lo siguiente: for cont := (MDIChildCount - 1) downto 0 do MDIChildren[cont].Close; Action := CaFree; Y ya no sé por donde tirar. Sé que no es aconsejable utilizar Destroy, he probado con Free, incluso con Release en todos los sitios donde se me ha ocurrido pero nada. Lo dicho, gracias por vuestro tiempo |
|
|
|