Private IcoDrag As IPictureDisp
Private Sub Form_Load()
Dim pic As IPictureDisp
Dim ruta As String, nombre As String
Dim posLeft As Long, k As Long
Set IcoDrag = LoadPicture("c:\ruta\iconoarrastrar.ico") ' ruta a un icono que sugiera arrastrar la imagen...
With Me
.Show ' para poder cómo se carga mientras se realiza la carga del formulario
.ScaleMode = vbPixels
.WindowState = 2 ' maximizado
.AutoRedraw = True
End With
' damos propiedades a la imagen de origen, los demás controles que creemos se basan en este y copiarán casi todas sus propiedades (visible siempre es false de entrada)
posLeft = 6
With ImageOrigen(0)
Call .Move(posLeft, 10, 64, 64)
.Stretch = True
.DragMode = 1 ' automático
.BorderStyle = 1 ' con borde
Set .DragIcon = IcoDrag
End With
ruta = VBA.Environ$("windir") & "\web\wallpaper\" ' en esta ruta suele encontrarse imágenes, para probar... el ejmplo enteramente
nombre = Dir(ruta)
Do While nombre <> ""
Set pic = LoadPicture(ruta & nombre)
If pic <> 0 Then ' si se cargó la imagen... pic tendrá un valor distinto de 0.
With ImageOrigen(k)
Call .Move(posLeft, 10) ' posicionamos el control image
Set .Picture = pic ' asignamos el picture
.Visible = True ' es obligatorio, porque al cargarlo siempre está invisible
'Me.Refresh ' retira el comentario, para ir viendo la carga una a una.
End With
posLeft = posLeft + 70 ' 64px. de la imagen + 6 de espacio libre entre ellos
If posLeft > Me.ScaleWidth Then Exit Do ' solo cargamos las que quepan en el ancho de la ventana.
k = k + 1
Load ImageOrigen(k) ' crear un nuevo control Image copia del ImageOrigen(0) , un array
End If
nombre = Dir 'tomamos siguiente nombre en la misma ruta...
Loop
' posicionamos la imagen destino, debajo de la fila de imágenes de origen y le damos un tamaño de 300x400
With ImageDestino
Call .Move(10, 80, 300, 400)
.Stretch = True
.DragMode = 0 ' manual (no lo usaremos como origen)
Me.Line (10, 80)-(310, 480), vbBlack, BF ' dejamos un recuadro donde está la imagen destino, porque no tiene propiedad backcolor.
End With
' Posicionamos el otro control de imagen, centrada de 81x108 (mucho más pequeña), se usará para indicar que admite desde el origen o no la imagen...
With ImageMini
Call .Move(0, 0, 81, 108) ' dimensiones
Call .Move(ImageDestino.Left + ((ImageDestino.Width - .Width) \ 2), ImageDestino.Top + ((ImageDestino.Height - .Height) \ 2)) ' centrado en la imagen receptora.
.Stretch = True
.ZOrder 1 ' la enviamos al fondo, debajo de ImageDestino
End With
' Esta imagen es para simular otro objeto de arrastrar y soltar, pero que en teoría no debería tener como destino ImageDestino y así ver como lo rechazamos.
With ImageOtro
Call .Move(600, 80, 80, 128)
.Stretch = True
.DragMode = 1
.BorderStyle = 1
Set .Picture = ImageOrigen(0).Picture
Set .DragIcon = IcoDrag
End With
End Sub