|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Обработка событий в GUICtrlCreateCombo |
|
|
[решено] Обработка событий в GUICtrlCreateCombo
|
Пользователь Сообщения: 87 |
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 исходя из того что было выделенно в выпадающем списке, менялись данные идущего ниже списка? Тоесть если выделен Русский то все остается как есть, а если выделить Eanglish там оборазится например "File managers" и "Archivators"?? |
|
Отправлено: 22:16, 28-08-2009 |
Старожил Сообщения: 307
|
Профиль | Отправить 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 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить 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 ![]() P.S В названии темы опечатка? возможно не GuiCtrlCreateLabel, а GUICtrlCreateCombo? |
------- Последний раз редактировалось Creat0R, 29-08-2009 в 02:39. Причина: Изменил пример Отправлено: 23:47, 28-08-2009 | #3 |
Пользователь Сообщения: 87
|
Профиль | Отправить PM | Цитировать Ах! Действительно Комбо
![]() ![]() |
Отправлено: 00:36, 29-08-2009 | #4 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Belfigor, Так что с примером, он помог? или я не правильно понял задачу? Сомниваюсь что и beve угадал
![]() |
|
------- Отправлено: 01:17, 29-08-2009 | #5 |
Пользователь Сообщения: 87
|
Профиль | Отправить PM | Цитировать Несовсем, хочу сделать так чтобы когда пользователь выбирает другой язык на месте прежних двух пунктов в нижнем списке появлялись две совершенно другие надписи, тоесть если выбран Русский, то во втором списке пользователь может выбрать например строки с названиями "архиваторы" и "файловые менеджеры", если же выбран английский, пользователь уже не видит варианты "архиваторы" и "файловые менеджеры", после выбора "Английский" во втором списке ему предоставляется возможность выбрать только из например "Браузеры" и "Графические редакторы". Сижу вот немогу понять как это делается. В гиу я полный 0
![]() |
Отправлено: 01:43, 29-08-2009 | #6 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить 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 |
|
------- Последний раз редактировалось Creat0R, 29-08-2009 в 02:56. Отправлено: 02:40, 29-08-2009 | #7 |
Пользователь Сообщения: 87
|
Профиль | Отправить 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 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Belfigor:
Цитата Belfigor:
Цитата Belfigor:
Цитата Belfigor:
Цитата Belfigor:
Я бы и сам был рад такому функционалу в AutoIt. |
|||||
------- Отправлено: 04:03, 29-08-2009 | #9 |
Пользователь Сообщения: 87
|
Профиль | Отправить PM | Цитировать Спасибо за ответы. Надеюсь завтра смогу окончательно разобраться в комбо конструкциях
![]() |
Отправлено: 04:17, 29-08-2009 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Сбор информации с сайта и ее обработка. | 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 |
|