Пара вопросов по TreeView

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

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

Пара вопросов по TreeView

Сообщение qivi » 13.12.2010 00:19:18

1. Как удалить 1 выбранный дочерний узел (второго уровня)? Нашёл только как первый уровень удалять.
2 Как узнать сколько в трейвиеве всего узлов (я правильно понимаю что это коснётся только первого уровня?)?
3 Как узнать есть ли у узла дочерние узлы и сколько их?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Пара вопросов по TreeView

Сообщение dunin » 13.12.2010 12:36:46

1. TreeView.Selected.Delete; //(выбранный)
2. TreeView.Items.Count;
3. TreeView.Selected.HasChildren; // boolean дочерние узлы у выбранного

Добавлено спустя 3 минуты 41 секунду:
3а. TreeView.Selected.Count; // Количество дочерних у выделенного
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Пара вопросов по TreeView

Сообщение Maxizar » 13.12.2010 13:46:18

А что Михалков запретил и книжки... Не ну вот же он П.....
Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ComCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button2: TButton;
    Button3: TButton;
    Memo1: TMemo;
    TreeView1: TTreeView;
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure TreeView1SelectionChanged(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.TreeView1SelectionChanged(Sender: TObject);
begin
  if TreeView1.Selected=Nil then exit; //Ничего не выделено
  Memo1.Lines.Clear;
  Memo1.Lines.Add('Level= ' +IntToStr(TreeView1.Selected.Level));
  Memo1.Lines.Add('Дочерних узлов = ' +IntToStr(TreeView1.Selected.Count));
  Memo1.Lines.Add('Index = ' +IntToStr(TreeView1.Selected.Index));
  Memo1.Lines.Add('Text = '+TreeView1.Selected.Text);
end;

procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
     if Button =mbRight then
    TreeView1.Selected:=TreeView1.GetNodeAt(X,Y);//Данный код позволит выделить
                                                 //узел при щелчке правой кнопки
                                                 //Нужно скажем когда есть меню связанное с определенный узлом
end;

procedure TForm1.Button3Click(Sender: TObject);
var I,J,C1,C2:Integer;
    RootTreed:TTreeNode;
    CTreed:TTreeNode;
begin
   TreeView1.Items.Clear;

   C1:=Random(100); //Родительских узлов

   For I:=0 to C1 do
    begin
      RootTreed:=TreeView1.Items.Add(Nil,'C1='+IntToStr(I));

      C2:=Random(20); //Дочерних
      For J:=0 to C2 Do
        begin
        CTreed:=TreeView1.Items.AddChild(TreeView1.Items.FindNodeWithText('C1='+IntToStr(I)),'C2='+IntToStr(J));
        CTreed.ImageIndex:=1;      //Назначаем значки подробнее в хелпе или книге
        CTreed.SelectedIndex:=1;
        end;
    end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   if TreeView1.Selected=Nil then exit; //Ничего не выделено
      TreeView1.Selected.Free;
end;
end.


Для удаление при не выделенном узле необходимо пользоваться
TreeView.Items.Delete(Указатель на узел) Как найти узел:
TreeView1.Items.FindNodeWithText('Project') Где Project - имя (Text) узла в котором ищем.
Level позволяет узнать глубину узла Level=0 значит это корень. и т.п. смотри пример приложенный к ответу.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: Пара вопросов по TreeView

Сообщение qivi » 23.03.2012 00:08:21

В TreeView включён мультиселект, как узнать сколько узлов выделенно в данный момент?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Пара вопросов по TreeView

Сообщение iskander » 23.03.2012 14:24:21

Код: Выделить всё
TreeView.SelectionCount;
:D
iskander
энтузиаст
 
Сообщения: 623
Зарегистрирован: 08.01.2012 18:43:34

Re: Пара вопросов по TreeView

Сообщение qivi » 23.03.2012 16:20:20

Спасибо
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия


Вернуться в Lazarus

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 223

Рейтинг@Mail.ru