Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Обработка событий в GUICtrlCreateCombo

Ответить
Настройки темы
[решено] Обработка событий в GUICtrlCreateCombo

Аватара для Belfigor

Пользователь


Сообщения: 87
Благодарности: 11

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
GUICtrlCreateLabel ("Язык:", 10, 10, 50)
GUICtrlCreateCombo("Русский", 100, 7,150) ; create first item
GUICtrlSetData(-1, "English", "Русский") ; add other item snd set a new default

GUICtrlCreateLabel ("Тип программы:", 10, 33, 100)
GUICtrlCreateCombo("Архиваторы", 100, 30,150) ; create first item
GUICtrlSetData(-1, "Файловые менеджеры", "Архиваторы") ; add other item snd set a new default
Я создаю два выпадающих списка, как мне сделать чтобы далее в этом цикле:
Код: Выделить весь код
    While 1
        $msg = GUIGetMsg()
        Select
		Case $msg = $GUI_EVENT_CLOSE
			ExitLoop
	EndSelect
    WEnd
исходя из того что было выделенно в выпадающем списке, менялись данные идущего ниже списка?
Тоесть если выделен Русский то все остается как есть, а если выделить Eanglish там оборазится например "File managers" и "Archivators"??

Отправлено: 22:16, 28-08-2009

 

Аватара для beve

Старожил


Сообщения: 307
Благодарности: 137

Профиль | Отправить PM | Цитировать


Вот пример Мастера:Ссылка
Тебе нужно создать глобальную переменную, которая будет хранить название языка, а далее делаеш в нужном месте (в начале соответствующего Case) проверку на выбранный язык, и в зависимости уже от этого следующие действия.
Каждый же шаг будеш прописывать примерно так:
Код: Выделить весь код
;Step 2 Eng
$Input_Step2Eng = GUICtrlCreateInput("Some input", 10, 20, 180, 20) 
$CheckBox_Step2Eng = GUICtrlCreateCheckbox("Some checkbox", 10, 50) 

;Step 2 Rus
$Input_Step2Rus = GUICtrlCreateInput("Некоторый инпут", 10, 20, 180, 20) 
$CheckBox_Step2Rus = GUICtrlCreateCheckbox("Некоторый чекбокс", 10, 50) 

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:30, 28-08-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <GUIComboBoxEx.au3>
#include <WindowsConstants.au3>
;

Global $aLangs_Data[3][3] = _
    [ _
        [2, ""], _
        ["English", "Браузеры|Графические редакторы", "Браузеры"], _
        ["Русский", "Архиваторы|Файловые менеджеры", "Архиваторы"] _
    ]

$hGUI = GUICreate("Test Script")

GUICtrlCreateLabel("Язык:", 10, 10, 50)
$nCombo_1 = GUICtrlCreateCombo($aLangs_Data[2][0], 100, 7, 150, 30, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST))
GUICtrlSetData(-1, $aLangs_Data[1][0], $aLangs_Data[2][0]) ; add other item snd set a new default

GUICtrlCreateLabel("Тип программы:", 10, 33, 100)
$nCombo_2 = GUICtrlCreateCombo("", 100, 30, 150, 30, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST)) ; create first item
GUICtrlSetData(-1, $aLangs_Data[2][1], $aLangs_Data[2][2]) ;add other item snd set a new default

GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

GUISetState()

While GUIGetMsg() <> $GUI_EVENT_CLOSE
WEnd

Func WM_COMMAND($hWndGUI, $nMsgID, $wParam, $lParam)
    If Not BitAND(WinGetState($hWndGUI), 2) Then Return $GUI_RUNDEFMSG

    Local $iIDFrom = BitAND($wParam, 0xFFFF) ; Low Word
    Local $iCode = BitShift($wParam, 16) ; Hi Word

    Switch $iIDFrom
        Case $nCombo_1
            Switch $iCode
                Case $CBN_SELCHANGE
                    Local $sComboData = GUICtrlRead($nCombo_1)
                    Local $sComboIndex = ControlCommand($hWndGUI, "", $nCombo_1, "FindString", $sComboData)

                    For $i = 1 To $aLangs_Data[0][0]
                        If $aLangs_Data[$i][0] = $sComboData Then
                            GUICtrlSetData($nCombo_2, "")
                            GUICtrlSetData($nCombo_2, $aLangs_Data[$i][1], $aLangs_Data[$i][2])

                            ExitLoop
                        EndIf
                    Next
            EndSwitch
    EndSwitch

    Return $GUI_RUNDEFMSG
EndFunc
На будущее, выкладывайте рабочие примеры, мне пришлось добавлять инклюды и GUICreate, не хорошо

P.S
В названии темы опечатка? возможно не GuiCtrlCreateLabel, а GUICtrlCreateCombo?

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Последний раз редактировалось Creat0R, 29-08-2009 в 02:39. Причина: Изменил пример

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:47, 28-08-2009 | #3


Аватара для Belfigor

Пользователь


Сообщения: 87
Благодарности: 11

Профиль | Отправить PM | Цитировать


Ах! Действительно Комбо . В следующий раз выложу готовый пример с ошибками

Отправлено: 00:36, 29-08-2009 | #4


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Belfigor, Так что с примером, он помог? или я не правильно понял задачу? Сомниваюсь что и beve угадал

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 01:17, 29-08-2009 | #5


Аватара для Belfigor

Пользователь


Сообщения: 87
Благодарности: 11

Профиль | Отправить PM | Цитировать


Несовсем, хочу сделать так чтобы когда пользователь выбирает другой язык на месте прежних двух пунктов в нижнем списке появлялись две совершенно другие надписи, тоесть если выбран Русский, то во втором списке пользователь может выбрать например строки с названиями "архиваторы" и "файловые менеджеры", если же выбран английский, пользователь уже не видит варианты "архиваторы" и "файловые менеджеры", после выбора "Английский" во втором списке ему предоставляется возможность выбрать только из например "Браузеры" и "Графические редакторы". Сижу вот немогу понять как это делается. В гиу я полный 0

Отправлено: 01:43, 29-08-2009 | #6


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата Belfigor:
Несовсем »
Я поправил свой пример выше. Теперь все данные хранятся в двухмерном массиве, что упрощает добавление новых записей.

А вообще можно и само событие проверять, необязательно регистрировать WM_COMMAND:

Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <GUIComboBoxEx.au3>
#include <WindowsConstants.au3>
;

Global $iTotal_Elmnts = 2 ;Обязательно указать кол-во элементов в массиве перед добавление/удалением строки

Global $aLangs_Data[$iTotal_Elmnts+1][3] = _
    [ _
        [$iTotal_Elmnts, 2, ""], _ ;2-йка это язык по умолчанию в списке ниже
        ["English", "Браузеры|Графические редакторы", "Браузеры"], _ ;Третьий параметр это строка по умолчанию из списка
        ["Русский", "Архиваторы|Файловые менеджеры", "Архиваторы"] _
    ]

Global $iDefault_Lang = $aLangs_Data[0][1]
Global $sDefault_Lang = $aLangs_Data[$iDefault_Lang][0]

$hGUI = GUICreate("Test Script")

GUICtrlCreateLabel("Язык:", 10, 10, 50)
$nCombo_1 = GUICtrlCreateCombo("", 100, 7, 150, 30, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST))

For $i = 1 To $aLangs_Data[0][0]
    GUICtrlSetData(-1, $aLangs_Data[$i][0], $sDefault_Lang)
Next

GUICtrlCreateLabel("Тип программы:", 10, 33, 100)
$nCombo_2 = GUICtrlCreateCombo("", 100, 30, 150, 30, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST))
GUICtrlSetData(-1, $aLangs_Data[$iDefault_Lang][1], $aLangs_Data[$iDefault_Lang][2])

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $nCombo_1
            Local $sComboData = GUICtrlRead($nCombo_1)
            Local $sComboIndex = ControlCommand($hGUI, "", $nCombo_1, "FindString", $sComboData)

            For $i = 1 To $aLangs_Data[0][0]
                If $aLangs_Data[$i][0] = $sComboData Then
                    GUICtrlSetData($nCombo_2, "")
                    GUICtrlSetData($nCombo_2, $aLangs_Data[$i][1], $aLangs_Data[$i][2])

                    ExitLoop
                EndIf
            Next
    EndSwitch
WEnd

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Последний раз редактировалось Creat0R, 29-08-2009 в 02:56.

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:40, 29-08-2009 | #7


Аватара для Belfigor

Пользователь


Сообщения: 87
Благодарности: 11

Профиль | Отправить PM | Цитировать


Очччень сложная конструкция

В хелпе приводится пример с использованием Select Case, в твоем примере используется Switch Case.
Для использования Select в кейсах надо проверять равны ли переменные заданным данным. И вот я хотел узнать можно ли в данном случае использовать Select Case и как вот эта строка:
Case $nCombo_1
Будет выглядеть в конструкции Select Case. К чему ее надо будет приравнивать при написании условия?

И в своем примере ты используешь GUICtrlRead. Это и есть та команда которая возвращает значение выбранного в данный момент пункта в выпадающем листе?


В принципе работы конструкции вроде бы разобрался, но вопросы про свич и селект так и остаются в силе.

Еще возник вопрос не по теме но все же задам:
Могу ли я узнать с помощью какой-нибудь команды имя функции которая выполняется в данный момент?

Тоесть например
Func 1()
MsgBox(0,'',GetFuncName()) ;Ну или что-нибудь в этом роде? Хочется чтобы Меседж бокс вывел название исполяемой в данный момент функции, без всяких дополнительных заморочек.
EndFunc

Последний раз редактировалось Belfigor, 29-08-2009 в 03:44.


Отправлено: 03:02, 29-08-2009 | #8


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата Belfigor:
К чему ее надо будет приравнивать при написании условия? »
К $nMsg от GUIGetMsg().

Цитата Belfigor:
GUICtrlRead. Это и есть та команда которая возвращает значение выбранного в данный момент пункта в выпадающем листе? »
Да.

Цитата Belfigor:
вопросы про свич и селект так и остаются в силе »
Полные ответы на них есть в справке.

Цитата Belfigor:
Могу ли я узнать с помощью какой-нибудь команды имя функции которая выполняется в данный момент? »
Нет, без...
Цитата Belfigor:
дополнительных заморочек »
никак.
Я бы и сам был рад такому функционалу в AutoIt.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 04:03, 29-08-2009 | #9


Аватара для Belfigor

Пользователь


Сообщения: 87
Благодарности: 11

Профиль | Отправить PM | Цитировать


Спасибо за ответы. Надеюсь завтра смогу окончательно разобраться в комбо конструкциях

Отправлено: 04:17, 29-08-2009 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Обработка событий в GUICtrlCreateCombo

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Сбор информации с сайта и ее обработка. Medic84 AutoIt 16 18-08-2010 12:08
Delphi - [решено] Обработка StringGrid noname_06 Программирование и базы данных 5 19-01-2009 16:39
C/C++ - [решено] Обработка сообщений в Visual C++ gustav21 Программирование и базы данных 1 02-09-2008 19:01
[решено] Скриптовая обработка файлов dmon_s Программирование в *nix 3 31-08-2007 02:11
*Решено* | Обработка массивов в С++ Shad0VV Программирование и базы данных 7 15-10-2005 19:59




 
Переход