Что нового

ControlCommand в ComboBox в скрытом окне

Marjel

Новичок
Сообщения
11
Репутация
0
Подскажите, пожалуйста.
В окне combobox. С помощью ControlCommand посылаю текст нужного пункта. Если окно видимо - всё работает, пункт выбирается и скрипт выполняет то что требуется. Если окно скрыто, то в комбобоксе появляется значение но не исполняется, тоесть не происходит то что должно при выборе данного пункта. Пробовал делать активным окно, посылал все возможные фокусы. Работает только если делать окно видимым на секнду, show непосредственно перед controlcommand а затем заново скрывать. Но ведь так не должно быть?
 
Автор
M

Marjel

Новичок
Сообщения
11
Репутация
0
ок, пример:

Код:
#RequireAdmin
#NoTrayIcon
#include <GUIConstantsEx.au3>
#include <MouseTrapEvent.au3>

$basewind=GUICreate("20000", 200, 100)
$chosf=GUICtrlCreateCombo("", 35, 35, 55, 20)

GUICtrlSetData($chosf, "P1|P2|P3|P4|P5")

GUISetState(@SW_SHOW, $basewind)

_MouseTrapEvent("XClick1",  "XC1")
_MouseTrapEvent("XClick2",  "XC2")

While 1

$nMsg = GUIGetMsg()

Select

Case $nMsg=$GUI_EVENT_CLOSE
		Exit
Case $nMsg=$chosf
		chosex()

EndSelect

WEnd

Func XC1(); первая боковая кнопка мыши скрывает/отображает окно

If Not(BitAND(WinGetState($basewind),2)) Then
	GUISetState(@SW_SHOW, $basewind)
else
	GUISetState(@SW_HIDE, $basewind)
EndIf

return 1

EndFunc

Func XC2(); вторая боковая кнопка мыши отправляет значение в комбобокс

ControlCommand($basewind, "", $chosf, "SelectString", "P3")

return 1

EndFunc

Func chosex()

Beep (1600,150)

EndFunc


Если при видимом окне нажать вторую боковую кнопку мыши то в комбобокс отправится "P3" и произойдёт бип. Если же сначала скрыть окно первой боковой клавишей, а потом нажать вторую боковую, то бипа не происходит. Если после этого снова отобразить окно то видим что нужное значение было отправлено (при условии офк, что перед скрытием был выставлен другой P), но дальше дело не пошло.

Элементарная вещь же вроде. Где я туплю???
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Marjel
OffTopic:
Чтобы запустить ваш пример мне нужно:
1. Купить мышь с боковыми кнопками
2. Перерыть инет в поисках MouseTrapEvent.au3
3. Купить/подключить колонки/наушники, чтобы услышать звук
или переписать ваш пример, что делает его бесполезным.
Постарайтесь в следующий раз приводить примеры попроще, чтобы они запускались "из коробки".


Но ведь так не должно быть?
Именно так и должно быть при использовании функции GuiSetState. В скрытом окне некоторые события не обрабатываются: post #11
Чтобы скрыть от AutoIt факт скрытия окна :smile: используйте _WinAPI_ShowWindow
Код:
If Not(BitAND(WinGetState($basewind),2)) Then
;~     GUISetState(@SW_SHOW, $basewind)
    _WinAPI_ShowWindow($basewind, @SW_SHOW)
else
;~     GUISetState(@SW_HIDE, $basewind)
    _WinAPI_ShowWindow($basewind, @SW_HIDE)
EndIf
 
Верх