HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Értékadás TDBGrid-ben Drag and Drop-al


Példaprogram letöltése

9855 bájt

Mellékelt példában egy olyan komponenst készítünk a TDBGrid-ből, melyben egy tetszőleges cella értékét átmásolhatjuk egy másikba drag and drop-al.
A mellékelt példaprogram megnyitása előtt a DBDragGrid.pas-ban lévő komponenst telepítenie kell a Delphi alá.

Nézzük, miként működik a TDBDragGrid komponens.

Fel kell használnunk az egér gomb lenyomásának eseményét. Ezt legegyszerűbben az ős osztályban lévő MouseDown eljárás felülírásával tehetjük.

Itt az egér pozíciójának felhasználásával és a MouseCoord függvénnyel megtudjuk, hogy melyik cellára kattintott a felhasználó és ennek értékét az FGC globális változóba el is tároljuk. Ha a kattintás cellán történt és nem mellette, akkor a BeginDraw hívásával elindítjuk a drag and drop műveletet. Annak a cellának a tartalmát melyre a kattintás történt, az FSource globális változóba eltároljuk a későbbi felhasználás végett.
procedure TDBDragGrid.MouseDown(
      Button: TMouseButton; 
      Shift: TShiftState; X, Y: Integer);
begin
  FGC:=MouseCoord(X,Y);
  if (FGC.X>0) and (FGC.Y>0) then begin
    BeginDrag(false);
  end;
  inherited MouseDown(Button, Shift, X, Y);
  FSource:=SelectedField.Value;
end;

A drag and drop művelethez két további esemény kezelésére lesz szükségünk. Mindkét eseményhez létezik egy-egy eljárás az ős osztályban, így szintén ezek felülírásával érhetjük el célunkat legegyszerűbben. Ez a két eljárás a DragOver és a DragDrop.

A DragOver eljárás akkor kerül meghívásra, amikor a drag and drop művelet elkezdődött és a felhasználó az egérrel mozog a komponensünk felett. Ekkor kell eldöntenünk, hogy az aktuális egér pozíción elfogadható-e a drag and drop.

Mellékelt példában akkor fogadjuk el a drag and drop-ot, ha a művelet ugyanarról a komponensről indult, mint amelyik felett most jár az egér, valamint az egér adat cellára mutat. Ezeket a feltételeket vizsgálva kell értéket adnunk az Accept változónak. Ha igaz értéket kap, akkor az adott pozíción elfogadott lesz a drag and drop, különben nem.
procedure TDBDragGrid.DragOver(Source: TObject;
   X, Y: Integer; State: TDragState; var Accept: Boolean);
var
  gc: TGridCoord;
begin
  gc:=MouseCoord(X,Y);
  Accept:=((Source=Self) and (gc.X>0) and (gc.Y>0));
end;
A másik eljárásunk a DragDrop. Ez akkor kerül meghívásra, amikor a drag and drop művelet során a felhasználó elengedte az egér gombját akkor, amikor a DragOver eljárásban az Accept változó igaz értéket kapott. Ebben az esetben vizsgáljuk szintén a MouseCoord-al, hogy melyik cella felett lett befejezve a drag and drop művelet. Ha ez megvan, akkor kiszámítjuk, hogy hány sor van a drag and drop művelet megkezdése és befejezése között, majd az adattáblát a MoveBy eljárással ennyi rekorddal elmozgatjuk. Ha ez megtörtént, akkor már csak be kell írnunk a kiválasztott cellába a művelet megkezdésekor az FSource változóba eltárolt értéket.
procedure TDBDragGrid.DragDrop(Source: TObject; X, Y: Integer);
var
  gc: TGridCoord;
begin
  gc:=MouseCoord(X,Y);
  if (gc.X>0) and (gc.Y>0) then begin
    DataSource.DataSet.MoveBy(gc.Y-FGC.Y);
    DataSource.DataSet.Edit;
    Fields[gc.X-1].Value:=FSource;
  end;
end;


Cikksorozat



Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2000 évkönyv 534. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |