Pelerin
Осваивающий
- Сообщения
- 81
- Репутация
- 23
AutoIt: 3
Категория: Вспомогательные функции, Окна и диалоги, Элементы GUI, Разное
Автор: Pelerin (c)
Описание UDF: Небольшая функция для переключения состояния элементов GUI между парами противоположных значений ($GUI_CHECKED/$GUI_UNCHECKED; 1/0; True/False и т.д. ). Очень часто, при построении GUI, возникает закономерная необходимость переключать состояние его элементов или, хотя бы, просто в начале скрипта поставить то значение, которое соответствует переменной считанной из ini-файла и т.д. Однако бывает лень писать обработку этих действий для каждого GUICTRL да и код становится не совсем читаемым. Поэтому я и придумал эту функцию.
[*]Переключение GUI в противоположное текущему состояние.
[*]Установление начального состояния GUI в зависимости от значения переменной. Надо просто поменять местами $true и $false.
[*]Переключение состояния GUI1 в зависимости от текущего состояния GUI2
[*]Изменение значения переменной на противоположное (без использования GUI).
[/list]
Пары противоположных значений: 1/0; True/False; $GUI_CHECKED/$GUI_UNCHECKED; $GUI_ENABLE/$GUI_DISABLE; $GUI_SHOW/$GUI_HIDE; $GUI_FOCUS/$GUI_NOFOCUS, а также строковые значения "True"/"False";"+"/"-". Вы можете добавлять новые пары значений дописав их в функцию (см. код функции).
$param - значение переменной, которая задает состояние GUI. Должно соответствовать одному из значений списка пары противоположных значений
$true/$false - пара состояний между которой надо переключиться (см. пары противоположных значений). В принципе может быть равно любой другой паре значений. Значения этих аргументов жестко не детерминированы.
Возвращаемое значение - новое значение $param, которое равно одному из параметров $true/$false или, в случае не правильного $param, - -1
Спасибо всем кто помог довести эту функцию до ума
Категория: Вспомогательные функции, Окна и диалоги, Элементы GUI, Разное
Автор: Pelerin (c)
Описание UDF: Небольшая функция для переключения состояния элементов GUI между парами противоположных значений ($GUI_CHECKED/$GUI_UNCHECKED; 1/0; True/False и т.д. ). Очень часто, при построении GUI, возникает закономерная необходимость переключать состояние его элементов или, хотя бы, просто в начале скрипта поставить то значение, которое соответствует переменной считанной из ini-файла и т.д. Однако бывает лень писать обработку этих действий для каждого GUICTRL да и код становится не совсем читаемым. Поэтому я и придумал эту функцию.
~~~Возможности UDF~~~
[list type=decimal][*]Переключение GUI в противоположное текущему состояние.
Код:
$param = _GUICtrlSwitchState($ctrlid, $GUI_ENABLE, $GUI_ENABLE, $GUI_DISABLE)
Код:
$param = _GUICtrlSwitchState($ctrlid, $GUI_ENABLE, $GUI_DISABLE, $GUI_ENABLE)
Код:
$param = _GUICtrlSwitchState($ctrlid_1, GuiCtrlGetState($ctrlid_2), $GUI_ENABLE, $GUI_DISABLE)
Код:
$param = _GUICtrlSwitchState("", True, True, False)
Пары противоположных значений: 1/0; True/False; $GUI_CHECKED/$GUI_UNCHECKED; $GUI_ENABLE/$GUI_DISABLE; $GUI_SHOW/$GUI_HIDE; $GUI_FOCUS/$GUI_NOFOCUS, а также строковые значения "True"/"False";"+"/"-". Вы можете добавлять новые пары значений дописав их в функцию (см. код функции).
~~~Собственно сама UDF~~~
Код:
Func _GUICtrlSwitchState($ctrlid, $param, $true, $false)
If IsBool($param) Then $param=Number($param)
If not StringIsDigit($param) Then
Switch $param
Case "True", "+" ; сюда можно добавлять другие СТРОКОВЫЕ значения
$param = $false
Case "False", "-" ; сюда можно добавлять другие СТРОКОВЫЕ значения
$param = $true
Case Else
Return -1
EndSwitch
Else
Switch $param
Case 1, $GUI_CHECKED, $GUI_ENABLE, $GUI_SHOW, $GUI_FOCUS ; сюда можно добавлять другие ЧИСЛОВЫЕ значения
$param = $false
Case 0, $GUI_UNCHECKED, $GUI_DISABLE, $GUI_HIDE , $GUI_NOFOCUS ; сюда можно добавлять другие ЧИСЛОВЫЕ значения
$param = $true
Case Else
Return -1
EndSwitch
EndIf
If $ctrlid > 0 Then GUICtrlSetState ($ctrlid, $param)
Return $param
EndFunc
~~~Описание параметров~~~
Все параметры обязательны
$ctrlid - внутренний id элемента GUI, который требуется переключить. Возвращается функцией GuiCtrlCreate(). Если требуется только изменить значение переменной то $ctrlid="" $param - значение переменной, которая задает состояние GUI. Должно соответствовать одному из значений списка пары противоположных значений
$true/$false - пара состояний между которой надо переключиться (см. пары противоположных значений). В принципе может быть равно любой другой паре значений. Значения этих аргументов жестко не детерминированы.
Возвращаемое значение - новое значение $param, которое равно одному из параметров $true/$false или, в случае не правильного $param, - -1
~~~Пример~~~
Рабочий скрипт с комментариями. Для проверки можно запустить на тест.
Код:
#include <GUIConstants.au3>
$answer = MsgBox (4, @ScriptName, "Активировать тестовый CheckBox при старте скрипта?")
Switch $answer
Case 6
$param = '+'
case 7
$param = False
EndSwitch
$gui = GUICreate (@ScriptName, 270, 130)
Dim $gui_ctrl[8]
$gui_ctrl[0]= GUICtrlCreateCheckbox ('Если CheckBox активен, то активна "Group"', 10, 10, 330, 25)
$gui_ctrl[1]= GUICtrlCreateGroup ("Group: ", 10, 35, 250, 50)
$gui_ctrl[2]= GUICtrlCreateLabel ("L1", 20, 55, 50, 20, 0x01)
$gui_ctrl[3]= GUICtrlCreateInput ("0", 80, 50, 50, 25)
$gui_ctrl[4]= GUICtrlCreateUpdown ($gui_ctrl[3])
$gui_ctrl[5] = GUICtrlCreateLabel ("L2:", 130, 55, 50, 20, 0x01)
$gui_ctrl[6]= GUICtrlCreateInput ("0", 190, 50, 50, 25)
$gui_ctrl[7]= GUICtrlCreateUpdown ($gui_ctrl[6])
$gui_accept = GUICtrlCreateButton ("Close", 10, 95, 250, 30)
GUICtrlSetLimit ($gui_ctrl[4], 59, 0)
GUICtrlSetLimit ($gui_ctrl[7], 59, 0)
_GUICtrlSwitchState($gui_ctrl[0], $param, $GUI_UNCHECKED, $GUI_CHECKED) ; переключение CheckBox'а в состояние выбраное при старте
For $i = 1 to 7 ; переключение "Group" в состояние в зависимости от состояния CheckBox'а
_GUICtrlSwitchState($gui_ctrl[$i], $param, $GUI_DISABLE, $GUI_ENABLE)
Next
GUISetState (@SW_SHOW, $gui)
Do
$msg = GUIGetMsg ($gui)
If $msg = $gui_ctrl[0] Then
$param = _GUICtrlSwitchState('', $param, 1, 0) ; просто меняем значение $param с 1 на 0 или с 0 на 1 (CheckBox переключится сам)
For $i = 1 to 7
_GUICtrlSwitchState($gui_ctrl[$i], $param, $GUI_DISABLE, $GUI_ENABLE) ; переключение "Group" в состояние в зависимости от состояния CheckBox'а
Next
EndIf
Until $msg = $gui_accept or $msg = $gui_event_close
; --------------------
Func _GUICtrlSwitchState($ctrlid, $param, $true, $false)
If IsBool($param) Then $param=Number($param)
If not StringIsDigit($param) Then
Switch $param
Case "True", "+" ; сюда можно добавлять другие СТРОКОВЫЕ значения
$param = $false
Case "False", "-" ; сюда можно добавлять другие СТРОКОВЫЕ значения
$param = $true
Case Else
Return -1
EndSwitch
Else
Switch $param
Case 1, $GUI_CHECKED, $GUI_ENABLE, $GUI_SHOW, $GUI_FOCUS ; сюда можно добавлять другие ЧИСЛОВЫЕ значения
$param = $false
Case 0, $GUI_UNCHECKED, $GUI_DISABLE, $GUI_HIDE , $GUI_NOFOCUS ; сюда можно добавлять другие ЧИСЛОВЫЕ значения
$param = $true
Case Else
Return -1
EndSwitch
EndIf
If $ctrlid > 0 Then GUICtrlSetState ($ctrlid, $param)
Return $param
EndFunc
Спасибо всем кто помог довести эту функцию до ума