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

 
RxDBGrid, Где отрисовывается ползунок
VovaN
Отправлено: 16.08.2005, 16:26


Дежурный стрелочник

Группа: Участник
Сообщений: 72



Добрый день!
Всплыл такой вопрос: надо модифицировать RxDBGrid. а для этого надо узнать, в каком месте отрисовывается ползунок у грида. Это необходимо для того, чтобы внедрить в грид что-то типа rowselect, но при этом чтоб была возможность передвигаться по ячейкам строки, а вся строка бы при этом подсвечивалась.
Подскажите пожалуйста, в каком файле лежит этот исходник и что надо подправить.
Я посмотрел по Инету, но ничего похожего не нашел...
** Admin
Отправлено: 16.08.2005, 18:48


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







А как насчет задействовать DBGridEh из библиотеки EhLib
он намного круче(больше возможностей) и поддерживается
автором до сих пор ?
Там есть и удобная подстветка строк и очень много всего другого.
VovaN
Отправлено: 17.08.2005, 09:23


Дежурный стрелочник

Группа: Участник
Сообщений: 72



Проблемма в том, что приложение жестко завязано именно на этот грид (он модифицирован и подправлен), поэтому другого выхода кроме его модификации нет.
olegenty
Отправлено: 17.08.2005, 09:59


Ветеран

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



не понятно, зачем тут ползунки.
1. AfterScroll твоего набора данных сохраняешь ключ в переменную-член формы/модуля данных. в примере ключ -поле ClassID набора данных по имени Class, и переменная зовётся ClassID:
CODE

void __fastcall TForm1::ClassAfterScroll(TDataSet *DataSet)
{
   ClassID = ClassClassID->AsInteger;
}

Код обработчика OnDrawColumnCell твоего грида будет таким (на моём примере, грид зовётся Grid, строка подсвечивается синим):
CODE

void __fastcall TForm1::GridDrawColumnCell(TObject *Sender,
     const TRect &Rect, int DataCol, TColumn *Column,
     TGridDrawState State)
{
   if (!State.Contains(gdSelected) && ClassID == ClassClassID->AsInteger)
   {
       Grid->Canvas->Brush->Color = clNavy;
   }
   Grid->DefaultDrawColumnCell(Rect, DataCol, Column, State);
}
olegenty
Отправлено: 17.08.2005, 10:05


Ветеран

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



ну а если грид всё равно модифицируешь — переменную-ключ можно сделать одним из его св-в, для пущей универсальности типа Variant, также в одном из свойств гридв можно хранить и наименование ключевого поля. тогда обработчик OnDrawColumnCell будет всегда одинаковый и простенький, по типу дверной ручки.
VovaN
Отправлено: 17.08.2005, 10:22


Дежурный стрелочник

Группа: Участник
Сообщений: 72



2 Olegenty
А можно поподробнее на тему набора данных. У меня есть Query1, DataSource1, Grid. Я тестирую на стандартной таблице employee. Как надо написать обработчик
CODE

void __fastcall TForm1::ClassAfterScroll(TDataSet *DataSet)
{
ClassID = ClassClassID->AsInteger;
}
чтоб заработало в моем примере.
Или, если не сложно, пришлите мне ваш пример на vova_n@gala.net.

По идее вместо ClassID можно использовать RecNo?

Отредактировано VovaN — 17/08/2005, 10:39
olegenty
Отправлено: 17.08.2005, 10:38


Ветеран

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



я его уже удалил smile.gif
пришлось новый написать. на:

User Attached Image Скачать файл
DrawColumnCellEx.zip


VovaN
Отправлено: 17.08.2005, 10:44


Дежурный стрелочник

Группа: Участник
Сообщений: 72



2 Olegenty:
огромное спасибо! Я просто запутался с ClassID, но потом написал RecNo и всё получилось!

Вернуться в Работа с базами данных в C++Builder