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