Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Перетаскивание из древовидного списка (число прочтений - 5747 )
Leierkastenmann
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 114
Зарегистрирован: 30. Марта 2007
Перетаскивание из древовидного списка
30. Апреля 2010 :: 05:36
Печать  
Возможно ли и если возможно, то в каком направлении копать?
Есть на форме созданный при помощи АктивИкса древовидный список MSComctlLib.TreeCtrl, который там как-то заполняется значениями. Есть на форме также к примеру два списка значений. Хотелось бы организовать перетаскивание значений из древовидного списка в эти списки. Стоит вопрос именно в перетаскивании, а не просто заполнении списков (просто заполнить к примеру кликами, двойными кликами и т.п. не годится). События по перетаскиванию у MSComctlLib.TreeCtrl всевозможные есть, хотя конечно работают они только в самом списке, а вот как показать, что я тащу значение из древовидного в обычный список, и как показать в какой именно обычный список я тащу?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перетаскивание из древовидного списка
Ответ #1 - 30. Апреля 2010 :: 06:12
Печать  
Пользуй не обычный список на форме, а список - активикс, в нём уже есть все события..

ЗЫ: в лучшем случае, можно еще на ТабличноеПоле перетянуть.
Хотя проще- на активикс..
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перетаскивание из древовидного списка
Ответ #2 - 30. Апреля 2010 :: 06:13
Печать  
Используй вместо СЗ - ТабличноеПоле.
Вот его события по перетаскиванию:
http://www.1cpp.ru/docum/icpp/html/TableField.html#dragstart
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перетаскивание из древовидного списка
Ответ #3 - 30. Апреля 2010 :: 06:38
Печать  
При нажатии мышки получаешь узел:

Node = TreeView.HitTest(x, y);

при отпускании получаешь атрибут:

Аттр = РасширениеФормы.ПолучитьАтрибутПоКоординатам(x, y);

Leierkastenmann писал(а) 30. Апреля 2010 :: 05:36:
События по перетаскиванию у MSComctlLib.TreeCtrl всевозможные есть, хотя конечно работают они только в самом списке

Это не совсем верно. Как уже написал  Eprst, эти события позволяют реализовать перетаскивание между разными активиксами.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Leierkastenmann
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 114
Зарегистрирован: 30. Марта 2007
Re: Перетаскивание из древовидного списка
Ответ #4 - 30. Апреля 2010 :: 09:54
Печать  
berezdetsky писал(а) 30. Апреля 2010 :: 06:38:
При нажатии мышки получаешь узел:

Node = TreeView.HitTest(x, y);

при отпускании получаешь атрибут:

Аттр = РасширениеФормы.ПолучитьАтрибутПоКоординатам(x, y);

Leierkastenmann писал(а) 30. Апреля 2010 :: 05:36:
События по перетаскиванию у MSComctlLib.TreeCtrl всевозможные есть, хотя конечно работают они только в самом списке

Это не совсем верно. Как уже написал  Eprst, эти события позволяют реализовать перетаскивание между разными активиксами.


Не очень понял зачем первая часть при нажатии мышки? Нажатие над деревом необязательно же перетаскивание. Мне кажется тогда уж лучше использовать событие по началу перетаскивания, взводить флажок, что начато перетаскивание, а потом при отжатии мыши если флажок взведен, то сбрасывать его и смотреть по координатам атрибут, если то что надо, то вставлять туда значение.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перетаскивание из древовидного списка
Ответ #5 - 30. Апреля 2010 :: 10:09
Печать  
Лучше вообще не заморачиваться с координатами и тем более - устанавливать флаги. В активиксе и так есть все события.
  
Наверх
 
IP записан
 
Leierkastenmann
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 114
Зарегистрирован: 30. Марта 2007
Re: Перетаскивание из древовидного списка
Ответ #6 - 30. Апреля 2010 :: 11:09
Печать  
Согласен, что когда объект, в который тащим, активиксовский, то не надо огороды городить. Но у меня-то вопрос был про 1совские объекты. В общем-то ответ я получил, всем отвечавшим спасибо  Улыбка
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перетаскивание из древовидного списка
Ответ #7 - 30. Апреля 2010 :: 11:20
Печать  
ну а смысл от 1с-ого объекта, когда есть тот же ListViewCtrl ...?
Там и события все есть и иконки можно навешать и.. красившее выглядит.
  
Наверх
 
IP записан
 
Leierkastenmann
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 114
Зарегистрирован: 30. Марта 2007
Re: Перетаскивание из древовидного списка
Ответ #8 - 11. Мая 2010 :: 08:23
Печать  
Ну смысл... А какой смысл от 1ски вообще?  Улыбка Просто 1совский список привычней для работы, для него все что нужно в конфигурации уже сделано, а для активикса надо писать. В общем привычка и ничего более. Наверное даже вредная привычка  Улыбка
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перетаскивание из древовидного списка
Ответ #9 - 11. Мая 2010 :: 08:35
Печать  
А ты 1 раз оберни методы АктивИкса/ТП в класс и от старой привычки можно не отказываться. + появляются новые возможности
  
Наверх
 
IP записан
 
Leierkastenmann
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 114
Зарегистрирован: 30. Марта 2007
Re: Перетаскивание из древовидного списка
Ответ #10 - 13. Мая 2010 :: 10:30
Печать  
Полез в ListView и не желает создаваться он на форме  Печаль
Код вроде бы аналогичен TreeView, но не работает
Код
Выбрать все
	ОбъектФорма 	= СоздатьОбъект("Форма");
	СписокАктивИкс 	= СоздатьОбъект("АктивИкс");

	ОбъектФорма.УстановитьФорму(Форма);

	ОбъектФорма.СоздатьЭлементУправления(СписокАктивИкс, "фСписок");

	СписокАктивИкс.СоздатьЭУ("MSComctlLib.ListView");
 


выдает
"Создание элемента управления MSComctlLib.ListView не удалось"

Что делаю не так? Тут уже на форуме была темка трехгодичной давности с подобным вопросом, но без ответов.
Версии компонент Formex 2.0.5.98, 1cpp 3.0.1.22
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перетаскивание из древовидного списка
Ответ #11 - 13. Мая 2010 :: 10:42
Печать  
Еще бы..
Код
Выбрать все
//СписокАктивИкс.СоздатьЭУ("MSComctlLib.ListView");
СписокАктивИкс.СоздатьЭУ("MSComCtlLib.ListViewCtrl.2"); 



  
Наверх
 
IP записан
 
Leierkastenmann
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 114
Зарегистрирован: 30. Марта 2007
Re: Перетаскивание из древовидного списка
Ответ #12 - 13. Мая 2010 :: 10:52
Печать  
Аналогия не сработала  Улыбка Благодарю.
  
Наверх
 
IP записан
 
Leierkastenmann
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 114
Зарегистрирован: 30. Марта 2007
Re: Перетаскивание из древовидного списка
Ответ #13 - 13. Мая 2010 :: 13:34
Печать  
Подскажите еще как правильно работать с методом HitTest? Никак не получается получить этим методом узел из дерева. Понятно, что не всегда его можно по координатам получить, но я уже в событии MouseDown ловил координаты, когда я точно на узел наступаю, пытался их дать методу, но все время в исключение заходит.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перетаскивание из древовидного списка
Ответ #14 - 13. Мая 2010 :: 14:08
Печать  
Рабочий
Код
Выбрать все
Private Sub TreeView1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    Dim Node As MSComctlLib.Node

    Set Node = TreeView1.HitTest(x, y)
    If Not Node Is Nothing Then
	  ... 


Глянь ещё Q177743 и Q196775.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать