Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.01.27;
Скачать: CL | DM;

Вниз

Перенос в TreeView   Найти похожие ветки 

 
art36 ©   (2007-12-27 19:41) [0]

Как переместить одну выделенную ветвь в TTreeView в другую, которой название известно? (может индекс ее определить). Я не про DragAndDrop, но и это было бы очень неплохо.

подскажите пожалуйста!
Спасибо!


 
turbouser ©   (2007-12-27 21:16) [1]

 if TreeView.Selected <> nil then
 begin
   TreeView.Items.AddChild(TreeView.Items[x], TreeView.Selected.Text);
   TreeView.Selected.Delete;
 end;

Где x - индекс итема, название которого известно.


 
art36 ©   (2007-12-27 22:37) [2]

Да, верно! Спасибо!

Одна оговорка: я не понял почему в скобках treeview.items[x], т.к. не работало поэтому написал там treeview.droptarget;


 
art36 ©   (2007-12-27 22:51) [3]

Да, и еще:

Когда перетаскиваю в нижнюю область TreeView, где нет дерева, или за область компонента, то выскакивает ошибка обращения к памяти.

Пробовал весь код в EndDrag помещать в TRY...EXCEPT...END
Почему?


 
art36 ©   (2007-12-27 22:57) [4]

Да!!!!!

Я разобрался! Дело в том, что когда перетаскиваешь объект, то происходит обработка для любого компонента, а мне этого не нужно, поэтому я написал в самом начале процедуры EndDrag следующее:

if target<>mytreeview then exit;

Где exit - выход из процедуры обработки!

Спасибо!


 
art36 ©   (2007-12-27 23:56) [5]

Нет, я ошибся последняя моя запись не решает проблемы. Таким образом: перетаскивание вообще не работает


 
turbouser ©   (2007-12-28 00:09) [6]


> 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-28 00:32) [7]

Да, это работает, но перемещение происходит в ту ветку, где находится элемент на котором был курсор, а мне нужно чтобы перемещение было в него.


 
turbouser ©   (2007-12-28 00:35) [8]


> art36 ©   (28.12.07 00:32) [7]
>
> Да, это работает, но перемещение происходит в ту ветку,
> где находится элемент на котором был курсор, а мне нужно
> чтобы перемещение было в него.

Не понял...
TreeView1.GetNodeAt(x, y).MoveTo(TreeView1.Selected, naAddChild);
так что ли?


 
art36 ©   (2007-12-28 00:41) [9]

Да, но так не перемещается в ту папку которую нужно, а только рядом с ней, то есть в ту же ветку


 
art36 ©   (2007-12-28 00:44) [10]

Общая папка
    папка1
    папка2
        папка моя

Если я перетащу папку "папка1" на папку "папка моя" то она встанет рядом с ней в папке "папка2" вот так:

Общая папка
    папка2
        папка1
        папка моя

А мне нужно вот так

Общая папка
    папка2
        папка моя
            папка1


 
{RASkov} ©   (2007-12-28 00:49) [11]

> [9, 10] art36 ©   (28.12.07 00:41)

> А мне нужно вот так

С кодом из [6] (не [8]) можно перемещать как угодно....


 
turbouser ©   (2007-12-28 00:53) [12]


> art36 ©   (28.12.07 00:44) [10]

Код из [6] нормально работает. Т.е.

> Если я перетащу папку "папка1" на папку "папка моя" то она
> встанет рядом с ней в папке "папка2" вот так:



> Общая папка
>     папка2
>         папка моя
>             папка1


 
art36 ©   (2007-12-28 01:04) [13]

Спасибо!
А вложенные ветки тоже перетаскиваются автоматически? Вряд ли...
Выскакивает ошибка, когда вложенные есть. Что делать с вложенными?


 
{RASkov} ©   (2007-12-28 01:08) [14]

> [13] art36 ©   (28.12.07 01:04)

Все "автоматом"...
Ты что-то не так делаешь :) поверь..... т.е. проверь)


 
art36 ©   (2007-12-28 01:15) [15]

У меня после перестановки идет код работы с файлом, понял что там я использую tree.selected.text или tree.droptarget.

Понял что это лишнее, а процесс переноса получился все-таки. СПАСИБО БОЛЬШОЕ.

Кому скучно объясните пожалуйста значение этого текста:

procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: integer;
State: TDragState; var Accept: boolean);
begin
Accept := Sender = Source;
end;


 
Германн ©   (2007-12-28 01:16) [16]

Опять "папки", блин!
:(
Какая зараза придумала сию заразу? Знал бы, убил бы на месте без суда и следствия :)


 
art36 ©   (2007-12-28 01:18) [17]


> Опять "папки", блин!

В каком смысле? Я назвал "папки" потому что в этих "папках" храню информацию из файла с записями. Каждой "папке" соответствуют свои записи. Я не говорю про папки Windows. :)


 
{RASkov} ©   (2007-12-28 01:18) [18]

> [15] art36 ©   (28.12.07 01:15)
> Кому скучно объясните пожалуйста значение этого текста:

:%)
Принять данные если и "передатчик" и "приемник" одно лицо :)
Т.е. в данном случае приниматься в тривью будут данные только с этого же тривью..... во как)


 
Германн ©   (2007-12-28 01:18) [19]


> Кому скучно объясните пожалуйста значение этого текста:
>
> procedure TForm1.TreeView1DragOver(Sender, Source: TObject;
>  X, Y: integer;
> State: TDragState; var Accept: boolean);
> begin
> Accept := Sender = Source;
> end;
>

А что тут объяснять? Если указатель мышки находится над тем объектом, который перемещают, то "его в его кинуть нельзя".


 
{RASkov} ©   (2007-12-28 01:20) [20]

> [19] Германн ©   (28.12.07 01:18)
> его в его кинуть нельзя

Наоборот :) зя)


 
art36 ©   (2007-12-28 01:20) [21]


> Accept := Sender = Source;

Ассеpt находится только в этой процедуре, почем это положительно влияет на ход программы, а именно другой процедуры?


 
Германн ©   (2007-12-28 01:22) [22]


> {RASkov} ©   (28.12.07 01:18) [18]

Или я что-то не так понял? Мозги пока не "размялись" после напряженной работы.


 
art36 ©   (2007-12-28 01:23) [23]


> > [19] Германн ©   (28.12.07 01:18)
> > его в его кинуть нельзя


Это неправильно.
А все-таки, что такое Accept и Source в этой строке:


> Accept := Sender = Source;


 
{RASkov} ©   (2007-12-28 01:24) [24]

> [21] art36 ©   (28.12.07 01:20)
> Ассеpt находится только в этой процедуре, почем это положительно
> влияет на ход программы, а именно другой процедуры?

Что-то не совсем понял, :( но скажу вот что:
Над тривью можно тащить данные с другого контрола и вот здесь(DragOver) нужно указать сможет ли наш тривью принять чужие данные.... понятно?)


 
{RASkov} ©   (2007-12-28 01:25) [25]

> [23] art36 ©   (28.12.07 01:23)
> А все-таки, что такое Accept и Source в этой строке:

Sender - он и в африке сендер, а Source это тот с которого "тащат"... )


 
art36 ©   (2007-12-28 01:28) [26]

Да, все понятно! Благодарю.
СПАСИБО


может кто на этот вопрос ответит?
http://delphimaster.net/view/2-1198780216/


 
{RASkov} ©   (2007-12-28 01:29) [27]

> [26] art36 ©   (28.12.07 01:28)
> может кто на этот вопрос ответит?

http://delphimaster.net/view/1-1198792197/



Страницы: 1 вся ветка

Текущий архив: 2008.01.27;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.011 c
2-1198561832
mikola
2007-12-25 08:50
2008.01.27
использую indy


2-1198899007
Joe
2007-12-29 06:30
2008.01.27
Перетаскивание строк в ListBox


15-1198264565
Kerk
2007-12-21 22:16
2008.01.27
Комиксы по мотивам новых правил форума


15-1197638325
post
2007-12-14 16:18
2008.01.27
два монитора


11-1182631540
=BuckLr=
2007-06-24 00:45
2008.01.27
reTextized и reTextUnicode