Войти

Показать полную графическую версию : Работа с меню в системном трее


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

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


#Include <Constants.au3>
#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
16-05-2009, 14:54
#Include <Constants.au3>
#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
16-05-2009, 21:43
Что здесь нужно доработать, чтобы и программа продолжалась, и меню исправно работало? »
У вас неверное представление о том как работает GUI и циклы связанные с ним.
Когда мы используем TrayGetMsg в цикле, то обрабатываются сообщения от трея, а если нужно ещё что-то проверять (например сообщения GUI), то добавляем ещё один Switch GUIGetMsg(). А что значит “чтобы и программа продолжалась”? она и продолжается, в цикле, всё будет выполняться либо в этом самом цикле (см. пример Yashied), либо по событию, больше ничего нет (за исключением разных таймеров и callbck).

shyra1976
20-05-2009, 11:56
#include "WinGetTitleEx.au3"
#include <Constants.au3>
#include <Misc.au3>
#include <GUIConstantsEx.au3>

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
20-05-2009, 14:57
shyra1976,
A ia tak bi sdelal

Предупреждение за нарушение общих правил форума (http://forum.oszone.net/rules.html) (2.3):


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

....




© OSzone.net 2001-2012