Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];

Вниз

Перенос в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.012 c
1-1193242832
Malina
2007-10-24 20:20
2008.01.27
Сохранить содержимое RichEdit в файл


15-1197305009
{RASkov}
2007-12-10 19:43
2008.01.27
Delphi To TP


2-1198787613
Артем
2007-12-27 23:33
2008.01.27
Приложение, создающее приложение


2-1198663138
trubin
2007-12-26 12:58
2008.01.27
Отличие дисков


2-1198485445
ksmakov
2007-12-24 11:37
2008.01.27
Как вытащить номер строки в таблице dbf





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский