![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] история в GUICtrlCreateCombo |
|
[решено] история в GUICtrlCreateCombo
|
Пользователь Сообщения: 74 |
Доброго дня!
Можно ли хранить историю введенных имен в поле GUICtrlCreateCombo, и при запуске утилиты загружать из истории данные (например имена ПК) ? на скриншоте пример как это выглядит. |
|
Отправлено: 08:34, 24-04-2013 |
Старожил Сообщения: 265
|
Профиль | Отправить PM | Цитировать Да, можно.
|
Отправлено: 08:53, 24-04-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 74
|
Профиль | Отправить PM | Цитировать отлично!)
Как это сделать, подскажи? |
Отправлено: 11:42, 24-04-2013 | #3 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать #include <GUIConstantsEx.au3> #include <GUIComboBox.au3> $sConfig = @ScriptDir & '\Config.ini' $sHistory = IniRead($sConfig, 'Main', 'History', '') $hGUI = GUICreate("Test Script", 300, 200) $iCombo = GUICtrlCreateCombo("", 20, 40, 260, 60) GUICtrlSetData($iCombo, $sHistory) $iAddItem_Bttn = GUICtrlCreateButton('Add', 20, 70, 70, 20) GUISetState(@SW_SHOW, $hGUI) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE $sHistory = _GUICtrlComboBox_GetList($iCombo) IniWrite($sConfig, 'Main', 'History', $sHistory) Exit Case $iAddItem_Bttn $sItem = GUICtrlRead($iCombo) If $sItem <> '' Then _GUICtrlComboBox_AddString($iCombo, $sItem) _GUICtrlComboBox_SetEditText($iCombo, '') GUICtrlSetState($iCombo, $GUI_FOCUS) EndIf EndSwitch WEnd |
------- Отправлено: 12:33, 24-04-2013 | #4 |
Пользователь Сообщения: 74
|
Профиль | Отправить PM | Цитировать Мой вопрос решен, большое спасибо!
|
|
Отправлено: 13:08, 24-04-2013 | #5 |
Старожил Сообщения: 265
|
Профиль | Отправить PM | Цитировать support23, могу только предложить выковыривать из программ JumpReg и TextReplace, особенность - посде добавления очередного пункта, если он уже есть в списке, то перемещается к верху. Выбор из списка перемещает пункт к верху. Превышение определённого количества пунктов удаляет последний в списке. Алгоритм прост, после нажатия Enter или любого события подтверждающего, что ввод окончен происходит очистка ComboBox, а список пунктов хранящийся в переменной подвергается обработке по условию указанному выше и результат применяется к ComboBox.
Вот #include <GUIConstantsEx.au3> #include <GuiComboBox.au3> $sConfig = @ScriptDir & '\Config.ini' $sHistory = IniRead($sConfig, 'Main', 'History', '') $iLimit = 5 $hGUI = GUICreate("Пример, История в Combo", 300, 200) $iCombo = GUICtrlCreateCombo('', 20, 40, 260, -1) If $sHistory Then GUICtrlSetData($iCombo, $sHistory, StringRegExpReplace($sHistory, '(.*?)\|.*|(.*?)', '\1')) $iAddItem_Btn = GUICtrlCreateButton('Добавить', 20, 70, 70, 20) GUISetState() While 1 Switch GUIGetMsg() Case $iAddItem_Btn _Combo_AddToHistory($iCombo, GUICtrlRead($iCombo), $sHistory, $iLimit) Case $GUI_EVENT_CLOSE $sHistory = _GUICtrlComboBox_GetList($iCombo) IniWrite($sConfig, 'Main', 'History', $sHistory) Exit EndSwitch WEnd ; Добавляет пункт в историю Func _Combo_AddToHistory($iCombo, $sAdd, ByRef $sHistory, $iLimit) If Not $sAdd Then Return If Not $sHistory Then $sHistory = $sAdd GUICtrlSetData($iCombo, $sHistory, $sHistory) Return EndIf ; Удаляем элемент из списка, если он существует в нём $tmp = StringReplace('|' & $sHistory & '|', '|' & $sAdd & '|', '|') If @extended Then $sHistory = StringTrimLeft(StringTrimRight($tmp, 1), 1) ; Добавляем элемент $sHistory = $sAdd & '|' & $sHistory ; Если число элементов превышает определённый лимит, то отрезаем крайние справа StringReplace($sHistory, '|', '') If @extended > $iLimit - 1 Then ; Получаем позицию обрезки и обрезаем $sHistory = StringLeft($sHistory, StringInStr($sHistory, '|', 0, $iLimit) - 1) EndIf GUICtrlSendMsg($iCombo, $CB_RESETCONTENT, 0, 0) ; удаляем контент в Combo GUICtrlSetData($iCombo, $sHistory, StringRegExpReplace($sHistory, '(.*?)\|.*', '\1')) ; Вставляем контент ; GUICtrlSetState($iCombo, $GUI_FOCUS) ; ставим фокус в Combo, если требуется EndFunc ;==>_AddedHistory #include <GUIConstantsEx.au3> #include <GuiComboBox.au3> $sConfig = @ScriptDir & '\Config.ini' $sHistory = IniRead($sConfig, 'Main', 'History', '') $iLimit = 5 $hGUI = GUICreate("Пример, История в Combo", 300, 200) $iCombo = GUICtrlCreateCombo('', 20, 40, 260, -1) If $sHistory Then GUICtrlSetData($iCombo, $sHistory, StringRegExpReplace($sHistory, '(.*?)\|.*|(.*?)', '\1')) $iAddItem_Btn = GUICtrlCreateButton('Добавить', 20, 70, 70, 20) GUISetState() While 1 Switch GUIGetMsg() Case $iAddItem_Btn _Combo_AddToHistory($iCombo, GUICtrlRead($iCombo), $sHistory, $iLimit) Case $GUI_EVENT_CLOSE $sHistory = _GUICtrlComboBox_GetList($iCombo) IniWrite($sConfig, 'Main', 'History', $sHistory) Exit EndSwitch WEnd ; Добавляет пункт в историю Func _Combo_AddToHistory($iCombo, $sAdd, ByRef $sHistory, $iLimit) If Not $sAdd Then Return If Not $sHistory Then $sHistory = $sAdd GUICtrlSetData($iCombo, $sHistory, $sHistory) Return EndIf $iIndex = _GUICtrlComboBox_FindStringExact($iCombo, $sAdd) ; поиск строки, если такая уже существует в истории If $iIndex <> -1 Then _GUICtrlComboBox_DeleteString($iCombo, $iIndex) ; удалить если существует _GUICtrlComboBox_InsertString($iCombo, $sAdd, 0) ; добавляет строку к начало $iCount = _GUICtrlComboBox_GetCount($iCombo) ; Количество пунктов If $iCount > $iLimit Then ; если больше лимита, то удаляем For $i = $iLimit To $iCount + 1 _GUICtrlComboBox_DeleteString($iCombo, $i) Next EndIf ; GUICtrlSetState($iCombo, $GUI_FOCUS) ; ставим фокус в Combo, если требуется EndFunc ;==>_AddedHistory |
Последний раз редактировалось AZJIO, 24-04-2013 в 23:07. Отправлено: 17:20, 24-04-2013 | #6 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
История | Phoenix | Флейм | 0 | 07-11-2012 10:40 | |
Разное - После перезагрузки очищается история IE, история команд в диалоговом окне Выполнить. | vlad20 | Microsoft Windows 2000/XP | 13 | 22-03-2012 16:57 | |
Северная история 1.0 | OSZone Software | Новости программного обеспечения | 0 | 08-11-2011 12:30 | |
[решено] Обработка событий в GUICtrlCreateCombo | Belfigor | AutoIt | 11 | 29-08-2009 16:45 | |
MSFT SQL Server - история о MSSQL | ViNYL_MANiAC | Программирование и базы данных | 4 | 07-08-2006 12:34 |
|