Vytvorte zvýraznenie farby myšou pomocou Delphi

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.

instagram viewer

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.

instagram story viewer