Ventanas Flotantes Acoplables

Buenas mi pregunta es la sig. Estoy realizando ventanas flotantes con formularios dentro de un formulario padre y quiero que sean acopables al mismo, un ejemplo caracteristico de ello es la barra de los componentes, propiedades,.. Que nos trae el visual basic, bueno gracias ante todo
Respuesta
1
Para poner las ventanas como acoplables :
Option Explicit
Private Declare Function SystemParametersInfo Lib "user32.dll" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uiParam As Long, pvParam As Any, ByVal fWinIni As Long) As Long
Enum DockTypes
DockLeft = 1
DockTop = 2
DockRight = 3
DockBottom = 4
End Enum
Private Type vbRECT ' Posicion de la ventana Positions
vbLeft As Long
vbTop As Long
vbWidth As Long
vbHeight As Long
End Type
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Const SPIF_SENDWININICHANGE = &H2
Private Const SPI_GETWORKAREA = 48
Private Const SPI_SETWORKAREA = 47
Private vbFormOldRect As vbRECT
Private LastDock As DockTypes
Private DockAmount As Integer
Sub UnDockForm(vbForm As Form)
' Quita un formulario puesto como "Dockable "
Dim Desktop As RECT
' Obtienes el area del escritorio
'
SystemParametersInfo SPI_GETWORKAREA, 0&, Desktop, 0&
With Desktop ' Lo dejas todo en modo normal
Select Case LastDock
Case DockBottom
.Bottom = .Bottom + DockAmount
Case DockLeft
.Left = .Left - DockAmount
Case DockTop
.Top = .Top - DockAmount
Case DockRight
.Right = .Right + DockAmount
Case Else
Exit Sub ' No estaba acoplado
End Select
End With
' Se pone el formulario Normal
With vbFormOldRect
vbForm.Move .vbLeft, .vbTop, .vbWidth, .vbHeight
End With
' Actualizas SystemParametersInfo a normal
SystemParametersInfo SPI_SETWORKAREA, 0&, Desktop, SPIF_SENDWININICHANGE
' Limpias el último Dock
LastDock = 0
End Sub
Sub DockForm(vbForm As Form, DockPos As DockTypes)
Dim V As vbRECT
Dim Desktop As RECT
If LastDock <> 0 Then
' Entonces esta ya puesto como DOCK
MsgBox "El formulario ya esta acoplado", vbOKOnly, "Acoplamiento Abortado"
Exit Sub
End If
' Primero almacenamos la posicion del formulario
With vbFormOldRect
.vbHeight = vbForm.Height
.vbLeft = vbForm.Left
.vbTop = vbForm.Top
.vbWidth = vbForm.Width
End With
'Calculamos el area del escritorio SystemParametersInfo SPI_GETWORKAREA, 0&, Desktop, 0&
' Ponemos el tamaño que queremos al formulario
V = vbFormOldRect ' (Posicion actual de la barra)
With V
Select Case DockPos
Case DockLeft
.vbTop = (Desktop.Top * Screen.TwipsPerPixelY)
.vbLeft = (Desktop.Left * Screen.TwipsPerPixelX)
.vbHeight = (Desktop.Bottom * Screen.TwipsPerPixelY) - .vbTop
Case DockRight
.vbTop = (Desktop.Top * Screen.TwipsPerPixelY)
.vbLeft = (Desktop.Right * Screen.TwipsPerPixelX) - .vbWidth
.vbHeight = (Desktop.Bottom * Screen.TwipsPerPixelY) - .vbTop
Case DockBottom
.vbTop = (Desktop.Bottom * Screen.TwipsPerPixelY) - .vbHeight
.vbLeft = (Desktop.Left * Screen.TwipsPerPixelX)
.vbWidth = (Desktop.Right * Screen.TwipsPerPixelX) - .vbLeft
Case DockTop
.vbTop = (Desktop.Top * Screen.TwipsPerPixelY)
.vbLeft = (Desktop.Left * Screen.TwipsPerPixelX)
.vbWidth = (Desktop.Right * Screen.TwipsPerPixelX) - .vbLeft
Case Else
Exit Sub
End Select
End With
' Ahora cambio las valores del escritorio
With Desktop
Select Case DockPos
Case DockBottom
DockAmount = (vbForm.Height / 15)
.Bottom = .Bottom - DockAmount
Case DockRight
DockAmount = (vbForm.Width / 15)
.Right = .Right - DockAmount
Case DockTop
DockAmount = (vbForm.Height / 15)
.Top = .Top + DockAmount
Case DockLeft
DockAmount = (vbForm.Width / 15)
.Left = .Left + DockAmount
End Select
End With
' Actualizamos los valores de SystemParametersInfo
SystemParametersInfo SPI_SETWORKAREA, 0&, Desktop, SPIF_SENDWININICHANGE
With V
vbForm.Move .vbLeft, .vbTop, .vbWidth, .vbHeight
End With
LastDock = DockPos
End Sub
Y ya tienes todo acoplado al limite del escritorio...
Eh...
Esto...
Mierda, tu lo que quieres es juntarlo a otra ventana...
Vaya...
Espera, te mando un link con un ejemplo porque sino...
http://www.thescarms.com/Downloads/DockForm.zip
Lo siento, pero ya que lo escribí, me da pena borrarlo.
El DockForm.Zip tiene tambien muy buen código, pero si de todas formas te parece dificil, pregunta, que para eso estoy.
Lo siento, por el rollo que te he soltado.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas