Kas olete kunagi näinud menüüd või tabeli veerge või rea esiletõstmist mõneks muuks värviks, kui hiir selle kohal hõljub? Just see on siin meie eesmärk: lasta rida esiletõstetud, kui hiirekursor on levialas.
TDBGrid Delphi komponent on üks VCL ehteid. DBGrid, mis on loodud võimaldama kasutajal andmeid tabelitabelis vaadata ja redigeerida, pakub mitmesuguseid viise, kuidas kohandada enda andmete esitusviisi. Näiteks, värvi lisamine andmebaasi ruutudele parandab andmebaasi teatud ridade või veergude väljanägemist ja eristab nende olulisust.
Kuid ärge laske end petta liiga lihtsustatud õpetustest sellel teemal. See võib tunduda piisavalt lihtne, et lihtsalt seadistada dgRowSelect vara, kuid pidage seda meeles, millal dgRowSelect on lisatud Valikud, dgMuuda lippu eiratakse, mis tähendab, et andmete redigeerimine ruudustiku abil on keelatud.
Allpool leiate selgituse, kuidas lubada OnMouseOver tüüp sündmus DBGridi rea jaoks, nii et hiir salvestatakse ja asub, muutes selle aktiivseks, et tõsta esile vastav rida DBGridis.
Kuidas töötada OnMouseOver ja Delphi komponentidega
Esimene töökord on koodi kirjutamine Selle eest OnMouseMove sündmus TDBGrid-komponendis, et see saaks leida DBGridi rea ja veeru (lahtri), mille kohal hiir hõljub.
Kui hiir on ruudustikust üle (käsitsetud OnMouseMove sündmuste käitleja), saate kasutada MoveBy DataSeti komponendi meetod praeguse kirje seadmiseks hiirekursori "all" kuvatavale kirjele.
tüüp THackDBGrid = klass(TDBGrid);
...
protseduur TForm1.DBGrid1MouseMove
(Saatja: TObject; Shift: TShiftState; X, Y: täisarv);
var
gc: TGridCoord;
alustada
gc: = DBGrid1.MouseCoord (x, y);
kui (gc. X> 0) JA (gc. Y> 0) siis alustatakse
DBGrid1.DataSource. DataSet. MoveBy
(gc. Y - THackDBGrid (DBGrid1) .Row);
lõpp;
lõpp;
Sarnast koodi saab kasutada selleks, et näidata, millisele lahtrile hiir kursori liigub, ja kursori muutmiseks, kui see asub tiitliribal.
Aktiivse rekordi korrektseks seadmiseks peate häkkima DBGrid ja laskma oma käed kaitsta Rida vara. Rida a vara TCustomDBGrid komponent hoiab viidet praegu aktiivsele reale.
Palju Delphi komponendid neil on kasulikke omadusi ja meetodeid, mis on Delphi arendajale nähtamatuks või kaitstud. Loodetavasti saab komponendi sellistele kaitstud liikmetele juurdepääsu saamiseks kasutada lihtsat tehnikat, mida nimetatakse kaitstud häkkimiseks.
Ülaltoodud koodiga liigutades hiire üle ruudustiku, kuvatakse valitud kirje hiirekursori all olevas ruudustikus. Praeguse kirje muutmiseks pole vaja ruudustikku klõpsata.
Kasutajakogemuse parandamiseks laske aktiivne rida esiletõstetud kujul:
protseduur TForm1.DBGrid1DrawColumnCell
(Saatja: TObject; const Rect: TRect; DataCol: täisarv;
Veerg: TCveerg; Osariik: TGridDrawState);
algav (THackDBGrid (DBGrid1) .DataLink. ActiveRecord + 1 =
THackDBGrid (DBGrid1) .Row)
või (gdFocused riigis) või (gdValitud osariigis) siis alustatakse
DBGrid1.Canvas. Pintsel. Värv: = clSkyBlue;
DBGrid1.Canvas. Font. Stiil: = DBGrid1.Canvas. Font. Stiil + [fsBold];
DBGrid1.Canvas. Font. Värv: = CLRed;
lõpp;
lõpp;
OnDrawColumnCell sündmust kasutatakse ruudustiku lahtrites olevate andmete kohandatud joonise vajaduse käsitlemiseks.
Valitud rea teistest ridadest eristamiseks võite kasutada väikest trikki. Võtke arvesse, et Rida vara (täisarv) on võrdne ActiveRecord (+1) vara Andmelink objekt, mida valitud rida plaanitakse värvida.
Tõenäoliselt soovite selle käitumise keelata ( MoveBy meetod sisse OnMouseMove sündmuste käitleja) millal DataSet ühendatud DBGridiga on sisse lülitatud Redigeeri või Sisesta režiim.