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.