Что нового

[Окна, Диалоги] Исправление работы GUICtrlCreateCombo при активации/деактивации

nu3dell

Осваивающий
Сообщения
139
Репутация
24
Использую такой код
Код:
#include <GUIConstants.au3>
#include <ButtonConstants.au3>
$hGUI = GUICreate("GUI окно", 150, 120)
GUISetState ()
$hComb = GUICtrlCreateCombo("", 10, 15, 110, 150)
GUICtrlSetData(-1, "CPU|Cd-rom|HDD|DDR", "CPU")
$hCheck=GUICtrlCreateCheckbox("ON/OFF", 20, 42, 90, 20, $bs_pushlike)
AdlibRegister('_Check', 100)
While 1
    $msg = GUIGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $hComb
            $selected = GUICtrlRead($hComb)            
            Switch $selected
                Case "CPU"
                    MsgBox(0, "selected", "Тут пишем код для CPU")
                Case "Cd-rom"
                    MsgBox(0, "selected", "Тут пишем код для Cd-rom")
                Case "HDD"
                    MsgBox(0, "selected", "Тут пишем код для HDD")
                Case "DDR"
                    MsgBox(0, "selected", "Тут пишем код для DDR")
            EndSwitch   
    EndSwitch
WEnd
Func _Check()
		If GUICtrlRead($hCheck) = $gui_checked Then
		GUICtrlSetState($hComb, $GUI_ENABLE)
	Else
		GUICtrlSetState($hComb, $GUI_DISABLE)
	EndIf
	EndFunc

И мне нужно что бы при активации сразу был msgbox того элемента который там был (тоесть как я активровал сразу сработал msgbox) Ну только если я допустим отключи не на том элементе который был изначально (Вот например при запуске скрипта по умолчанию "CPU", и допустим я отключаю но мой элемент уже "HDD", и когда я сново активирую у меня сразу был msgbox от "HDD")
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
Код:
; При закрытии например
IniWrite()
; При открытии в таком случае
IniRead()
; Искренне надеюсь, что Вы сможете сами прочитать про эти функции и включить их в скрипт  :)
 
Автор
nu3dell

nu3dell

Осваивающий
Сообщения
139
Репутация
24
DarWiM, ненне, не при закрытии что бы сохранить данные.
Вот смотрите, у меня изначально $GUI_DISABLE и когда я нажимаю "On/Off", комбо становиться $GUI_ENABLE, потом когда я выбираю пункт у меня msgbox (гляньте скрипт) (!)НО(!), мне нужно кода я нажал "On/Off" сразу был msgbox этого пункта который в комбо
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
Таким образом не вижу особых изменений. Просто при каких-то условиях считывать, а при каких-то записывать.. Или вообще в переменную...


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

Видимо я не понял суть. Может так?
Код:
#include <GUIConstants.au3>
#include <ButtonConstants.au3>
$hGUI = GUICreate("GUI окно", 150, 120)
GUISetState ()
$hComb = GUICtrlCreateCombo("", 10, 15, 110, 150)
GUICtrlSetData(-1, "CPU|Cd-rom|HDD|DDR", "CPU")
$hCheck=GUICtrlCreateCheckbox("ON/OFF", 20, 42, 90, 20, $bs_pushlike)
AdlibRegister('_Check', 100)
While 1
    $msg = GUIGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
    EndSwitch
WEnd
Func _Check()
	If GUICtrlRead($hCheck) = $gui_checked Then
        GUICtrlSetState($hComb, $GUI_ENABLE)
    Else
        GUICtrlSetState($hComb, $GUI_DISABLE)
		$selected = GUICtrlRead($hComb)
		Switch $selected
			Case "CPU"
				MsgBox(0, "selected", "Тут пишем код для CPU")
			Case "Cd-rom"
				MsgBox(0, "selected", "Тут пишем код для Cd-rom")
			Case "HDD"
				MsgBox(0, "selected", "Тут пишем код для HDD")
			Case "DDR"
				MsgBox(0, "selected", "Тут пишем код для DDR")
		EndSwitch
    EndIf
EndFunc
 

madmasles

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

