Herb191 Posted October 24, 2014 Share Posted October 24, 2014 (edited) I would like to create autocomplete drop down box that works in a Rich Edit control something similar to the one in SciTE. So each new word would give a list of suggestions and remove any words from the list that were not relevant. _GUICtrlComboBox_AutoComplete() won’t work because it creates a input box. I can't come up with any solutions that I like to make this work. Any suggestions would be greatly appreciated. Thanks Edited October 24, 2014 by Herb191 Link to comment Share on other sites More sharing options...
step887 Posted October 24, 2014 Share Posted October 24, 2014 I have not tested, but have you checked out: '?do=embed' frameborder='0' data-embedContent>> Link to comment Share on other sites More sharing options...
Herb191 Posted October 24, 2014 Author Share Posted October 24, 2014 I have not tested, but have you checked out: '?do=embed' frameborder='0' data-embedContent>> I have. It is very close to what I would like to do but I need the option of selecting from multiple words that are close in spelling. Link to comment Share on other sites More sharing options...
Herb191 Posted October 27, 2014 Author Share Posted October 27, 2014 Well this is what I came up with. Any constructive criticism welcome. expandcollapse popup#include <GUIConstantsEx.au3> #include <WinAPI.au3> #include <WindowsConstants.au3> #include <GuiRichEdit.au3> #include <GuiListBox.au3> Global $iStart = 0, $iEnd = 0, $iIndex = 0 Dim $aWordList[13] $aWordList[0] = "AAAAAA" $aWordList[1] = "AAAAAB" $aWordList[2] = "AAAABB" $aWordList[3] = "AAABBB" $aWordList[4] = "AABBBB" $aWordList[5] = "BBBBBB" $aWordList[6] = "CCCCCCC" $aWordList[7] = "CCDDDD" $aWordList[8] = "DDDDDD" $aWordList[9] = "DDAAAA" $aWordList[10] = "ABCDE" $aWordList[11] = "EDBA" $aWordList[12] = "VVVVVVV" $MainGui = GUICreate("Test", 400, 296) $hRichEdit = _GUICtrlRichEdit_Create($MainGui, 'Some text', 5, 5, 390, 220, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL)) _GUICtrlRichEdit_SetModified($hRichEdit, False) $hList = GUICtrlCreateList("test", 0, 0, 100, 100) For $i = 0 To UBound($aWordList, 1) - 1 GUICtrlSetData($hList, $aWordList[$i] & "|") Next ControlHide($MainGui, "", $hList) $bListHidden = True GUISetState(@SW_SHOW) Do If _GUICtrlRichEdit_IsModified($hRichEdit) Then ShowAndUpdateList() EndIf Until GUIGetMsg() = $GUI_EVENT_CLOSE Func ShowAndUpdateList() $array = _GUICtrlRichEdit_GetSel($hRichEdit) ;finds last edited text $iStart = _GUICtrlRichEdit_GetCharPosOfPreviousWord($hRichEdit, $array[0]) $iEnd = _GUICtrlRichEdit_GetCharPosOfNextWord($hRichEdit, $array[0]) $sText = _GUICtrlRichEdit_GetTextInRange($hRichEdit, $iStart, $iEnd) ;find the index of the string to seach for $iIndex = _GUICtrlListBox_FindString($hList, $sText) ;if string not found hide list If $iIndex < 0 Then ControlHide($MainGui, "", $hList) $bListHidden = True HotkeyOn(False) Return "" EndIf Select Case $sText <> "" And $bListHidden = True $aListPos = _GUICtrlRichEdit_GetXYFromCharPos($hRichEdit, $iStart) ControlMove($MainGui, "", $hList, $aListPos[0], $aListPos[1] + 20) _GUICtrlRichEdit_SetModified($hRichEdit, False) _GUICtrlListBox_SetCurSel($hList, 0) ControlShow($MainGui, "", $hList) $bListHidden = False HotkeyOn(True) _GUICtrlListBox_SetCurSel($hList, $iIndex) _WinAPI_RedrawWindow($MainGui) Case $bListHidden = False ControlHide($MainGui, "", $hList) $bListHidden = True HotkeyOn(False) _WinAPI_RedrawWindow($MainGui) Case Else _GUICtrlListBox_SetCurSel($hList, $iIndex) EndSelect EndFunc ;==>ShowAndUpdateList Func HotkeyOn($bOn) If $bOn Then HotKeySet("{UP}", "ListUp") HotKeySet("{DOWN}", "ListDown") HotKeySet("{ENTER}", "ListEnter") Else HotKeySet("{UP}") HotKeySet("{DOWN}") HotKeySet("{ENTER}") EndIf EndFunc ;==>HotkeyOn Func ListUp() If $iIndex > 0 Then $iIndex = $iIndex - 1 _GUICtrlListBox_SetCurSel($hList, $iIndex) EndFunc ;==>ListUp Func ListDown() $iIndex = $iIndex + 1 _GUICtrlListBox_SetCurSel($hList, $iIndex) EndFunc ;==>ListDown Func ListEnter() _GUICtrlRichEdit_SetSel($hRichEdit, $iStart, $iEnd) $sSelText = _GUICtrlListBox_GetText($hList, _GUICtrlListBox_GetCurSel($hList)) _GUICtrlRichEdit_ReplaceText($hRichEdit, $sSelText & " ") EndFunc ;==>ListEnter Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now