Что нового

[Элементы GUI] Переключение между елементами Gui (табом)

panda_911

Только вверх, только вперед!
Сообщения
52
Репутация
8
Здравствуйте!
Подскажите пожалуйста, возможно ли задать порядок переключения "табом" между елементами Gui? (ComboBox, Input, ...)
И заодно ограничить количество участвующих елементов в переборе.

Например есть 5 полей.
Первые два необходимо заполнять по очереди (сверху-вниз) а остальные три в обратном порядке (снизу-вверх)
итого при переключении табом нужно получить:
1
2
5
4
3

и как например исключить из списка пункт "3", чтоб выбрать его можно было только клацнув на него мышкой?


*например порядок переключения соответствует порядку создания в Gui, это работает и это можно использовать но не уверен что это правильно.
А с исключеним пунктов вопрос открыт
 
Автор
P

panda_911

Только вверх, только вперед!
Сообщения
52
Репутация
8
как например в этом коде убрать пункт "3" из перебора табом?

Код:
#include <GUIConstants.au3>

$Form = GUICreate("", 150, 150)
$Inputs1 = GUICtrlCreateCombo("", 10, 10, 120, 20)
GUICtrlSetData(-1, "привет|здарова|хелло|йо|коммон")
$Inputs2 = GUICtrlCreateCombo("", 10, 35, 120, 20)
GUICtrlSetData(-1, "пока|бай|ариведерчи|адиос")
$Inputs5 = GUICtrlCreateInput("", 10, 110, 120, 20)
$Inputs4 = GUICtrlCreateInput("", 10, 85, 120, 20)
$Inputs3 = GUICtrlCreateInput("", 10, 60, 120, 20)

GUISetState(@SW_SHOW)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			ExitLoop
	EndSwitch
WEnd


чтоб было: 1,2,5,4,1,2,5,4,.....
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
panda_911,
Попробуйте так. При нажатой F11 $nInputs3 можно редактировать.
Код:
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <WinAPI.au3>
#include <EditConstants.au3>
#include <Misc.au3>

$fInput3 = False

$hForm = GUICreate("", 150, 150)
$nInputs1 = GUICtrlCreateCombo("", 10, 10, 120, 20)
GUICtrlSetData(-1, "привет|здарова|хелло|йо|коммон")
$nInputs2 = GUICtrlCreateCombo("", 10, 35, 120, 20)
GUICtrlSetData(-1, "пока|бай|ариведерчи|адиос")
$nInputs5 = GUICtrlCreateInput("", 10, 110, 120, 20)
$nInputs4 = GUICtrlCreateInput("", 10, 85, 120, 20)
$nInputs3 = GUICtrlCreateInput("", 10, 60, 120, 20)
GUISetState()
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

While 1
	If _IsPressed('7A') Then; F11
		$fInput3 = True
	Else
		$fInput3 = False
	EndIf
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			ExitLoop
	EndSwitch
WEnd

Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
	Local $iIDFrom, $iCode
	$iIDFrom = _WinAPI_LoWord($iwParam)
	$iCode = _WinAPI_HiWord($iwParam)
	Switch $iIDFrom
		Case $nInputs3
			Switch $iCode
				Case $EN_SETFOCUS
					If Not $fInput3 Then
						GUICtrlSetState($nInputs1, $GUI_FOCUS)
					EndIf
			EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND
 
Автор
P

panda_911

Только вверх, только вперед!
Сообщения
52
Репутация
8
2madmasles спасибо за пример.
Но думаю для пользователя будет не совсем удобно выбирать некоторые поля с зажатой кнопкой.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
panda_911,
А так?
Код:
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <WinAPI.au3>
#include <EditConstants.au3>

$hForm = GUICreate('', 150, 150)
$nInputs1 = GUICtrlCreateCombo('', 10, 10, 120, 20)
GUICtrlSetData(-1, 'привет|здарова|хелло|йо|коммон')
$nInputs2 = GUICtrlCreateCombo('', 10, 35, 120, 20)
GUICtrlSetData(-1, 'пока|бай|ариведерчи|адиос')
$nInputs5 = GUICtrlCreateInput('', 10, 110, 120, 20)
$nInputs4 = GUICtrlCreateInput('', 10, 85, 120, 20)
$nInputs3 = GUICtrlCreateInput('', 10, 60, 120, 20)
GUISetState()
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')

While 1
	$aCursor = GUIGetCursorInfo()
	If Not @error Then
		If $aCursor[4] = $nInputs3 And $aCursor[2] Then
			GUIRegisterMsg($WM_COMMAND, '')
			GUICtrlSetState($nInputs3, $GUI_FOCUS)
		EndIf
		If $aCursor[4] <> $nInputs3 Then
			GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
		EndIf
	EndIf
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			ExitLoop
	EndSwitch
WEnd

Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
	Local $iIDFrom, $iCode
	$iIDFrom = _WinAPI_LoWord($iwParam)
	$iCode = _WinAPI_HiWord($iwParam)
	Switch $iIDFrom
		Case $nInputs3
			Switch $iCode
				Case $EN_SETFOCUS
					GUICtrlSetState($nInputs1, $GUI_FOCUS)
			EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND
 
Автор
P

panda_911

Только вверх, только вперед!
Сообщения
52
Репутация
8
Отлично!
Огромное спасибо!
Сейчас буду разбирать что к чему, а то много нового увидел :smile:
 
Верх