Работа с меню в системном трее

Ответить
Аватара пользователя
sashadeg

Работа с меню в системном трее

Сообщение sashadeg »

Вот код который создаёт небольшое меню в системном трее, но есть проблемка...

После этого кода идёт продолжение программы (не будет ведь программа из одной менюшки в трее состоятьИзображение ) И именно этот код уже не работает... Можно продолжить выполнение прораммы, если в трее кликнешь по "EXIT", но тогда прекращает работу само меню трея (не раб кнопки)



Что здесь нужно доработать, чтобы и программа продолжалась, и меню исправно работало?





Код:

Код: Выделить всё

#Include 
#NoTrayIcon
Opt("TrayMenuMode",1)   ; Default tray menu items (Script Paused/Exit) will not be shown.
$prefsitem  = TrayCreateItem("Preferences")
TrayCreateItem("")
$aboutitem  = TrayCreateItem("About")
TrayCreateItem("")
$exititem   = TrayCreateItem("Exit")
TraySetState()
While 1
    $msg = TrayGetMsg()
    Select
        Case $msg = 0
            ContinueLoop
        Case $msg = $prefsitem
            Msgbox(64,"Preferences:","OS:" & @OSVersion)
        Case $msg = $aboutitem
            Msgbox(64,"about:","AutoIt3-Tray-sample")
        Case $msg = $exititem
            ExitLoop
    EndSelect
WEnd
; Далее будет моя программа
Аватара пользователя
Yashied

Re: Работа с меню в системном трее

Сообщение Yashied »

Код:

Код: Выделить всё

#Include 
#NoTrayIcon
Opt("TrayMenuMode",1)   ; Default tray menu items (Script Paused/Exit) will not be shown.
$prefsitem  = TrayCreateItem("Preferences")
TrayCreateItem("")
$aboutitem  = TrayCreateItem("About")
TrayCreateItem("")
$exititem   = TrayCreateItem("Exit")
TraySetState()
While 1
    $msg = TrayGetMsg()
    Select
        Case $msg = 0
            ContinueLoop
        Case $msg = $prefsitem
            Msgbox(64,"Preferences:","OS:" & @OSVersion)
        Case $msg = $aboutitem
            Msgbox(64,"about:","AutoIt3-Tray-sample")
        Case $msg = $exititem
            ExitLoop
    EndSelect
; Здесь будет твоя программа
WEnd
Аватара пользователя
Creat0R

Re: Работа с меню в системном трее

Сообщение Creat0R »

Цитата sashadeg:



Что здесь нужно доработать, чтобы и программа продолжалась, и меню исправно работало?
Работа с меню в системном трее




У вас неверное представление о том как работает GUI и циклы связанные с ним.

Когда мы используем TrayGetMsg в цикле, то обрабатываются сообщения от трея, а если нужно ещё что-то проверять (например сообщения GUI), то добавляем ещё один Switch GUIGetMsg(). А что значит “чтобы и программа продолжалась”? она и продолжается, в цикле, всё будет выполняться либо в этом самом цикле (см. пример Yashied), либо по событию, больше ничего нет (за исключением разных таймеров и callbck).
Аватара пользователя
shyra1976

Re: Работа с меню в системном трее

Сообщение shyra1976 »

Код:

Код: Выделить всё

#include "WinGetTitleEx.au3"
#include 
#include 
#include 
Opt("TrayOnEventMode", 1)
Opt("GUIOnEventMode", 1)
Opt("SendCapslockMode", 0)
Opt("TrayMenuMode", 1 + 2)
$prefsitem = TrayCreateItem("Preferences")
TrayCreateItem("")
$aboutitem = TrayCreateItem(("About"))
TrayCreateItem("")
$exititem = TrayCreateItem("Exit")
TrayItemSetOnEvent($prefsitem, "Preferences")
TrayItemSetOnEvent($aboutitem, "About")
TrayItemSetOnEvent($exititem, "Exit")
While 1
;~  Vasha programa
WEnd
Func Preferences()
     Msgbox(64,"Preferences:","OS:" & @OSVersion)
EndFunc  
Func About()
    Msgbox(64,"about:","AutoIt3-Tray-sample")
EndFunc  
Func Exit1()
    Exit
EndFunc   ;==>Exit1

А я так бы сделал
Аватара пользователя
Creat0R

Re: Работа с меню в системном трее

Сообщение Creat0R »

shyra1976,


Цитата shyra1976:



A ia tak bi sdelal



Предупреждение за нарушение
общих правил форума
(2.3):




Цитата:



....

2.

....3. Язык общения на Конференции - русский. Если Вы не можете писать кириллицей, используйте виртуальную клавиатуру, которая доступна в каждой теме справа от формы ответа. Исключения составляют названия торговых марок, моделей устройств, программных продуктов, а также иностранные аббревиатуры. Они должны воспроизводиться только латинскими буквами.....
Ответить

Вернуться в «AutoIt»