Selectarea și evidențierea unei rânduri într-o DBGrid

Ați văzut vreodată un meniu sau o coloană de tabel sau un rând evidențiat cu o culoare diferită atunci când mouse-ul dă peste ea? Acesta este obiectivul nostru aici: ca un rând să fie evidențiat atunci când indicatorul mouse-ului se află în raza de acțiune.

Componenta TDBGrid Delphi este una dintre bijuteriile VCL. Conceput pentru a permite utilizatorului să vizualizeze și să editeze datele într-o grilă tabulară, DBGrid oferă diverse modalități de personalizare a modului în care reprezintă propriile sale date. De exemplu, adăugarea de culoare la rețelele bazei de date va îmbunătăți aspectul și va diferenția importanța anumitor rânduri sau coloane din baza de date.

Totuși, nu vă lăsați păcăliți de tutorialele prea simpliste pe acest subiect. S-ar putea părea destul de ușor să setați doar dgRowSelect proprietate, dar amintiți-vă că atunci când dgRowSelect este inclus în Opțiuni, dgEditing steagul este ignorat, ceea ce înseamnă că editarea datelor cu ajutorul grilei este dezactivată.

Ceea ce veți găsi mai jos este o explicație despre cum să activați funcția onMouseover tipul de eveniment pentru un rând DBGrid, astfel încât mouse-ul să fie înregistrat și localizat, făcând înregistrarea activă astfel încât să evidențieze rândul corespunzător într-un DBGrid.

Cum să lucrați cu componente OnMouseOver și Delphi

Prima comandă de afaceri este scrierea codului pentru onmousemove eveniment într-o componentă TDBGrid, astfel încât să poată localiza rândul și coloana (celula) DBGrid pe care mouse-ul trece.

Dacă mouse-ul este peste grilă (gestionat în onmousemove handler de evenimente), puteți utiliza MoveBy metoda unei componente DataSet pentru a seta înregistrarea curentă la cea afișată „sub” cursorul mouse-ului.

tip THackDBGrid = clasă(TDBGrid);
...
procedură TForm1.DBGrid1MouseMove
(Expeditor: TObject; Shift: TShiftState; X, Y: Integer);
var
gc: TGridCoord;
începe
gc: = DBGrid1.MouseCoord (x, y);
dacă (gc.X> 0) ȘI (gc.Y> 0) thenbegin
DBGrid1.DataSource.DataSet.MoveBy
(gc.Y - THackDBGrid (DBGrid1). Row);
Sfârșit;
Sfârșit;

Un cod similar poate fi utilizat pentru a arăta ce celulă se dă peste mouse și pentru a schimba cursorul atunci când este peste bara de titlu.

Pentru a seta corect înregistrarea activă, trebuie să piratați un DBGrid și să puneți mâna pe protejat Rând proprietate. Rând proprietatea unui TCustomDBGrid componenta deține referința la rândul actual activ.

Multe componente Delphi au proprietăți și metode utile care sunt marcate invizibile sau protejate pentru un dezvoltator Delphi. Sperăm, pentru a accesa astfel de membri protejați ai unei componente, se poate folosi o tehnică simplă numită „hack-ul protejat”.

Cu codul de mai sus, atunci când treceți mouse-ul peste grilă, înregistrarea selectată este cea afișată în grila „de sub” a cursorului mouse-ului. Nu este nevoie să faceți clic pe grilă pentru a schimba înregistrarea curentă.

Semnificați rândul activ pentru a îmbunătăți experiența utilizatorului:

procedură TForm1.DBGrid1DrawColumnCell
(Expeditor: TObject; const Rect: TRect; DataCol: Integer;
Coloana: TColumn; Stat: TGridDrawState);
beginif (THackDBGrid (DBGrid1) .DataLink.ActiveRecord + 1 =
THackDBGrid (DBGrid1) .Row)
sau (gdFocalizat în stat) sau (gdSelectat în stat) thenbegin
DBGrid1.Canvas.Brush.Color: = clSkyBlue;
DBGrid1.Canvas.Font.Style: = DBGrid1.Canvas.Font.Style + [fsBold];
DBGrid1.Canvas.Font.Color: = clRed;
Sfârșit;
Sfârșit;

OnDrawColumnCell eveniment este utilizat pentru a gestiona necesitatea unui desen personalizat pentru datele din celulele grilei.

Puteți utiliza un mic truc pentru a diferenția rândul selectat de toate celelalte rânduri. Luați în considerare faptul că Rând proprietatea (integrală) este egală cu ActiveRecord (+1) proprietatea proprietății Legătură de date obiect pe care rândul selectat urmează să fie pictat.

Probabil veți dori să dezactivați acest comportament ( MoveBy metoda în onmousemove handler de evenimente) când DataSet conectat la o DBGrid este în Editați | × sau Introduce mod.