Láttál már valaha egy menüt, asztali oszlopot vagy sort, ha más színre van kiemelve, amikor az egér fölé mutat? Ez a mi célunk itt: az, hogy egy sor kiemelésre kerüljön, amikor az egérmutató a hatótávolságon belül van.
A TDBGrid Delphi komponens a VCL egyik ékszere. A DBGrid célja, hogy lehetővé tegye a felhasználó számára az adatok táblázatos rácsban történő megtekintését és szerkesztését, és különféle lehetőségeket kínál arra, hogy testreszabja a saját adatainak megjelenítését. Például, szín hozzáadása az adatbázis-rácsokhoz javítja a megjelenést és megkülönbözteti az egyes sorok vagy oszlopok fontosságát az adatbázisban.
Ne tévesszen meg azonban a témáról szóló túl egyszerűsítő oktatóanyagok. Úgy tűnhet, hogy elég egyszerű, hogy csak beállítsa a dgRowSelect vagyont, de ne feledje, amikor dgRowSelect szerepel a Opciók, az dgEditing a jelzőt figyelmen kívül hagyjuk, ami azt jelenti, hogy az adatok szerkesztése a rács segítségével le van tiltva.
Az alábbiakban ismertetjük, hogyan kell engedélyezni a
onmouseover típusú esemény egy DBGrid sor számára, az egér rögzítése és elhelyezése érdekében, így a rekord aktívvá válik, hogy kiemelje a DBGrid megfelelő sorát.Hogyan kell dolgozni az OnMouseOver és a Delphi komponensekkel?
Az első ügyrend: kód írása a onMouseMove esemény egy TDBGrid összetevőben, hogy megtalálja a DBGrid sorát és oszlopát (cellát), amelyen az egér lebeg.
Ha az egér a rács felett van (a onMouseMove eseménykezelő), akkor használhatja a MoveBy egy DataSet komponens módszere az aktuális rekord beállításához az egér kurzor "lent" megjelenített értékére.
típus THackDBGrid = osztály(TDBGrid);
...
eljárás TForm1.DBGrid1MouseMove
(Feladó: TObject; Shift: TShiftState; X, Y: egész szám);
var
gc: TGridCoord;
kezdődik
gc: = DBGrid1.MouseCoord (x, y);
ha (Gc. X> 0) ÉS (Gc. Y> 0) thenbegin
DBGrid1.DataSource. DataSet. MoveBy
(Gc. Y - THackDBGrid (DBGrid1). Sor);
vég;
vég;
Hasonló kód felhasználható annak megjelenítésére, amelyik cella fölé az egér mutat, és megváltoztathatja a kurzort, amikor az a címsor fölött található.
Az aktív rekord helyes beállításához be kell csapkodnia a DBGridbe, és kezét védeni kell Sor ingatlan. Az Sor tulajdonosa a TCustomDBGrid összetevő tartja a hivatkozást az aktuálisan aktív sorra.
Sok Delphi alkatrészek hasznos tulajdonságokkal és módszerekkel rendelkeznek, amelyeket láthatatlanul vagy védettként jelölnek meg egy Delphi fejlesztő számára. Remélhetőleg egy alkatrész ilyen védett tagjaihoz való hozzáféréshez egy egyszerű technikát, úgynevezett "védett hack" -ot lehet használni.
A fenti kóddal együtt, amikor az egeret a rács fölé viszi, a kiválasztott rekord megegyezik a rácsban megjelenő egér kurzor "lent" ponttal. Az aktuális rekord megváltoztatásához nem kell rácsra kattintania.
Jelölje ki az aktív sort, hogy javítsa a felhasználói élményt:
eljárás TForm1.DBGrid1DrawColumnCell
(Feladó: TObject; const Rect: TRect; DataCol: egész szám;
Oszlop: TC oszlop; Állam: TGridDrawState);
beginif (THackDBGrid (DBGrid1) .DataLink. ActiveRecord + 1 =
THackDBGrid (DBGrid1) .Row)
vagy (gdFocused államban) vagy (gdSelected in State) thenbegin
DBGrid1.Canvas. Kefe. Szín: = clSkyBlue;
DBGrid1.Canvas. Betűtípus. Stílus: = DBGrid1.Canvas. Betűtípus. Stílus + [fsBold];
DBGrid1.Canvas. Betűtípus. Szín: = CLRed;
vég;
vég;
Az OnDrawColumnCell esemény segítségével kezelik a rács celláiban lévő adatok testreszabott rajzának szükségességét.
Egy kis trükkö segítségével megkülönböztetheti a kiválasztott sort az összes többi sortól. Vegye figyelembe, hogy a Sor ingatlan (egész szám) megegyezik a ActiveRecord (+1) a Adat link objektum, amelyet a kiválasztott sor festeni készül.
Valószínűleg le szeretné tiltani ezt a viselkedést (a MoveBy módszer in onMouseMove eseménykezelő) mikor DataSet a DBGridhez csatlakoztatva van szerkesztése vagy Insert mód.