$hGUI = GUICreate('GUI окно', 150, 120)
GUISetState()
$nComb = GUICtrlCreateCombo('', 10, 15, 110, 150)
GUICtrlSetData(-1, 'CPU|Cd-rom|HDD|DDR', 'CPU')
$nCheck = GUICtrlCreateCheckbox('ON/OFF', 20, 42, 90, 20)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $nCheck
			If Not BitAND(GUICtrlRead($nCheck), $GUI_CHECKED) Then ContinueLoop
			Switch GUICtrlRead($nComb)
				Case 'CPU'
					MsgBox(0, 'selected', 'Тут пишем код для CPU', 0, $hGUI)
				Case 'Cd-rom'
					MsgBox(0, 'selected', 'Тут пишем код для Cd-rom', 0, $hGUI)
				Case 'HDD'
					MsgBox(0, 'selected', 'Тут пишем код для HDD', 0, $hGUI)
				Case 'DDR'
					MsgBox(0, 'selected', 'Тут пишем код для DDR', 0, $hGUI)
			EndSwitch
	EndSwitch
WEnd
 
Автор
nu3dell

nu3dell

Осваивающий
Сообщения
139
Репутация
24
DarWiM, у вас вечно показывает msgbox, нужно как обычно, но с тем условием
madmasles, близко к истене, но проблема в том что после активации показало окно, а потом когда выбираю нет...
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
nu3dell [?]
после активации показало окно, а потом когда выбираю нет.
Код:
#include <GUIConstantsEx.au3>

Global $fChecked

$hGUI = GUICreate('GUI окно', 150, 120)
$nComb = GUICtrlCreateCombo('', 10, 15, 110, 150)
GUICtrlSetData(-1, 'CPU|Cd-rom|HDD|DDR', 'CPU')
GUICtrlSetState(-1, $GUI_DISABLE)
$nCheck = GUICtrlCreateCheckbox('ON/OFF', 20, 42, 90, 20)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nCheck, $nComb
			If BitAND(GUICtrlRead($nCheck), $GUI_CHECKED) Then
				If Not $fChecked Then
					GUICtrlSetState($nComb, $GUI_ENABLE)
					$fChecked = True
				EndIf
				$sSelected = GUICtrlRead($nComb)
				Switch $sSelected
					Case 'CPU'
						MsgBox(0, 'selected', 'Тут пишем код для CPU', 0, $hGUI)
					Case 'Cd-rom'
						MsgBox(0, 'selected', 'Тут пишем код для Cd-rom', 0, $hGUI)
					Case 'HDD'
						MsgBox(0, 'selected', 'Тут пишем код для HDD', 0, $hGUI)
					Case 'DDR'
						MsgBox(0, 'selected', 'Тут пишем код для DDR', 0, $hGUI)
				EndSwitch
			Else
				If $fChecked Then
					GUICtrlSetState($nComb, $GUI_DISABLE)
					$fChecked = False
				EndIf
			EndIf
	EndSwitch
WEnd
 
Автор
nu3dell

nu3dell

Осваивающий
Сообщения
139
Репутация
24
madmasles, мне нужно использовать структуру как у меня в исходнике
Код:
Case $hComb
            $selected = GUICtrlRead($hComb)            
            Switch $selected
                Case "CPU"
                    MsgBox(0, "selected", "Тут пишем код для CPU")
                Case "Cd-rom"
                    MsgBox(0, "selected", "Тут пишем код для Cd-rom")
                Case "HDD"
                    MsgBox(0, "selected", "Тут пишем код для HDD")
                Case "DDR"
                    MsgBox(0, "selected", "Тут пишем код для DDR")
            EndSwitch
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
nu3dell,
Поменял.
 
Автор
nu3dell

nu3dell

