Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закраска своим цветом активной строки StringGrid, при навигации с помощью клавиатуры 
:(
    Опции темы
Нитонисе
Дата 31.8.2013, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



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


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 25.3.2010

Репутация: 2
Всего: 3



Может, я конечно чего-то и не понял..
Код

int sRow;
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow,
      TRect &Rect, TGridDrawState State)
{
   if (ARow == sRow)
   {
        StringGrid1->Canvas->Brush->Color=    clLime;
        StringGrid1->Canvas->FillRect(Rect);
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
      int ARow, bool &CanSelect)
{
    sRow = ARow;
    StringGrid1->Repaint();
}
//---------------------------------------------------------------------------

PM MAIL   Вверх
Нитонисе
Дата 11.10.2013, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Riviero, ваш код работает не так как нужно. Сначала происходит отрисовка ячеек, а потом применяется новое значение sRow. То есть скажем, если выбрана 5-я строка, затем кликаю мышкой на 10-ую, то закрашивается выделенным цветом 5-ая. Затем кликаю на 15-ую - закрашивается 10-ая. То есть всегда как бы опаздывает закраска на один ход. При этом в том ряду, на который я кликнул - самая первая ячейка и та, на которую я непосредственно кликнул - закрашиваются выделенным цветом. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0510 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.