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

Изменение фонового цвета узлов TVirtualStringTree на основе уровней узлов

Delphi , Синтаксис , Деревья

TVirtualStringTree — это мощный компонент от TMS Software, который позволяет создавать сложные деревообразные структуры данных в приложениях, разработанных с помощью Delphi. Одной из полезных функций этого компонента является возможность настройки фонового цвета узлов в зависимости от их уровня в дереве.

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

Описание проблемы

Задача состоит в том, чтобы изменить фоновый цвет узлов TVirtualStringTree в зависимости от их уровней, как показано на следующем рисунке:

Рисунок 1: Пример изменения фонового цвета узлов TVirtualStringTree на основе уровней узлов

Вопрос: Как изменить фоновый цвет узлов TVirtualStringTree на основе их уровней, как показано на рисунке выше?

Альтернативный ответ

В альтернативном ответе пользователь предоставил код, который изменяет фоновый цвет узлов для строк, но не для столбцов:

procedure TForm1.VSTBeforeCellPaint(Sender: TBaseVirtualTree;
  TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
  CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
var
  R: TRect;
begin
  if CellPaintMode = cpmPaint then
  begin
    R := Sender.GetDisplayRect(Node, Column, True, False, True);
    R.Offset(0, -R.Top);
    case Sender.GetNodeLevel(Node) of
      0: TargetCanvas.Brush.Color := $0000F9FF;
      1: TargetCanvas.Brush.Color := $0000BFFF;
      2: TargetCanvas.Brush.Color := $000086FF;
    end;
    TargetCanvas.FillRect(CellRect);
  end;
end;

Подтвержденный ответ

В подтвержденном ответе пользователь предоставил код, который изменяет фоновый цвет узлов tanto для строк, как и для столбцов:

procedure VSTBeforeCellPaint(Sender: TBaseVirtualTree;
  TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
  CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
var
  R: TRect;
  RectArr: Array of TRect;
  NodeLevel, i, k: Integer;
  ArrayColors: Array[0..6] of TColor;
begin
  NodeLevel := Sender.GetNodeLevel(Node);
  if CellPaintMode = cpmPaint then
  begin
    if Column = 0 then
    begin
      R := CellRect;

      SetLength(RectArr, NodeLevel + 2);
      RectArr[Length(RectArr) - 1] := Rect(r.Left + Node.NodeHeight * (NodeLevel + 1) - Node.NodeHeight, r.Top, r.Right, r.Bottom);
      for i := 0 to Length(RectArr) - 2 do
        RectArr[i] := Rect(r.Left + Node.NodeHeight * (i - 1), r.Top, r.Left + Node.NodeHeight * i + Node.NodeHeight, r.Bottom);
      ArrayColors[0] := $0000F9FF;
      ArrayColors[1] := $0000BFFF;
      ArrayColors[2] := $000086FF;
      ArrayColors[3] := ClLime;
      ArrayColors[4] := Clred;
      ArrayColors[5] := clSkyBlue;
      ArrayColors[6] := clGrayText;

      for I := 0 to Length(RectArr) - 1 do
      begin
        k := i - 1;
        if k < 0 then
          k := 0;

        TargetCanvas.Brush.Color := ArrayColors[k];
        TargetCanvas.FillRect(RectArr[i]);
      end;
    end
    else
    begin
      case Sender.GetNodeLevel(Node) of
        0: TargetCanvas.Brush.Color := $0000F9FF;
        1: TargetCanvas.Brush.Color := $0000BFFF;
        2: TargetCanvas.Brush.Color := $000086FF;
        3: TargetCanvas.Brush.Color := ClLime;
        4: TargetCanvas.Brush.Color := Clred;
        5: TargetCanvas.Brush.Color := clSkyBlue;
        6: TargetCanvas.Brush.Color := clGrayText;
      end;
      TargetCanvas.FillRect(CellRect);
    end;
  end;
end;

Результат:

Рисунок 2: Результат изменения фонового цвета узлов TVirtualStringTree на основе уровней узлов

Вывод

Изменение фонового цвета узлов TVirtualStringTree на основе их уровней — это полезная функция, которая поможет вам сделать ваше приложение более информативным и удобным для пользователя. В данной статье мы рассмотрели, как реализовать эту функцию, используя альтернативный ответ и подтвержденное решение.

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

Изменение фонового цвета узлов TVirtualStringTree на основе уровней узлов в Delphi.


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

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




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


:: Главная :: Деревья ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-15 23:35:59/0.0034351348876953/0