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

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

Аватара для Creat0R

Must AutoIt


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

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


Цитата evg64:
Я не совсем это имел в виду. Когда вводишь часть слова, под полем ввода должно появиться окно с различными вариантами продолжения »
Вот примерно так (есть мелкие баги, на их исправление пока не хватило времени):

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

Global $aAutoComplete_Array[8] = ["abc", "абв", 111, 222, 333]
Global $iSetAutoComplete = 0

$Form1 = GUICreate("Form1", 511, 137, 192, 124)

$nCombo = GUICtrlCreateCombo("Введите что-нибудь", 140, 40, 140, 50)
$hCombo = GUICtrlGetHandle(-1)

$nCaseSense_CheckBox = GUICtrlCreateCheckbox("Учитывать регистр букв", 140, 15, -1, 15)

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

While 1
    $nMsg = GUIGetMsg()

    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch

    If $iSetAutoComplete Then
        $iSetAutoComplete = 0

        GUIRegisterMsg($WM_COMMAND, "")
        $iCaseSense = Number(GUICtrlRead($nCaseSense_CheckBox) = $GUI_CHECKED)
        _GUICtrlCombo_SetAutoComplete($hCombo, $aAutoComplete_Array, $iCaseSense)
        GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    EndIf
WEnd

Func _GUICtrlCombo_SetAutoComplete($hCombo, ByRef $avArray, $iCaseSense=0)
    Local $sEdit_Text = _GUICtrlComboBox_GetEditText($hCombo)
    If $sEdit_Text = "" Then Return SetError(1, 0, 0)

    Local $iEdit_Text_Len = StringLen($sEdit_Text)

    _GUICtrlComboBox_ResetContent($hCombo)
    _GUICtrlComboBox_SetEditText($hCombo, $sEdit_Text)

    For $i = 0 To UBound($avArray)-1
        If StringCompare(StringLeft($avArray[$i], $iEdit_Text_Len), $sEdit_Text, $iCaseSense) = 0 Then _
            GUICtrlSetData($nCombo, $avArray[$i], "")
    Next

    If _GUICtrlComboBox_GetList($hCombo) <> "" Then
        _GUICtrlComboBox_ShowDropDown($hCombo, True)
        _GUICtrlComboBox_SetEditText($hCombo, $sEdit_Text)
    EndIf
EndFunc

Func WM_COMMAND($hWnd, $nMsg, $wParam, $lParam)
    Local $nNotifyCode = BitShift($wParam, 16)
    Local $nID = BitAND($wParam, 0xFFFF)
    Local $hCtrl = $lParam

    Switch $nID
        Case $nCombo
            Switch $nNotifyCode
                Case $CBN_EDITCHANGE, $CBN_EDITUPDATE
                    $iSetAutoComplete = 1
                Case $CBN_SELENDOK, $CBN_CLOSEUP

                Case $CBN_KILLFOCUS, $CBN_SELENDCANCEL
                    Local $sEdit_Text = _GUICtrlComboBox_GetEditText($hCombo)
                    _GUICtrlComboBox_ResetContent($hCombo)
                    _GUICtrlComboBox_SetEditText($hCombo, $sEdit_Text)
            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


Последний раз редактировалось Creat0R, 03-10-2009 в 20:06.

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

Отправлено: 17:28, 02-10-2009 | #4