powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / TreeView и OleDragDrop
8 сообщений из 8, страница 1 из 1
TreeView и OleDragDrop
    #34360852
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему не срабатывает OleDrag у Treeview при
OleDragMode = 0 (программно)

И как можно организовать перетаскивание узла дерева программно...
Как я сделал для текста в гриде...
Grid.Column1.Txt.MouseDown
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
WITH This
	IF m.nButton = 1  AND !EMPTY(.dr_mess)
		.dr_t = .T.
		.frm.f_drag_t.dr_obj = This && timer
		.frm.f_drag_t.dr_chto =  1 
		.frm.f_drag_t.Interval =  250 
	ENDIF
	.val_v = .Value
ENDWITH

f_drag_t.Timer
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
WITH This.dr_obj
	IF !EMPTY(.dr_mess) AND .dr_t
		m.my_sel = .SelStart
		m.my_Length = .SelLength
		.SelStart =  0 
		.SelLength = .Parent.Width+ 20 
		.OleDrag(.F.)
		.SelStart = m.my_sel
		.SelLength = m.my_Length
	ENDIF
	.dr_t = .F.
ENDWITH
...
Рейтинг: 0 / 0
TreeView и OleDragDrop
    #34362739
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
никаких таймеров не нужно

таймер - зло (ВМ - не нужно обсуждать)


активиксу необходимо выставить

OleDragMode=1
OleDropMode=1

прописать методы

oleDragOver - работает когда зацепили и тащим
oleDragDrop - притащили и отпустили


лепить пример лень, вот готовый вариант
примеры методов (изврат - тащим с дерева на дерево в разных формах)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
oleDragOver
lparameters data, effect, button, shift, x, y, state

if type('Row_id')<>'C' or SIGN<> 7 
   return 
endif

local llSuccess
try
	* Подсвечиваю элемент, находящийся под указателем мыши
	this.DropHighlight = this.HitTest(x*thisform.nPTRatioX, y*thisform.nPTRatioY)
	llSuccess = .t.
catch
endtry
if !llSuccess
	return
endif

if !pemstatus(_screen,'oDragRelation', 5 )
   _screen.AddProperty('oDragRelation')
endif
* запоминаю Row_id записи, которую тащу
if vartype(_screen.oDragRelation)<>'O'
	scatter fields row_id,name name _screen.oDragRelation
endif

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
oleDragDrop 
LPARAMETERS data, effect, button, shift, x, y

* натащили сюда и отпустили кнопку мыши
local loDrop, llSuccess
try
	loDrop = this.DropHighlight
	llSuccess = .t.
catch
endtry
if llSuccess and !isnull(loDrop) and pemstatus(_screen,'oDragRelation', 5 ) and ;
   vartype(_screen.oDragRelation)='O' and !empty(nvl(_screen.oDragRelation.Row_id,''))
	* прыг на нужную запись
	this.nodeClick(loDrop)
	if type('Row_id')<>'C' or SIGN<> 7 
		* если это не документы прошлого года - ушли взад
		store null to this.DropHighlight, _screen.oDragRelation
		return
	endif
	local loDocTo
	scatter fields row_id,name name loDocTo
	if !empty(nvl(loDocTo.Row_id,'')) and SIGN= 7   && смотрим, чтобы он был документом прошлого года
		if loDocTo.Row_id=_screen.oDragRelation.Row_id
			store null to this.DropHighlight, _screen.oDragRelation
			messagebox('Укажите документ правильно!', 16 ,pcNameApp)
			return 
		endif
		if messagebox('Привязать ' + chr( 13 ) + ;
					  'документ: ' + alltrim(_screen.oDragRelation.name) + chr( 13 ) + ;
					  'к док-ту: ' + alltrim(loDocTo.name)+ ' ?', 33 ,pcNameApp) =  1 
			* привязываем документ
			public pnResult
			pnResult =  0 
			text to lcSelectCmd textmerge noshow pretext  7 
			     {?@pnResult = CALL dbo.SELECT_DOC_BD_LY_RELATION_EDIT('<<_screen.oDragRelation.Row_id>>','<<loDocTo.Row_id>>')}
			endtext
			if L_SQLEXEC (m.Handle,lcSelectCmd)> 0  and pnResult> 0 
				* успешно привязали
				* переначитываем дерево 
				Thisform.DATA_REFRESH( 0 ,.f.)
		   	endif
		 endif
	 else
		messagebox('Возможна привязка только документов прошлого года!', 16 ,pcNameApp)
	 endif
