2016-09-22 6 views
1

Я ищу способ отключение правильных узлов.Отключить и изменить цвет узла в Treeview

Допустим, я создал простой TreeView структура, как показано ниже:

  • Родитель 1 (отключить)
  • Родитель 2
    • Ребенок 1
    • Ребенок 2 (отключить)

До сих пор я нашел обходное решение, как это сделать, но он по-прежнему не работает вообще. Я использую OnChanging обработчик события:

procedure TForm1.TreeViewChanging(Sender: TObject; Node: TTreeNode; 
    var AllowChange: Boolean); 
begin 
    if (Node.Text = 'Parent 1') or (Node.Text = 'Child 1') then 
     AllowChange := False; 
end; 

Это работает, потому что я не могу нажать на этом узле, но проблема в том, что после того, как «Отключение функции» узел таким образом, цвет Parent 1 и Child 1 узлов так же, как Другие. Можно ли изменить цвет этих узлов (серый)? Или, может быть, вы знаете другой способ отключения узлов в компоненте TTreeView?

+2

Установить 'Enabled' свойства узла в' false'. –

+0

@DavidHeffernan Я пробовал это, но, к сожалению, это не работает в моем случае. Он ничего не делает ... – astack

+0

XP возможно? TVIS_EX_DISABLED - это Vista. Или, возможно, нет тем времени исполнения. –

ответ

2

Чтобы отключить узел, установите его Enabled на False. Отключенный элемент отображается серым цветом.

Чтобы изменить нормальный цвет текста узлов, измените значение TTreeView.Font.Color.

Чтобы изменить цвет инвалиду текста узлов, используйте OnCustomDrawItem событие:

procedure TForm2.TreeView1CustomDrawItem(Sender: TCustomTreeView; 
    Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean); 
begin 
    if cdsDisabled in state then 
    Sender.Canvas.Font.Color := clRed; //cl3DLight; 
end; 

По умолчанию настройки цвета:

enter image description here

Disabled цвет = cl3DLight:

enter image description here

цвет нормальный текст = clGreen и отключен цвет = clRed:

enter image description here

+1

Возможно, какой-то комментарий к Enabled будет приятным. Так что будущие читатели могут знать, что он работает. –

+0

Я сделал это точно так же, как вы и он работает для меня. Сначала я отключил соответствующие узлы в своем древовидном виде, а затем я использовал событие OnCustomDrawItem, чтобы покрасить эти узлы в серый цвет. Благодаря! – astack