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