domingo, 30 de junio de 2019

Formularios MDI.

Mucho debate genera este tema, como que es obsoleto, antiguo, etc. Siempre que busqué información terminé abandonando, porque encontré paquetes abandonados, que use frames y miles de consejos de no usarlos. A mí me parece más ridículo programar todo con showmodal, si bien es más cómodo, fácil y, hasta si se quiere, seguro; pero no dejo de tener en mis programas un formulario principal eternamente vacío, en la mayoría de los casos. No me refiero a los formularios en cascada, sino a que cada vez que se abra un formulario, el mismo ocupe el espacio que hay en el formulario principal. También algunos usuarios prefieren este método a un formulario showmodal flotando. Probablemente esto pueda hacerse mejor usando frames, pero de momento lo desconozco.
La solución se me ocurrió simplemente pensando en la propiedad aling:=alClient pensé que si funciona con un TMemo, ¿por qué no con un Form? y así encontré en el foro, utilizando la búsqueda avanzada, la clave: FromStyle, uno debe ser fsMDIForm y el otro fsMDIChild sin olvidar Aling alClient.

En el video se muestra, con errores como el que se ve en el minuto 3:30 donde intento establecer el parentesco del Form1 respecto de Form2 sin notar que el Form2 se crea después que el Form1 obteniendo un hermoso SIGSEGV apreciable en el minuto 5.



Este error se soluciona cambiando en el archivo del proyecto el orden de creación de los formularios y estableciendo el parentesco en el evento Create del Form1.



Es solo un ejemplo, la mayoría de los formularios los creo, los muestro y los libero: Fomr2.Crate(nil); Form2.ShowModal; FreeAndNil(Form2); todavía no probé como hacerlo, pero ya sé que ShowModal no se utiliza con un Form de estilo fsMDIChild, y es lógico.

Código fuente Formularios MDI.

No hay comentarios:

Publicar un comentario