Delphi lume - drag-and-drop interfață

Drag-and-drop interfață de migrare

Interfața pentru transferul și recepția de componente a apărut cu mult timp în urmă. Acesta furnizează interacțiunea celor două comenzi în timpul executării aplicației. În același timp, pot fi efectuate toate operațiile necesare. În ciuda simplității implementării și a prescripției dezvoltării, mulți programatori (în special începători) consideră că acest mecanism este obscur și exotic. Cu toate acestea, utilizarea Drag-and-Drop poate fi foarte utilă și ușor de implementat. Acum suntem convinși de acest lucru.







Pentru ca mecanismul să funcționeze, trebuie să configurați în mod corespunzător două comenzi. Trebuie să fie o Sursă, cealaltă o Țintă. În acest caz, sursa nu se mișcă nicăieri, ci este înregistrată ca atare în mecanism.

Notă:
Un singur control poate fi atât o sursă cât și un receptor.

Utilizatorul introduce cursorul mouse-ului pe controlul dorit, apasă butonul stâng al mouse-ului și, fără a-l elibera, pornește mișcarea cursorului pe al doilea element. Când acest element este atins, utilizatorul eliberează butonul mouse-ului. În acest moment, acțiunile furnizate de dezvoltator sunt executate. Primul element de control este sursa, iar al doilea este receptorul.

După cum puteți vedea, puteți găsi mai multe domenii de aplicare a mecanismului Drag-and-Drop. Universalitatea sa se explică prin faptul că acesta este doar un mijloc de a lega cele două componente cu indicatorul mouse-ului. Un conținut specific depinde numai de imaginația programatorului și de sarcinile atribuite.

Întregul mecanism Drag-and-Drop este implementat în clasa de bază TControl, care este strămoșul tuturor controalelor. Luați în considerare esența mecanismului.

Orice control din Paleta de componente Delphi este sursa din mecanismul Drag-and-Drop. Comportamentul său în stadiul inițial al transferului depinde de valoarea proprietății

Valoarea dmAutomatic oferă un răspuns automat al componentei la clic pe butonul stâng al mouse-ului și la începutul tragerii - în timp ce mecanismul pornește singur.

Valoarea dmManual (instalată în mod implicit) cere dezvoltatorului să activeze mecanismul manual. Acest mod este utilizat în cazul în care componenta ar trebui să reacționeze la apăsarea stânga a mouse-ului într-un mod diferit. Pentru a inițializa transferul, utilizați







Parametrul imediat = True oferă o pornire imediată a mecanismului. Dacă este False, mecanismul este activat numai atunci când cursorul este mutat la distanța specificată de parametrul Threshold.

La includerea mecanismului semnalează indicatorul mouse-ului - se schimbă la cursorul definit în proprietate

Să reamintim încă o dată că sursa nu își schimbă propria poziție atunci când se mișcă cursorul și numai dacă transferul este finalizat cu succes poate interacționa cu receptorul.

Un receptor poate fi orice componentă în care este creată o metodă de manipulare

Se numește atunci când cursorul este mutat în modul Drag and Drop over this component. În metoda handler puteți să alegeți sursele de transport prin atributele dorite.

Dacă parametrul Accept este setat la True, această componentă devine receptorul. Sursa transferului este determinată de parametrul sursă. Prin această opțiune, dezvoltatorul accesează proprietățile și metodele sursei. Poziția curentă a cursorului specifică parametrii X și Y. Parametrul de stare returnează informații despre natura mișcării mouse-ului:

dsDragEnter - indicatorul a apărut peste componentă; dsDragLeave - indicatorul a părăsit componenta; dsDragMove - indicatorul se deplasează prin componentă.

Receptorul trebuie să asigure executarea unor acțiuni în cazul în care sursa completează transferul pe acesta. Pentru a face acest lucru, utilizați metoda de manipulare

care se numește când butonul stâng al mouse-ului este eliberat pe componenta receptorului. Accesul la sursă și la receptor este furnizat de parametrii Sursă și Expeditor, respectiv. Coordonatele mouse-ului returnează parametrii X și Y.

Când migrarea este terminată, sursa de control - primește un mesaj corespunzător, care este procesat de metodă

Sursa și receptorul sunt determinate de parametrii Expeditor și Target, respectiv. Coordonatele mouse-ului sunt determinate de parametrii X și Y.

Puteți utiliza metoda EndDrag a sursei pentru a opri migrarea programabil (utilizatorul nu utilizează sfârșitul normal al operației):

Parametrul Drop = True finalizează migrarea. Valoarea False oprește transferul.

Listing 27.1. Secțiunea de implementare a modulului principal al proiectului DemoDragDrop

iar mecanismul de transport este pornit. Deoarece proprietatea DragMode pentru Edit1 este dmManual, componenta oferă focalizare și editare text fără probleme.

Metoda EditiEndDrag oferă informații despre execuția transferului în sursă.

Pentru componenta Edit2, sunt definite metodele de manipulare a receptorului. Metoda Edit2DragOver verifică clasa sursă și permite sau refuză recepția.

Metoda Edit2DragDrop poarta text de la sursa la receptor.

Rețineți că ambele componente TEdit sunt atât surse, cât și receptoare. Pentru a face acest lucru, fiecare dintre ele utilizează metodele de manipulare ale celuilalt. Și codul sursă al metodelor este configurat să proceseze proprietarul ca o instanță a clasei TEdit.

Forma, ca un receptor Drag-and-Drop, asigură mișcarea panoului 2, care acționează ca sursă. Metoda FormDragOver interzice recepția oricăror componente, cu excepția panourilor. Metoda FormDragDrop muta componenta.

Panoul nu are propriile metode de manipulare, deoarece funcționează în modul dmAutomatic și nu are nevoie de procesare suplimentară a finalizării transferului.







Trimiteți-le prietenilor: