2011-01-11 2 views
1

Я пытался понять эти 2 вещи:Delphi VirtualStringTree Drawing

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

2) Как я могу сделать отступ в ящике? Мои дочерние флажки и на том же «отступе?» как мои корневые флажки.

Спасибо!

+6

Добро пожаловать на ТАК! Два вопроса должны соответствовать двум вопросам о SO. Что, если кто-то знает ответ на один из ваших вопросов? Означает ли это ответ на ваш объединенный вопрос? – jpfollenius

+0

1) И хотите ли вы выбрать всю строку или изменить каждый фон строки? –

+1

вы вполне можете быть * 16-летний компьютер Wiz * (sic), но на самом деле, не могли бы вы, пожалуйста, использовать свой реальный счет здесь довольно размножающиеся персонажи ?! –

ответ

0

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

2) Я не могу ответить на это. Возможно, попробуйте toFixedIndent.

+0

2) нет, toFixedIndent отступы всех узлов в ту же позицию –

+0

@daemon_x: Спасибо, я исправил это. Я просто догадывался. – jpfollenius

2

1)

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

2) устанавливает для каждого флажка узла отдельно отступа ИМХО невозможно. Дерево имеет свойство «Отступ», которое устанавливает отступ для всех узлов (включая их флажки). Внутри вызываются методы 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;