1

Тема: AHK: Предиктивный ввод текста в GUI

Здравствуйте.
Существует ли в ahk предиктивный ввод текста (т9)?
Это мне нужно в ComboBox`e, вместе с опцией Simple.

2

Re: AHK: Предиктивный ввод текста в GUI

Не слышал про такое в AutoHotkey. Разве что свой делать.

3 (изменено: SeaVodikendu, 2016-05-11 17:50:21)

Re: AHK: Предиктивный ввод текста в GUI

ypppu
Что-то подобное есть - это опции в ComboBox`e Sort и Simple, но почему-то оба вместе не работают.
Может я неверно ввожу?

Gui, Add, ComboBox, Sort, Simple vColorChoice, Red|Green|Blue|Black|White

4

Re: AHK: Предиктивный ввод текста в GUI

Работают вместе, но не дают искомого эффекта.

Gui, Add, ComboBox, Sort Simple vColorChoice, Red|Green|Blue|Black|White
GUI, Show

5 (изменено: SeaVodikendu, 2016-05-11 18:31:55)

Re: AHK: Предиктивный ввод текста в GUI

В DropDownList если установить опцию Sort, будет что-то более приближенное. Курсор будет следить за набором текста, но сам набор не отображается - вот это плохо.

6 (изменено: yalanne, 2016-05-12 20:34:15)

Re: AHK: Предиктивный ввод текста в GUI

list := "AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGray|DarkGrey|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGray|DarkSlateGrey|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGray|DimGrey|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gray|Grey|Green"

Gui, Add, ComboBox , HwndSearchT9 vCBT9 gSearch Sort r10 Simple , %list%

GUI, Show

return


Search:

GuiControlGet,CBT9

LengthCBT9 := StrLen(CBT9)

SendMessage, 0x14C, -1, &CBT9,,ahk_id %SearchT9% ;CB_FINDSTRING

IndexFinded := ErrorLevel

if (IndexFinded = -1) or GetKeyState("BS","p")
	return

SendMessage, 0x014E, % IndexFinded,  , , ahk_id %SearchT9%  ;CB_SETCURSEL

SendMessage, 0x0142, 0, %  (LengthCBT9 & 0xFFFF) | (0x64 << 16), , ahk_id %SearchT9% ; CB_SETEDITSEL

return

7

Re: AHK: Предиктивный ввод текста в GUI

yalanne, классная штука, хотелось бы видеть это в Коллекции!

8

Re: AHK: Предиктивный ввод текста в GUI

ypppu
Надо только косяки исправить.
Например через контекстное меню если попытаться удалить или вырезать частично выделенный текст то он не удалит его. Либо заменит на другой результат который начинается на ту же букву.
То есть нет такого же эффекта стирания как при backspeace.
http://i.imgur.com/Y0KD61g.gif
Полное же выделение и удаление описанное выше работает исправно.

9

Re: AHK: Предиктивный ввод текста в GUI

Можно своё контексное меню написать, в котором посылать delete.
Надо бы еще внести кнопку стирания {delete}.
И чтобы при написании текста, которого нету в списке - текст не стирался.

10 (изменено: serzh82saratov, 2016-05-14 21:33:40)

Re: AHK: Предиктивный ввод текста в GUI

Я бы такой вариант рассмотрел, всё таки привязка к Sort не очень правильно. А ещё лучше наверное ниже edit`а выводить список другим контролом. Также можно добавить свои правила поиска не полагаясь на CB_FINDSTRING.


Box1 := "BlanchedAlmond|DarkGreen|Grey|Beige|DarkViolet|FloralWhite|DeepPink|FireBrick|DarkTurquoise|Chartreuse|CornflowerBlue|Coral|Cyan|Gray|GhostWhite|DarkGoldenRod|Blue|DarkKhaki|DarkMagenta|DimGrey|Bisque|DodgerBlue|Crimson|Azure|DarkSeaGreen|DimGray|CadetBlue|DarkSlateGrey|DarkOliveGreen|BurlyWood|Aquamarine|DarkGray|Black|AntiqueWhite|Green|DarkRed|DarkSalmon|Chocolate|Aqua|DeepSkyBlue|DarkOrange|BlueViolet|ForestGreen|GoldenRod|DarkSlateBlue|DarkGrey|Brown|DarkBlue|Cornsilk|Fuchsia|DarkCyan|DarkOrchid|DarkSlateGray|Gold|Gainsboro|AliceBlue"
  
Gui, Add, ComboBox, gComboBox1 r10 Simple, % Box1
Gui, Show 
Return


ComboBox1(CtrlHwnd) {
	Global Box1
	Static Replace
	SendMessage, % 0x0147, 0, 0,, ahk_id %CtrlHwnd%  ;  CB_GETCURSEL 
	If !((CB_ERR := ErrorLevel) < 0 || CB_ERR = 0xffffffff)
		Return
	GuiControlGet, Edit, , %CtrlHwnd%
	If (Edit = "" && Replace)
	{
		GuiControl, , %CtrlHwnd%, % "|" Box1
		Return Replace := 0
	}
	GuiControl, -Redraw, %CtrlHwnd%
	SendMessage, 0x0146, 0, 0, , ahk_id %CtrlHwnd%  ;  CB_GETCOUNT 
	Loop, %ErrorLevel% 
		SendMessage, 0x0144, 0, , , ahk_id %CtrlHwnd%  ;  CB_DELETESTRING  
	Loop, Parse, Box1, |
		If (A_LoopField ~= "i)^\Q" Edit "\E.*$" && (Text := A_LoopField) != "") 
			SendMessage, 0x014A, 0, &Text , , ahk_id %CtrlHwnd%  ;  CB_INSERTSTRING 
	GuiControl, +Redraw, %CtrlHwnd%
	Replace := 1
} 
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

11

Re: AHK: Предиктивный ввод текста в GUI

Предиктивный — это не то же, что и "инкрементальный", уточняющийся по мере ввода? Сам я не смог настроить на работу из файла — будет ли так же быстро работать со списком в несколько десятков тысяч слов?

12

Re: AHK: Предиктивный ввод текста в GUI

serzh82saratov
а если поиск необходимо проводить, где A_loopfiled состоит не из одного слова, а несколько:


ГБОУ Школа № 1694 Ясенево имени П.М. Фитина
ГБПОУ "Воробьевы горы"
ГАПОУ ПК № 8 им. И.Ф. Павлова - spo-8@edu.mos.ru_id-12017
ГБПОУ КАТ № 9 -  spo-9@edu.mos.ru_id-11686

Данный код  обрезает часть A_loopfiled

13

Re: AHK: Предиктивный ввод текста в GUI

Box1 = 
(Join|
ГБОУ Школа № 1694 Ясенево имени П.М. Фитина
ГБПОУ "Воробьевы горы"
ГАПОУ ПК № 8 им. И.Ф. Павлова - spo-8@edu.mos.ru_id-12017
ГБПОУ КАТ № 9 -  spo-9@edu.mos.ru_id-11686
)
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui