trigger |
Отправлено: 03.02.2004, 10:42 |
|
Не зарегистрирован
|
надо в некоторых столбцах в зависмости от их содержания отображать или не отображать значения ячейки. кто-нить делал подобное?
я пробовал в обработчике прорисовки грида менять цвет шрифта текста на тот же цвет, что и фон. но получается лажово. при выборе ячейки цвет инвертируется, и ячейка видна ... |
|
Valdemar |
Отправлено: 03.02.2004, 11:49 |
|
Мастер участка
Группа: Участник
Сообщений: 433
|
Попробуйте проверять состояние ячейки и в зависимости от него менять цвет. |
|
Guest |
Отправлено: 03.02.2004, 12:01 |
|
Не зарегистрирован
|
да я надеялся, что есть способы ... покрасивее чтоли...
не хочется накручивать миллион проверок. у меня и так проверяется не только само значение ячейки, а предыдущее, а также текущее предыдущего столбца ... короче дофига всего ...
|
|
trigger |
Отправлено: 05.02.2004, 09:29 |
|
Не зарегистрирован
|
ну неужели нигде нет ничего подобного?!
в стандартном гриде и в Эх-гриде такой фичи я не нашел. может все же где-то есть ...?
|
|
Guest |
Отправлено: 05.02.2004, 14:07 |
|
Не зарегистрирован
|
Ну если не хотите делать кучу проверок, то в обработчике события OnDrawDataCell при определенных условиях просто делайте заливку ячейки.
Например, так:
CODE | if (Field->FieldName=="fieldname") //ваше поле
{
if (Field->AsInteger==3)//ваше условие
{
DBGrid1->Canvas->FillRect(Rect);
}
} |
Пример приведен для DBGrid, если вам нужен StringGrid, то изменить код соответствующим образом труда не составит. |
|
trigger |
Отправлено: 05.02.2004, 15:07 |
|
Не зарегистрирован
|
да. с заливкой — это чуть получше, чем я придумал. только все равно как-то ~.
когда стрелками по гриду передвигаюсь, то с запаздыванием происходит заливка... не понтово. |
|
Valdemar |
Отправлено: 05.02.2004, 16:49 |
|
Мастер участка
Группа: Участник
Сообщений: 433
|
Раз вам и второй мой ответ (ответил правда анонимно ) не нравится, то могу предложить еще один вариант (если вы используете DBGrid и базу данных).
С помощью редактора полей добавляете к ввашей Table новое поле. Назовем его new_field. Для него указываете тип string и делаете его вычисляемым (calculated). В DBGrid показываете это новое поле, а не старое. Затем в обработчике события OnCalcFields для Table пишите примерно следующее:
CODE | if (DataSet->FieldByName("старое_поле")->Value>1000)
DataSet->FieldByName("new_field")->Value=DataSet->FieldByName("старое_поле")->Value;
else
DataSet->FieldByName("new_field")->Value=""; |
Отредактировано Valdemar — 05/02/2004, 17:53 |
|
trigger |
Отправлено: 05.02.2004, 17:10 |
|
Не зарегистрирован
|
Gut Valdemar!
точно! это выход!
делал же похожие штуки, а тут чего-то не подрубил ...
thanx! |
|
Doga |
Отправлено: 06.02.2004, 17:35 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
С заливкой тоже прокатит, если поставить:
Grid->DoubleBufferde = true;
|
|
Doga |
Отправлено: 06.02.2004, 17:36 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Пардон!
Grid->DoubleBufferded = true;
|
|
trigger |
Отправлено: 09.02.2004, 10:56 |
|
Не зарегистрирован
|
2Doga
неее... с DoubleBufferded стало еще тормозней ...
наверное буду все же делать с вычисляемыми полями. мне кажется это правильный и быстрый вариант... |
|