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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2ВладимирМ

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

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

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

2hDrummer

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

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

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

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

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


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

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


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