1 (изменено: Indomito, 2013-10-31 20:19:39)

Тема: AHK: Меню в трее, создание под подменю.

Есть такой скрипт(фрагмент)

+ открыть спойлер
; Работа с ресурсами и иконкой
sleep 3000 ; задержка для коррекции и синхронизации.
Menu1 := "Справка"
Menu2 := "On/Off `n`n основные горячие клавиши" 
Menu3 := "Выход"
;=====Cменить иконку скрипта  
      mcTray := "ASOS_RES\Os_Settings_Gear.ico"
      Menu, tray, NoStandard                ; меню в трее будет не стандартным - своим
      Menu, Tray, Icon, %McTray%             ; Устанавливаем иконку
      Menu, tray, add, %Menu1%, HelpKey1     ; добавляем пункт меню по ПКМ
      Menu, tray, add, %Menu2%, KeyOfASOSMain     ; добавляем пункт меню по ПКМ
      Menu, tray, add, %Menu3%, lExitProc     ; добавляем пункт меню по ПКМ
      ; Задаём свою выноску "балон"
      Menu, tray, tip, `n Обработка клавиш для: `n  - приложений `n  - игр `n  - и т.д. `n `n
      Menu, tray, default, Справка ; Этот пункт меню по умолчанию двойной щелчёк ЛКМ по иконке в трее для его вызова
      Menu, Tray, Click, 1 ; Переназначаем двойной на одиночный ЛКМ
;-------------------------------------------------------------

В переменной Menu2 очень длинный текст - уход за границы экрана.

