-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
Работа с меню в системном трее
Вот код который создаёт небольшое меню в системном трее, но есть проблемка...
После этого кода идёт продолжение программы (не будет ведь программа из одной менюшки в трее состоять:) ) И именно этот код уже не работает... Можно продолжить выполнение прораммы, если в трее кликнешь по "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
; Далее будет моя программа
|
Код:
#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
|
Цитата:
Цитата sashadeg
Что здесь нужно доработать, чтобы и программа продолжалась, и меню исправно работало? »
|
У вас неверное представление о том как работает GUI и циклы связанные с ним.
Когда мы используем TrayGetMsg в цикле, то обрабатываются сообщения от трея, а если нужно ещё что-то проверять (например сообщения GUI), то добавляем ещё один Switch GUIGetMsg(). А что значит “чтобы и программа продолжалась”? она и продолжается, в цикле, всё будет выполняться либо в этом самом цикле (см. пример Yashied), либо по событию, больше ничего нет (за исключением разных таймеров и callbck).
|
Код:
#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
А я так бы сделал
|
shyra1976,
Цитата:
Цитата shyra1976
A ia tak bi sdelal
|
Предупреждение за нарушение общих правил форума (2.3):
Цитата:
....
2.
....3. Язык общения на Конференции - русский. - Если Вы не можете писать кириллицей, используйте виртуальную клавиатуру, которая доступна в каждой теме справа от формы ответа. Исключения составляют названия торговых марок, моделей устройств, программных продуктов, а также иностранные аббревиатуры. Они должны воспроизводиться только латинскими буквами.
....
|
|
Время: 08:57.
© OSzone.net 2001-