Осваивающий
Сообщения
139
Репутация
24
Капец ребята извините, думал смогу перевести это с чекбокса, на хотекей но запуталься...
Блин, я гулпанул, помогите тоже самое только с этим :-[

Код:
#include <GUIConstantsEx.au3>
#Include <ComboConstants.au3>
HotKeySet('1','_MyFunc')
Global $True=False

$hGUI = GUICreate('GUI окно', 150, 120)
$nComb = GUICtrlCreateCombo('', 10, 15, 110, 150)
GUICtrlSetData(-1, 'CPU|Cd-rom|HDD|DDR', 'CPU')
 GUICtrlSetState($nComb, $GUI_DISABLE)
GUISetState()

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

Func _MyFunc()    
    Switch @HotKeyPressed
        Case "1"
            $True= Not $True
            If $True = True Then 
             GUICtrlSetState($nComb, $GUI_ENABLE)
			 While $True
    $msg = GUIGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $nComb
            $selected = GUICtrlRead($nComb)            
            Switch $selected
                Case "CPU"
                    MsgBox(0, "selected", "Тут пишем код для CPU")
                Case "Cd-rom"
                    MsgBox(0, "selected", "Тут пишем код для Cd-rom")
                Case "HDD"
                    MsgBox(0, "selected", "Тут пишем код для HDD")
                Case "DDR"
                    MsgBox(0, "selected", "Тут пишем код для DDR")
            EndSwitch   
    EndSwitch
WEnd
            Else
                GUICtrlSetState($nComb, $GUI_DISABLE)
            EndIf
    EndSwitch
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
nu3dell,
Код:
#include <GUIConstantsEx.au3>

Global $fChecked, $aChecked[2] = [$GUI_CHECKED, $GUI_UNCHECKED], $aAccelKeys[1][2] = [['1']]

$hGUI = GUICreate('GUI окно', 150, 120)
$nComb = GUICtrlCreateCombo('', 10, 15, 110, 150)
GUICtrlSetData(-1, 'CPU|Cd-rom|HDD|DDR', 'CPU')
GUICtrlSetState(-1, $GUI_DISABLE)
$nCheck = GUICtrlCreateCheckbox('ON/OFF', 20, 42, 90, 20)
$nDummmy = GUICtrlCreateDummy()
$aAccelKeys[0][1] = $nDummmy
GUISetAccelerators($aAccelKeys)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nDummmy
			GUICtrlSetState($nCheck, $aChecked[BitAND(GUICtrlRead($nCheck), $GUI_CHECKED)])
			_Func()
		Case $nCheck, $nComb
			_Func()
	EndSwitch
WEnd

Func _Func()
	If BitAND(GUICtrlRead($nCheck), $GUI_CHECKED) Then
		If Not $fChecked Then
			GUICtrlSetState($nComb, $GUI_ENABLE)
			$fChecked = True
		EndIf
		$sSelected = GUICtrlRead($nComb)
		Switch $sSelected
			Case 'CPU'
				MsgBox(0, 'selected', 'Тут пишем код для CPU', 0, $hGUI)
			Case 'Cd-rom'
				MsgBox(0, 'selected', 'Тут пишем код для Cd-rom', 0, $hGUI)
			Case 'HDD'
				MsgBox(0, 'selected', 'Тут пишем код для HDD', 0, $hGUI)
			Case 'DDR'
				MsgBox(0, 'selected', 'Тут пишем код для DDR', 0, $hGUI)
		EndSwitch
	Else
		If $fChecked Then
			GUICtrlSetState($nComb, $GUI_DISABLE)
			$fChecked = False
		EndIf
	EndIf
EndFunc   ;==>_Func
 
Автор
nu3dell

nu3dell

Осваивающий
Сообщения
139
Репутация
24
madmasles, мне уже чекбокс не нужен, мне только HotKey нужен и все, и желательно просто адаптировать то что я выложил...
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
nu3dell,
Вы определитесь сначала, а потом сформулируйте то, что Вам надо.
 
Автор
nu3dell

nu3dell

Осваивающий
Сообщения
139
Репутация
24
madmasles Формулирую:
Этот код переделать, что бы при активации сразу сработал msgbox определенного элемента, но структуру кода сохронить
Код:
#include <GUIConstantsEx.au3>
#Include <ComboConstants.au3>
HotKeySet('1','_MyFunc')
Global $True=False

$hGUI = GUICreate('GUI окно', 150, 120)
$nComb = GUICtrlCreateCombo('', 10, 15, 110, 150)
GUICtrlSetData(-1, 'CPU|Cd-rom|HDD|DDR', 'CPU')
 GUICtrlSetState($nComb, $GUI_DISABLE)
GUISetState()

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

Func _MyFunc()    
    Switch @HotKeyPressed
        Case "1"
            $True= Not $True
            If $True = True Then 
             GUICtrlSetState($nComb, $GUI_ENABLE)
             While $True
    $msg = GUIGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $nComb
            $selected = GUICtrlRead($nComb)            
            Switch $selected
                Case "CPU"
                    MsgBox(0, "selected", "Тут пишем код для CPU")
                Case "Cd-rom"
                    MsgBox(0, "selected", "Тут пишем код для Cd-rom")
                Case "HDD"
                    MsgBox(0, "selected", "Тут пишем код для HDD")
                Case "DDR"
                    MsgBox(0, "selected", "Тут пишем код для DDR")
            EndSwitch   
    EndSwitch
WEnd
            Else
                GUICtrlSetState($nComb, $GUI_DISABLE)
            EndIf
    EndSwitch
EndFunc



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

Законный UP
 

ivsatel

Продвинутый
Сообщения
319
Репутация
84
nu3dell
Может так?:
Код:
#include <GUIConstantsEx.au3>

Global $fChecked, $aChecked[2] = [$GUI_ENABLE, $GUI_DISABLE]
HotKeySet('1', '_Func')

$hGUI = GUICreate('GUI окно', 150, 120)
$nComb = GUICtrlCreateCombo('', 10, 15, 110, 150)
GUICtrlSetData($nComb, 'CPU|Cd-rom|HDD|DDR', 'CPU')
$setst = GUICtrlSetState($nComb, $GUI_DISABLE)

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $hGUI
            GUICtrlSetState($nComb, $aChecked[BitAND(GUICtrlRead($nComb), $GUI_ENABLE)])
            _Func()
        Case $setst, $nComb
            _Func()
    EndSwitch
WEnd

Func _Func()
	GUICtrlSetState($nComb, $GUI_ENABLE)
    If GUICtrlSetState($nComb, $GUI_ENABLE) Then
            GUICtrlSetState($nComb, $GUI_ENABLE)
            $aChecked = True
        EndIf
        $sSelected = GUICtrlRead($nComb)
        Switch $sSelected
            Case 'CPU'
                MsgBox(0, 'selected', 'Тут пишем код для CPU', 0, $hGUI)
            Case 'Cd-rom'
                MsgBox(0, 'selected', 'Тут пишем код для Cd-rom', 0, $hGUI)
            Case 'HDD'
                MsgBox(0, 'selected', 'Тут пишем код для HDD', 0, $hGUI)
            Case 'DDR'
                MsgBox(0, 'selected', 'Тут пишем код для DDR', 0, $hGUI)
        EndSwitch
        If $aChecked Then
            GUICtrlSetState($nComb, $GUI_ENABLE)
            $aChecked = False
        EndIf
EndFunc   ;==>_Func
 
Автор
nu3dell

nu3dell

Осваивающий
Сообщения
139
Репутация
24
ну нужно что бы был тригер, как нажал первый раз то комобо стал $GUI_ENABLE, как нажал второй раз то $GUI_DISABLE
 

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Так:
Код:
#include <GUIConstantsEx.au3>

Global $fChecked, $aChecked[2] = [$GUI_ENABLE, $GUI_DISABLE], $nData[5] = [4,'CPU', 'Cd-rom', 'HDD', 'DDR']
HotKeySet('1', '_Func')

$hGUI = GUICreate('GUI окно', 150, 120)
$nComb = GUICtrlCreateCombo('', 10, 15, 110, 150)
GUICtrlSetData($nComb, 'CPU|Cd-rom|HDD|DDR', 'CPU')
$setst = GUICtrlSetState($nComb, $GUI_DISABLE)

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $setst, $nComb
            _Func()
    EndSwitch
WEnd

Func _Func()
    If GUICtrlSetState($nComb, $GUI_ENABLE) Then
            GUICtrlSetState($nComb, $GUI_ENABLE)
            $aChecked = True
        EndIf
        $sSelected = GUICtrlRead($nComb)
        Switch $sSelected
            Case 'CPU'
                MsgBox(0, 'selected', 'Тут пишем код для CPU', 0, $hGUI)
				GUICtrlSetData($nComb, $nData[2])
            Case 'Cd-rom'
                MsgBox(0, 'selected', 'Тут пишем код для Cd-rom', 0, $hGUI)
				GUICtrlSetData($nComb, $nData[3])
            Case 'HDD'
                MsgBox(0, 'selected', 'Тут пишем код для HDD', 0, $hGUI)
				GUICtrlSetData($nComb, $nData[4])
            Case 'DDR'
                MsgBox(0, 'selected', 'Тут пишем код для DDR', 0, $hGUI)
				GUICtrlSetData($nComb, $nData[1])
        EndSwitch
        If $aChecked Then
            GUICtrlSetState($nComb, $GUI_DISABLE)
            $aChecked = False
        EndIf
EndFunc   ;==>_Func
 
Автор
nu3dell

nu3dell

Осваивающий
Сообщения
139
Репутация
24
ivsatel к сожелению нет. Глянь как работает триггер тут http://autoit-script.ru/index.php?topic=11617.msg76173#msg76173
 
Верх