endif
store null to this.DropHighlight, _screen.oDragRelation
...
Рейтинг: 0 / 0
TreeView и OleDragDrop
    #34362924
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex11100таймер - зло (ВМ - не нужно обсуждать)
Так не нужно безосновательных утверждений. Сколько можно повторять: либо аргументируйте, либо молчите. А лозунгов и агиток я уже наслушался. Не вводите людей в заблуждение.

Нет бесполезных (вредных) объектов или технологий. Каждый объект (технология) предназначена для решения определенного круга задач. Выбор того или иного объекта (технологии) - это вопрос конкретной задачи и личных предпочтений программиста .

Вы демонстируете определенные личные предпочтения. Ну и пишите "IMHO". Не выдавайте свои собственные предпочтения за истину в последней инстанции . Пока Вы будете так безапеляционно бросаться безосновательными утверждениями я буду по прежнему указывать на их некорректность.

Кстати, Вы ведь ни разу так и не ответили на все мои аргументы. Просто бросаете лозунг и в кусты. А доказать?

Да, прежде чем Вы опять начнете безосновательно что-то утверждать, заметьте, что в данном случае я согласен. Для данной задачи таймер не нужен. Но это не значит, что "таймер - зло".
...
Рейтинг: 0 / 0
TreeView и OleDragDrop
    #34363066
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну понеслось

угу
...
Рейтинг: 0 / 0
TreeView и OleDragDrop
    #34364102
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может я не так задал вопрос...
Мне надо что перетаскивание осуществлялось при зажатой кнопки мыши более 0.8-1 сек на Ноде...

Само перетаскивание у меня осуществленно...
Но пользователи жалуются...
Особенно приклонного возраста... че сами того не хотев (при двойном) клике перетаскивают узел дерева куда-то... потом найти не могут...

В НодКлике и ДаблКлике есть коды...
Типа открыть данный уровень...
Нарисовать тулбар с доступными кнопками и т.д. ...
Это все занимает время...

Автоматический Оде-Драг/Дроп мне не подходит... Как на Дереве так и на Гриде...
У грида осуществленно на ура... Можно тягать из проги-в-прогу...
А вот у Дерева траблы... Так как дерево и грид является и источником и получателем при перетаскивании... Юзвер дергнул мышей испугался и привет... Убежала ветка дерева...
Выдавать сообщения то ж не очень хорошо...
Меня заставили их убрать...

Может у кого-то есть идея...
А то я начал уже строить класс дерева...
Где ноды - это рис. + текст(лейбел+текстбокс[для замены текста])...
Работает вроде ни че...
Добавлеят уровни кругом-бегом...
Ну вот прорисовка очень долго происходит...
...
Рейтинг: 0 / 0
TreeView и OleDragDrop
    #34364153
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а почему это Вам не подходит
встроенный механизм поведения активикса?????

подсветите при перетаскивании ноды
и человек не будет дергаться

объясните как таскать

встать, нажать правую кнопку, начать тащить,

если отпустили на чем-то, туда и прыгнет,
если встали назад и отпустили, то там и останется


я думаю не нужно изобретать велосипед, он уже изобретен до Вас
...
Рейтинг: 0 / 0
TreeView и OleDragDrop
    #34364240
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1.1
- 2.1
- 3.1
- 2.2
1.2 и т.д

3.1 Нод для открытия уровня
При двойном щелчке(дрожащими руками[с перепоя]) по Ноду есть вероятность переноса его как дочернего в пункт 2.2
Плюс до двойного щелчка срабатывает НодКлик и прорисовка тулбара... что увеличивает такую вероятность...
По этому мне и надо что б зажал и подождал...
Пользователи не просто-так жалуются...
У кого-то ЭТ регулярно получается...
...
Рейтинг: 0 / 0
TreeView и OleDragDrop
    #34364411
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я отказался от механизма Drag-Drop по двум причинам:

1) Легко промахнуться. Особенно тем у кого "руки дрожат"
2) При использовании TreeView нет однозначности в действиях: "положить рядом" или "вложить внутрь"

Заменил на Shortcut-меню. Т.е. по правой кнопке мыши возникает дополнительное Shortcut-меню, в котором выведены соответсвующие пункты с действиями.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / TreeView и OleDragDrop
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]