Od samého
začátku VB podporuje přetahování prvků na formuláři. Jednou z
nejjednodušší implementací metod Drag And Drop je dát uživateli možnost
aranžování prvků na formuláři při běhu aplikace. Jak již bylo zmíněno
dříve, i toto lze provést pomocí OLE metod, ale není to běžné.
Standardní
Drag And Drop operace používají argument Source při metodě Drag
pro zjištění, který prvek je přetahován - metoda OLEStartDrag tento
argument nemá. Samozřejmě můžeme emulovat toto chování pomocí formulářových
proměnných.
Pro vytvoření
následujícího příkladu přidejte na formulář tlačítko, nastavte
vlastnost OLEDropMode formuláře na 1-Manual a zapište
následující kód:
Private Source As
Control
Private Sub Command1_MouseDown(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
' Přiřazení tlačítka do proměnné Source
Set Source = Command1
Command1.OLEDrag
End Sub
Private Sub Command1_OLEStartDrag(Data As DataObject, _
AllowedEffects As Long)
AllowedEffects = vbDropEffectMove
Data.SetData "" '
Přiřazení nulového řetězce
End Sub
Private Sub Form_OLEDragDrop(Data As DataObject, _
Effect As Long, Button As Integer, Shift As Integer,
_
X As Single, Y As Single)
Dim ctl As Control
Set ctl = Source '
Přiřazení objektu Source
ctl.Move X, Y '
Volání metody Move
End Sub
Při
události MouseDown je prvek přiřazen do proměnné Source.
Hodnoty v události OLEStartDrag nejsou důležité, ale obě řádky
jsou podstatné pro start přetahování. V našem případě jsme pouze přiřadili
nulový řetězec do DataObject (pokud bychom pustili prvek jinde,
tak to spadne) a libovolně nastavili vlastnost AllowedEffect.
Protože
zde není přímá reference na prvek Tlačítko, lze tento kód použít
pro přetahování jakéhokoliv prvku.
|