Drag And Drop - Jak to pracuje

Drag And Drop operace lze p°irovnat k operacφm Vy°φznout Vlo₧it (nebo Kopφrovat a Vlo₧it - Cut, Copy, Paste), kdy se mφsto klßvesnice pou₧φvß myÜ. V obou p°φpadech mßme zdroj (ze kterΘho kopφrujeme nebo jej vyjφmßme) a cφl (do kterΘho vklßdßme). B∞hem t∞chto operacφ je kopie dat spravovßna v pam∞ti.

Metody Cut And Paste pou₧φvajφ schrßnku (Clipboard),zatφmco Drag And Drop pou₧φvß objekt DataObject - kter² je ve svΘm d∙sledku pouze privßtnφ schrßnkou.

Podφvejme se nynφ na sekvenci udßlostφ p°i typickΘ operaci Drag And Drop:

  • P°eta₧enφ je inicializovßno volßnφm metody OLEDrag p°i udßlosti MouseMove zdrojovΘho prvku. Vyvolß se udßlost OLEStartDrag pro prvek a vytvo°φ se instance objektu DataObject

  • Pro udßlost OLEStartDrag musφ b²t nastaveny argumenty AllowedEffects. Tyto argumenty °φkajφ cφli, zda jsou data kopφrovßna nebo p°esouvßna. P°i tΘ samΘ udßlosti musφ b²t zavolßna metoda SetData pro DataObject. Ta ulo₧φ kopii dat do pam∞ti.

  • Udßlost OLEDragDrop je vyvolßna na cφlovΘm prvku, kdy₧ u₧ivatel uvolnφ tlaΦφtko myÜi nad cφlov²m prvkem. Vyvolß se metoda GetFormat objektu DataObject pro ov∞°enφ, zda formßt dat je vhodn² pro cφlov² prvek, a pokud ano, tak metoda GetData cφlovΘho prvku naΦte data. Aby bylo mo₧nΘ data do prvku vlo₧it, musφ b²t vlastnost OLEDropMode cφlovΘho prvku nastavena na 1-Manual. Pokud povolφte OLEDropMode a neotestujete si formßt dat, m∙₧ete se potka s moc oÜkliv²mi v∞cmi.

  • Jakmile je Drop operace dokonΦena, je vyvolßna udßlost OLECompleteDrag. Pokud jsou data p°esouvßna, musφ zde b²t k≤d pro smazßnφ zdroje.

Existujφ jeÜt∞ t°i dalÜφ udßlosti, kterΘ mohou b²t vyu₧ity, pokud pot°ebujete fajnov∞jÜφ kontrolu nad Drag And Drop procesem:

  • Cφlov² prvek vyvolß udßlost OLEDragOver kdykoliv se p°etahovanß polo₧ka ocitne nad nφm. Tato udßlost m∙₧e b²t pou₧ita nap°φklad pro zobrazenφ u₧ivatelskΘho kurzoru nebo pro modifikaci argument∙ AllowedEffect.

  • Zdrojovß prvek vyvolß udßlost OLEGiveFeedback kdykoliv se p°etahovanß polo₧ka ocitne nad cφlov²m prvkem. I tato udßlost m∙₧e b²t pou₧ita nap°φklad pro zobrazenφ u₧ivatelskΘho kurzoru nebo pro modifikaci argument∙ AllowedEffect.

  • V okam₧iku, kdy cφlov² prvek vyvolß udßlost OLEDragDrop vyvolß se udßlost OLESetData zdrojovΘho prvku. Pokud se p°etahuje v∞tÜφ mno₧stvφ dat, tak mohou b²t do objektu DataObject ulo₧ena pomocφ tΘto udßlosti namφsto udßlosti OLEStartDrag.

To je tak v kostce vÜe. V nejjednoduÜÜφch p°φpadech lze povolit p°eta₧enφ pouze t°emi °ßdkami k≤du a puÜt∞nφ pomocφ jednΘ °ßdky.

Zp∞t DalÜφ

Autor: The Bozena