Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Incrustar formulario dentro de otro (subformulario)

Estas en el tema de Incrustar formulario dentro de otro (subformulario) en el foro de Visual Basic clásico en Foros del Web. Hola a todos/as Estoy peleándome con el diseño de la interfaz gráfica para una aplicación que utiliza un solo formulario y un control SSTab con ...
  #1 (permalink)  
Antiguo 08/03/2005, 15:00
 
Fecha de Ingreso: mayo-2003
Ubicación: España
Mensajes: 44
Antigüedad: 21 años
Puntos: 2
Incrustar formulario dentro de otro (subformulario)

Hola a todos/as

Estoy peleándome con el diseño de la interfaz gráfica para una aplicación que utiliza un solo formulario y un control SSTab con varias pestañas que cargan varias zonas ("formularios" con sus controles y estructura diferente una pestaña de otra). El tema es que me interesa hacer la interfaz lo más usable y sencilla posible para el usuario.

Me gustaría que en estas pestañas se incrustaran formularios, según las opciones del menú que seleccione el usuario. La idea sería tener ya diseñados todos los formularios necesarios e ir instanciándolos (a modo de "subformularios") unos u otros en función a trabajo del usuario (e ir liberando memoria, destruyendo aquellos subformularios que hayan dejado de ser usados). Me interesa hacerlo así porque de este modo puedo crear los formularios en tiempo de diseño (en tiempo de ejecución lo veo más difícil y trabajoso pues te toca estar atento a multitud de propiedades para tus subformularios y controles pertinentes) y es sencillo matar el subformulario que haya en ejecución y llamar al subformulario que haya pedido el usuario, todo quedaría en una misma zona visual (un único formulario) y por tanto una aplicación más compacta.

¿Hay alguna manera de incrustar un formulario dentro de otro? Si pudiera aportar más información, decir que la interfaz es SDI.

¡Un saludo!

P.D.: se me olvidaba, he estado buscando cosas por el foro y encontre este hilo de hace poco pero, aunque parecido, creo que no es lo que ando buscando. Creo que lo que busco es un control "subformulario" contenedor al que poder enlazar un formulario independiente (sí, más o menos como hace Access pero sin relaciones entre los campos de los formularios ni nada)
__________________
cgomez :ojotes: miportal.es

Última edición por cgomez; 08/03/2005 a las 15:28
  #2 (permalink)  
Antiguo 08/03/2005, 17:44
Avatar de Skalitiko  
Fecha de Ingreso: febrero-2005
Mensajes: 81
Antigüedad: 19 años, 2 meses
Puntos: 0
Puedes ocupar la siguiente API.

'''''''''''''''''' En un módulo ''''''''''''''''''''''''''''''
Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''
'Para que el form2 quede dentro del form1, en el evento load del form1 pones lo siguiente
Private Sub Form_Load()
Form2.Show
Dim res As Long

res = SetParent(Form2.hWnd, Form1.hWnd)
End Sub

Espero te ayude en algo
  #3 (permalink)  
Antiguo 09/03/2005, 14:18
 
Fecha de Ingreso: mayo-2003
Ubicación: España
Mensajes: 44
Antigüedad: 21 años
Puntos: 2
Hola

Skalitiko, mil gracias. He estado haciendo pruebas y es justo lo que andaba buscando, se comporta tal y como quería (fácil de cargar / descargar).

Lo que no me queda claro es por qué declarar la variable res y asignarle el resultado que devuelve la función SetParent, ¿podrías explicarme? Es que he probado a hacerlo así:

Código:
Private Sub Form_Load()
    Form2.Show
    SetParent Form2.hWnd, Form1.hWnd
End Sub
Es decir, sin recoger el Long devuelto por la función, y funciona igual de bien. ¿Tal es sea conveniente recoger el valor en una variable y comprobarlo? A lo mejor SetParent devuelve un valor negativo, por ejemplo, en el caso de producirse algún tipo de problema

Un saludo y muchas gracias por la atención prestada
__________________
cgomez :ojotes: miportal.es
  #4 (permalink)  
Antiguo 09/03/2005, 14:54
 
Fecha de Ingreso: mayo-2003
Ubicación: España
Mensajes: 44
Antigüedad: 21 años
Puntos: 2
Acabo de implementarlo en el proyecto real y hay un detalle que no termina de convencerme. Al haber dos formularios (uno "dentro" de otro) al trabajar sobre el "subformulario" este obtiene el foco perdiendolo el formulario principal, con lo que las opciones del menú y demás aparecen como deshabilitadas. Además, en la barra de tareas el icono del programa aparece como si estuviera minimizado.

Esto es algo normal, está claro que el foco no puede acaparar los dos formularios así que bien :) Lo que pasa que ahora me planteo si esta manera de diseñar la interfaz es todo lo usable e intuitiva que me gustaría pues, aunque la aplicación se vea enfocada ésta no lo está porque el enfoque lo tiene un subfformulario (una parte de la aplicación)... no queda un efecto del todo inadecuado / confuso pero sí que es bastante extraño

En fin, ¡saludos!
__________________
cgomez :ojotes: miportal.es
  #5 (permalink)  
Antiguo 09/03/2005, 16:32
Avatar de Skalitiko  
Fecha de Ingreso: febrero-2005
Mensajes: 81
Antigüedad: 19 años, 2 meses
Puntos: 0
Si la función devuelve 0 quiere decir que fallo, por eso es el uso de Ret como para llevar un control de error al utilizar la función. Lo del foco de los formularios es cierto y la verdad no me he preocupado por solucionarlo, ya que no he utilizado esta función a nivel de generar una interfaces. te recomiendo que averigues más sobre esta función uscando por internet.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:02.