Виждали ли сте някога колона от меню или таблица или ред да подчертава различен цвят, когато мишката ми мине върху нея? Ето каква е целта ни тук: да се маркира ред, когато показалеца на мишката е в обхвата.
Компонентът TDBGrid Delphi е едно от бижутата на VCL. Създаден, за да позволи на потребителя да преглежда и редактира данни в таблична мрежа, DBGrid предоставя различни начини за персонализиране на начина, по който представлява собствените му данни. Например, добавяне на цвят към мрежите на вашата база данни ще подобри външния вид и ще разграничи значението на определени редове или колони в базата данни.
Въпреки това, не се заблуждавайте от прекалено опростени уроци по тази тема. Може да изглежда достатъчно лесно, просто да зададете dgRowSelect собственост, но не забравяйте, че кога dgRowSelect е включен в Настроики, the dgEditing флагът се игнорира, което означава, че редактирането на данните чрез мрежата е деактивирано.
Това, което ще намерите по-долу, е обяснение как да активирате поставяне на показалеца
тип събитие за DBGrid ред, така че мишката да бъде записана и разположена, правейки записа активен, така че да подчертае съответния ред в DBGrid.Как да работите с OnMouseOver и Delphi компоненти
Първият ред на бизнеса е код за писане за OnMouseMove събитие в компонента на TDBGrid, така че да може да намери реда и колоната (клетката) на DBGrid, над която мишката се задържи.
Ако мишката е над решетката (обработва се в OnMouseMove обработващ събитие), можете да използвате MoveBy метод на компонент DataSet за задаване на текущия запис на показания "под" курсора на мишката.
Тип THackDBGrid = клас(TDBGrid);
...
процедура TForm1.DBGrid1MouseMove
(Подател: TObject; Shift: TShiftState; X, Y: цяло число);
Var
gc: TGridCoord;
започвам
gc: = DBGrid1.MouseCoord (x, y);
ако (GC. X> 0) И (GC. Y> 0) thenbegin
DBGrid1.DataSource. Набор от данни. MoveBy
(GC. Y - THackDBGrid (DBGrid1) .Row);
край;
край;
Подобен код може да се използва, за да се покаже над коя клетка курсора на мишката и да промени курсора, когато е над заглавната лента.
За да настроите правилно активния запис, трябва да хакнете DBGrid и да получите ръцете си на защитения ред Имот. Най- ред собственост на а TCustomDBGrid компонент съдържа препратката към текущия активен ред.
много Delphi компоненти имат полезни свойства и методи, които са маркирани невидими или защитени за разработчика на Delphi. Да се надяваме, че за достъп до такива защитени членове на компонент може да се използва проста техника, наречена "защитен хак".
С горния код, когато премествате мишката върху мрежата, избраният запис е този, показан в мрежата „под“ курсора на мишката. Няма нужда да щракнете върху решетката, за да промените текущия запис.
Подчертайте активния ред, за да подобрите практическата работа на потребителя:
процедура TForm1.DBGrid1DrawColumnCell
(Подател: TObject; const Rect: TRect; DataCol: Integer;
Колона: TColumn; Състояние: TGridDrawState);
beginif (THackDBGrid (DBGrid1) .DataLink. ActiveRecord + 1 =
THackDBGrid (DBGrid1) .Row)
или (gdФокусирано в щата) или (gdИзбрано в държавата) thenbegin
DBGrid1.Canvas. Четка. Цвят: = clSkyBlue;
DBGrid1.Canvas. Font. Стил: = DBGrid1.Canvas. Font. Style + [fsBold];
DBGrid1.Canvas. Font. Цвят: = clRed;
край;
край;
Най- OnDrawColumnCell събитието се използва за справяне с необходимостта от персонализиран чертеж за данните в клетките на мрежата.
Можете да използвате малък трик, за да разграничите избрания ред от всички останали редове. Имайте предвид, че ред Имот (цяло число) е равно на ActiveRecord (+1) собственост на връзка за данни обект, че избраният ред е на път да бъде боядисан.
Вероятно ще искате да деактивирате това поведение (the MoveBy метод в OnMouseMove мениджър на събития) кога DataSet свързан към DBGrid е в редактиране или Insert режим.