Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda formularios MDI - DLL (https://www.clubdelphi.com/foros/showthread.php?t=16807)

neon 13-12-2004 11:22:32

Ayuda formularios MDI - DLL
 
Hola,

Tengo que hacer una pequeña aplicacion de prueba con formularios MDI y DLL.
Lo que debo hacer es llamar a una Dll que será un formulario MDIChild, llamado desde un formulario MDI.

Bien lo que hago es declarar el formulario de la DLL como formulario MDIChild y el formulario desde el cuál llamo la Dll es formulario MDI.

El problema que tengo es que al crear el formulario me da un error de
"Cannot create form. No MDI forms not currently active"

¿Como que los formularios MDI no están activos, que debo hacer para solucionar este problema? ¿Sabeis alguna dirección o documento que trate los formularios MDI?

Saludos.

Lepe 13-12-2004 12:46:13

Revisa el código viendo el orden de creación de las ventanas.

Por ejemplo: primero creas un Datamodule, despues la ventana MDI
Si dentro del datamodule llamas a crear ventanaChild te dará error.

En el Oncreate del MDI creas las ventanas hijas?? Pásalo al evento OnShow del MDI

Saludos

neon 13-12-2004 13:01:28

Declaro como FormMDI el formulario1.

Una vez que pulso un boton de este formulario1 (por ejemplo) llamo a una función principal de la DLL, la cuál crea el formulario2 que es el MDIChild.

Pero al realizar el create de este formulario2 (MDIChild) me sale el mensaje de error. Este es el código de la función de la DLL:

function editar(FormPadre: TForm) :integer;
var
Form2 : TForm2;
begin
Application.Handle := FormPadre.Handle;
try
Form2 := TForm2.Create(FormPadre);
Form2.FormStyle := fsMDIChild;
Form2.Show;
Result := 0;
except
on e: exception do
begin
ShowMessage('Error: ' + e.Message);
Form2.Free;
end;
end;
end;

Alguna sugerencia?

neon 13-12-2004 13:09:23

No se si el problema es una limitación de delphi.

Se puede tener un formulario padre (MDI) en una aplicacion, llamado form1 p.e., y llamar a una DLL que cree un formulario que se encuentra en dicha DLL, y que este formulario sea hijo (ChildMDI) del form1?
Porque no se si esto se puede hacer.

Lepe 15-12-2004 11:17:34

He visto algunos detalles que paso a comentarte.

el Handle del forrm padre no debes asignarlo al Handle de Application, son cosas distintas.

Form2 está declarada dentro de la función, eso significa que al salir, pierdes la referencia a esa ventana. Form2 debe estar declarada en un sitio Global.

Tampoco hace falta hacer el Show de la ventana, ya que al crearse una de ellas, en un entorno MDI, siempre se muestran por defecto.

Código Delphi [-]

var Form2:Tform2;

...
 function editar(FormPadre: TForm) :integer;
begin

Form2 := TForm2.Create(FormPadre);
try
  Form2.FormStyle := fsMDIChild;
  Result := 0;
except
on e: exception do
begin
  ShowMessage('Error: ' + e.Message); 
  FreeandNil(form2);
end;
end;

Si esto no soluciona tu problema, igual será la forma de cargar la Dll :confused:

saludos y espero que te ayude


La franja horaria es GMT +2. Ahora son las 20:59:17.

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