Pre knižnicu VCL spoločnosť Borland implementovala vlastnú verziu rozhrania Drag&Drop (v preklade „drag“). Toto rozhranie je interné - vo formulári môžete odosielať a prijímať akékoľvek ovládacie prvky Delphi "(okrem samotného formulára). Je implementované bez použitia zodpovedajúcich funkcií Windows API - musia byť použité pri organizovaní komunikácie s inými úlohami ťahaním a pustením .

Kliknutie ľavé tlačidlo myšou nad ovládacím prvkom, môžeme ho „pretiahnuť“ na akýkoľvek iný prvok. Z pohľadu programátora to znamená, že v momentoch ťahania a púšťania kľúča sa vygenerujú určité udalosti, ktoré prenesú všetky potrebné informácie - ukazovateľ na ťahaný objekt, aktuálne súradnice kurzora atď. Prijímačom udalosti je prvok na ktorom sa tento moment kurzor sa nachádza. Obsluha takejto udalosti musí systému povedať, či daný ovládací prvok akceptuje "odoslanie" alebo nie. Po uvoľnení tlačidla nad ovládačom prijímača sa spustí jedna alebo dve ďalšie udalosti v závislosti od pripravenosti prijímača.

CancelDrag Zruší aktuálnu operáciu presunutia myšou alebo presunutia a ukotvenia.

Funkcia FindDragTarget (const Pos: TPoint ;AllowDisabled: Boolean ): TControl ;

Funkcia vracia objekt základnej triedy TControl , ktorá sa vzťahuje na polohu obrazovky so súradnicami určenými parametrom Pos. Táto funkcia sa používa na určenie potenciálneho príjemcu operácie drag-and-drop alebo drag-and-dock. Ak pre zadanú pozíciu neexistuje žiadny ovládací prvok okna, funkcia sa vráti nula . Parameter AllowDisabled určuje, či sa budú brať do úvahy zakázané objekty.

Funkcia IsDragObject(Sender: TObject ): Boolean ;

Funkcia určuje, či objekt zadaný v parametri Sender je potomkom triedy TDragObject . Táto funkcia možno použiť ako parameter Source v obslužných programoch udalostí OnDragOver a OnDockOver na určenie, či bude ťahaný objekt prijatý. Tiež funkcia IsDragObjectmožno použiť ako parameter Source v obslužných programoch udalostí OnDragDrop a OnDockDrop, aby sa správne interpretoval pretiahnutý objekt.

DragMode, vlastnosti DragCursor, BeginDrag, OnDragOver, OnDragDrop, OnEndDrag, OnStartDrag metódy, Accept parameter

Proces presúvania informácií z jedného objektu na druhý pomocou myši je vo Widows široko používaný. Môžete presúvať súbory medzi priečinkami, presúvať samotné priečinky a podobne.

Všetky vlastnosti, metódy a udalosti spojené s procesom drag and drop sú definované v triede TControl, ktorá je rodičom všetkých vizuálnych komponentov Delphi. Preto sú spoločné pre všetky komponenty.

Začiatok ťahania je určený vlastnosťou DragMode, ktorú je možné nastaviť v čase návrhu alebo programovo rovnú dmManual alebo dmAutomatic. Hodnota dmAutomatic (automatic) určuje automatické spustenie procesu ťahania, keď používateľ klikne tlačidlom myši na komponent. V tomto prípade sa však udalosť OnMouseDown spojená so stlačením tlačidla myši používateľom pre tento komponent vôbec nevyskytuje.

Rozhranie na prenos a príjem komponentov sa objavilo už dávno. Poskytuje interakciu medzi dvoma ovládacími prvkami počas vykonávania aplikácie. V tomto prípade je možné vykonať všetky potrebné operácie. Napriek jednoduchosti implementácie a veku vývoja mnohí programátori (najmä začiatočníci) považujú tento mechanizmus za nejasný a exotický. Použitie funkcie Drag-and-Drop však môže byť veľmi užitočné a ľahko implementovateľné. Teraz si to overíme.

Aby mechanizmus fungoval, musia byť príslušne nakonfigurované dva ovládacie prvky. Jeden musí byť zdroj (Zdroj), druhý - prijímač (Cieľ). V tomto prípade sa zdroj nikam neposúva, ale je len ako taký zaregistrovaný v mechanizme.

Verte mi, je dosť ľahké premeniť sa X,Y súradnice, odovzdané v parametroch udalostí OnDragOver a OnDragDrop, do súradníc formulára.

Pracujte s vlastnosťami Left a Top komponentu, nad ktorým sa pohybuje kurzor. Uvediem jednoduchý príklad. Umiestnite komponent Memo do formulára a priraďte ho Zarovnať vlastnosť alTop hodnota. Umiestnite panel na formulár, tiež nastavte vlastnosť Align na alTop a nastavte vlastnosť Height na malú hodnotu, povedzme 6 alebo 7 pixelov. Nastavte DragMode na dmAutomatica a DragCursor na crVSplit. Umiestnite ďalší komponent Memo a nastavte Align na alClient. Vyberte oba poznámky súčasne, panel a vytvorte spoločnú obsluhu udalosti OnDragOver, ako je znázornené nižšie:

Funkcia Drag and Drop môže pomôcť zvýšiť výkon vášho iPadu. Tu je návod, ako ho môžete použiť.

Takže môžete presunúť súbor z jednej cloudovej služby do druhého, skopírovať text zo Safari do aplikácie na úpravu textu a pridať cenovú ponuku alebo vytvoriť zálohovanie určité fotografie v aplikácii na ukladanie súborov.

Ako presúvať fotografie, súbory a text

1. Dotknite sa a podržte fotografiu, súbor alebo zvýraznený text, ktorý chcete presunúť do inej aplikácie.

2. Presuňte položku do Správne miesto v túto aplikáciu alebo iný, ktorý máte otvorený v Slide Over alebo Split View a uvoľnite.

Ako presúvať viacero fotografií alebo súborov naraz

1. Dotknite sa a podržte jednu z fotografií alebo súborov, ktoré chcete presunúť.

2. Počas presúvania aktuálnej položky klepnite na inú fotografiu alebo súbor, ktorý chcete tiež presunúť. Urobte to znova s ​​toľkými prvkami, koľko chcete presunúť.

3. Potiahnite všetky vybraté objekty na určené miesto v inej aplikácii, ktorú máte otvorenú v Slide Over alebo Split View, a uvoľnite ich.

Ako pretiahnuť text z jednej aplikácie do druhej

1. Klepnutím a podržaním časti textu, ktorú chcete potiahnuť, ju vyberte.

2. Pomocou výberových bodov zvýraznite zvyšok textu, ktorý chcete presunúť.

3. Stlačte a podržte vybraný text.

4. Presuňte text do aplikácie, kam ho chcete umiestniť, a uvoľnite ho.

Ako zmeniť polohu ikon niekoľkých aplikácií naraz pomocou "Drag and Drop"

Zatiaľ čo väčšina funkcií drag and drop pre iOS funguje iba na iPade, tento trik v skutočnosti funguje na iPhone aj iPade. To vám umožňuje organizovať umiestnenie aplikácií na domovskej obrazovke pomocou « Drag and Drop“ namiesto presúvania po jednom.

1. Dotknite sa a podržte ikonu aplikácie, ktorú chcete premiestniť na domovskej obrazovke.

2. Dotknite sa dodatočné aplikácie, ktorý je tiež potrebné presunúť.

3. Presuňte tieto aplikácie na stránku alebo priečinok, kde ich chcete mať, a pustite ich.

Už dlho existujú funkcie JavaScriptu, ktoré nám umožňujú vytvárať rozhrania drag & drop. Žiadna z týchto implementácií však nie je pre prehliadač natívna. HTML5 má svoj vlastný spôsob vytvárania rozhraní drag & drop (s malou pomocou JavaScriptu). V tomto článku vám prezradíme, ako sa to dá dosiahnuť...

Podpora prehliadača

HTML5 drag & drop je v súčasnosti podporované všetkými hlavnými stolnými prehliadačmi (vrátane IE (dokonca aj IE 5.5 má čiastočnú podporu)), ale nie je podporované žiadnym z populárnych mobilných prehliadačov.

Drag&Drop udalosti

Pri každom kroku drag & drop sa spúšťajú rôzne udalosti, aby prehliadač vedel, ktorý kód JavaScript má spustiť. Zoznam podujatí:

  • dragStart: spustí sa, keď používateľ začne presúvať prvky;
  • dragEnter: spustí sa, keď sa ťahaný prvok prvýkrát pretiahne cez cieľový prvok;
  • dragOver: spustí sa, keď sa myš presunie cez prvok počas ťahania;
  • dragLeave: spustí sa, ak kurzor používateľa opustí prvok počas ťahania;
  • ťahať: spustí sa vždy, keď pohneme myšou pri ťahaní nášho prvku;
  • pokles: spustí sa pri vykonaní skutočného poklesu;
  • dragEnd: spustí sa, keď používateľ uvoľní tlačidlo myši počas ťahania objektu.

So všetkými týmito poslucháčmi udalostí máte veľkú kontrolu nad tým, ako bude rozhranie fungovať.

objekt prenosu údajov

Tu sa odohráva všetka tá mágia drag&drop. Tento objekt obsahuje údaje, ktoré boli odoslané operáciou ťahania. Dáta je možné nastaviť a získať rôzne cesty, z ktorých najdôležitejšie sú:

  • dataTransfer.effectAllowed=value: vráti povolené typy akcií, možné hodnoty: žiadny, kopírovať, kopírovaťOdkaz, kopírovaťPresunúť, odkaz, odkazPresunúť, presunúť, všetko a neinicializované.
  • dataTransfer.setData(formát, údaje): Pridá špecifické údaje a formát.
  • dataTransfer.clearData(format): Vymaže všetky údaje pre konkrétny formát.
  • dataTransfer.setDragImage(prvok, x, y): nastaví obrázok, ktorý chcete presunúť, hodnoty x a y označujú, kde by mal byť kurzor myši (0, 0 ho umiestni vľavo hore).
  • data = dataTransfer.getData(format) : Ako už názov napovedá, vracia dáta pre konkrétny formát.

Vytvorenie príkladu drag&drop

Teraz začneme vytvárať jednoduchý príklad drag&drop. Ako vidíte, máme dva malé divy a jeden veľký, malé divy môžeme pretiahnuť dovnútra veľkého a dokonca ich presunúť späť.

Ťahanie objektu

Prvá vec, ktorú musíme urobiť, je vytvoriť HTML. Divs umožňujeme presúvať pomocou atribútu draggable:

Keď to urobíme, musíme definovať funkciu JavaScriptu, ktorá sa spustí hneď, ako začneme presúvať tento prvok:

Funkcia dragStart(ev) ( ev.dataTransfer.effectAllowed="move"; ev.dataTransfer.setData("Text", ev.target.getAttribute("id")); ev.dataTransfer.setDragImage(ev.target,100,100) ; vráti true ;)

V tomto kóde najprv deklarujeme, aký typ efektu v operácii povoľujeme a nastavíme ho na pohyb. Na druhom riadku nastavíme dáta, s ktorými sa má pracovať, kde text bude Text a hodnota bude ID prvku, ktorý ťaháme. Potom použijeme metódu setDragImage, ktorá nám nastaví, čo budeme ťahať a kde bude kurzor pri ťahaní a keďže kocky sú 200 x 200 pixelov, umiestnili sme to úplne do stredu. Na konci vrátime return true.

Zahodiť predmet

Aby prvok akceptoval pokles, musí počúvať 3 rôzne udalosti: dragEnter, dragOver a udalosť drop. Pridajme to teda do našej HTML5 div s veľkým ID:

funkcia dragEnter(ev) ( ev.preventDefault(); return true; ) funkcia dragOver(ev) ( ev.preventDefault(); )

V prvej funkcii definujeme, čo sa má stať, keď sa prvok, ktorý ťaháme, dostane k požadovanému prvku, kde má dôjsť k poklesu, v tomto prípade iba bránime predvolenému správaniu prehliadača. Ďalej, vo funkcii dragOver v predvolenom nastavení nepovoľujeme pokles.

V ďalšej časti definujeme funkciu, keď je prvok „hodený“ na požadovaný cieľ:

Funkcia dragDrop(ev) ( var data = ev.dataTransfer.getData("Text"); ev.target.appendChild(document.getElementById(data)); ev.stopPropagation(); return false; )

