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.
|