DalÜφm z
b∞₧n²ch scΘnß°∙, kde jsou operace Drag And Drop oΦekßvßny
je mo₧nost kopφrovßnφ nebo p°etahovßnφ obrßzk∙ mezi dv∞ma prvky
PictureBox. Abyste toto dokßzali pomocφ klßvesnice, je t°eba p°idat
routiny obsahujφcφ kopφrovßnφ a vklßdßnφ, kterΘ budou mnohem delÜφ,
ne₧ k≤d pro operaci Drag And Drop.
Pro vytvo°enφ
nßsledujφcφho p°φkladu vytvo°te dva formulß°e a na ka₧d² z nich p°idejte
prvek PictureBox. Pomocφ vlastnosti Picture vlo₧te do PictureBoxu na prvnφm
formulß°i n∞jakou bitmapu. Nastavte vlastnost OLEDropMode prvku
PictureBox na druhΘm formulß°i na 1-Manual. Pak p°idejte nßsledujφcφ
k≤d do formulß°e 1:
Private Sub Form_Load()
Form2.Show
End Sub
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Picture1.OLEDrag '
ZaΦßtek p°etahovßnφ
End Sub
Private Sub Picture1_OLEStartDrag(Data As DataObject, _
AllowedEffects As Long)
AllowedEffects = vbDropEffectCopy Or vbDropEffectMove
' P°i°azenφ v²b∞ru obrßzku do DataObject
Data.SetData Picture1.Picture
End Sub
Private Sub Picture1_OLECompleteDrag(Effect As Long)
' Pokud byl obrßzek p°esouvßn, je t°eba jej odebrat
If Effect = vbDropEffectMove Then
Picture1.Picture = LoadPicture("")
End If
End Sub
Tento k≤d p°idejte
na druh² formulß°:
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)
' Pokud nenφ korektnφ formßt, nelze povolit puÜt∞nφ
If Not Data.GetFormat(vbCFDIB) Then
Effect = vbDropEffectNone
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)
' Pro kopφrovßnφ je pou₧ita klßvesa CTRL, stisknutß b∞hem p°etahovßnφ
If Shift = vbCtrlMask Then
Effect = vbDropEffectCopy
Else
Effect = vbDropEffectMove
End If
Picture1.Picture = Data.GetData(vbCFDIB)
' P°i°azenφ obrßzku
End Sub
K≤d pro prvnφ
formulß° je shodn² s p°φkladem pro ListBox, akorßt p°i°azujeme
vlastnost Picture do objektu DataObject. V k≤du pro druh² formulß°
pou₧φvßme udßlost OLEDragOver pro test formßtu. Pokud formßt
neodpovφdß, zabrßnφme puÜt∞nφ zm∞nou agrumentu Effect na vbDropEffectNone.
To takΘ zm∞nφ kurzor na typ NoDrop, tak₧e u₧ivateli je touto zm∞nou
oznßmeno, ₧e p°esouvßnφ nebude.
Poznamenejte si, ₧e
formßtov² argument, pou₧it² v tomto p°φklad∞, je vbCFDIB - formßt
schrßnky pro Device Independent Bitmaps (DIB). AΦkoliv jsem pou₧φvali
klasickou bitmapu, VB si ji intern∞ p°evedl na DIB. Pokud do PictureBoxu
vlo₧φte jin² typ obrßzku, ne₧ je bitmapa, VB si ho stejn∞ v₧dy p°evede
na formßt vbCFDIB.
|