Delphi VirtualStringTree Drawing - PullRequest
       10

Delphi VirtualStringTree Drawing

1 голос
/ 11 января 2011

Я пытался понять эти две вещи:

1) Как изменить цвет всей строки в коде?Например, когда VT выглядит как ListView?

2) Как сделать отступы для флажков?У моего ребенка флажки и на том же "отступе"?как мои корневые галочки.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 11 января 2011

1)

procedure VSTBeforeItemErase(
  Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode;
  ItemRect: TRect; var ItemColor: TColor;
  var EraseAction: TItemEraseAction);
begin
  EraseAction := eaColor;
  ItemColor := clLime;
end;

2) Установка отступа для каждого флажка узла в отдельности ИМХО невозможна. У дерева есть свойство Indent, которое устанавливает отступ для всех узлов (включая их флажки). Внутренне вызываются методы AdjustCoordinatesByIndent и PaintCheckImage, но оба они скрыты для вас. Модификация одного из них может помочь вам, но вы должны быть очень конкретными, я бы сказал, что лучше всего было бы создать свой собственный компонент-потомок.

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

Для вашего вдохновения ...

var CurrentNode: PVirtualNode;
    CurrentSubnode: PVirtualNode;

begin
  VirtualStringTree1.Indent := 50; // this increases indention for all nodes in the tree

  CurrentNode := VirtualStringTree1.AddChild(nil); // create a node to the root
  CurrentNode.CheckType := ctCheckBox; // check support of a node
  CurrentSubnode := VirtualStringTree1.AddChild(CurrentNode); // create a subnode to your first node
  CurrentSubnode.CheckType := ctCheckBox; // check support of a node
end;
0 голосов
/ 11 января 2011

1) Попробуйте добавить toFullRowSelect к TreeOptions.SelectionOptions.

2) Я не могу ответить на этот вопрос. Может быть, попробовать toFixedIndent.

...