Что нового

GUIGetCursorInfo не воспринимает элементы TreeViewItem

SECTOR

Продвинутый
Сообщения
399
Репутация
59
Windows XP SP3

Собственно (надеюсь) из заголовка понятно, что GUIGetCursorInfo не воспринимает элементы TreeViewItem.
Код:
$hGUI = GUICreate("MyGUI",300,200)
$hTreeView = GUICtrlCreateTreeView(10,10,280,180)
$Item = GUICtrlCreateTreeViewItem("Тест",-1)
GUISetState()

Do
	$info = GUIGetCursorInfo($hGUI)
	If $info[4] = $Item Then
		MsgBox(0,"","Item")
		Exit
	EndIf
Until GUIGetMsg() = -3

Exit
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Нужен пример.


Добавлено:
Сообщение автоматически объединено:

AutoIt Help сказал(а):
ListViewItem or TreeViewItem controlID will never be returned, only the parent Listview or TreeView control ID is.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Код:
$hGUI = GUICreate("MyGUI",300,200)
$hTreeView = GUICtrlCreateTreeView(10,10,280,180)
$Item = GUICtrlCreateTreeViewItem("Тест",-1)
GUISetState()

Do
    $info = GUIGetCursorInfo($hGUI)
    If $info[4] = 0 Then
        MsgBox(64,"Info","Мы за пределами")
        Exit
    EndIf
Until GUIGetMsg() = -3

Exit
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Yuriy сказал(а):
Код:
$hGUI = GUICreate("MyGUI",300,200)
$hTreeView = GUICtrlCreateTreeView(10,10,280,180)
$Item = GUICtrlCreateTreeViewItem("Тест",-1)
GUISetState()

Do
    $info = GUIGetCursorInfo($hGUI)
    If $info[4] = 0 Then
        MsgBox(64,"Info","Мы за пределами")
        Exit
    EndIf
Until GUIGetMsg() = -3

Exit

Это о чем?
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Yashied
Строка 1 =
Код:
If $info[4] = $Item Then

Строка 2 =
Код:
If $info[4] = 0 Then
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Yuriy, какое это имеет отношение к данной теме? Я уже показал, что это не баг. Советую всем перед написанием баг-запроса прочитать внимательно справку на соответствующую тему.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Yashied
Что-то я не могу Вас понять.
Извините за тугодумство. Поправьте меня, если что не так (лучше конкретно). Так или не так - смотреть ниже.

Эту строчку, наверное можно перефразировать:

If $info[4] = $Item Then =>

Если GUIGetCursorInfo [4] = GUICtrlCreateTreeViewItem
= Если Переменная ($array[4] = Идентификатор элемента, над которым находится курсор (0 - элемент отсутствует)) = Переменной (Ошибка - значение равное 0),
тогда = Истина


Добавлено:
Сообщение автоматически объединено:

Еще и тормознул я немного.
Я не писал никогда никаких баг и небаг запросов.
Честное пионерское!
 

SyDr

Сидра
Сообщения
651
Репутация
158
Yuriy
ListViewItem или TreeViewItem controlID никогда не будут возвращены, только родительский control ID Listview или TreeView.

$array[4] = Идентификатор элемента, над которым находится курсор
GUICtrlCreateTreeViewItem = Идентификатор создаваемого элемента
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Мне кажется странным, что элемент управления, создаваемый с помощью GUICtrlCreateTreeViewItem реагирует на щелчок левой кнопкой мыши, а координаты мыши с помощью GUIGetCursorInfo() вернуть не может, также не может вывести подсказку с помощью GUICtrlSetTip()...
Данный элемент выглядит неполноценным, хотя имеет свой controlID...
Поясните, пожалуйста, в чем причина данной неполноценности?
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Протестируйте и скажите, если можно:
Код:
$hGUI = GUICreate("MyGUI",300,200)
$hTreeView = GUICtrlCreateTreeView(10,10,280,180)
$Item = GUICtrlCreateTreeViewItem("Тест",-1)
GUISetState()

Do
    $info = GUIGetCursorInfo($hGUI)
    If $info[4] = 0 Then
        MsgBox(64,"Info", "Курсор мыши находится за пределами окна")
        Exit
    EndIf
Until GUIGetMsg() = -3

