![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 15.12.2007
Сообщений: 422
|
![]()
Здравствуйте! В Интернете есть много примеров, как менять местами элементы в дереве, но они все с использованием перемещения мышью. Мне же необходимо написать две процедуры, для двух кнопок, то есть по нажатию первой кнопки, выделенный элемент меняется с предыдущим. А по нажатию второй, выделенный элемент меняется со следующим. Для этого пользуюсь процедуру приведенной ниже, но вот все никак не могу разобраться с самим алгоритмом перемещения для кнопок, помогите пожалуйста
![]() Код:
|
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 15.05.2010
Сообщений: 17
|
![]()
Исходя из приведенной вами процедуры, видно, что она меняет любые две ветки указаные там, как параметры. В вашем случае всё будет немного легче.
////ПОМЕНЯТЬ МЕСТАМИ ВЫДЕЛЕННУЮ ВЕТКУ С ПРЕДЫДУЩЕЙ//////////////////////////// procedure TForm1.Button1Click(Sender: TObject); var i:byte; begin i:=TreeView1.Selected.AbsoluteIndex ; {определяем индекс выделенной ветки} if i<>0 then TreeView1.Selected.MoveTo(TreeView1 .Items[i-1], naInsert); {если индекс нулевой (первый елемент в дереве) соответственно ничего не меняем. Если нет используем метод "MoveTo". Конкретно в данном случае происходит вставка ветки к которой применяется метод (выделенная) ПЕРЕД той, которая указана как параметр( перед выделенной ). Всё...} end; ////////////////////////////////////////////////////////////////////////////////////////////////////// ////ПОМЕНЯТЬ МЕСТАМИ ВЫДЕЛЕННУЮ ВЕТКУ СО СЛЕДУЮЩЕЙ//////////////////////////// procedure TForm1.Button2Click(Sender: TObject); var i:byte; begin i:=TreeView1.Selected.AbsoluteIndex ; {аналогично...} if i<>TreeView1.Items.Count-1 then TreeView1.Items[i+1].MoveTo(TreeView1.Selected, naInsert); {если ветка последняя в списке, опять-же, ничего не делаем. В противном случае метод "MoveTo" применяем к ветке следующей за выделенной.} end; //////////////////////////////////////////////////////////////////////////////////////////////////// Как видите комментов на порядок больше чем самого кода) Но даже в этом случае выглядит это немного яснее и короче, чем то, что написали вы) Правда, здесь не берётся во внимание какие "виды" веток меняются местами. Если допустим поменять ветку и её подветку получится не очень эстэтично) И непонятно как ваша программа должна себя вести при таких вариантах. Так же как и в процедуре "ExchangeNodes", "в лоб"?.. Уточните условия. Последний раз редактировалось noname Incognito; 16.05.2010 в 02:33. |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 15.12.2007
Сообщений: 422
|
![]()
Вообще, да, мне это подходит
![]() ![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поменять местами элементы в массиве! | Angel-dm | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 14.04.2010 14:59 |
Поменять местами элементы в массиве (реверс) | Андрей.12 | Помощь студентам | 7 | 15.11.2009 16:51 |
[C++] Поменять местами наименьший и второй по величине элементы | StudeHt | Помощь студентам | 2 | 10.06.2009 23:33 |
Динамика. Поменять местами наименьший и второй по величине элементы | StudeHt | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 27.05.2009 02:20 |
Ввести двумерный массив и поменять в нём местами элементы | Ku6ep | Помощь студентам | 3 | 23.12.2008 18:25 |