1

Тема: AHK: Инкрементальный поиск в GUI

Доброго времени суток. Как в таком скрипте разбить вхождения в местах табуляции на три колонки и возможностью поиска по ним, а не как сейчас в общей колонке? Будет ли в таком формате скрипт быстро срабатывать на примерах до 2-х тысяч строк?

#NoEnv
SendMode, Input
SetBatchLines, -1
#SingleInstance Force
Process, Priority,, High

Box1 =
(
Östnyland	ГЗТ	3356
АиФ Карелия (Петрозаводск)	ГЗТ	0346
АиФ Кострома	ГЗТ	0326
АиФ Магадан	ГЗТ	0333
АиФ Минск	ГЗТ	0336
АиФ Мурманск	ГЗТ	0337
АиФ Петербург (Санкт-Петербург)	ГЗТ	0347
АиФ Томск	ГЗТ	0357
АиФ Юг (Краснодар)	ГЗТ	0327
АиФ Ярославль	ГЗТ	0370
АиФ в Бурятии (Улан-Уде)	ГЗТ	0363
АиФ на Дону (Ростов)	ГЗТ	0349
АиФ на Енисее (Красноярск)	ГЗТ	0328
Аргументы и Факты (Москва)	ГЗТ	0002
Белорусская военная газета	ГЗТ	0233
Ваше здоровье	ГЗТ	0261
Вести	ГЗТ	0387
Витьбичи	ГЗТ	0262
Газета по-українські	ГЗТ	0375
Горизонт	ГЗТ	0196
Гудок	ГЗТ	0085
День (рус.)	ГЗТ	0197
День (укр.)	ГЗТ	0230
Жизнь	ГЗТ	0210
Известия	ГЗТ	0039
Коммерсантъ – Волгоград	ГЗТ	0073
Коммерсантъ – Воронеж	ГЗТ	0074
Коммерсантъ – Екатеринбург	ГЗТ	0062
Коммерсантъ – Иркутск	ГЗТ	0017
Коммерсантъ – Казань	ГЗТ	0063
Коммерсантъ – Красноярск	ГЗТ	0065
)

Gui, Add, ComboBox, vComboBox1 gComboBox1 w550 h300 Simple, % Box1 ; r10
Menu, MyContextMenu, Default, Открыть
Gui, Show, AutoSize
Return

GuiContextMenu:
if A_GuiControl <> ComboBox1
    return
Menu, MyContextMenu, Show, %A_GuiX%, %A_GuiY%
return

GuiClose:
gui, submit, nohide
ExitApp
return

ComboBox1(CtrlHwnd) {
	Global Box1
	Static Replace
	SendMessage, % 0x0147, 0, 0,, ahk_id %CtrlHwnd%  ;  CB_GETCURSEL 

	if A_GuiEvent = DoubleClick ;!!
		GoSub, ContextOpenFile

	If !((CB_ERR := ErrorLevel) < 0 || CB_ERR = 0xffffffff)
		Return
	GuiControlGet, Edit, , %CtrlHwnd%
	If (Edit = "" && Replace)
	{
		GuiControl, , %CtrlHwnd%, % "`n" 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, `n
		If (A_LoopField ~= "i)\Q" Edit "\E.*$" && (Text := A_LoopField) != "") 
			SendMessage, 0x014A, 0, &Text , , ahk_id %CtrlHwnd%  ;  CB_INSERTSTRING 
	GuiControl, +Redraw, %CtrlHwnd%
	Replace := 1
} 
Return

2

Re: AHK: Инкрементальный поиск в GUI

В том виде, как у вас скрипт выложен сейчас его невозможно запустить:

Error:  Target label does not exist.

Specifically: ContextOpenFile

Line#
052: Return
055: Gui,submit,nohide
056: ExitApp
057: Return
059: {
062: SendMessage,0x0147,0,0,,ahk_id %CtrlHwnd%
064: if A_GuiEvent = DoubleClick
---> 065: Gosub,ContextOpenFile
067: if !((CB_ERR := ErrorLevel) < 0 || CB_ERR = 0xffffffff) 
068: Return
069: GuiControlGet,Edit,,%CtrlHwnd%
070: if (Edit = "" && Replace) 
071: {
072: GuiControl,,%CtrlHwnd%,"
" Box1
073: Return,Replace := 0

The program will exit.

Проверяйте перед тем, как запостить.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder