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)