PDA

Показать полную графическую версию : [решено] Как реализовать в скрипте возможность автозаполнения


evg64
02-10-2009, 15:40
Добрый день! Дело вот в чем: когда в строке гугл вводишь начало слова, всплывает подсказка, где можно выбрать различные варианты продолжения слова/фразы. Как такую же вещь реализовать в скрипте? К примеру, как нужно дополнить нижеследующий скрипт, чтобы при вводе символа, с которого начинается хоть 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

Creat0R
02-10-2009, 15:52
Это называется автозаполнение.

См. в справке пример к функции _GUICtrlComboBox_AutoComplete.

Тему переименовал.

evg64
02-10-2009, 16:06
Я не совсем это имел в виду. Когда вводишь часть слова, под полем ввода должно появиться окно с различными вариантами продолжения (точь-в-точь как в гугле). _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 всплывает, когда начинаешь вводить имя какой-нибудь встроенной функции.

Creat0R
02-10-2009, 17:28
Я не совсем это имел в виду. Когда вводишь часть слова, под полем ввода должно появиться окно с различными вариантами продолжения »
Вот примерно так (есть мелкие баги, на их исправление пока не хватило времени):

#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)

evg64
02-10-2009, 23:29
Класс! Здорово работает!
Если можно, опишите вкратце принцип работы, а то сам никак не пойму)

Как можно убрать чувствительность к регистру при вводе на русском языке?

Creat0R
03-10-2009, 20:07
Как можно убрать чувствительность к регистру при вводе на русском языке? »
Поправил.




© OSzone.net 2001-2012