Как программно выделить узел в TreeView

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как программно выделить узел в TreeView

Сообщение natoshka » 10.08.2012 11:41:16

Свойства дерева MultiSelect:= true, HideSelection:= false

Хочу, чтоб по нажатию на ноду, выделялись все дочерние узлы. Уже что только не пробовала, а ноды не выделяются. Вот код:

Код: Выделить всё
procedure TfAgReports.TreeViewLocInterfDevMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var TargetNode, tNode: TTreeNode;
    i, j: integer;
begin
  TargetNode := TreeViewLocInterfDev.GetNodeAt(X, Y);
  if TargetNode=nil then exit;
  for i:=0 to TargetNode.Count-1 do
  begin
    if TNodeDataExt(TargetNode.Items[i].Data).Level=1 then
    begin
      k:= TargetNode.Items[i].Count;
      for j:=0 to k-1 do
      begin
        tNode:= TargetNode.Items[i].Items[j];
        tNode.Selected:= true;
        tNode.Focused:= true;
        tNode.MakeVisible;
        TreeViewLocInterfDev.Selected:= tNode;
      end;
    end;
    TargetNode.Items[i].Selected:= true;
    TargetNode.Items[i].Focused:= true;
    TargetNode.Items[i].MakeVisible;
    TreeViewLocInterfDev.Selected:= TargetNode.Items[i];
  end;
  TreeViewLocInterfDev.SetFocus;
end;               


Помогите, пожалуйста..
Аватара пользователя
natoshka
незнакомец
 
Сообщения: 3
Зарегистрирован: 10.08.2012 11:33:52

Re: Как программно выделить узел в TreeView

Сообщение iskander » 11.08.2012 13:46:42

Вместо TTreeNode.Selected - TTreeNode.MultiSelected.
Ну и обработчик, наверно, лучше повесить на OnClick.
iskander
энтузиаст
 
Сообщения: 626
Зарегистрирован: 08.01.2012 18:43:34

Re: Как программно выделить узел в TreeView

Сообщение natoshka » 13.08.2012 13:56:07

iskander Спасибо огромное!
Итоговый вариант, может кому пригодится:
Код: Выделить всё
procedure TfAgReports.TreeViewLocInterfDevClick(Sender: TObject);
  var TargetNode, tNode: TTreeNode;
    i, j, k: integer;
begin
  TargetNode := TreeViewLocInterfDev.Selected;
  if TargetNode=nil then exit;
  for i:=0 to TargetNode.Count-1 do
  begin
    if TNodeDataExt(TargetNode.Items[i].Data).Level=1 then
    begin
      k:= TargetNode.Items[i].Count;
      for j:=0 to k-1 do
      begin
        tNode:= TargetNode.Items[i].Items[j];
        tNode.MultiSelected:= true;
        tNode.Focused:= true;
        tNode.MakeVisible;
      end;
    end;
    TargetNode.Items[i].MultiSelected:= true;
    TargetNode.Items[i].Focused:= true;
    TargetNode.Items[i].MakeVisible;
  end;
  TreeViewLocInterfDev.SetFocus;
end; 
Аватара пользователя
natoshka
незнакомец
 
Сообщения: 3
Зарегистрирован: 10.08.2012 11:33:52


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 242

Рейтинг@Mail.ru