Înțelegerea operațiunilor de drag and drop

A „trage și arunca” înseamnă să țineți apăsat butonul mouse-ului computerului pe măsură ce mouse-ul este mutat, apoi eliberați butonul pentru a plasa obiectul. Delphi ușurează programarea de glisare și plasare în aplicații.

Puteți trage și plasa cu adevărat de la / către oriunde doriți, cum ar fi de la un formular la altul sau de la Windows Explorer la aplicația dvs..

Exemplu de glisare și picătură

Porniți un proiect nou și puneți un control de imagine pe un formular. Utilizați Object Inspector pentru a încărca o imagine (Picture Picture) și apoi setați DragMode proprietatea la dmManual. Vom crea un program care să permită mutarea unui timp de control TImage folosind tehnica drag and drop.

DragMode

Componentele permit două tipuri de glisare: automată și manuală. Delphi folosește proprietatea DragMode pentru a controla atunci când utilizatorul este capabil să tragă controlul. Valoarea implicită a acestei proprietăți este dmManual, ceea ce înseamnă că glisarea componentelor în jurul aplicației nu este permisă, cu excepția unor circumstanțe speciale, pentru care trebuie să scriem codul corespunzător. Indiferent de setarea pentru proprietatea DragMode, componenta se va muta numai dacă este scris codul corect pentru a-l repoziționa.

OnDragDrop

Evenimentul care recunoaște glisarea și abandonarea se numește eveniment OnDragDrop. O folosim pentru a specifica ce dorim să se întâmple atunci când utilizatorul aruncă un obiect. Prin urmare, dacă dorim să mutăm o componentă (imagine) într-o locație nouă pe un formular, trebuie să scriem codul pentru gestionatorul de evenimente OnDragDrop al formularului.

Parametrul sursă al evenimentului OnDragDrop este obiectul abandonat. Tipul parametrului sursă este TObject. Pentru a-i accesa proprietățile, trebuie să-l aruncăm la tipul corect de componente, care în acest exemplu este TImage.

Accept

Trebuie să folosim evenimentul OnDragOver al formularului pentru a semnala că formularul poate accepta controlul TImage pe care dorim să îl aruncăm. Deși parametrul Accept implicit pe True, dacă nu este furnizat un gestionar de eveniment OnDragOver, controlul respinge obiectul târât (ca și cum parametrul Accept a fost schimbat în False).

Rulați proiectul și încercați să trageți și să picurați imaginea. Observați că imaginea rămâne vizibilă în locația sa originală în timp ce indicatorul mouse-ului se deplasează. Nu putem folosi procedura OnDragDrop pentru a face ca componenta să fie invizibilă în timp ce glisarea are loc, deoarece această procedură este apelată numai după ce utilizatorul renunță la obiect (dacă este deloc).

DragCursor

Dacă doriți să schimbați imaginea cursorului prezentată la tragerea controlului, utilizați proprietatea DragCursor. Valorile posibile pentru proprietatea DragCursor sunt aceleași cu cele pentru proprietatea Cursor. Puteți utiliza cursoare animate sau orice doriți, cum ar fi un fișier imagine BMP sau un fișier cursor CUR.

BeginDrag

Dacă DragMode este dmAutomatic, glisarea începe automat când apăsăm un buton de mouse cu cursorul de pe control. Dacă ați lăsat valoarea proprietății DragMode a TImage la valoarea implicită a lui dmManual, trebuie să utilizați metodele BeginDrag / EndDrag pentru a permite glisarea componentei. O modalitate mai obișnuită de a trage și arunca este de a seta DragMode pe dmManual și de a începe glisarea manipulând evenimentele mouse-down.

Acum, vom folosi Ctrl + MouseDown combinație de tastatură pentru a permite glisarea să aibă loc. Setați DragMode lui TImage înapoi la dmManual și scrieți managerul de evenimente MouseDown astfel:

BeginDrag ia un parametru boolean. Dacă trecem True (ca în acest cod), glisarea începe imediat; dacă este fals, nu începe până nu mutăm mouse-ul la mică distanță. Nu uitați că necesită tasta Ctrl.