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

Показать сообщение отдельно

Аватара для Creat0R

Must AutoIt


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

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


Как то так:

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

Global $sDB_File = @ScriptDir & '\DB.dat'
Global $aDB = StringSplit(StringStripCR(FileRead($sDB_File)), @LF)

GUICreate('DB Auto Complete Example', 400, 300)
$iCombo = GUICtrlCreateCombo('', 20, 20, 360, 50)
$hCombo = GUICtrlGetHandle($iCombo)

_GUICtrlComboBox_BeginUpdate($hCombo)

For $i = 1 To $aDB[0]
    If $aDB[$i] Then
        _GUICtrlComboBox_AddString($hCombo, $aDB[$i])
    EndIf
Next

_GUICtrlComboBox_EndUpdate($hCombo)

$iSave_Bttn = GUICtrlCreateButton('Save', 20, 270, 70, 20)
$iDel_Bttn = GUICtrlCreateButton('Delete', 100, 270, 70, 20)

GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
GUISetState(@SW_SHOW)

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $iSave_Bttn
            _DB_Add(GUICtrlRead($iCombo), False)
        Case $iDel_Bttn
            _DB_Delete(GUICtrlRead($iCombo))
    EndSwitch
WEnd

Func _DB_Delete($sText)
    If Not $sText Then
        Return
    EndIf

    _GUICtrlComboBox_ResetContent($hCombo)

    Local $aTmp[$aDB[0] + 1]
    Local $hFile = FileOpen($sDB_File, 2)

    For $i = 1 To $aDB[0]
        If $aDB[$i] And $aDB[$i] <> $sText Then
            $aTmp[0] += 1
            $aTmp[$aTmp[0]] = $aDB[$i]

            FileWriteLine($hFile, $aDB[$i])
            _GUICtrlComboBox_AddString($hCombo, $aDB[$i])
        EndIf
    Next

    FileClose($hFile)

    ReDim $aTmp[$aTmp[0] + 1]
    $aDB = $aTmp
EndFunc

Func _DB_Add($sText, $fDuplicate = False)
    If Not $sText Then
        Return
    EndIf

    If Not $fDuplicate Then
        For $i = 1 To $aDB[0]
            If $aDB[$i] = $sText Then
                Return
            EndIf
        Next
    EndIf

    FileWriteLine($sDB_File, $sText)
    _GUICtrlComboBox_AddString($hCombo, $sText)
    _GUICtrlComboBox_SetEditText($hCombo, '')

    $aDB[0] += 1
    ReDim $aDB[$aDB[0] + 1]
    $aDB[$aDB[0]] = $sText
EndFunc

Func _Edit_Changed()
    _GUICtrlComboBox_AutoComplete($iCombo)
EndFunc

Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg

    Local $hWndCombo = $hCombo
    Local $hWndFrom = $lParam

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

    Switch $hWndFrom
        Case $iCombo, $hWndCombo
            Switch $iCode
                Case $CBN_EDITCHANGE
                    _Edit_Changed()
            EndSwitch
    EndSwitch

    Return $GUI_RUNDEFMSG
EndFunc

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

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

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

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

Отправлено: 22:27, 22-04-2019 | #5