![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перенос в TreeView
art36 © (2007-12-27 19:41:00)Как переместить одну выделенную ветвь в TTreeView в другую, которой название известно? (может индекс ее определить). Я не про DragAndDrop, но и это было бы очень неплохо.
подскажите пожалуйста!
Спасибо!
art36 (2007-12-28 00:32:00) [21]Да, это работает, но перемещение происходит в ту ветку, где находится элемент на котором был курсор, а мне нужно чтобы перемещение было в него.
turbouser (2007-12-28 00:09:00) [22]
> art36 © (27.12.07 23:56) [5]
...
TreeView1.DragMode:=dmAutomatic;
...
procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: integer;
State: TDragState; var Accept: boolean);
begin
Accept := Sender = Source;
end;
procedure TForm1.TreeView1EndDrag(Sender, Target: TObject; X, Y: integer);
begin
if Sender = TreeView1 then
TreeView1.Selected.MoveTo(TreeView1.GetNodeAt(x, y), naAddChild);
end;
art36 (2007-12-27 23:56:00) [23]Нет, я ошибся последняя моя запись не решает проблемы. Таким образом: перетаскивание вообще не работает
art36 (2007-12-27 22:57:00) [24]Да!!!!!
Я разобрался! Дело в том, что когда перетаскиваешь объект, то происходит обработка для любого компонента, а мне этого не нужно, поэтому я написал в самом начале процедуры EndDrag следующее:
if target<>mytreeview then exit;
Где exit - выход из процедуры обработки!
Спасибо!
art36 (2007-12-27 22:51:00) [25]Да, и еще:
Когда перетаскиваю в нижнюю область TreeView, где нет дерева, или за область компонента, то выскакивает ошибка обращения к памяти.
Пробовал весь код в EndDrag помещать в TRY...EXCEPT...END
Почему?
art36 (2007-12-27 22:37:00) [26]Да, верно! Спасибо!
Одна оговорка: я не понял почему в скобках treeview.items[x], т.к. не работало поэтому написал там treeview.droptarget;
turbouser (2007-12-27 21:16:00) [27]
if TreeView.Selected <> nil then
begin
TreeView.Items.AddChild(TreeView.Items[x], TreeView.Selected.Text);
TreeView.Selected.Delete;
end;
Где x - индекс итема, название которого известно.