Delphi világ - drag-and-drop felület

Drag-and-Drop migrációs felület

A komponensek átvitelére és fogadására szolgáló felület már régen megjelent. Ez biztosítja a két vezérlő interakcióját az alkalmazás végrehajtása során. Ugyanakkor minden szükséges művelet elvégezhető. A megvalósítás egyszerűsége és a fejlesztés előírása ellenére sok programozó (különösen a kezdők) úgy véli, hogy ez a mechanizmus homályos és egzotikus. Mindazonáltal a Drag-and-Drop használata nagyon hasznos lehet és könnyen megvalósítható. Most meggyőződünk erről.

Annak érdekében, hogy a mechanizmus működjön, két vezérlőt kell megfelelően beállítania. Az egyiknek forrásnak kell lennie, a másik pedig célnak kell lennie. Ebben az esetben a forrás nem mozog bárhová, de csak ilyen módon szerepel a mechanizmusban.

Megjegyzés:
Egyetlen vezérlés lehet forrás és vevő is.

A felhasználó az egér kurzort a kívánt vezérlőre helyezi, megnyomja a bal egérgombot, és anélkül, hogy felengedi, a kurzor mozgatja a második elemet. Ha ezt az elemet eléri, a felhasználó felengedi az egérgombot. Ekkor a fejlesztő által végrehajtott műveletek végrehajtására kerül sor. Az első vezérlőelem a forrás, a második pedig a vevő.

Amint látja, a Drag-and-Drop mechanizmus számos alkalmazási területe megtalálható. Univerzalitását azzal magyarázza, hogy ez csak egy eszköz a két komponens egérmutatóval történő összekapcsolására. Egy adott tartalom csak a programozó képzelőerejétől és a hozzárendelt feladatoktól függ.

Az egész Drag-and-Drop mechanizmust a TControl alaposztályban hajtják végre, amely az összes vezérlő előde. Tekintsük a mechanizmus lényegét.

A Delphi komponens paletta minden vezérlése a forrás a Drag-and-Drop mechanizmusban. Viselkedése az átadás kezdeti szakaszában az ingatlantól függ

A dmAutomatic értéke a komponens automatikus válaszát adja meg a bal egérgombbal és a húzás elejével - miközben a mechanizmus bekapcsol.

A dmManual értéke (alapértelmezés szerint telepítve) megköveteli a fejlesztő számára, hogy manuálisan engedélyezze a mechanizmust. Ez az üzemmód abban az esetben használatos, ha az elem a bal egérgomb lenyomására reagál valahogy másképp. Az átvitel kezdeményezéséhez használja a

Az azonnali = True paraméter azonnal elindítja a mechanizmust. Ha hamis, akkor a mechanizmus csak akkor van engedélyezve, ha a kurzor a Küszöbérték paraméter által meghatározott távolságba kerül.

A mechanizmus beillesztésekor az egérmutatót jelzi - a tulajdonságban meghatározott kurzorra változik

Emlékeztessük még egyszer arra, hogy a forrás nem változtatja meg saját pozícióját a kurzor mozgatásakor, és csak akkor, ha az átvitel sikeresen befejeződött, akkor kölcsönhatásba léphet a vevővel.

A vevők lehetnek bármely olyan komponens, amelyben a kezelő módszert hoz létre

Akkor hívják, ha a kurzort Drag-and-Drop módban mozgatja az összetevő fölé. A kezelő módszerben megadhatja a szállítási források kiválasztását a kívánt attribútumokkal.

Ha az Elfogadás paraméter értéke Igaz, ez az összetevő lesz a vevő. Az átvitel forrását a forrásparaméter határozza meg. Ezzel a lehetőséggel a fejlesztő hozzáfér a forrás tulajdonságaihoz és módszereihez. Az aktuális kurzorpozíció az X és Y paramétereket határozza meg. Az állapot paraméter az egérmozgás természetére vonatkozó információkat jeleníti meg:

dsDragEnter - a mutató megjelent az összetevőn; dsDragLeave - a mutató elhagyta az összetevőt; dsDragMove - a mutató az összetevőn keresztül mozog.

A vevőnek biztosítania kell bizonyos műveletek végrehajtását abban az esetben, ha a forrás az átvitelt elvégzi rajta. Ehhez használja a kezelő módszert

amely akkor hívódik meg, amikor a bal oldali egérgombot felengedik a vevőegységen. A forráshoz és a vevőhöz való hozzáférést a Forrás és a Küldő paraméterek biztosítják. Az egér koordinátái visszaadják az X és Y paramétereket.

Amikor a költöztetés befejeződött, a vezérlő forrás - megkapja a megfelelő üzenetet, amelyet a módszer feldolgoz

A forrás és a vevőegységet a Feladó és a Cél paraméterek határozzák meg. Az egér koordinátáit az X és Y paraméterek határozzák meg.

Használhatja a forrás EndDrag módját, hogy programmatikusan leállítsa a költöztetést (a felhasználó nem használja a művelet normál végét):

A Drop = True paraméter befejezi a migrációt. Az érték False megállítja az átvitelt.

Lista 27.1. A DemoDragDrop projekt fő formamoduljának végrehajtási szakasza

és a szállító szerkezet be van kapcsolva. Mivel az Edit1-hez tartozó DragMode tulajdonság dmManual, az összetevő problémamentesen nyújt fókuszt és szövegszerkesztést.

Az EditiEndDrag módszer információt nyújt a forrástranszfer végrehajtásáról.

A 2. szerkesztéshez a vevő kezelő módszereit definiálják. A Edit2DragOver módszer ellenőrzi a forrás osztályt, és engedélyezi vagy megtagadja a fogadást.

A Edit2DragDrop módszer a forrástól a vevõig terjed szövegeket.

Ne feledje, hogy mindkét TEdit komponens mind forrás, mind vevőkészülék. Ehhez mindegyikük a másik kezelési módszereit használja. És a módszerek forráskódja úgy van beállítva, hogy feldolgozza a tulajdonosat a TEdit osztály egy példányaként.

Az űrlap mint Drag-and-Drop vevőegység biztosítja a Panel2 mozgását, amely forrásként működik. Az FormDragOver módszer megtiltja a panelek kivételével bármilyen összetevőt. Az FormDragDrop módszer mozgatja az összetevőt.

A panelnek nincs saját kezelői módszere, mivel dmAutomatikus üzemmódban működik, és nincs szükség további feldolgozásra az átvitel befejezéséig.