C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Правильная раскраска текущей строки в RxDBGrid
alekseich
Отправлено: 29.04.2004, 10:56


Не зарегистрирован







Доброе время суток

Такая проблема:
Есть RxDBGrid, мне надо чтобы вся текущая строка выделялась цветом.
Устанавливаю свойство RowSelect = true — строка выделяется — все здорово,
НО! если кол-во столбцов большое, для просмотра самого правого столбца прокручиваем горизонтальной прокруткой, то при пересчелкивании мышкой на строку выше/ниже, полоса прокрутки становится в самое левое положение, т.е. самый правый столбец не виден, что очень раздражает — требуется обратно прокручивать бегунок.

Пробовал победить проблему используя GetCellParams
if (SP->Active && (SP->FieldValues["pk"] == ObjID))
{
Background = clHighlight;
AFont->Color = clHighlightText;
}
else
{
Background = clWindow;
AFont->Color = clWindowText;
}
положение полосы прокрутки остается на месте — все здорово,
НО! если использовать кнопки PageUp, PageDown или колесико в мышке наблюдается удивительный глюк — цветом выделяются несколько строк, хотя MultiSelect = false, что раздражает не меньше sad.gif

Вот такой вопрос:
Как раскрасить текущую строку без вышеуказанных глюков
olegenty
Отправлено: 29.04.2004, 15:25


Ветеран

Группа: Модератор
Сообщений: 2412



попробуй вот такой код.
он должен работать при условии, что "pk" — твой первичный ключ, а ObjID — его сохранённое текущее значение.
CODE

void __fastcall Tfm::dbgDrawColumnCell(TObject *Sender,
     const TRect &Rect, int DataCol, TColumnEh *Column,
     TGridDrawState State)
{
   if (SP->FieldValues["pk"] == ObjID))
   {
       dbg->Canvas->Brush->Color = clHighlight;
       dbg->Canvas->Font->Color = clHighlightText;
   }

   dbg->DefaultDrawColumnCell(Rect, DataCol, Column, State);
}
alekseich
Отправлено: 29.04.2004, 17:34


Не зарегистрирован







Спасибо за ответ, но результат тот же что и в моем примере:
Указательными кнопками и пересчелкивание мышкой — все ОК

Но если PageUp или PageDown или вращение колесика на мышке — закрашиваются те строки по которым прошло движение

Какие еще идеи?
olegenty
Отправлено: 30.04.2004, 06:38


Ветеран

Группа: Модератор
Сообщений: 2412



в обработчик мыши и клавы что-нибудт типа Refresh()/Redraw() добавь, дабы BMP грида перерисовалась...
Gedeon
Отправлено: 30.04.2004, 08:35


Ветеран

Группа: Модератор
Сообщений: 1742



А если не критично вообще запрети эти события (колесо, pageup, pagedown) нахрен и не мучайся.
alekseich
Отправлено: 30.04.2004, 09:56


Не зарегистрирован







Так самое обидное, когда ставится RowSelect = true — все перерисовывается хорошо при любом нажатии на кнопку и движении колесом

sad.gif

Может пойти от противного и запоминать положение бегунка и потом его восстанавливать. Как такая идея?
(только чего-то пока не нашел как добраться к етому самому бегунку smile.gif )
olegenty
Отправлено: 30.04.2004, 11:58


Ветеран

Группа: Модератор
Сообщений: 2412



если уж откуда-то ходить, то смотреть исходники грида, а не заниматься промыванием желудка клизмой :-))

Вернуться в Вопросы программирования в C++Builder