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, что раздражает не меньше
Вот такой вопрос:
Как раскрасить текущую строку без вышеуказанных глюков |
|
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 — все перерисовывается хорошо при любом нажатии на кнопку и движении колесом
Может пойти от противного и запоминать положение бегунка и потом его восстанавливать. Как такая идея?
(только чего-то пока не нашел как добраться к етому самому бегунку ) |
|
olegenty |
Отправлено: 30.04.2004, 11:58 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
если уж откуда-то ходить, то смотреть исходники грида, а не заниматься промыванием желудка клизмой :-))
|
|