Что нового

[Элементы GUI] Упрощение однотипного кода

eus_deus

Новичок
Сообщения
118
Репутация
0
Всем привет! Натолкните на мысль - как можно упростить подобные коды? С autoit знаком без году неделя...

Код:
GUICtrlSetData($vInput1, '')
		GUICtrlSetData($vInput2, '')
		GUICtrlSetData($vInput3, '')
		GUICtrlSetData($vInput4, '')
		GUICtrlSetData($vInput5, '')
		GUICtrlSetData($vInput6, '')
		GUICtrlSetData($vInput7, '')
		GUICtrlSetData($vInput8, '')
		GUICtrlSetBkColor ($vInput1, 0xF0F0F0)
		GUICtrlSetBkColor ($vInput2, 0xF0F0F0)
		GUICtrlSetBkColor ($vInput3, 0xF0F0F0)
		GUICtrlSetBkColor ($vInput4, 0xF0F0F0)
		GUICtrlSetBkColor ($vInput5, 0xF0F0F0)
		GUICtrlSetBkColor ($vInput6, 0xF0F0F0)
		GUICtrlSetBkColor ($vInput7, 0xF0F0F0)
		GUICtrlSetState($vButton8,$gui_disable)
GUICtrlSetState($vButton11,$gui_disable)
GUICtrlSetState($vButton12,$gui_disable)
GUICtrlSetState($vButton13,$gui_disable)
GUICtrlSetState($vButton14,$gui_disable)
GUICtrlSetState($vButton15,$gui_disable)
GUICtrlSetState($vButton16,$gui_disable)
GUICtrlSetState($vButton17,$gui_disable)
GUICtrlSetState($vButton18,$gui_disable)
GUICtrlSetState($vButton19,$gui_disable)
GUICtrlSetState($vButton20,$gui_disable)
GUICtrlSetState($vButton22,$gui_disable)
GUICtrlSetState($vButton24,$gui_disable)
GUICtrlSetState($vButton26,$gui_disable)
GUICtrlSetState($vButton28,$gui_disable)
GUICtrlSetState($vButton30,$gui_disable)
GUICtrlSetState($vButton32,$gui_disable)


И такого по скрипту хватает... То есть однотипные действия с различными по id элементами. Нельзя ли просто

Код:
GUICtrlSetState($vButton30,31,32......, Сделать то то)

Спасибо!
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Код:
For $i = 1 To 8
    GUICtrlSetData(Eval('vInput' & $i), '')
Next
For $i = 1 To 7
    GUICtrlSetBkColor (Eval('vInput' & $i), 0xF0F0F0)
Next

GUICtrlSetState($vButton8, $gui_disable)

For $i = 11 To 32
    GUICtrlSetState(Eval('vButton' & $i),$gui_disable)
Next
 
Автор
E

eus_deus

Новичок
Сообщения
118
Репутация
0
работает... буду упрощать теперь потихоньку. спасибо


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

обфускатор выдает ошибку на eval. а так все хорошо начиналось
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Код:
For $i = $vInput1 To $vInput7
    GUICtrlSetBkColor ($i, 0xF0F0F0)
Next
 

erlik

Продвинутый
Сообщения
317
Репутация
84
eus_deus
Если хочешь красивый и компактный код - привыкай к использованию массивов при создании элементов и забудь про именования типа $vInput1,$vInput2,$vInput3.
Вот примерный вариант (не совсем совпадающий с твоим кодом по элементам) как я бы изначально создал все элементы и потом работал с ними:
Код:
Global $aControls[32]
For $i=0 To Ubound($aControls)-1
     Switch $i
		Case $i<=8
		$aControls[$i] = GUICtrlCreateInput('', $iLeft,$iTop)
        Case $i>8
	    $aControls[$i] = GUICtrlCreateButton('',$iLeft,$iTop)
    EndSwitch
Next

For $i=0 To Ubound($aControls)-1
	Switch $i
		Case $i<=8
		    GUICtrlSetData($aControls[$i],'')
		    ; если нужно исключить какой то control - ставим доп. условие
			If $i<>8 Then GUICtrlSetBkColor($aControls[$i], 0xF0F0F0)
        Case $i>8
	    GUICtrlSetState($aControls[$i],$GUI_DISABLE)
    EndSwitch
Next

А вообще в массив можно писать не только идентификаторы: можно сразу создать двумерный массив куда заранее вписать и размеры, и координаты элементов, и стили и т.д и т.п. B потом останется только пройтись по нему в цикле чтобы создать GUI и с нужными свойствами.
 
Автор
E

eus_deus

Новичок
Сообщения
118
Репутация
0
erlik, я бы с удовольствием, если бы чуть побольше шарил...
у меня весь код - сплошные условия и такие строки, подобие каких я выложил... если переделывать по твоему коду - надо сразу понять, что и чем заменить для работы. конечно, у тебя красивее, хотя и не сильно понятно. я вот недавно раскинул один код на несколько файлов - думал будет легче, а в итоге имею что то такое
Код:
Case $vButton2
    		Local $fColor
		$vColor2 = GUICtrlRead($vInput2)
			If $vColor2='' Then
    $nColor = _ColorChooserDialog('0x00FF40', $Form1,0,0,$CC_FLAG_DEFAULT)
		Else
   $nColor = _ColorChooserDialog('0x'&$vColor2, $Form1,0,0,$CC_FLAG_DEFAULT)
		endif
		 If $nColor = -1 Then
		 		GUICtrlSetData($vInput2, $vColor2)
		 Else
		 		GUICtrlSetData($vInput2,Hex($nColor, 6))
		 		GUICtrlSetBkColor($vInput2,'0x' & Hex($nColor, 6))
  _ColorSelect($nColor, $fColor,$vInput2)
		 		GUICtrlSetState($vButton11,$gui_enable)
		 		GUICtrlSetState($vButton12,$gui_enable)
		 		GUICtrlSetState($vButton14,$gui_enable)
		 		GUICtrlSetState($vButton22,$gui_enable)
		 				 		GUICtrlSetImage($vButton14, $sLib, 3, 0)
		 		GUICtrlSetImage($vButton22, $sLib, 2, 0)
		 		EndIf

и подобный код для 10 кнопок.
короче, надо все стереть и подойти по новому наверное


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

флуд уже наверное. то что спрашивал - на то ответили. буду пробовать


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

А вообще в массив можно писать не только идентификаторы: можно сразу создать двумерный массив куда заранее вписать и размеры, и координаты элементов, и стили и т.д и т.п. B потом останется только пройтись по нему в цикле чтобы создать GUI и с нужными свойствами.
Пример можно? По двухмерному со свойствами
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
http://autoit-script.ru/index.php/topic,16039.msg99185.html#msg99185
 
Верх