Я попытался подать `n результат нулевой - как можно сделать перевод строки, форматирование всего меню или же просто смещение вверх и влево?


Единственное что мне пришло в голову это сделать так:

+ открыть спойлер
Menu2 := "On/Off"  
Menu2 := "   Оосновные горячие клавиши" 
Menu3 := "Выход"
      Menu, tray, add, %Menu2%, KeyOfASOSMain     ; добавляем пункт меню по ПКМ
      Menu, tray, add, %Menu20%, KeyOfASOSMain     ; добавляем пункт меню по ПКМ
      Menu, tray, add, %Menu3%, lExitProc     ; добавляем пункт меню по ПКМ
..........

Моё решение единственно правильное? Или можно сделать ещё как то?

И ещё, я не нашёл опции, которая задаёт горизонтальный размер выноски посимвольно, может плохо искал?


P.S. Проверял орфографию и через Punto и увидел, подменю - может это и есть единственное решение проблемы?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

2 (изменено: Indomito, 2013-10-31 20:20:41)

Re: AHK: Меню в трее, создание под подменю.

И так после долгих мучений, я решил создать подменю, т.к. пункт будет увеличиваться и я написал подпрограмму, кторую вызываю после всех подключений файлов через #Include и назвал её lTrey

+ открыть спойлер
; Работа с ресурсами и иконкой
lTrey:
sleep 3000 ; задержка для коррекции и синхронизации.
Menu1  := "Справка"
Menu2  := "Переключение клавиши"
sMenu21 := "Oсновные горячие клавиши"
sMenu22 := "Пульт управления плеером" 
Menu3  := "Выход"

      mcTray := "ASOS_RES\Os_Settings_Gear.ico"
      Menu, tray, NoStandard                ; меню в трее будет не стандартным - своим
      Menu, Tray, Icon, %McTray%             ; Устанавливаем иконку
      Menu, tray, add, %Menu1%, HelpKey1     ; добавляем пункт меню по ПКМ
      ;Menu, sKeyOnOff, add, %sMenu22%, KeyPlayrs
      ;Menu, sKeyOnOff, add, %sMenu21%, KeyMain      
      ;Menu, tray, add, %Menu2%, :sKeysOnOff    ; добавляем пункт меню ввиде подменю по ПКМ
      Menu, MySubmenu, add, Item1 
      Menu, tray, add, This Menu Item Is A Submenu, :MySubmenu      
      Menu, tray, add, %Menu3%, lExitProc     ; добавляем пункт меню по ПКМ
      ; Задаём свою выноску "балон"
      Menu, tray, tip, `n Обработка клавиш для: `n  - приложений `n  - игр `n  - и т.д. `n `n
      Menu, tray, default, Справка ; Этот пункт меню по умолчанию двойной щелчёк ЛКМ по иконке в трее для его вызова
      Menu, Tray, Click, 1 ; Переназначаем двойной на одиночный ЛКМ
MySubmenu:    
Return

всё было бы замечательно, но она постоянно ругается, что метка MySubmenu не определена (это я уж с горя взял пример из справки думал я где то ошибся).
Так где надо поставить эту метку, что бы было правильно, я перебрал все варианты и до описания подменю и после и в самом начале скрипта, ошибка не пропадает и на строчке  Menu, tray, add, This Menu Item Is A Submenu, :MySubmenu обработка прерывается, т.е. сл. пункта в меню уже нет, только висит Справка.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

3

Re: AHK: Меню в трее, создание под подменю.

Желательно бы код, который запустить можно было и узреть эту ошибку. А то того нет, этого нет и скрипт завершается.

4 (изменено: Indomito, 2013-10-31 20:04:43)

Re: AHK: Меню в трее, создание под подменю.

Разобрался, методом научного тыка.
Проблема была в порядке подключения файлов по #Include, т.е. пункты для трея, когда это касается почемуто подменю должны быть описаны раньше их применения, т.е. в скрипте

+ открыть спойлер
;=====Cменить иконку скрипта  и меню скрипта
; Работа с ресурсами и иконкой
lTrey:
Menu1  := "Справка"
Menu2  := "Переключение клавиши"
sMenu21 := "Oсновные горячие клавиши"
sMenu22 := "Пульт управления плеером" 
Menu3  := "Выход"
sKeysOnOff:
      mcTray := "ASOS_RES\Os_Settings_Gear.ico"
      Menu, tray, NoStandard                ; меню в трее будет не стандартным - своим
      Menu, Tray, Icon, %McTray%             ; Устанавливаем иконку
      Menu, tray, add, %Menu1%, HelpKey1     ; добавляем пункт меню по ПКМ
      Menu, sKeyOnOff, add, %sMenu22%, KeyPlayrs
      Menu, sKeyOnOff, add, %sMenu21%, KeyMain      
      Menu, tray, add, %Menu2%, :sKeysOnOff    ; добавляем пункт меню ввиде подменю по ПКМ
      Menu, tray, add, %Menu3%, lExitProc     ; добавляем пункт меню по ПКМ
      ; Задаём свою выноску "балон"
      Menu, tray, tip, `n Обработка клавиш для: `n  - приложений `n  - игр `n  - и т.д. `n `n
      Menu, tray, default, Справка ; Этот пункт меню по умолчанию двойной щелчёк ЛКМ по иконке в трее для его вызова
      Menu, Tray, Click, 1 ; Переназначаем двойной на одиночный ЛКМ
Return

Метки sKeysOnOff , KeyMain и KeyPlayrs хотя этого раньше не требовалось - странно как то и справке нет на это указания.
Ну с метками KeyMain и KeyPlayrs понятно что делать, я просто поменяю порядок подключения по #Include

А вот метка sKeysOnOff так она ничего не делает, просто интересно, а к ней то будет обращение?
Надо писать обработчик для неё или нет?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

5 (изменено: Indomito, 2013-11-01 02:39:00)

Re: AHK: Меню в трее, создание под подменю.

О как я ошибался - ошибка крылось в ином...
Использовав device the Intellect Я получил рабочий скрипт для подменю.

+ открыть спойлер
goto leave_TrayASOS

fnTrayASOS()
{
global ;Установки трея для скрипта
      
  mcTray := "ASOS_RES\Os_Settings_Gear.ico"
    Menu1  := "Справка"
    Menu2  := "Набор клавиши"
      sMenu21 := "Основные клавиши"
      sMenu22 := "Управление плеером" 
    Menu3  := "Выход"
    
      Menu, tray, NoStandard                ; меню в трее будет не стандартным - своим
      Menu, Tray, Icon, %McTray%             ; Устанавливаем иконку
      
      ;Добавляем пункт меню по ПКМ
      Menu, tray, add, %Menu1%, HelpKey1     
      ;Добавляем пункт меню ввиде подменю по ПКМ  
      KeysSubmenu:          
        Menu, KeysSubmenu, add, %sMenu21%, KeyMain
        Menu, KeysSubmenu, add, %sMenu22%, KeyPlayrs
      Menu, tray, add, %Menu2%, :KeysSubmenu        
      
      ;Добавляем пункт меню по ПКМ
      Menu, tray, add, %Menu3%, lExitProc     
      
      ; Задаём свою выноску "балон"
      Menu, tray, tip, `n Обработка клавиш для: `n  - приложений `n  - игр `n  - и т.д. `n `n
      Menu, tray, default, %Menu1%  ; Этот пункт меню по умолчанию двойной щелчёк ЛКМ по иконке в трее для его вызова
      Menu, Tray, Click, 1          ; Переназначаем двойной на одиночный ЛКМ
 
Return
}

leave_TrayASOS:

Ошибка была не в названии и не в расположении метки, а в постфиксе Submenu

Постфикс - это значимая часть слова, которая находится после окончания или формообразовательного суффикса и служит для образования слов.


надо писать МояМеткаSubmenu и не надо после него писать return И в справке об этом ни слова или я плохо смотрел.

Аналогично, как пишется GUI

+ открыть спойлер
Gui, start:New , -resize -maximizebox -minimizebox +caption -Border +AlwaysOnTop +Owner
 Gui, start:font, s12
 Gui, start:Add, Text, x40 y40 w300 h280 +Center, %vTxt%
 Gui, start:Show, x400 y100 h100 w400
 sleep 3000
Return

startGuiClose:
 Gui, Destroy
Return

Создав элемент/окно командой Gui, start:New.... все обработчики начинаются со слова start, как startGuiClose
Про GUI то я знал, но не думал что тут тоже самое, правда ключевое слово - окончание, то же странно.


P.S.

YMP пишет:

Желательно бы код, который запустить можно было и узреть эту ошибку...

Я бы дал, но около 5000 строк... не думаю, что тебе захочется разбираться. Вот главный (main) файл -

+ открыть спойлер
;-----Инициализация
; Скрипт не выгружается
#Persistent
; Запрет повторного запуска
#SingleInstance

;=============Секция подключения файлов
#Include c:\AHK\Include\                  ;  Устанавливаем путь к общим файлам
#Include PathUses.ahk
#Include C:\AHK\AllSystemOS\              ; Устанавливаем путь к файлам скрипта
#Include ResourceASOS.ahk                 ; Установка ресурсов скрипта
#Include VarScript.ahk                    ; Переменные/константы для скрипта и начальная инициализация
#Include HelpKey.ahk                      ; Справка по клавишам
#Include Games.ahk                        ; Управление играми
#Include AppStartUp.ahk                   ; Запуск приложений
#Include RunCon.ahk                       ; Запуск с консоли
;Тут писать новые подключаемые файлы к скрипту.
#Include EventManager.ahk                 ; Менеджер событий
#Include InitASOS.ahk                     ; Инициализатор скрипта. Обязательно последняя в списке подключения!!!!
#Include TrayASOS.ahk
;=============Секция инициализации скрипта
Gosub InitASOS        ;Старт иницализации
fnPathUses()          ;Иницализация путей
fnResource()          ;Иницализация ресурсов скрипта
fnOverallSection()    ;Иницализация блока переменных
fn_arMainKeyInit()
; Тут дописывать нужные иницализации.
fnTrayASOS()          ;Cменить иконку скрипта  и меню скрипта. Обязательно тут перед завершение инициализации скрипта!
Gosub lCloseInitASOS  ;Завершение иницализации. Обязательно последний вызов после всех!
return
;============= 
"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

6

Re: AHK: Меню в трее, создание под подменю.

Indomito пишет:

Я бы дал, но около 5000 строк... не думаю, что тебе захочется разбираться.

А зачем эти 5000 строк? Если без них меню работает, значит всё с ним нормально и проблема в другом месте.

7

Re: AHK: Меню в трее, создание под подменю.

Ну так я описал же в чем, в названии метки для субменю, метка должна оканчиваться на Submenu

Indomito пишет:

Ошибка была не в названии и не в расположении метки, а в постфиксе Submenu ... надо писать МояМеткаSubmenu и не надо после него писать return А в справке об этом ни слова или я плохо смотрел.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

8

Re: AHK: Меню в трее, создание под подменю.

А что это меняет? Я возразил на вполне конкретный ваш аргумент по поводу 5000 строк.

9

Re: AHK: Меню в трее, создание под подменю.

Да, про 5000 строк это лишнее, просто я думал что ошибка из-за того что я инициализирую меню раньше чем было что определено, т.е. метки.
Оказалось дело совсем в другом.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro