SoloCodigo

Programación General => Visual Basic 6.0 e inferiores => Mensaje iniciado por: Gago en Jueves 21 de Noviembre de 2002, 13:46

Título: Re: Sólo para Expertos, es urgente!!!
Publicado por: Gago en Jueves 21 de Noviembre de 2002, 13:46
Tengo una DLL programada en Visual (que consta de un Formulario y un Módulo de Clase). El programa que llama a la DLL tiene un formulario MDIChild. Necesito URGENTE saber cómo puedo hacer para que el formulario de la DLL se considere hijo del MDI que está en el proyecto, si hay que pasarlo como parámetro y, sobre todo, cómo coño lo hago. Graciñas!!!
Título: Re: Sólo para Expertos, es urgente!!!
Publicado por: javierbalk en Jueves 21 de Noviembre de 2002, 17:54
Hola Gago:

Para poder usar un formulario contenido en una DLL tienes que accesderlo a través de un módulo de clase que esté en la DLL.

Entonces pones una propiedad como ser:

Public Property Get Formulario() as Form
   Set Formulario = new frmElQueSea
End Sub

Luedo haces la referencia a esa DLL desde el proyecto cliente, desde el menú Proyecto, Referencias, y la seleccionas.

Para hacerlo funcionar, tienes que crear una instancia de la clase.

Dim mClase as New NombreClase

para mostrar el formulario:

mClase.Formulario.Show

Espero no haberme equivocado en nada.

Para poder hacerlo MDI hijo eso lo tienes que definir en tiempo de diseño al hacer la DLL. Poner la Propiedad MDIChild = true

Saludos,

Javier
Título: Re: Sólo para Expertos, es urgente!!!
Publicado por: Gago en Jueves 21 de Noviembre de 2002, 19:01
Ya he encontrado la solución!!!

Se trata de una API de Windows:

Declare Function WinSetParent Lib "user32" Alias "SetParent" (ByVal hWndChild as Long, ByVal hWndNewParent as Long) as Long

A esta API se le pasa los Handles (hWnd) del formulario de la DLL (hWndChild) y el del formulario MDI (hWndNewParent( y ya está.

Gracias a los que entraron aquí.
Título: Sólo para Expertos, es urgente!!!
Publicado por: Jrtuarez en Martes 26 de Noviembre de 2002, 15:06
amigo prueba con esta api a mi me gusta mucho!!!
los formularios se creen hijos del mdi aparecen en la barra de tarea y cuando
minimizaz el formulario padre todos se unifican es muy elegante

#If Win32 Then
Declare Function SetWindowWord Lib "user32" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal wNewWord As Long) As Long
#Else
Declare Function SetWindowWord Lib "User" (ByVal hwnd As Integer, ByVal nIndex As Integer, ByVal wNewWord As Integer) As Integer
#End If


 asi es como se usuaria comunmente en el evento de carga:

If SetWindowWord(hwnd, -8, MDIForm1.hwnd) Then
End If

es mas elegante aun cuando los mandas al system tray, espero te sirva.