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.
|