Programación General > Visual Basic 6.0 e inferiores

 Re: Sólo para Expertos, es urgente!!!

(1/1)

Gago:
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!!!

javierbalk:
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

Gago:
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í.

Jrtuarez:
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.

Navegación

[0] Índice de Mensajes

Ir a la versión completa