Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-11-2007
Avatar de walito
walito walito is offline
Miembro
 
Registrado: jun 2005
Posts: 121
Poder: 19
walito Va por buen camino
Problema GRAVE con LoadPackage y MDIChild

Buenas!!

Tengo un problema GRAVE con levantar de un archivo bpl un formulario MDICHILD.

El codigo que uso es el siguiente:
Código Delphi [-]
function TModules.executeModule(moduleName: string): Integer;
var
  AClass: TPersistentClass;
begin
      {* verifico que el modulo existe, junto con el archivo *}
    if
      FileExists(ExtractFilePath(ParamStr(0))+moduleName)
      and
      (moduleName <> '')
    then
    begin
        {* Cargo el modulo a memoria *}
        handle := LoadPackage(ExtractFilePath(ParamStr(0))+moduleName);

        {* si es un modulo válido *}
        if handle <> 0 then
        begin
            try
                AClass := GetClass(CLASSBPL);

                try
                    if AClass <> nil then
                    begin
                        LockWindowUpdate(Handle);
                        EnableAnimation(false);

                        AForm := nil;
                        AForm := TComponentClass(AClass).Create(Application) as TForm;
                        

                        EnableAnimation(true);
                        LockWindowUpdate(0);

                        AForm.Show;

                        Result := 0;
                    end;
                except
                    on E:Exception do
                       Result := -1;
                end;
            except
                on E:Exception do
                   Result := -2;
            end;
        end
        else
            Result := -3;
    end
    else
        Result := -4;
end;

Este es un metodo que esta en una clase que la uso para levantar y ejecutar los BPL.
Funciona todo bien, el problema es que no puedo liberar la el package cuando cierro el FORM, ya que no me deja abrir o cargar otro package hasta que no cierre y libere este.

Que forma puede haber para hacer esto bien?

Intente levantando un Thread que verifica si el form esta showing y ahi liberar pero es un bardo!

Alguien le paso esto? en google ya no se como buscar.

Porque son 2 cosas las que hay que liberar, es el handle y el AForm, es mas es el handle ya que el MDIChild si no me equivoco ya se libera con el caFree.

Gracias

Última edición por walito fecha: 12-11-2007 a las 22:22:56.
Responder Con Cita
  #2  
Antiguo 12-11-2007
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
porque esta linea:
LockWindowUpdate(Handle);
a un package??? porque no a la forma que creas?, no se si por ahi vaya el error
Responder Con Cita
  #3  
Antiguo 12-11-2007
Avatar de walito
walito walito is offline
Miembro
 
Registrado: jun 2005
Posts: 121
Poder: 19
walito Va por buen camino
No hace solo es para q no se vea la animacion del formulario, pero no hace nada mas que eso, si lo sacas es lo mismo.
Responder Con Cita
  #4  
Antiguo 13-11-2007
Avatar de walito
walito walito is offline
Miembro
 
Registrado: jun 2005
Posts: 121
Poder: 19
walito Va por buen camino
El problema es que es NECESARIO liberar el HANDLE despues de cerrar el form y ahi es donde tengo el gran problema, ya que al poner un Unloadpackage en el OnDestroy del form da error ya que el form todavia existe ya que estoy liberandolo cuando todabia existe el form.

Que evento o de que forma puedo liberar el HANDLE, sabiendo que el form ya esta free?
Responder Con Cita
  #5  
Antiguo 13-11-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por walito Ver Mensaje
El problema es que es NECESARIO liberar el HANDLE despues de cerrar el form y ahi es donde tengo el gran problema, ya que al poner un Unloadpackage en el OnDestroy del form da error ya que el form todavia existe ya que estoy liberandolo cuando todabia existe el form.

Que evento o de que forma puedo liberar el HANDLE, sabiendo que el form ya esta free?
Creo que el problema está en intentar liberar el Package desde un formulario que está contenido en ese package.
Esa operación deberías hacerla desde fuera; Seguraente desde el mismo lugar desde donde llamas a cargar el package.

Cuando crees el package intenta capturar el evento OnDestroy/OnClose del Form hacia un procedimiento de la aplicación. A ese procedimiento te llegará el control cuando Liberes/cierres el formulario del package.

Puedes intentarlo a ver qué tal...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 13-11-2007
Avatar de walito
walito walito is offline
Miembro
 
Registrado: jun 2005
Posts: 121
Poder: 19
walito Va por buen camino
Asi es , ese es el problema, intentare poniendo un Observer para q le avisen que el form se cerrara, cualquier cosa les comento.

Gracias
Responder Con Cita
  #7  
Antiguo 13-11-2007
Avatar de walito
walito walito is offline
Miembro
 
Registrado: jun 2005
Posts: 121
Poder: 19
walito Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
Creo que el problema está en intentar liberar el Package desde un formulario que está contenido en ese package.
Esa operación deberías hacerla desde fuera; Seguraente desde el mismo lugar desde donde llamas a cargar el package.

Cuando crees el package intenta capturar el evento OnDestroy/OnClose del Form hacia un procedimiento de la aplicación. A ese procedimiento te llegará el control cuando Liberes/cierres el formulario del package.

Puedes intentarlo a ver qué tal...
Puse un observer y nada, explota por todos lados y da error en memoria!
Es una mie.. las librerias estas
Responder Con Cita
  #8  
Antiguo 13-11-2007
Avatar de walito
walito walito is offline
Miembro
 
Registrado: jun 2005
Posts: 121
Poder: 19
walito Va por buen camino
Bueeee por fin lo encontre!!!

Buscando en la nebulosa de google encontre que una persona tenia el mismo problema, la solucion fue usar la API de mensajes de windows

Yeah!! en el bpl en el OnDestroy ponemos PostMessage y en el formulario principal esperamos dicho evento y ahi mandamos a hacer Unloadpackage !!

Bueno si para alguien le interesa ahi esta la solucion.

Gracias
Responder Con Cita
  #9  
Antiguo 14-11-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por walito Ver Mensaje
Yeah!! en el bpl en el OnDestroy ponemos PostMessage y en el formulario principal esperamos dicho evento y ahi mandamos a hacer Unloadpackage !!
Estaría bien que pusieras algo de código de la solución o el link de la página.
A mi personalmente me interesa, y tal vez otros usuarios en consultas posteriores también les pueda ir bien.

Gracias.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #10  
Antiguo 14-11-2007
Avatar de walito
walito walito is offline
Miembro
 
Registrado: jun 2005
Posts: 121
Poder: 19
walito Va por buen camino
Thumbs up

Ok, es mi idea no te hagas drama que lo voy a publicar.

Dejame armar todo y asi ya dejo todo de una.

Gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
problema con mdichild ercrizeporta Varios 4 16-10-2007 10:01:07
Problema grave de rendimiento ACK Firebird e Interbase 13 12-09-2005 17:10:44
una simple función, un grave problema.. DynaRoc Varios 6 23-11-2004 16:39:55
Problema con MDIChild thecarlos Varios 9 16-01-2004 00:08:43
Grave problema en BASE DE DATOS interbase Manuel Firebird e Interbase 3 10-06-2003 01:05:36


La franja horaria es GMT +2. Ahora son las 13:16:00.


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