Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Работа с меню в системном трее (http://forum.oszone.net/showthread.php?t=140303)

sashadeg 16-05-2009 13:50 1119995

Работа с меню в системном трее
 
Вот код который создаёт небольшое меню в системном трее, но есть проблемка...
После этого кода идёт продолжение программы (не будет ведь программа из одной менюшки в трее состоять:) ) И именно этот код уже не работает... Можно продолжить выполнение прораммы, если в трее кликнешь по "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 1120034

Код:

#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 1120337

Цитата:

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

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

shyra1976 20-05-2009 11:56 1123055

Код:

#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 1123170

shyra1976,
Цитата:

Цитата shyra1976
A ia tak bi sdelal

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

Цитата:

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


Время: 08:57.

Время: 08:57.
© OSzone.net 2001-