Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Окрашивание дочерних узлов в Devextreme TreeList: решение проблемы цвета

Delphi , Компоненты и Классы , Списки

Вопрос, который волнует многих разработчиков, работающих с компонентами Devextreme, связан с окрашиванием узлов в TcxTreeList. Пользователь столкнулся с проблемой, когда весь грид окрашивался в один цвет, а дочерние узлы оставались неокрашенными, то есть с черным текстом на белом фоне. Проблема заключалась в том, что узлы заполнялись и удалялись динамически при изменении выбора.

var
  LNode : TcxTreeListNode;
  LListData : TOfferList;
  LSiteData : TSiteList;
  LContract : TItem;
begin
  LNode := TreeTypes.FocusedNode;
  if Assigned(LNode) then
  begin
    if LNode.Level = 0 then
    begin
      LNode.DeleteChildren; // Очистка детей для предотвращения дублирования
      LSiteData := TSiteList(LNode.Data);
      PopulateOfferList; // Заполнение списка детей данными из базы
      InitialiseOffers; // Наполнение дерева данными из списка
      LNode.Expand(True);
    end
    else
    begin
      LListData := TOfferList(LNode.Data);
      LContract := TItem.Create(LListData.UnitID);
    end;
  end;
end;

В данном примере кода, приведенного выше, осуществляется динамическое заполнение узлов TreeList данными из базы. Однако, несмотря на успешное выполнение основных операций, пользователь хотел бы видеть дочерние узлы окрашенными в разные цвета для лучшей идентификации различий между ними.

Для реализации окрашивания узлов был использован метод CustomDrawDataCell, однако при изменении родительских узлов возникали ошибки доступа и окрашивание дочерних узлов не происходило. После этого было решено добавить Tree.FullRefresh на событие NodeSelectionChange, но это также не принесло ожидаемого результата.

procedure TFrmTestView1.TreeTypesCustomDrawDataCell(Sender: TcxCustomTreeList;
  ACanvas: TcxCanvas; AViewInfo: TcxTreeListEditCellViewInfo; var ADone: Boolean);
var
  LState : TStates;
  LOffer : TOfferList;
begin
  if (Assigned(AViewInfo)) and (Assigned(AViewInfo.Node)) then
  begin
    if AViewInfo.Node.Level > 0 then
    begin
      LOffer := AViewInfo.Node.Data;
      LState := FGlobals.GetStateFromID(LOffer.StateID);
    end;
  end;
  if AViewInfo.Node.Level > 0 then
  begin
    if Assigned(LState) then
    begin
      ACanvas.Brush.Color := LState.Background;
      ACanvas.Font.Color := LState.Foreground;
    end;
  end;
end;

Проблема была решена после обращения в поддержку Devexpress, которая предоставила следующий код:

var
  LState : TStates;
  LOffer : TOfferList;
begin
  if AViewInfo.Node.Level > 0 then
  begin
    LOffer := TOfferList(AViewInfo.Node.Data);
    LState := FGlobals.GetStateFromTag(LOffer.StateTag);
    ACanvas.Brush.Color := LState.Background; // Цвет фона, сохраненный в базе данных как целочисленное значение
    ACanvas.Font.Color := LState.Foreground; // Цвет текста, сохраненный в базе данных как целочисленное значение
  end;
end;

Ошибка заключалась в том, что пользователь пытался усложнить процесс, разделив его на этапы "сбор данных" и "применение к canvas". Сохранение процесса в едином блоке кода позволило достичь желаемого результата. В будущем стоит помнить о принципе KISS (Keep it simple, stupid!).

Таким образом, пользователь смог успешно окрасить дочерние узлы в соответствии с данными, сохраненными в базе данных, и избежать дальнейших проблем с окрашиванием при изменении родительских узлов.

Создано по материалам из источника по ссылке.

Пользователь столкнулся с проблемой окрашивания дочерних узлов в компоненте Devextreme TreeList, когда динамически изменялось состояние узлов, и пытался найти решение, используя методы настройки цвета в процессе отрисовки узлов.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Списки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-09 09:50:33/0.0061118602752686/0