Что нового

Как создать меню в трее пункты которые при выборе становятся недоступными

StarEdik

Новичок
Сообщения
365
Репутация
4
Версия AutoIt: 3.3.6.1

Описание:
Привет всем.
Как создать меню в трее пункты которые при выборе становятся недоступными.
То есть пункт в меню Disabled.
Меню в трее
1. О программе
2. Свернуть
3. Развернуть
4. Выход
При запуске скрипта 2 –ой пункт доступен а 3-ий пункт недоступен( Disabled ) .
При выборе 2 –го пункта
- выполняется код
- 3-й пункт становится доступным
- 2-й пункт становится недоступным

Примечания:
А при выборе 3 –го пункта
- выполняется код
- 2-й пункт становится доступным
- 3-й пункт становится недоступным
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Код:
#include <Constants.au3>
Opt("TrayMenuMode",1)

$Gui = GUICreate('My Gui')

$ShowWin   = TrayCreateItem("Развернуть")
$HideWins  = TrayCreateItem("Свернуть")
$Exit      = TrayCreateItem("Выход")

GUISetState()

While GUIGetMsg() <> -3
$msgTray = TrayGetMsg()

Select
	Case $msgTray = $Exit 
		Exit
	Case $msgTray = $HideWins;
		WinSetState ( $Gui, "", @SW_HIDE )
		TrayItemSetState ($HideWins ,$TRAY_DISABLE + $TRAY_UNCHECKED)
		TrayItemSetState ($ShowWin ,$TRAY_ENABLE)
	Case $msgTray = $ShowWin 
		TrayItemSetState ($ShowWin,$TRAY_DISABLE + $TRAY_UNCHECKED)
		TrayItemSetState ($HideWins ,$TRAY_ENABLE)
		WinSetState ( $Gui, "", @SW_SHOW )
EndSelect

WEnd
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
VladUs,
А зачем WinSetState() ? Есть же GUISetState().
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Подправил код VladUs'а:
Код:
#include <Constants.au3>
Opt("TrayMenuMode",1)

$Gui = GUICreate('My Gui')

$About   = TrayCreateItem("О программе")
$HideWins  = TrayCreateItem("Свернуть")
$ShowWin   = TrayCreateItem("Развернуть")
TrayItemSetState ($ShowWin,$TRAY_DISABLE + $TRAY_UNCHECKED)
TrayCreateItem("")
$Exit      = TrayCreateItem("Выход")
GUISetState()

While GUIGetMsg() <> -3
	$msgTray = TrayGetMsg()
	Select
		Case $msgTray = $Exit
			Exit
		Case $msgTray = $HideWins;
			WinSetState($Gui, "", @SW_MINIMIZE)
			TrayItemSetState($HideWins ,$TRAY_DISABLE + $TRAY_UNCHECKED)
			TrayItemSetState($ShowWin ,$TRAY_ENABLE)
		Case $msgTray = $ShowWin
			TrayItemSetState($ShowWin,$TRAY_DISABLE + $TRAY_UNCHECKED)
			TrayItemSetState($HideWins ,$TRAY_ENABLE)
			WinSetState($Gui, "", @SW_RESTORE)
		Case $msgTray = $About
			MsgBox(0, 'О программе', 'О программе')
	EndSelect
WEnd


У меня почему-то не работает GUISetState в этом скрипте, по этому я оставил WinSetState :(
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
VladUs
madmasles
Zaramot
Спасибо всем вам за достоверный Ответ

А такой вариант как можно реализовать
Меню в трее
1. О программе
2. Свернуть / Развернуть
3. Выход
Ставим галочку 2 -ой пунк
- выполняется код 1
Снимаем галочку со 2-го пункта
- выполняется код 2
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
StarEdik
Код:
#include <Constants.au3>

Opt("TrayMenuMode",1)

$Gui = GUICreate('My Gui')
$About = TrayCreateItem("О программе")
$StateWins = TrayCreateItem("Свернуть/Развернуть")
TrayItemSetState(-1, $TRAY_CHECKED)
TrayCreateItem('')
$Exit = TrayCreateItem("Выход")
GUISetState()

While GUIGetMsg() <> -3
    $msgTray = TrayGetMsg()
    Select
        Case $msgTray = $Exit
            Exit
        Case $msgTray = $StateWins
            If TrayItemGetState($StateWins) = 68 Then
				WinSetState($Gui, "", @SW_MINIMIZE)
			ElseIf TrayItemGetState($StateWins) = 65 Then
				WinSetState($Gui, "", @SW_RESTORE)
			EndIf
        Case $msgTray = $About
            MsgBox(0, 'О программе', 'О программе')
    EndSelect
WEnd
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
VladUs [?]
Поиграйтесь с ним
Понимаю трудноватый вопрос.Не каждый может ответит.

Хорошо что есть хорошие люди. Им благодарны мы все.
Спасибо тебе за всё Zaramot
С вашего позволения я хотел бы добавить эту строчку

Код:
TrayItemSetState($About,$TRAY_UNCHECKED)
 

VladUs

Скриптер
Сообщения
621
Репутация
181
OffTopic:
StarEdik [?]
Понимаю трудноватый вопрос.Не каждый может ответит.
Ваша ирония здесь ни к чему... Просто я пытался дать Вам направление, а Вам нужен был готовый разжеваный результат. Вот и все.
 
Верх