Su solución es perfectamente razonable. Tengo un complemento COM de Excel que hace algo muy similar. En ese código configuré Application.Handle en el DLL para que sea el manejador de ventana de la ventana principal de Excel. Eso es análogo a lo que estás haciendo.
El problema es que debe configurar correctamente el propietario de la ventana. Necesita la cadena de propiedad para llegar hasta el formulario principal de su aplicación. Los formularios en una DLL no tienen conocimiento de cuál es la forma principal, por lo que debe proporcionar ese conocimiento.
Tenga en cuenta que estoy hablando del concepto de propietario de ventana tal como lo usa Windows y no del concepto de propietario de VCL, que es totalmente diferente. En la terminología de VCL esto se conoce como padre emergente y usted podría resolver su problema estableciendo explícitamente el padre emergente del formulario DLL como el formulario principal. Las propiedades relevantes son PopupMode y PopupParent. Para los formularios que viven en la aplicación principal, el VCL naturalmente hará que su padre emergente sea la forma principal.
Sin embargo, después de haber hablado explícitamente del establecimiento de elementos emergentes, me gustaría destacar que su solución actual es más simple y más conveniente.
Lo que ambas soluciones hacen es asegurarse de que todos los formularios auxiliares sean propiedad del formulario principal. Eso significa que estos formularios siempre están en la parte superior de la forma principal. Significa que las formas auxiliares se minimizarán si se minimiza la forma principal. Lea acerca de windows propiedad aquí: Window Features.
Por cierto, si ha estado utilizando paquetes de tiempo de ejecución en lugar de una DLL, el código en el paquete estaría conectado al mismo VCL que el formulario principal. Por lo tanto, el código empaquetado podría ver el formulario principal y establecer apropiadamente el propietario de la ventana. Esta es sin duda una ventaja de usar paquetes. Por supuesto, puede haber una buena razón por la cual necesita usar archivos DLL en lugar de paquetes.
Gracias por eso. Me preguntaba si necesito establecer la propiedad MainFormOnTaskBar en true en el objeto de la aplicación que se encuentra dentro de la DLL. –
Dado que el objeto de la aplicación en la DLL no tiene forma principal, entonces supongo que no necesitamos o no debemos establecer MainFormOnTaskBar en true en el objeto de la aplicación –
acordado, no hay necesidad de eso, no es que realmente importe ya que supongo que Application.MainForm no se asigna porque nunca se llama a Application.CreateForm. –