Vai esat kādreiz redzējis izvēlnes vai tabulas kolonnu vai rindu izcelšanu citā krāsā, kad peli novieto virs tās? Tāds ir mūsu mērķis šeit: lai rinda tiktu izcelta, kad peles rādītājs atrodas diapazonā.
TDBGrid Delphi komponents ir viens no VCL dārgakmeņiem. Paredzēts, lai lietotājs varētu skatīt un rediģēt datus tabulas režģī, DBGrid piedāvā dažādus veidus, kā pielāgot to, kā tas attēlo savus datus. Piemēram, krāsu pievienošana datu bāzes režģiem uzlabos izskatu un diferencēs noteiktu rindu vai kolonnu nozīmi datu bāzē.
Tomēr nemaldieties par pārāk vienkāršotajām pamācībām par šo tēmu. Tas varētu šķist pietiekami vienkārši, lai vienkārši iestatītu dgRowSelect īpašumu, bet atcerieties to, kad dgRowSelect ir iekļauta Iespējas, dgEditing karogs tiek ignorēts, kas nozīmē, ka ir atspējota datu rediģēšana, izmantojot režģi.
Zemāk atradīsit skaidrojumu, kā iespējot OnMouseOver veida notikums DBGrid rindai, lai pele tiktu ierakstīta un atrasta, padarot ierakstu aktīvu tā, lai iezīmētu atbilstošo rindu DBGrid.
Kā strādāt ar OnMouseOver un Delphi komponentiem
Pirmā darba kārtība ir rakstot kodu priekš OnMouseMove notikums TDBGrid komponentā, lai tas varētu atrast DBGrid rindu un kolonnu (šūnu), uz kuras novieto peles kursoru.
Ja pele atrodas virs režģa (apstrādāta ar OnMouseMove notikumu apstrādātājs), varat izmantot Pārvietot DataSet komponenta metode, lai pašreizējo ierakstu iestatītu uz tādu, kas redzams "zem" peles kursora.
tips THackDBGrid = klase(TDBGrid);
...
procedūra TForm1.DBGrid1MouseMove
(Sūtītājs: TObject; Shift: TShiftState; X, Y: vesels skaitlis);
var
gc: TGridCoord;
sākt
gc: = DBGrid1.MouseCoord (x, y);
ja (gc. X> 0) UN (gc. Y> 0) tad sāk
DBGrid1.DataSource. DataSet. Pārvietot
(gc. Y - THackDBGrid (DBGrid1) .Row);
beigas;
beigas;
Līdzīgu kodu var izmantot, lai parādītu, uz kuras šūnas peles kursors virzās, un lai mainītu kursoru, kad tas atrodas virs nosaukuma joslas.
Lai pareizi iestatītu aktīvo ierakstu, jums ir jānolauž DBGrid un jādod rokas uz aizsargāto Rinda īpašums. Rinda a īpašums TCustomDBGrid komponents satur atsauci uz šobrīd aktīvo rindu.
Daudzi Delphi komponenti ir noderīgas īpašības un metodes, kas Delphi izstrādātājam ir apzīmētas kā neredzamas vai aizsargātas. Cerams, ka, lai piekļūtu šādiem aizsargātajiem komponenta locekļiem, var izmantot vienkāršu paņēmienu, ko sauc par "aizsargātu kapāt".
Izmantojot iepriekš minēto kodu, pārvietojot peli virs režģa, atlasītais ieraksts tiek parādīts režģī "peles" peles kursora režģī. Lai mainītu pašreizējo ierakstu, nav nepieciešams noklikšķināt uz režģa.
Lai uzlabotu lietotāja pieredzi, izceliet aktīvo rindu:
procedūra TForm1.DBGrid1DrawColumnCell
(Sūtītājs: TObject; const Rect: TRect; DataCol: vesels skaitlis;
Kolonna: TC kolonna; Štats: TGridDrawState);
iesākums (THackDBGrid (DBGrid1) .DataLink. ActiveRecord + 1 =
THackDBGrid (DBGrid1) .Row)
vai (gdFocused in State) vai (gdIzvēlēts štatā) tad sāk
DBGrid1.Canvas. Birste. Krāsa: = clSkyBlue;
DBGrid1.Canvas. Fonts. Stils: = DBGrid1.Canvas. Fonts. Stils + [fsBold];
DBGrid1.Canvas. Fonts. Krāsa: = saspiests;
beigas;
beigas;
OnDrawColumnCell notikums tiek izmantots, lai apstrādātu vajadzību pēc pielāgota zīmējuma datiem režģa šūnās.
Varat izmantot nelielu viltību, lai atlasīto rindu atšķirtu no visām pārējām rindām. Ņemiet vērā, ka Rinda īpašums (vesels skaitlis) ir vienāds ar ActiveRecord (+1) īpašums DataLink objekts, kuru izvēlētā rinda gatavojas krāsot.
Jūs, iespējams, vēlēsities atspējot šo uzvedību ( Pārvietot metode in OnMouseMove notikumu apstrādātājs) kad DataSet ir savienots ar DBGrid Rediģēt vai Ievietot režīms.