Ver Mensaje Individual
  #1  
Antiguo 01-07-2008
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Reputación: 23
ContraVeneno Va por buen camino
Evitar cerrar formulario principal si hay librerías cargadas dinámicamente

Tengo un formulario contenedor (MDI) en el cuál cargo una librería externa de la siguiente manera:

Código Delphi [-]
TCrear = procedure (ParentApplication: TApplication; ParentForm: TForm); stdcall;
......
Procedure TMain.Cargar.....
var
   DllHandle: THandle;
   ProcAddr: FarProc;
   CrearForma: TCrear;
....
   DllHandle := LoadLibrary(PAnsiChar('UnArchivo.Dll'));
   ProcAddr := GetProcAddress(DllHandle, 'CrearForma');
   if ProcAddr <> nil then begin
      CrearForma := ProcAddr;
      CrearForma(Application,Self);
   end;
....
En el archivo .dll tengo lo siguiente:
Código Delphi [-]
procedure CrearForma(ParentApplication: TApplication; ParentForm: TForm); export; stdcall;
begin
   Application:=ParentApplication;
    with TForm1.Create(Application) as TCustomForm do begin
      MyParentForm:=ParentForm;
      MyParentApplication:=Application;
      FormStyle := fsMDIChild;
      Show;
    end;
end;

exports
   CrearForma;

Con esto puedo cargar el DLL sin ningún problema y me lo muestra como hijo (MDIChild) de mi formulario principal (MDI).

Pero en mi formulario principal (MDI), la variable MDIChildCount siempre me da 0. Aún y cuando yo veo que está el formulario de la DLL creado como hijo (Mdichild).

¿cómo puedo hacer que mi DLL se considere en el formulario principal?
Es decir, ¿como puedo hacer que MDIChilCount realmente me cuente mi
DLL?

Lo que al final quiero lograr, es evitar que se cierre el formulario principal (MDI) si existen DLL cargadas:
Código Delphi [-]
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if MDIChildCount <> 0 then begin
   showmessage('No cierras');
   CanClose := False;
  end;
end;

Y aprovechando, ¿como puedo hacer para cargar una DLL solo una vez?


P.D. Se me olvidó cuál era la correcta definición de una DLL: ¿librería o biblioteca?
__________________


Última edición por ContraVeneno fecha: 01-07-2008 a las 22:06:04.
Responder Con Cita