, перенесла переход по ссылке не на горячую клавишу, а на двойной щелчок мышью. Работает, только двойной щелчок действует, и если делать его по ПКМ, и если делать по ЛКМ. Лучше бы только по ЛКМ. Изменение "DoubleClick" на "DoubleLeftClick"не помогло.
Хотела кнопки "Изменить" и "Удалить" сделать пунктами контекстного меню, появляющегося при нажатии ПКМ по пункту ListView (что-то многовато кнопок внизу получается), но код почему-то не срабатывает. Что здесь не так?
Code: Select all
; >> Если вы хотите работать с несколькими окнами, дайте им имена.
; >> Иначе скрипт может не понять, в какое окно вы кнопки добавляете.
; >> И все переменные и метки, к ним относящиеся, тоже желательно назвать,
; >> чтобы они не пересекались друг с другом.
; >> И да – работать с этим будет непросто.
; >> Не знаю, как у Вас, но у меня список визуально дребезжит при прокрутке.
; >> А со стилем LVS_EX_DOUBLEBUFFER (+LV0x10000) - не дребезжит. Рекомендую.
Gui, guiMain: New, HWNDhwndGuiMain
Gui, guiMain: Add, ListView, w260 r10 vLVPrices gGuiMain_LVPrices +LV0x10000, Название|Количество|Ссылка
LV_ModifyCol(1, 150) ; Название
LV_ModifyCol(2, 100) ; Количество
LV_ModifyCol(3, 100) ; Ссылка
Gui, guiMain: Add, Button, x10 y+m w80 h30 gGuiMain_ButtonAdd , Добавить
Gui, guiMain: Add, Button, x100 yp w80 h30 gGuiMain_ButtonEdit , Изменить
Gui, guiMain: Add, Button, x190 yp w80 h30 gGuiMain_ButtonDelete, Удалить
Gui, guiMain: Add, Button, x10 y+m w80 h30 gGuiMain_ButtonSave, Сохранить
Gui, guiMain: Add, Button, x+10 yp w80 h30 gGuiMain_ButtonLoad, Загрузить
Gui, guiMain: Add, Button, x+10 yp w80 h30 gGuiMain_ButtonExit, Выйти
; Загружаем элементы (как если бы мы нажали кнопку 'Загрузить')
GoSub, GuiMain_ButtonLoad
Gui, guiMain: Show,, <Program_Name>
; Создаём второе окно - для добавления/изменения новых строк, но его пока не показываем.
Gui, guiEditor: New
Gui, guiEditor: Add, Text , Xm Y+m W130 R1, Название товара
Gui, guiEditor: Add, Edit , X+10 Yp W130 R1 vGuiEditor_ItemName
Gui, guiEditor: Add, Text , Xm Y+m W130 R1, Количество
Gui, guiEditor: Add, Edit , X+10 Yp W130 R1 vGuiEditor_ItemCount
Gui, guiEditor: Add, Text , Xm Y+m W130 R1, Ссылка:
Gui, guiEditor: Add, Edit , X+10 Yp W100 R1 vGuiEditor_ItemLink
Gui, guiEditor: Add, Button, X+0 Yp W30 R1 gGuiEditor_ButtonFolder, ...
; >> Обратите внимание: у кнопки 'Добавить' пока нет назначенной метки, только переменная!
; >> Нужная метка добавляется в зависимости от того, добавляем ли мы строку или редактируем.
Gui, guiEditor: Add, Button, Xm Y+m W130 R3 vGuiEditor_ButtonSubmit , Добавить
Gui, guiEditor: Add, Button, X+m Yp W130 R3 gGuiEditor_ButtonExit , Выйти
Return
; >> Открывать ссылки по щелчку будет довольно сложно.
; >> По горячей клавише будет проще.
#If WinActive("ahk_id " hwndGuiMain)
; F3::
; >> Если нынешняя подпрограмма запущена не из окна, где ListView
; >> скрипту приходится напоминать, с чем именно мы работаем.
; Gui, guiMain: Default
; Gui, guiMain: ListView, LVPrices
selected := LV_GetNext()
If (selected == 0)
Return
LV_GetText(itemLink, selected, 3)
If (itemLink == "")
Return
MsgBox, 0x24, Открыть ссылку?, Вы хотите перейти по ссылке`n %itemLink% ?
IfMsgBox Yes
Run, %itemLink%
Return
#If
; Обработчики нажатия кнопок в главном окне
; =========================================
; >> Добавлять в названия меток GuiMain_*/GuiAdd_* необязательно,
; >> но так будет понятней, к какому окну они относятся.
; >> Обратите внимание, что имя окна нужно добавлять к командам GuiControl.
; Кнопка 'Добавить'
GuiMain_ButtonAdd:
; В редакторе напишем на кнопке 'Добавить' и по её нажатию пусть добавляет строку
GuiControl, guiEditor:Text, GuiEditor_ButtonSubmit, Добавить
GuiControl, guiEditor:+gGuiEditor_SubmitAdd, GuiEditor_ButtonSubmit
; Очистим поля, чтоб там не осталось ничего с прошлого раза
GuiControl, guiEditor:Text, GuiEditor_ItemName ,
GuiControl, guiEditor:Text, GuiEditor_ItemCount,
GuiControl, guiEditor:Text, GuiEditor_ItemLink ,
; Показываем окно редактора, а дальше оно пускай само разбирается.
Gui, guiMain: +Disabled
Gui, guiEditor: Show,, Добавление
Return
; Кнопка 'Изменить'
GuiMain_ButtonEdit:
selected := LV_GetNext()
; Если ничего не выбрано, значит, добавляем новое.
If (selected == 0)
GoTo GuiMain_ButtonAdd
; В редакторе напишем на кнопке 'Изменить' и по её нажатию пусть изменяет строку
GuiControl, guiEditor:Text, GuiEditor_ButtonSubmit, Изменить
GuiControl, guiEditor:+gGuiEditor_SubmitEdit, GuiEditor_ButtonSubmit
; Запишем в окно редактора имеющиеся значения
LV_GetText( itemName , selected, 1 )
LV_GetText( itemCount, selected, 2 )
LV_GetText( itemLink , selected, 3 )
GuiControl, guiEditor:Text, GuiEditor_ItemName , %itemName%
GuiControl, guiEditor:Text, GuiEditor_ItemCount, %itemCount%
GuiControl, guiEditor:Text, GuiEditor_ItemLink , %itemLink%
; И покажем окно редактора
Gui, guiMain: +Disabled
Gui, guiEditor: Show,, Изменение
Return
; Кнопка 'Удалить'
GuiMain_ButtonDelete:
selected := LV_GetNext()
If (selected != 0)
{
LV_Delete(selected)
}
Return
; Кнопка 'Сохранить'
GuiMain_ButtonSave:
; Удаляем секцию в ini-файле
IniDelete, GoodsAndPrices.ini, Prices
Loop % LV_GetCount()
{
LV_GetText(itemName , A_Index, 1)
LV_GetText(itemCount, A_Index, 2)
LV_GetText(itemLink , A_Index, 3)
IniWrite, %itemCount%=%itemLink%, GoodsAndPrices.ini, Prices, %itemName%
}
Return
Return
; Кнопка 'Прочитать'
GuiMain_ButtonLoad:
; Очищаем текущий список и отключаем отрисовку ListView, чтобы он не мерцал.
LV_Delete()
GuiControl, -Redraw, LVPrices
IniRead, allPrices, GoodsAndPrices.ini, Prices
priceList := StrSplit(allPrices, "`n")
For i, priceLine In priceList
{
priceLine := StrSplit(priceLine, "=",, 3)
LV_Add("", priceLine[1], priceLine[2], priceLine[3])
}
GuiControl, +Redraw, LVPrices ; Включаем отрисовку ListView
Return
; Двойной щелчок в ListView - открытие ссылки
GuiMain_LVPrices:
If (A_GuiEvent == "DoubleClick")
#If WinActive("ahk_id " hwndGuiMain)
Gui, guiMain: Default
Gui, guiMain: ListView, LVPrices
selected := LV_GetNext()
If (selected == 0)
Return
LV_GetText(itemLink, selected, 3)
If (itemLink == "")
Return
MsgBox, 0x24, Открыть ссылку?, Вы хотите перейти по ссылке`n %itemLink% ?
IfMsgBox Yes
Run, %itemLink%
Return
#If
; Щелчок ПКМ в ListView - открытие меню с "Изменить" и "Удалить"
Menu, CMenu, Add, Изменить , menuDo
Menu, CMenu, Add, Удалить , menuDo
If (A_GuiEvent == "RightClick")
{
goto,menux
}
return
menux:
Menu, CMenu, Show, %musX%,%musY%
return
menudo:
Gui, submit, nohide
If (A_ThisMenuItem = "Изменить")
gosub,GuiEditor_SubmitEdit
If (A_ThisMenuItem = "Удалить")
gosub,GuiMain_ButtonDelete
return
; >> Имя окна добавляется к меткам самого окна
GuiMainGuiClose:
GuiMain_ButtonExit:
ExitApp
; Обработчики нажатия кнопок в окне добавления
; ============================================
; Выбор папки/ссылки
GuiEditor_ButtonFolder:
FileSelectFolder, vOutFolder,, 3, Выберите папку для поиска товара
If (ErrorLevel == 0)
GuiControl, guiEditor:Text, GuiEditor_ItemLink, %vOutFolder%
Return
; Кнопка 'Выйти'
GuiEditorGuiClose:
GuiEditor_ButtonExit:
Gui, guiMain: -Disabled
Gui, guiEditor: Hide
Return
; Кнопка 'Добавить/Изменить' - добавление
GuiEditor_SubmitAdd:
; Читаем из полей в переменные и прячем окно
Gui, guiMain: -Disabled
Gui, guiEditor: Submit
Gui, guiMain:Default
Gui, guiMain:ListView, LVPrices
LV_Add("", GuiEditor_ItemName, GuiEditor_ItemCount, GuiEditor_ItemLink)
Return
; Кнопка 'Добавить/Изменить' - изменение
GuiEditor_SubmitEdit:
; Читаем из полей в переменные и прячем окно
Gui, guiMain: -Disabled
Gui, guiEditor: Submit
Gui, guiMain:Default
Gui, guiMain:ListView, LVPrices
selected := LV_GetNext()
LV_Modify( selected, "", GuiEditor_ItemName, GuiEditor_ItemCount, GuiEditor_ItemLink)
Return