Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с TreeView

3.9K
20 апреля 2008 года
АКМ
49 / / 07.06.2005
подскажите, пожалуйста, как добавлять новые элементы в элементе TreeView в нужном месте дерева. Т.е. выделил мышкой я элемент в TreeView - и в него мне надо добавить подэлементы.

Просто добавление проблем не вызывает, проблема как раз с добавлением в нужном месте :)
8
20 апреля 2008 года
mfender
3.5K / / 15.06.2005
Научись пользоваться поиском и глазами ))))
http://forum.codenet.ru/showthread.php?t=45836
3.9K
20 апреля 2008 года
АКМ
49 / / 07.06.2005
я нашел эту тему. затруднения в том, что наименование добавляемой ветви вводится в новой форме. постоянно вылезает ошибка 'Access violation at adress ....'.
8
21 апреля 2008 года
mfender
3.5K / / 15.06.2005
Ну ты хоть код напиши и укажи место, в котором Access violation вываливается.
3.9K
21 апреля 2008 года
АКМ
49 / / 07.06.2005
может лучше полностью задачу приведу?
есть таблица БД, в которой хранится дерево. Ее поля:
id - ключ
idroot - ид родительского элемента
name - наименование
если idroot=0, то элемент находится в корне дерева. надо реализовать вывод этого дерева в TreeView с возможностью добавления, редактирования и удаления элементов.
Есть процедура Expandlevel, которая прорисовывает ветку, когда ее открываешь:
Код:
procedure TfrmCatalogMain.ExpandLevel( Node : TTreeNode);
var i, id : Integer;
    TreeNode : TTreeNode;
begin
  if Node = nil then id:=0
  else id := Integer(Node.Data);

  DM.CDS1.Close;
  DM.CDS1.Params.ParamByName('idroot').AsInteger := id;
  DM.CDS1.Open;

  for i:=1 to DM.CDS1.RecordCount do
    begin
    TreeNode := TreeView.Items.AddChildObject( Node,
              DM.CDS1.FieldByName('name').AsString ,
              Pointer(DM.CDS1.FieldByName('id').AsInteger) );

    TreeView.Items.AddChildObject( TreeNode , '' , nil );
    DM.CDS1.Next;
    end;

end;

здесь CDS1 - ClientDataSet.
на событие onCreate формы frmCatalogMain, где расположен TreeView:
 
Код:
TreeView.Items.Clear;
ExpandLevel(nil);
TreeView.Selected := TreeView.Items[0];

на событие onExpanding этого TreeView-а:
 
Код:
if Node = nil then exit;
  if Node.getFirstChild.Data = nil then
  begin
    Node.DeleteChildren;
    ExpandLevel(Node);
  end;

Далее, есть форма frmCatalogEdit, которая используется для добавления новых элементов. на ней размещены элементы Edit, checkbox и кнопка 'сохранить'.
По нажатию кнопки:
Код:
if frmCatalogEdit.CheckBox.Checked = true then
  begin
    DM.CDS1.FieldByName('idroot').AsInteger := 0;
  end
  else
  begin
    frmCatalogMain.TreeView.Items.AddChild(frmCatalogMain.TreeView.Selected, frmCatalogEdit.eName.Text);
    frmCatalogMain.TreeView.Selected.Expanded := True;
  end;
  DM.CDS1.FieldByName('name').AsString := frmCatalogEdit.eName.Text;
  DM.CDS1.Post;
  DM.CDS1.ApplyUpdates(-1);

Checkbox - для добавления элементов в корень дерева, в противном случае - в отмеченный элемент.
Проблема:
в добавлении, редактировании и удалении элементов дерева через TreeView. Добавляет элементы только в корень дерева.
Ошибка вылазит на строке
 
Код:
frmCatalogMain.TreeView.Items.AddChild(frmCatalogMain.TreeView.Selected, frmCatalogEdit.eName.Text);

Если добавляю в else проверку:
 
Код:
if frmCatalogMain.TreeView.Selected <> nil then
то сбой на ней.
3.9K
22 апреля 2008 года
АКМ
49 / / 07.06.2005
есть у кого какие-нибудь конструктивные предложения?
60K
27 апреля 2010 года
Graskov
1 / / 27.04.2010
Цитата: АКМ
есть у кого какие-нибудь конструктивные предложения?



 
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin[CODE][CODE]
[/CODE]
MyNode:=nil;
end;

procedure TForm1.TreeView1GetSelectedIndex(Sender: TObject;
Node: TTreeNode);
begin
MyNode:=Node;
end; //отслеживает в программе перемещение пользователем фокуса по дереву

procedure TForm1.Button1Click(Sender: TObject);
begin
if TreeView1.Items.Count=0 then
TreeView1.Items.Add(nil,Edit1.Text)
else
TreeView1.Items.Add(MyNode,Edit1.Text);
end; // добавляет узел

procedure TForm1.Button2Click(Sender: TObject);
begin
if TreeView1.Items.Count<>0 then
TreeView1.Items.AddChild(MyNode,Edit1.Text);
end; //добавляет потомка[/CODE]
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог