Drag And Drop - emulace standardů

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.

Zpět Další

Autor: The Bozena