| Компонент StringGrid. Записи в строках логически связаны, но по некоторым причинам опцию RowSelect не использую. Однако при выборе какой-либо ячейки - все прочие ячейки этой строки должны закрашиваться своим цветом. Я это реализовал в событии OnDrawCell. При навигации мышкой все работает как надо - своим цветом выделяется вся строка, которой принадлежит выбранная ячейка. Но вот когда осуществляю навигацию стрелками с клавиатуры - ячейки закрашиваются некорректно. Пробую обрабатывать событие OnKeyDown. Ставлю там лишь одну команду - StringGrid1->Refresh() . Очевидно при этом происходит отрисовка всех ячеек по новой с использованием обработчика OnDrawCell. Но проблема в том, что перерисовка грида происходит ПЕРЕД тем, как я нажимаю например стрелку вниз. То есть допустим активная ячейка такая: ряд - 3, колонка - 2. Нажимаю стрелку вниз. Вот как теперь выглядит грид - все ячейки ряда номер 3 закрашены цветом выделения, кроме ячейки в колонке номер 2 (становится белой), также цветом выделения закрашена ячейка в ряду номер 4 в колонке номер 2. Нажимаю еще раз стрелку вниз - все ячейки ряда номер 4 закрашены цветом выделения, кроме ячейки в колонке номер 2 (становится белой), также цветом выделения закрашена ячейка в ряду номер 5 в колонке номер 2. То есть как бы выделение отстает на один ряд. Если StringGrid1->Refresh() записать в обработчик события OnKeyUp, то нужная строка таки закрашивается, но происходит это не сразу. То есть я нажал клавишу со стрелкой - активная ячейка сместилась на ряд (с соответствующей закраской), а вот весь остальной ряд перекрашивается только после того, как я отпустил нажатую клавишу со стрелкой. Это не очень удобно. Так как бы решить эту небольшую проблемку с корректной перекраской выделенного ряда? |