Ziltoid
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Народ, не подскажете, как можно решить такую проблемку... Надо покрасить ячейки грида и дерева по условию. Понятно, что об этом говорили не раз и надо, как доктор прописал, мастерить стили и вешаться на OnGetContentStyle. Традиционно решить можно так (утрированный примерчик): if ANode.Values[<Индекс>] = <Значение> then AStyle := cxStyle1 else AStyle := cxStyle2; Проблема в том, что настройки грида и дерева (имена полей, их тип, ширина и тд) берутся из настроечной базы (по сути метаданные) и все это добро создается на лету - и запрос к БД, и колонки. К тому же некоторые поля в запросе есть, но в гриде(дереве) не отображаются. Через это не факт еще, что поле, по значению которого надо красить ячейку(ячейки), есть в гриде(дереве) и проверять здесь надо значение поля в запросе. Только при этом он как-то странно красит. Если фокуса на записи, ячейку(ячейки) которой надо, нет, то раскраски нет. Стоит переместить фокус на эту запись, как раскрашивается предыдущая, на которой стояли и текущая, которую надо было изначально раскрасить. Перемещаешься на другую запись, раскраска исчезает. А если сделаешь тупо, как в утрированном примерчике, все прекрасно красится. Почему так? Код: // ColorHandler - класс-менеджер для работы с цветовыми схемами (может быть, если в метаданных есть описание цветовых схем, а может и не быть) if ColorHandler = nil then Exit; // CSI - структура описывающая одну цветовую схему (условие раскраски, раскрашиваемые поля, индекс стиля в репозитории) CSI := ColorHandler.GetColor(Q.Fields); if CSI <> nil then // Если условие (нужное поле в запросе Q равно значению, заданному в условии) выполнилось, в AStyle сунем стиль, найденный в репозитории по индексу (стили тоже // создаются на лету) AStyle := TcxStyle(Styles.Items[CSI^.StyleIndex]) else AStyle := DefaultStyle; Может, я что-то не так делаю? |