Už ste niekedy videli zvýraznenie ponuky alebo stĺpca tabuľky alebo riadka na inú farbu, keď sa nad ňou nachádza kurzor myši? To je to, čo je naším cieľom: mať zvýraznený riadok, keď je ukazovateľ myši v dosahu.
Komponent TDBGrid Delphi je jedným z klenotov VCL. Navrhnuté tak, aby umožňovalo užívateľovi prezerať a upravovať údaje v tabuľkovej mriežke, poskytuje DBGrid rôzne spôsoby prispôsobenia spôsobu, akým reprezentuje svoje vlastné údaje. Napríklad, pridanie farieb do databázových sietí zlepší vzhľad a rozlíši dôležitosť určitých riadkov alebo stĺpcov v databáze.
Nenechajte sa zmiasť príliš zjednodušenými tutoriálmi na túto tému. Mohlo by sa zdať dosť ľahké len nastaviť dgRowSelect majetku, ale nezabudnite, že keď dgRowSelect je zahrnuté v možnosti, dgEditing flag je ignorovaný, čo znamená, že editácia údajov pomocou mriežky je vypnutá.
Nižšie nájdete vysvetlenie, ako povoliť onmouseover Typ udalosť pre riadok DBGrid, aby bola myš zaznamenaná a lokalizovaná, čím sa aktívny záznam zvýrazní zodpovedajúci riadok v DBGrid.
Ako pracovať s komponentmi OnMouseOver a Delphi
Prvý predmet podnikania je písací kód pre onMouseMove udalosť v komponente TDBGrid, aby bolo možné nájsť riadok a stĺpec (bunku) DBGrid, na ktorý sa myš vznáša.
Ak je myš nad mriežkou (manipulovalo sa v nej) onMouseMove event handler), môžete použiť MoveBy metóda komponentu DataSet na nastavenie aktuálneho záznamu na ten, ktorý sa zobrazuje „pod“ kurzorom myši.
typ THackDBGrid = trieda(TDBGrid);
...
procedúra TForm1.DBGrid1MouseMove
(Odosielateľ: TObject; Shift: TShiftState; X, Y: celé číslo);
var
gc: TGridCoord;
začať
gc: = DBGrid1.MouseCoord (x, y);
ak (GC. X> 0) A (GC. Y> 0) thenbegin
DBGrid1.DataSource. Množina údajov. MoveBy
(GC. Y - THackDBGrid (DBGrid1) .Row);
koniec;
koniec;
Podobný kód sa dá použiť na zobrazenie bunky, nad ktorou sa myš pohybuje, a na zmenu kurzora, keď sa nachádza nad záhlavím.
Aby ste správne nastavili aktívny záznam, musíte hacknúť DBGrid a dostať svoje ruky na chránené riadok nehnuteľnosť. riadok majetok a TCustomDBGrid komponent drží odkaz na aktuálne aktívny riadok.
veľa Komponenty Delphi majú užitočné vlastnosti a metódy, ktoré sú pre vývojárov Delphi označené ako neviditeľné alebo chránené. Dúfajme, že na prístup k takým chráneným členom komponentu sa dá použiť jednoduchá technika nazývaná „chránený hack“.
Pri vyššie uvedenom kóde, keď pohnete myšou po mriežke, vybraný záznam je ten, ktorý sa zobrazí v mriežke „pod“ kurzorom myši. Ak chcete zmeniť aktuálny záznam, nemusíte klikať na mriežku.
Zvýraznite aktívny riadok, aby ste zlepšili dojem používateľa:
procedúra TForm1.DBGrid1DrawColumnCell
(Odosielateľ: TObject; const Rect: TRect; DataCol: Celé číslo;
Stĺpec: TColumn; Štát: TGridDrawState);
beginif (THackDBGrid (DBGrid1) .DataLink. ActiveRecord + 1 =
THackDBGrid (DBGrid1) .Row)
alebo (gdFocused in State) alebo (gdVybraté v štáte) thenbegin
DBGrid1.Canvas. Kefa. Farba: = clSkyBlue;
DBGrid1.Canvas. Písmo. Štýl: = DBGrid1.Canvas. Písmo. Štýl + [fsBold];
DBGrid1.Canvas. Písmo. Farba: = clRed;
koniec;
koniec;
OnDrawColumnCell udalosť sa používa na zvládnutie potreby prispôsobeného výkresu pre údaje v bunkách mriežky.
Môžete použiť malý trik na rozlíšenie vybratého riadku od všetkých ostatných riadkov. Zvážte, že riadok nehnuteľnosť (celé číslo) sa rovná ActiveRecord (+1) majetok spoločnosti DataLink objekt, ktorý má byť vybraný riadok vyfarbený.
Pravdepodobne budete chcieť toto správanie zakázať ( MoveBy metóda v onMouseMove obsluha udalosti) DataSet pripojený k DBGrid je v editovať alebo insert mode.