powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Treeview Right Click
18 сообщений из 18, страница 1 из 1
Treeview Right Click
    #32197476
Jose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто-нибудь знает, можно ли совершить какое-либо действие(операцию и т.д.)
на нажатие прав. клав. мыши (RightClick) в Treeviwe Control'e.
И возможно ди вообще такое в принципе
...
Рейтинг: 0 / 0
Treeview Right Click
    #32197512
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно можно, через обработку события MouseDown:
LPARAMETERS button, shift, x, y
IF button=2
...
ENDIF

ЗЫ Для того, чтобы узнать попал в ноду или нет, используй метод HitTest(x,y), он вернет ссылку на объект node или .NULL. (в крайнем случае пустую строку в старых версиях).
...
Рейтинг: 0 / 0
Treeview Right Click
    #32197518
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему нет?
Используй MouseDown
Для определения на какой ноде используй там же HitTest
...
Рейтинг: 0 / 0
Treeview Right Click
    #32197522
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oops :((( Акелла промахнулся
...
Рейтинг: 0 / 0
Treeview Right Click
    #32197573
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Crip

>Oops :((( Акелла промахнулся

Это ты про меня?
Бывает.. Ну не помню я когда где что возвращает. И что для любознательных пользователей лучше обрабатывать не MouseDown, а MouseUp. Кроме того, там небось еще всякие твипсы, короче надо было ответить просто и коротко - 'да' .
...
Рейтинг: 0 / 0
Treeview Right Click
    #32197599
Jose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все что я нашел (ПОКАЗАЛИ) из хелпа по TreeView -
http://kodu.neti.ee/~juri4/vfpplus/ax_treeview_ru.htm
Но там нет ни слова про HitTest. Мож где есть ?
...
Рейтинг: 0 / 0
Treeview Right Click
    #32197616
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2NNN
Нет это я про себя - ты уже раньше запостил.
А почему MouseDown плох? Мне кажется как раз он и нужен. Например для построения контекстного меню
2Jose
А что тебе по HitTest надо? Кажется все что нужно NNN написал.
...
Рейтинг: 0 / 0
Treeview Right Click
    #32197626
Jose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не совсем понимаю как этот метод работает и как его использовать, точнее,
совсем не понимаю.
...
Рейтинг: 0 / 0
Treeview Right Click
    #32197634
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2NNN
а я-то думаю, куда однопартиец задевался? а он не задевался, он в работу ушёл :(
...
Рейтинг: 0 / 0
Treeview Right Click
    #32197638
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не все сразу. Сайт там все еще в развитии и со временем дополнится описанием свойств и методов собственно TreeView.

Вкратце по поводу HitTest()

Это метод собственно объекта TreeView, который по указанным координатам, относительно верхнего левого угла собственно TreeView возвращает ссылку на узел, находящийся по указаным координатам.

Проблема в том, что внутренний метод HiteTest() требует координат указанных в твипах (twip), а FoxPro предлагает координаты в пикселах. Т.е. необходим перевод координат.

В примере, я создал специальные проперти формы nTwipX и nTwipY, содержащие переводные коэффициенты

* Следующие API функции используются для расчета переводного коэффициента
* из пикселей (их дает VFP60) в твипы (они нужны функции HitTest())
DECLARE INTEGER GetActiveWindow IN WIN32API
DECLARE INTEGER GetDC IN WIN32API INTEGER iHDC
DECLARE INTEGER GetDeviceCaps IN WIN32API INTEGER iHDC, INTEGER iIndex

LOCAL liHDC
liHDC = GetDC(GetActiveWindow())

ThisForm.nTwipX = 1440/GetDeviceCaps(liHDC,88)
ThisForm.nTwipY = 1440/GetDeviceCaps(liHDC,90)


Теперь в методе MouseDown собственно TreeView пишешь такой код

*** ActiveX Control Event ***
LPARAMETERS button, shift, x, y
LOCAL loNode
loNode=This.HitTest(x*ThisForm.nTwipX, y*ThisForm.nTwipY)
if IsNull(m.loNode)=.T.
MessageBox('Под мышкой нет узла')
else
MessageBox(m.loNode.text)
endif

Можешь еще посмотреть примерчик

http://nsvisual.com/fox2/sol/index.php?act=view&id=188

Это собственно Drag-Drop в TreeView, но один из способов - это как раз вызов подменю по правой кнопке мыши
...
Рейтинг: 0 / 0
Treeview Right Click
    #32197649
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ВладимирМ
Я не такой крутой спец по тривью. А что вот так не всегда будет работать?
Пересчет координат взят и Solution - Controls- ListBox- Drag'n'Drop.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
LPARAMETERS button, shift, x, y
IF button <>  2 
	RETURN 
ENDIF 

LOCAL loNode
loNode = this.Hittest(x/ 96 * 1440 ,y/ 96 * 1440 )

IF VARTYPE(loNode) = [O]
	MESSAGEBOX(loNode.Text)
ENDIF 
...
Рейтинг: 0 / 0
Treeview Right Click
    #32197687
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Специально я не проверял. У меня действительно переводной коэффициент всегда равен 15, но я слышал о ситуациях, когда он равен 12 (возможно другой алгоритм расчета).

Я просто не очень понимаю, что эти API-функции делают (точнее какие значения возвращают)

Т.е. если лень, то можно взять коэффициент равным 15, но тут нет никакой гарантии, что на другой машине он также будет равен 15.

Второй момент - это возвращаемый тип данных.

Ведь HitTest() по логике должен в любом случае вернуть переменную типа "Object", просто если нет объекта, то ее значение будет равно NULL. Поэтому я не думаю, что отлавливать именно ТИП возвращаемого значения - это хорошая идея. Нужно проверять именно ЗНАЧЕНИЕ.

По поводу Solution.pjx - у меня VFP6 и этого примера нет.

А вообще-то, к любым примерам надо подходить с осторожностью, по принципу "доверяй, но проверяй". Как минимум, примеры от Microsoft сильно избыточны. Насчет глючности - не скажу, я не очень-то пользуюсь примерами в чистом виде. Как правило беру только идею и переписываю под себя.
...
Рейтинг: 0 / 0
Treeview Right Click
    #32197704
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно
С VARTYPE() я действительно погорячился. Когда передается ссылка на объект , а не сам объект лучше проверять на NULL
...
Рейтинг: 0 / 0
Treeview Right Click
    #32197848
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Crip

> Нет это я про себя - ты уже раньше запостил.

Интересно, как ты мог об этом знать, когда писал ответ

> А почему MouseDown плох? Мне кажется как раз он и нужен. Например для построения контекстного меню.

Тебе длинную историю по этому поводу или короткую? Ладно, как-нибудь в следующий раз..
А пока нажми правую кнопку мыши в любом месте этого сообщения. Нажал? Теперь дочитай это предложение до конца и отпусти ее. Намек понял? :)

С VARTYPE() я действительно погорячился. Когда передается ссылка на объект , а не сам объект лучше проверять на NULL

Не все так просто - PRB: TreeView Control HitTest Method Returns Empty String , хотя это не твой случай.

> А что вот так не всегда будет работать?

Как минимум в 90% случаев.
В принципе твипс - это 1/1400 логического дюйма, а вот количество пикселей в логическом дюйме может быть различно для различных компьютеров, но может быть вычислено через GetDeviceCaps. У меня на работе как раз такой случай, точные цифры не помню, но очень 'обрадовался', когда в первый раз встретил вариант TwipsPerPixelX=TwipsPerPixelY. Solution в этом примере подглючивает капитально.

2ВладимирМ

> Сайт там все еще в развитии и со временем дополнится описанием свойств и методов собственно TreeView.

Это тебе Юрий сам сказал? Помнится, он начинал еще в прошлом веке..

Одно замечание: контекст устойства необходимо удалять после того, как он не используется, он все-таки немало памяти ест.

2hDrummer

А Вам, товарисч Эйтч, я отвечу отдельно и в другом форуме.
...
Рейтинг: 0 / 0
Treeview Right Click
    #32198266
Jose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем, спасибо всем.
Постараюсь дальше разобраться сам (:-)
...
Рейтинг: 0 / 0
Treeview Right Click
    #32204945
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 NNN
>Одно замечание: контекст устойства необходимо удалять после того, как он не используется, он все-таки немало памяти ест.

Как это выполнить практически для VFP6 ? Там есть только CLEAR DLLS, что в принципе недопустимо использовать - мало ли какие библиотеки у меня еще загружены.
...
Рейтинг: 0 / 0
Treeview Right Click
    #32205036
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ВладимирМ

> Как это выполнить практически для VFP6 ?

Для твоего примера (после вычисления твипсов):

Код: plaintext
1.
declare integer ReleaseDC in win32api integer,integer
=ReleaseDC(GetActiveWindow(),liHDC)


> Там есть только CLEAR DLLS

Было время, приходилось отслеживать, а в 7 появилось CLEAR DLLS [LibraryName], что упростило задачу.
...
Рейтинг: 0 / 0
Treeview Right Click
    #32205486
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Не силен я в API :(
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Treeview Right Click
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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