V tejto poslednej časti najprv nastavíme dátovú premennú, kde získame všetky dáta, ktoré máme k dispozícii textový formát a potom pridáme údaje do prvku div, kam chceme prvok umiestniť.

Urobte z drop sekcie cieľ

Demo ukazuje, že dva divy je možné presunúť späť na miesto. Našťastie je pridanie ďalšieho cieľového bodu oveľa jednoduchšie, než by ste si mysleli. Pretože tieto funkcie už máme a všetko, čo musíme urobiť, je pridať poslucháčov udalostí:

A to je všetko, čo je potrebné na to, aby sa div mohol vtiahnuť späť na miesto.

Existuje mnoho aplikácií drag&drop, ktoré sú vytvorené pomocou pomocou JavaScriptu knižnice a často sa ľahšie používajú. Dúfame však, že v tomto HTML5 a JavaScript technika, uvidíte budúci potenciál na riešenie vašich problémov.

HTML Drag and Drop rozhrania umožňujú aplikáciám používať funkcie presúvania myšou v prehliadačoch. Užívateľ si môže vybrať ťahateľné prvky myšou presuňte tieto prvky do a spustiteľné a uvoľnite ich uvoľnením tlačidla myši. Priesvitné znázornenie ťahateľné prvky sledujú ukazovateľ počas operácie ťahania.

Pre webové stránky, rozšírenia a aplikácie XUL, môžeš prispôsobiť, ktoré prvky sa môžu stať ťahateľné, typ spätnej väzby ťahateľné prvky produkujú, a spustiteľné prvkov.

Tento prehľad HTML Drag and Drop obsahuje popis rozhraní, základné kroky na pridanie podpory drag-and-drop do aplikácie a zhrnutie interoperability rozhraní.

Presuňte udalosti

udalosť Na Obsluhe udalostí Požiare, keď…
ťahať Ondrag …a pretiahnutá položka(výber prvku alebo textu) sa pretiahne.
dragend ondragend ...končí sa operácia ťahania (napríklad uvoľnenie tlačidla myši alebo stlačenie klávesu Esc; pozri Dokončenie ťahania .)
dragenter ondragenter …potiahnutá položka vstúpi do platného cieľa presunutia. (Pozrite si časť Určenie cieľov poklesu.)
dragexit ondragexit …prvok už nie je okamžitým cieľom výberu operácie ťahania.
dragleave ondragleave …potiahnutá položka zanechá platný cieľ presunutia.
dragover Ondragover …potiahnutá položka sa presúva cez platný cieľ presunutia každých niekoľko stoviek milisekúnd.
dragstart ondragstart ...používateľ začne ťahať položku. (Pozri Spustenie operácie ťahania.)
pokles pokles …položka spadne na platný cieľ prehodenia. (Pozrite si časť Vykonanie poklesu.)

Poznámka: Udalosti dragstart ani dragend sa nespúšťajú pri pretiahnutí súboru do prehliadača z OS.

Rozhrania

Základy

Táto časť je zhrnutím základných krokov na pridanie funkcie presúvania myšou do aplikácie.

identifikovať čo je ťahateľné

Vytvorenie prvku ťahateľné vyžaduje pridanie atribútu draggable a obslužného programu globálnej udalosti ondragstart, ako je znázornené v nasledujúcej ukážke kódu:

Tento prvok je pretiahnuteľný.

Ďalšie informácie nájdete na stránke:

zvládnuť pokles účinok

Obslužný program pre udalosť drop môže spracovať údaje ťahania spôsobom špecifickým pre aplikáciu.

Aplikácia zvyčajne používa metódu getData() na získanie položiek ťahania a ich následné spracovanie. Okrem toho sa sémantika aplikácie môže líšiť v závislosti od hodnoty

Techniky drag and drop sa vyvíjali mnoho rokov. Nie je prekvapujúce, že s nárastom počtu programátorov vyvíjajúcich zásuvné moduly s otvoreným zdrojový kód(napr. pre jQuery) sú vzkriesené staré metódy. Knižnica JavaScript je vysoko prispôsobivá a ponúka mnoho vylepšení v tomto veku webových technológií.

V tomto návode vytvoríme skript, ktorý môžeme použiť na vytvorenie dynamických obdĺžnikov drag and drop na našej webovej stránke. Proces riadi jQuery. Takéto skripty šetria čas poskytovaním hotových funkcií! A knižnicu drag and drop možno použiť aj v iných projektoch.

Pripravujeme obsah

V prvom rade k projektu pripravíme malú webstránku. V priečinku projektu musíte vytvoriť dva adresáre s pozoruhodnými názvami "js" a "css" a prázdny súbor index.html . Kód bude veľmi jednoduchý, takže bude jasná predstava o práci a bude tu bod pre ďalší vývoj.

Nižšie je uvedený náš kód HTML súbor. V kapitole hlavu zahŕňame 3 skripty. Hlavný skript jQuery sa načíta zo servera Google Code. súčasťou je aj náš súbor style.css, ktorý obsahuje hlavné vlastnosti pre tvarovanie vzhľad náš dokument.

potiahni ma

Áno áno. Presne ja.

Aj mňa sa dajú ťahať

( zIndex: 200, nepriehľadnosť: 0,9 )

P.S. Môžete ma zahodiť kdekoľvek!

V rámci sekcie telo len dva bloky div, ktoré obsahujú oba obdĺžniky. Kód je pomerne jednoduchý a zrozumiteľný. Hlavičky s triedami sú umiestnené vo vnútri každého obdĺžnika. psovod a handler2. Je to dôležité, pretože každý obdĺžnik sa pri ťahaní správa inak.


Inštalácia CSS

HTML kód je veľmi jednoduchý. Ak rozumiete základnému označeniu, potom css štýly tiež to nebude ťažké. Definuje hlavne okraje, výplň a farby.

Body,html ( font-family:Calibri, sans-serif; background:#eaf3fb; font-size:12px; height:1000px; line-height:18px; ) p ( height:30px; )

Selektory telo, html používa sa len pre ukážkovú stránku. A všetok obsah je umiestnený v dvoch preťahovateľných obdĺžnikoch.

Dv1 ( width:200px; background-color:#eff7ff; border:1px solid #96c2f1; position:absolute; left:100px; top:100px; ) .dv1 h2 ( background-color:#b2d3f5; padding:5px; font- family:Georgia, "Times New Roman", Times, serif; font-size:1.0em; text-transform:uppercase; font-weight:bold; color:#3a424a; margin:1px; cursor:move; ) .dv1 div ( padding:5px; margin-bottom:10px; ) .dv2 ( background-color:#f6ebfb; border:1px solid #a36fde; width:550px; position:absolútna; kurzor:move; left:400px; top:230px; ) .dv2 h2 ( background-color:#eacfe9; letter-spacing:-0.09em; font-size:1.8em; font-weight: bold; padding:15px; margin:1px; color:#241f24; cursor:move; ) .dv2 .content2 ( padding:5px; margin-bottom:10px; )

Pre triedy .dv1 aj .dv2, ktoré používame absolútne umiestnenie. To nie je potrebné a asi ani najviac Najlepšia cesta na umiestnenie preťahovateľných obdĺžnikov. V našom príklade však toto umiestnenie dáva zmysel, pretože pri každom obnovení stránky sa obdĺžniky nastavia na určité miesta.

Písma a farby sú tiež odlišné pre obdĺžniky, aby bolo ľahšie vidieť rozdiel.

Inak sú nadpisy a obsah blokov takmer totožné. Ak budete do projektu kopírovať štýly, pred spustením zmeňte názvy. V niektorých prípadoch bude mať väčší zmysel používať ID namiesto tried, ako napríklad pri použití techniky drag and drop pre jeden konkrétny blok.

Analýza JavaScriptu

Dva súbory JavaScript obsahujú všetok kód potrebný na jeho fungovanie. Preskočíme detaily práce s jQuery, pretože je to mimo rozsahu tohto návodu. Venujme pozornosť súboru jquery.dragndrop.js.

Riadok 22 je definícia funkcie Ťahá.

$.fn.Drags = function(opts) ( var ps = $.extend(( zIndex: 20, nepriehľadnosť: .7, handler: null, onMove: function() ( ), onDrop: function() ( ) ), opts );

Tým sa nastaví návratová premenná a inicializačné údaje pre Ťahá. Táto metóda je veľmi široko používaná pri práci s jQuery na odovzdávanie možností iným funkciám. Vnútri nastavíme premenné pre všetky dostupné možnosti pre obdĺžniky, ktoré možno presunúť.


Nasledujúca časť kódu obsahuje obslužné rutiny udalostí pre premennú Chyť pusti. Obe udalosti ťahať a pokles volania funkcií s odovzdávaním parametrov udalostí. Tieto udalosti sa vyskytujú, keď stlačíte tlačidlo myši, aby ste potiahli objekt a potom ho uvoľnili.

Var dragndrop = ( drag: function(e) ( var dragData = e.data.dragData; dragData.target.css(( vľavo: dragData.left + e.pageX - dragData.offLeft, hore: dragData.top + e.pageY) - dragData.offTop )); dragData.handler.css(( kurzor: "presunúť" )); dragData.target.css (( kurzor: "presunúť" )); dragData.onMove(e); ), drop: function( e) ( var dragData = e.data.dragData; dragData.target.css(dragData.oldCss); //.css(( "opacity": "" )); dragData.handler.css("kurzor", dragData. oldCss.cursor); dragData.onDrop(e); $().unbind("mousemove", dragndrop.drag) .unbind("mouseup", dragndrop.drop); ) )

Naše funkcie manipulujú s umiestnením CSS každého objektu. Ak zmeníte absolútne umiestnenie vašich objektov, nebude to mať vplyv na kód, pretože každý z nich Funkcia JavaScript zmení akýkoľvek štýl, ktorý je definovaný pre objekt.

Vo zvyšku kódu je skontrolovaný handler a ostatné štýly sú kozmeticky zmenené. Tu môžete pridať zmenu priehľadnosti, písma a farby alebo pridať nové odseky.

Funkcie drag/drop

Druhý súbor fn.js obsahuje veľmi jednoduchý kód. Čakáme, kým sa dokument úplne načíta, potom zavoláme naše funkcie. Sú definované dve inštancie funkcií Ťahá, ktorá bola riešená skôr.

Máme dva plávajúce bloky s triedami .dv1 a .dv2. Ak potrebujete nechať jeden plávajúci blok, potom stačí odstrániť druhú časť kódu. Pridanie ďalšieho plávajúceho bloku je tiež jednoduché. Stačí len pridať Nová funkcia v tomto súbore.

Prvým krokom je nastavenie možností pri volaní funkcie. Nezabudnite nastaviť meno handlera. Pomocou neho povieme jQuery, ktorý handler má použiť, keď stlačíte tlačidlo myši určitej oblasti dokument. Názov obslužného programu môže byť trieda alebo atribút ID.

Naša prvá funkcia má dve obsluhy udalostí onMove a onDrop. Obidve volajú nové funkcie, ktoré sú odovzdané aktuálnej udalosti ako premenné. Toto je miesto, kde sa kód HTML v obdĺžniku upravuje tak, aby sa aktualizoval pri každom pohybe. Je to skvelý efekt na demonštráciu toho, ako môžete riadiť proces pomocou jednoduchých udalostí jQuery.

V druhej funkcii používame parametre z-Index a opacity. Môžete pridať ďalšie vlastnosti css? ale to by si vyžadovalo prepísanie kódu JavaScript na overenie inštalácií. Môžete napríklad zadať iný štýl písma alebo hodnoty pre výšku a šírku plávajúceho obdĺžnika - veľmi zaujímavý trik!

Záver

V dôsledku malej práce máme k dispozícii nádherné rozhranie s funkciou drag and drop. jQuery poskytuje obrovské výhody pre vývojárov, ktorí chcú vo svojich projektoch používať staré spôsoby.

Výsledkom je, že sme získali nielen funkcie obsluhy udalostí, ale môžeme tiež odovzdať nové premenné do blokov, ktoré možno presúvať. To otvára nové možnosti pre kreativitu. Ukážka lekcie obsahuje iba náčrt toho, čo sa dá urobiť pomocou takéhoto kódu.

Pozrite si dokumentáciu jQuery na používanie funkcií knižnice.