Exit
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Yuriy сказал(а):
Протестируйте и скажите, если можно:
Код:
$hGUI = GUICreate("MyGUI",300,200)
$hTreeView = GUICtrlCreateTreeView(10,10,280,180)
$Item = GUICtrlCreateTreeViewItem("Тест",-1)
GUISetState()

Do
    $info = GUIGetCursorInfo($hGUI)
    If $info[4] = 0 Then
        MsgBox(64,"Info", "Курсор мыши находится за пределами окна")
        Exit
    EndIf
Until GUIGetMsg() = -3

Exit
А что тут говорить? :smile:
Код:
$hGUI  = GUICreate("MyGUI",300,200)
$hTreeView = GUICtrlCreateTreeView(10,10,280,180)
$Item = GUICtrlCreateTreeViewItem("Тест",-1)
GUISetState()

Do
    $info = GUIGetCursorInfo($hGUI)
    If $info[4] = 0 Then
;~ 	MsgBox(64,"Info", "Курсор мыши находится за пределами окна")
	MsgBox(64,"TreeView ID = GUICtrlCreateTreeView(10,10,280,180)", "ID = " & $hTreeView)
	MsgBox(64,"TreeViewItem ID = GUICtrlCreateTreeViewItem('Тест',-1)", "ID = " & $Item)
        Exit
    EndIf
Until GUIGetMsg() = -3

Exit



Добавлено:
Сообщение автоматически объединено:

Или так:
Код:
$hGUI  = GUICreate("MyGUI",300,200)
$hTreeView = GUICtrlCreateTreeView(10,10,280,180)
$Item = GUICtrlCreateTreeViewItem("Тест",-1)
GUISetState()

Do
    $info = GUIGetCursorInfo($hGUI)
;~     If $info[4] = 0 Then
        MsgBox(64,"Info", "Control ID = " & $info[4] & @CRLF & "ID of the control that the mouse cursor is hovering over (or 0 if none)")
        Exit
;~     EndIf
Until GUIGetMsg() = -3

Exit
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Garrett
Работает или не работает это?
При старте скрипта - появляется окно.
Если курсор мыши находится в квадрате этого окна - ничего не происходит.
Иначе - Сообщение "Курсор мыши находится за пределами окна"
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Yuriy сказал(а):
Garrett
Работает или не работает это?
При старте скрипта - появляется окно.
Если курсор мыши находится в квадрате этого окна - ничего не происходит.
Иначе - Сообщение "Курсор мыши находится за пределами окна"
Так всё и должно работать!
Если в момент старта скрипта ваш курсор находится над TreeView, MsgBox не появится!
А если за приделами:
Код:
If $info[4] = 0 Then ; Будет ИСТИНА!

и MsgBox появится!

TreeViewItem здесь вообще не причём! GUIGetCursorInfo его вообще не замечает потому как: "ListViewItem or TreeViewItem controlID will never be returned, only the parent Listview or TreeView control ID is."
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
snoitaleR сказал(а):
Мне кажется странным, что элемент управления, создаваемый с помощью GUICtrlCreateTreeViewItem реагирует на щелчок левой кнопкой мыши, а координаты мыши с помощью GUIGetCursorInfo() вернуть не может, также не может вывести подсказку с помощью GUICtrlSetTip()...
Данный элемент выглядит неполноценным, хотя имеет свой controlID...
Поясните, пожалуйста, в чем причина данной неполноценности?

Потому что GUICtrlCreateTreeViewItem() это виртуальный элемент, существует только в пределах AutoIt (отсюда такие ограничения). На уровне системы таких элементов нет, т.е. у этих элементов просто нет хендлов.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Garrett
Если в момент старта скрипта ваш курсор находится над TreeView, MsgBox не появится!
А у меня работает. WinXP Pro SP3 ru
 
Автор
SECTOR

SECTOR

Продвинутый
Сообщения
399
Репутация
59
То что у этих элементов нет хэндлов понятно, но неужели никак нельзя отловить наведение мыши? И ещё в удф есть функция получения хэндла, но скорее всего это не то.(?)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Yuriy сказал(а):
Garrett
Если в момент старта скрипта ваш курсор находится над TreeView, MsgBox не появится!
А у меня работает. WinXP Pro SP3 ru

Тогда нужно чтобы протестировали те, у кого установлен SP3, я всё никак не соберусь себе поставить, у меня SP2 :whistle:
 
Верх