Drag And Drop - přetahování souborů

Snad nejvíce převládající využití pro operace Drag And Drop je přetahování souborů mezi Průzkumníkem Windows as ostatními aplikacemi. Jedním z příkladů aplikací, kde je takovéto přetahování přínosem je například prohlížeč obrázků, kdy do něj uživatel pouze přetáhne obrázek a ten se rovnou otevře.

Pro následující příklad použijeme formuláře, vytvořené v předchozím případě. Přidáme pouze kód, který umožní akceptovat přetahované položky prvku PictureBox na prvním formuláři. Nastavte tedy vlastnost OLEDropMode prvku PictureBox na prvním formuláři na 1-Manual a zapište do prvního formuláře následující kód:

Private Sub Picture1_OLEDragOver(Data As DataObject, _
    Effect As Long, Button As Integer, Shift As Integer, _
    X As Single, Y As Single, State As Integer)

    If Not Data.GetFormat(vbCFFiles) Then
        Effect = vbDropEffectNone   
' Nepovolit puštění
    End If

End Sub 

Private Sub Picture1_OLEDragDrop(Data As DataObject, _
    Effect As Long, Button As Integer, Shift As Integer, _
    X As Single, Y As Single)

    Dim strFilename As String
    ' Zjištění jména souboru z kolekce Files 

    strFilename = Data.Files(1)
    ' Nahrání obrázku
    Picture1.Picture = LoadPicture(strFilename)

End Sub

Kód, použitý pro puštění souborů není příliš odlišný od předchozích příkladů. V tomto případě si otestujeme formát pomocí parametru vbCFFiles. Objekt DataObject obsahuje kolekci Files, která může obsahovat jeden nebo více položek, přičemž každá z nich obsahuje řetězec, který reprezentuje jméno a cestu k souboru. Tak jako v příkladě ListBoxu musíme nejprve hodnotu uložit do řetězcové proměnné, neboť metoda LoadPicture to vyžaduje.

Může být také velice užitečné, pokud povolíte přetahování obrázků z vaší aplikace přímo do Průzkumníka nebo editoru obrázků. Pro demonstraci zmodifikujeme část kódu v prvním formuláři. Protože PictureBox neukládá jméno souboru, budeme potřebovat uložit jej do formulářové proměnné (do deklarací ve formuláři):

Private strFile As String

Na událost Form_Load musíme přiřadit do proměnné jméno souboru a nahrát obrázek:

strFile = "cesta+soubor"
Picture1.Picture = LoadPicture(strFile))

Budeme muset také změnit kód události OLEDragDrop pro aktualizaci jména souboru:

strFile = strFileName

A konečně budeme muset modifikovat událost OLEStartDrag pro přetahování souborů namísto obrázků. V tomto případě pouze přiřadíme formát metodě SetData, a pak přidáme kód do události OLESetData pro nahrání souboru:

Data.SetData , vbCFFiles

Private Sub Picture1_OLESetData(Data As DataObject, _
    DataFormat As Integer)

    Data.Files.Add strFile

End Sub

Událost OLESetData je vyvolána pouze v případě, když je proveden drop, takže pokud je operace přerušena, ušetříme čas a paměť tím, že neukládáme soubor v události OLEStartDrag. Pokud budete chtít přetahovat více souborů, musíte jejich jména uložit do ListBoxu.

Zpět Další

Autor: The Bozena