|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Выделение контуром при наведении и клике DBGridEh
Добрый день!
Подскажите пожалуйста, каким образом можно реализовать такое? Есть таблица TDBGridEh. Задача - при наведении мышкой выделять в таблице (не в DataSource) контуром всю строку (как в экселе, без закрашивания ячеек), а при клике выделить контуром строку и соответственно запись в DataSource. |
#2
|
||||
|
||||
Пять раз прочитал, но так и не понял
И в каком это Excel такое выделение? Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. |
#3
|
|||
|
|||
|
#4
|
||||
|
||||
А Options.dgRowSelect=True, не подходит? Ну и dgAlwaysShowSelection=True для полноты можно. А еще можно OptionsEh.dghHotTrack=True.
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. Последний раз редактировалось Kailon, 14.03.2018 в 14:16. |
#5
|
|||
|
|||
Options.dgRowSelect=True выделяет строку стандартным цветом, насчет dgAlwaysShowSelection=True можно сказать то же самое. или я не так понимаю
|
#6
|
||||
|
||||
Ну, что могу сказать? Если стандартные методы не удовлетворяют требованиям, то нужно все делать самому, ручками.
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. |
#7
|
|||
|
|||
Я поэтому сюда и написал, самому сделать не получается
|
#8
|
||||
|
||||
Цитата:
Сначала хорошенько подумать, а точно-ли нужен именно такой, самописный вариант отображения данных или всёж можно обойтись уже имеющимся, от разработчиков? При положительном ответе, думать дальше: Убрать видимую разметку ячеек проще всего в дизайнтайме, для чего в Options отключить (=false) флажки dgEditing-dgTitles-dgIndicator-dgColLines-dgRowLines, тогда на екране останутся "голые" данные, как на рисунке. Отследить положение курсора мышки можно с помощью функции GetCursorPos(), или глобальных значений Mouse.CursorPos.X/Y За отрисовку ячеек в "таблице" отвечает обработчик DrawColumnCell, вот в нём нужно найти положение мышки, если она в пределах строки, то "выделить контуром строку" посредством вызова .Canvas.FrameRect(), эта низкоуровневая функция закрашивает не всё "тело" области, как это делает .Canvas.FillRect(), а только её контур, рамку как на рисунке Вывод тескта в ячее - это .Canvas.TextOut() Узнать над каким полем висит мышь Код:
var ScrPt, GrdPt: TPoint; Cell: TGridCoord; begin ScrPt := Mouse.CursorPos; GrdPt := DBGrid.ScreenToClient(ScrPt); Cell := DBGrid.MouseCoord(GrdPt.X, GrdPt.Y); // Col := Cell.X; // Row := Cell.Y; end; ... FieldText: string; DLink: TDataLink; OldActiveRec: Integer; ... Cell := DBGrid.MouseCoord(GrdPt.X, GrdPt.Y); FieldText := ''; DLink := THackDBGrid(DBGrid).DataLink; if Assigned(DLink) then begin if (Cell.X < = 0)or(Cell.Y < = 0) then Exit; OldActiveRec := DLink.ActiveRecord; try DLink.ActiveRecord := Cell.Y-1; FieldText:= DBGrid.Columns[Cell.X-1].Field.Text; finally DLink.ActiveRecord := OldActiveRec; end; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 16.03.2018 в 15:07. |
#9
|
|||
|
|||
Спасибо за подробное объяснение, но я все равно сижу в тупике. Да, мне давно надо за учебники
У DBGridEh нет свойств ScreenToClient и MouseCoord, пробовал прописывать их в onDrawColumnCell. Получается нужно будет (скорее да, судя по приведенному Вами коду ниже) наследоваться от DBGridEh? |
#10
|
||||
|
||||
Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#11
|
||||
|
||||
В DBGridEh есть подсветка строки, находящейся под курсором (dghHotTrack в OptionsEh). Подсвечивание происходит бледной заливкой. Может такой вариант сойдёт?
|
#12
|
|||
|
|||
Цитата:
|