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

 
отображать не все поля в гриде. а?, т.е. это показывать, это не показывать
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



Раз вам и второй мой ответ (ответил правда анонимно smile.gif ) не нравится, то могу предложить еще один вариант (если вы используете 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 стало еще тормозней ...
наверное буду все же делать с вычисляемыми полями. мне кажется это правильный и быстрый вариант...

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