Tehnologia de implementare drag-and-drop de tragere - dropvvcl

DragDrop ( «drag and pune„) - este schimbul de date într-un fel între aplicații. Această metodă de schimb utilizat de mai multe aplicații software. De exemplu, de foarte multe ori muta fișiere și foldere.







Biblioteca de componente vizuale - VCL pune în aplicare propria lor versiune a DragDrop - tehnologie care permite transmisia și recepția oricăror controale într-unul și aceeași formă. Cu această utilizare internă VCL nu se aplică sistemul de operare, deși organizarea de comunicare a diferitelor aplicații ar trebui să utilizeze funcția API corespunzătoare pentru Windows.

Un utilizator făcând clic pe butonul din stânga al mouse-ului, trageți elementul de control poate (obiect - sursa) la un alt element (obiect-receptor). Când glisarea și fixarea unui eveniment care ar trebui să se ocupe de program (eveniment destinatarul este un element peste care cursorul mouse-ului). DragModeotvechaet proprietate Componenta pentru participarea lor la procesul de schimb de date.

DragMode = dmAutomatic - Evenimentele sunt declanșate automat, programatorul scrie doar coduri de manipulare eveniment corespunzătoare.

DragMode = dmManual - toate apelurile către programatorul trebuie să se organizeze.

Evenimentele care au loc atunci când trageți

eveniment OnDragOver are loc în timp ce se deplasează cursorul mouse-ului peste obiect-receptor, iar când butonul este eliberat în locul.







obiect receptor specifice expeditorului (cursorul este peste ea);

X, coordonatele Y- ale mouse-ului în zona de client al sistemului obiect Expeditor;

stat State- (are unul din cele trei mouse-ului znacheniydsDragEnter- a apărut deasupra elementului; dsDragMovekursor se deplasează peste elementul; dsDragLeave- cursorul a părăsit din elementul sau elementul pe butonul este eliberat).

boolean acceptabilitate. Această variabilă handler trebuie să se întoarcă decizia de a accepta sau de a respinge obektSource.

De exemplu, eticheta de clasă componentă (Name = Label1) trebuie să accepte numai componente klassaShape (forme geometrice), atunci acesta va cuprinde un procesor purtat de obiectul sursă (Sursa):

anula __fastcall TForm1 :: Label1DragOver (TObject * Sender, TObject * Sursa,

int x, int y, TDragState de Stat, bool Acceptați)

OnDragDrop eveniment are loc atunci când eliberați butonul stâng al mouse-ului peste elementul, gata să primească. parametrySender lui, Sursa, XiYimeyut aceeași semnificație ca și cea a evenimentului anterior. Conținutul acestui procesor depinde de ceea ce funcții programator permite utilizatorului să efectueze prin tragere. Acest lucru poate fi o schimbare în locația de obiecte, schimbul de informații, etc.

În exemplul următor, nu există nici o mișcare fizică a obiectelor; componenta Label1 primește un pointer la un obiect mutat (figura geometrică) și citește valorile de proprietate (înălțime, lățime) pentru calcularea formei perimetrului. Rezultatul calculului este plasat în Label1 -> Legendă.

void __fastcall TForm1 :: Label1DragDrop (TObject * Sender,

TObject * Sursa, int x, int y)

float p, pi = 3.14; int w, h, r, D;

w (Source (TShape *)) = -> Lățime;

D = w; în cazul în care (D> h) D = h;

comutator (((TShape *) Sursa) -> Shape)