Создание представления «мастер-детали» с панелью заголовка для каждой группы элементов в виртуальном древовидном представлении (TVirtualStringTree)

Я пытаюсь получить такой результат из TVirtualStringTree:

desired virtualtreeview appearance

Я считаю, что это может быть возможно либо напрямую, с помощью TVirtualStringTree (основной элемент управления Virtual Treeview Майка Лишке), или путем создания подкласса и изменения унаследованного элемента управления, или путем перехода к TVirtualDrawTree .

Вот что я могу get и показывает проблему, с которой я сталкиваюсь:

actual vritualtreeview appearance

Моя проблема заключается в том, что я не могу получить текст для столбца 0, чтобы он занимал всю горизонтальную область элемента управления виртуального древовидного представления. Существует демонстрация виртуального древовидного представления в расширенной демонстрации, показывающей многострочный текст, который, кажется, делает то, что мне нужно, но я Я не могу понять, как применить его в сочетании с столбцами с подробностями, которые мне нужны под строкой заголовка (показаны как Узел, Узел, Узел на рисунке).

Вот что я пробовал:

  • Изменить ContentRect. Прямо в событии BeforeCellPaint:
  • установите toGridExtensions в TreeOptions.MiscOptions .

Вот пример кода, показывающий, как я пытался изменить contentRect:

procedure TForm1.VirtualStringTree1BeforeCellPaint(Sender: TBaseVirtualTree;
  TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
  CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
var
   level:Integer;
begin
 level := VirtualStringTree1.GetNodeLevel(Node);
 if (level=0) then
    Inc( ContentRect.Right, 300);

end;

Обновление:

Используя ответ, принятый ниже, я получаю следующее:

enter image description here

6
задан Warren P 29 August 2011 в 17:15
поделиться