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;