1 (изменено: MikeSh, 2016-05-16 08:55:35)

Тема: AHK: g-label на текстовом поле в GUI

Добрый день.
Столкнулся с такой неприятной штукой.
Есть GUI

  Gui, Add, Edit, w800 vGoodsSearch gGoodsSearch +Uppercase, Поиск товара
  Gui, Add, ListBox, w800 vGoodsChoice AltSubmit r10, |
  Gui, Add, Text, vWeightText w800 h150
  Gui, Add, CheckBox, vArt ys, По артикулу
  Gui, Add, CheckBox, vPLU, По PLU
  Gui, Add, Button, default w75 h23 , OK
  Gui, Show, , Поиск товара

Суть в том, чтобы при наборе текста в GoodsSearch, в GoodsChoice отображался результат, динамически.

Метка GoodsSearch содержит запрос к БД, который обрабатывается быстро, но видимо не достаточно быстро.
В результате получаю, что цифра\буква уже добавлена\убрана, а метка не сработала.

Как можно выйти из этой ситуации?
Сейчас обошёлся таймером, т.е. убрал g-метку и поставил поиск в SetTimer, но это мне не очень нравится...
Хотелось бы что-то вроде "укажи директиву, которая будет ставить запросы в очередь и обрабатывать их по порядку"

Спасибо.

"Единство,- возвестил оракул наших дней: -
Быть может спаяно железом лишь и кровью"…
Но мы попробуем спаять его любовью,-
А там увидим, что прочней…    (Ф. Тютчев)       Тут хорошая справка по vbs.

2

Re: AHK: g-label на текстовом поле в GUI

MikeSh пишет:

ставить запросы в очередь и обрабатывать их по порядку

Ну если запрос это так сказать "обычный" поиск, то таймер это не самая худшая идея.
Вводя \ удаляя каждый символ это ещё один запрос, и накопится их может много при быстром вводе.

Можно в метке Edit добавлять в массив запросы, запускать однократным
таймером (чтобы подпрограмма контрола была закончена и могла быть запущена во время обработки запроса в любой момент)
другую метку обработчик запросов, в ней после обработки удалять запрос из массива, и проверять осталось ли что ещё.

Но если главное это не пропустить последнее изменение в строке запроса, то наверное проще и производительнее по окончании обработки
просто сравнить строку до и после обработки.


Gui, Add, Edit, w800 vGoodsSearch gGoodsSearch +Uppercase
Gui, Show, y500, Поиск товара
Return

GoodsSearch:
	GuiControlGet, GoodsSearch 
	Loop 20
	{
		ToolTip % ">>>" GoodsSearch "<<<", 0, -200 + (A_Index - 1) * 10
		Sleep 100
	}
	GuiControlGet, CurGoodsSearch, , GoodsSearch
	If (CurGoodsSearch != GoodsSearch)
		Goto, GoodsSearch
	Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

3

Re: AHK: g-label на текстовом поле в GUI

Спасибо, остановился на таймере.
Портировал всё это дело с HTA, там несколько проще, зато других проблем больше.

"Единство,- возвестил оракул наших дней: -
Быть может спаяно железом лишь и кровью"…
Но мы попробуем спаять его любовью,-
А там увидим, что прочней…    (Ф. Тютчев)       Тут хорошая справка по vbs.