Neste artigo mostrarei como implementar o evento “OLEDragDrop“, que é chamado quando um arquivo é arrastado com o mouse, do Windows Explorer para a janela de seu aplicativo.
No dia-a-dia é comum vermos isso nas aplicações, por exemplo, ao arrastar um arquivo texto para dentro da janela do Bloco de Notas, ele é aberto automaticamente. Como citei no artigo Associando uma Extensão ao Aplicativo, seria muito interessante implementarmos essa funcionalidade adicional ao nosso programa.
Esta técnica pode ser utilizada para todos os componentes que possuam o evento OLEDragDrop. Neste artigo, mostrarei como utilizar no próprio Form e num PictureBox, porém pode ser feito de maneira análoga para quaisquer outros componentes que suportem este evento.
Primeiramente, devemos setar a propriedade “OLEDropMode” de nosso componente (no exemplo abaixo, o Form) como “1-Manual“:
Feito isso, já podemos ir direto no evento OLEDragDrop e começar a programar. Para facilitar o entendimento, mostrarei dois exemplos práticos:
1 – Mostrando o Endereço de Arquivos Arrastados para o Form
Lembrando que devemos setar a propriedade OLEDropMode do nosso componente que receberá o “arraste” (neste caso, o Form) para “1-Manual”. Depois disso, abrimos a janela de código e codificamos o evento “OLEDragDrop” da seguinte forma:
Private Sub Form_OLEDragDrop(Data As DataObject, Effect As Long, _
Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim i As Long 'variável de controle do laço
If Data.GetFormat(vbCFFiles) Then 'se é arquivo vindo do Explorer...
For i = 1 To Data.Files.Count 'varre os arquivos que vieram
MsgBox Data.Files(i) 'mostro o endereço dos arquivos
Next
End If
End Sub
Resultado:
2 – Carregando uma Imagem Arrastada para o PictureBox
Lembrando que devemos setar a propriedade OLEDropMode do nosso componente que receberá o “arraste” (neste caso, o PictureBox) para “1-Manual”. Depois disso, abrimos a janela de código e codificamos o evento “OLEDragDrop” da seguinte forma:
Private Sub Picture1_OLEDragDrop(Data As DataObject, Effect As Long, _
Button As Integer, Shift As Integer, X As Single, Y As Single)
On Error GoTo TrataErro 'ativa tratamento de erros
If Data.GetFormat(vbCFFiles) Then 'se é arquivo vindo do Explorer...
If Data.Files.Count > 1 Then 'se arrastou mais de um arquivo
MsgBox "Arraste apenas UMA Imagem !"
Else
Dim Arquivo As String
Arquivo = Data.Files(1) 'recupero o endereço da imagem
Picture1.Picture = LoadPicture(Arquivo) 'carrego a imagem
End If
End If
Exit Sub
'tratamento de erro, para o caso de ser arrastado
'um arquivo que não seja uma imagem
TrataErro:
MsgBox "Arquivo de imagem inválido !"
End Sub
Resultado:
Qualquer dúvida, aguardo nos comentários. Um abraço e até a próxima !