Back-End

Publicidade

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 !