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
|
я его уже удалил
пришлось новый написать. на:
|
|
VovaN |
Отправлено: 17.08.2005, 10:44 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 72
|
2 Olegenty:
огромное спасибо! Я просто запутался с ClassID, но потом написал RecNo и всё получилось! |
|