Имя пользователя:
Пароль:
 | Правила  

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

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

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


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

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


Изображения
Тип файла: png 2013.04.24_08h21m47s_015_.png
(3.2 Kb, 20 просмотров)
Доброго дня!
Можно ли хранить историю введенных имен в поле GUICtrlCreateCombo, и при запуске утилиты загружать из истории данные (например имена ПК) ?
на скриншоте пример как это выглядит.

Отправлено: 08:34, 24-04-2013

 

Аватара для AZJIO

Старожил


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

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


Да, можно.

Отправлено: 08:53, 24-04-2013 | #2



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

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


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


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

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


отлично!)
Как это сделать, подскажи?

Отправлено: 11:42, 24-04-2013 | #3


Аватара для Creat0R

Must AutoIt


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

Профиль | Сайт | Отправить 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

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

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

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

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

Отправлено: 12:33, 24-04-2013 | #4


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


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

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


Мой вопрос решен, большое спасибо!

Отправлено: 13:08, 24-04-2013 | #5


Аватара для AZJIO

Старожил


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

Профиль | Отправить 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
вариант 2
Код: Выделить весь код
#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



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
История 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




 
Переход