Показать полную графическую версию : [решено] Как реализовать в скрипте возможность автозаполнения
Добрый день! Дело вот в чем: когда в строке гугл вводишь начало слова, всплывает подсказка, где можно выбрать различные варианты продолжения слова/фразы. Как такую же вещь реализовать в скрипте? К примеру, как нужно дополнить нижеследующий скрипт, чтобы при вводе символа, с которого начинается хоть 1 элемент массива (цифр 1, 2, 3 или 4), всплывала подсказка с вариантом окончания (в подсказке должен содержаться сам элемент массива, то есть одно из 111, 222, 333, 444):
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $Array[4] = [111, 222, 333, 444]
$Form1 = GUICreate("Form1", 511, 137, 192, 124)
$Input1 = GUICtrlCreateInput("Введите что-нибудь", 144, 40, 145, 21)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Это называется автозаполнение.
См. в справке пример к функции _GUICtrlComboBox_AutoComplete.
Тему переименовал.
Я не совсем это имел в виду. Когда вводишь часть слова, под полем ввода должно появиться окно с различными вариантами продолжения (точь-в-точь как в гугле). _GUICtrlComboBox_AutoComplete заполняет поле, а не предлагает всевозможные варианты.
Вот чуточку подправленный тот же код, но теперь при вводе 1,2,3 или 4 должно появляться окошко с двумя вариантами продолжения:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $Array[8] = [111, 1111, 222, 2222, 333, 3333, 444, 4444]
$Form1 = GUICreate("Form1", 511, 137, 192, 124)
$Input1 = GUICtrlCreateInput("Введите что-нибудь", 144, 40, 145, 21)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
P.S. Такая же штука и в Scite всплывает, когда начинаешь вводить имя какой-нибудь встроенной функции.
Я не совсем это имел в виду. Когда вводишь часть слова, под полем ввода должно появиться окно с различными вариантами продолжения »
Вот примерно так (есть мелкие баги, на их исправление пока не хватило времени):
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIComboBox.au3>
;
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $aAutoComplete_Array[8] = ["abc", "абв", 111, 222, 333]
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $iSetAutoComplete = 0
$Form1 = GUICreate (http://www.autoitscript.com/autoit3/docs/functions/GUICreate.htm)("Form1", 511, 137, 192, 124)
$nCombo = GUICtrlCreateCombo (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateCombo.htm)("Введите что-нибудь", 140, 40, 140, 50)
$hCombo = GUICtrlGetHandle (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlGetHandle.htm)(-1)
$nCaseSense_CheckBox = GUICtrlCreateCheckbox (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateCheckbox.htm)("Учитывать регистр букв", 140, 15, -1, 15)
GUIRegisterMsg (http://www.autoitscript.com/autoit3/docs/functions/GUIRegisterMsg.htm)($WM_COMMAND, "WM_COMMAND")
GUISetState (http://www.autoitscript.com/autoit3/docs/functions/GUISetState.htm)(@SW_SHOW (http://www.autoitscript.com/autoit3/docs/macros.htm#@SW_SHOW))
While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
$nMsg = GUIGetMsg (http://www.autoitscript.com/autoit3/docs/functions/GUIGetMsg.htm)()
Switch (http://www.autoitscript.com/autoit3/docs/keywords.htm#Switch) $nMsg
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $GUI_EVENT_CLOSE
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
EndSwitch (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndSwitch)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iSetAutoComplete Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$iSetAutoComplete = 0
GUIRegisterMsg (http://www.autoitscript.com/autoit3/docs/functions/GUIRegisterMsg.htm)($WM_COMMAND, "")
$iCaseSense = Number (http://www.autoitscript.com/autoit3/docs/functions/Number.htm)(GUICtrlRead (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlRead.htm)($nCaseSense_CheckBox) = $GUI_CHECKED)
_GUICtrlCombo_SetAutoComplete($hCombo, $aAutoComplete_Array, $iCaseSense)
GUIRegisterMsg (http://www.autoitscript.com/autoit3/docs/functions/GUIRegisterMsg.htm)($WM_COMMAND, "WM_COMMAND")
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _GUICtrlCombo_SetAutoComplete($hCombo, ByRef (http://www.autoitscript.com/autoit3/docs/keywords.htm#ByRef) $avArray, $iCaseSense=0)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sEdit_Text = _GUICtrlComboBox_GetEditText($hCombo)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $sEdit_Text = "" Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(1, 0, 0)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $iEdit_Text_Len = StringLen (http://www.autoitscript.com/autoit3/docs/functions/StringLen.htm)($sEdit_Text)
_GUICtrlComboBox_ResetContent($hCombo)
_GUICtrlComboBox_SetEditText($hCombo, $sEdit_Text)
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 0 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) UBound (http://www.autoitscript.com/autoit3/docs/functions/UBound.htm)($avArray)-1
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) StringCompare (http://www.autoitscript.com/autoit3/docs/functions/StringCompare.htm)(StringLeft (http://www.autoitscript.com/autoit3/docs/functions/StringLeft.htm)($avArray[$i], $iEdit_Text_Len), $sEdit_Text, $iCaseSense) = 0 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) _
GUICtrlSetData (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlSetData.htm)($nCombo, $avArray[$i], "")
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) _GUICtrlComboBox_GetList($hCombo) <> "" Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
_GUICtrlComboBox_ShowDropDown($hCombo, True (http://www.autoitscript.com/autoit3/docs/keywords.htm#True))
_GUICtrlComboBox_SetEditText($hCombo, $sEdit_Text)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) WM_COMMAND($hWnd, $nMsg, $wParam, $lParam)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $nNotifyCode = BitShift (http://www.autoitscript.com/autoit3/docs/functions/BitShift.htm)($wParam, 16)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $nID = BitAND (http://www.autoitscript.com/autoit3/docs/functions/BitAND.htm)($wParam, 0xFFFF)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $hCtrl = $lParam
Switch (http://www.autoitscript.com/autoit3/docs/keywords.htm#Switch) $nID
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $nCombo
Switch (http://www.autoitscript.com/autoit3/docs/keywords.htm#Switch) $nNotifyCode
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $CBN_EDITCHANGE, $CBN_EDITUPDATE
$iSetAutoComplete = 1
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $CBN_SELENDOK, $CBN_CLOSEUP
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $CBN_KILLFOCUS, $CBN_SELENDCANCEL
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sEdit_Text = _GUICtrlComboBox_GetEditText($hCombo)
_GUICtrlComboBox_ResetContent($hCombo)
_GUICtrlComboBox_SetEditText($hCombo, $sEdit_Text)
EndSwitch (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndSwitch)
EndSwitch (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndSwitch)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $GUI_RUNDEFMSG
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)
Класс! Здорово работает!
Если можно, опишите вкратце принцип работы, а то сам никак не пойму)
Как можно убрать чувствительность к регистру при вводе на русском языке?
Как можно убрать чувствительность к регистру при вводе на русском языке? »
Поправил.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.