Что нового

Свернул окно в трей, а развернуть не могу

kyi

Новичок
Сообщения
43
Репутация
0
Добрый день!
Задумка у меня такова, что пока окно программы развернуто, в трее иконки быть не должно, как только сворачиваю в трей, должна появиться иконка. При клике на иконке окно программы должно обратно развернуться и иконка в трее пропасть.
Читая справку и примеры на форуме свернуть окно в трей сумел, а развернуть не получается, выдает ошибку.
Подскажите в чем моя ошибка?
Код:
#NoTrayIcon ;не показывать иконку в трее

#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <GuiButton.au3>

Opt("TrayMenuMode", 1 + 2) ; Не отображать в трее пункты меню по умолчанию (Script Paused/Exit) и не отмечать галочками при выборе.

Local $test = GUICreate("test",350,214,-1,-1,-1,-1)
GUISetState(@SW_SHOW,$test)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg

; Проверка нажат ли крестик на окне если нажат, то выходим
		Case $GUI_EVENT_CLOSE
			Exit

; Проверка нажата ли кнопка Свернуть, если нажата, сворачиваем в трей
		Case $GUI_EVENT_MINIMIZE
			Opt("TrayIconHide", 0) 	; Включает отображение иконки в трее
			GUISetState(@SW_HIDE)	; Сворачивает окно в трей

; Вот эта часть не работает
		Case TrayGetMsg() = $TRAY_EVENT_PRIMARYUP
			Opt("TrayIconHide", 1)
			GUISetState(@SW_SHOW)

    EndSwitch
WEnd
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
GUIGetMsg() обрабатывает оконные события, а TrayGetMsg() - события трея. Поэтому в одном цикле нужно делать два switch'а - для каждой функции свой.
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Или использовать TrayOnEventMode
Код:
#NoTrayIcon
#include <GUIConstantsEx.au3>
#include <TrayConstants.au3>
Opt("TrayMenuMode", 1 + 2)
Opt("TrayOnEventMode", 1)

GUICreate("", 350, 215)
TraySetOnEvent($TRAY_EVENT_PRIMARYUP, "_GUIShow")
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $GUI_EVENT_MINIMIZE
			TraySetState($TRAY_ICONSTATE_SHOW)
			GUISetState(@SW_HIDE)
	EndSwitch
WEnd

Func _GUIShow()
	TraySetState($TRAY_ICONSTATE_HIDE)
	GUISetState(@SW_SHOW)
EndFunc   ;==>_GUIShow


Может описание Switch...Case...EndSwitch поможет вам понять почему выдает ошибку
 
Автор
K

kyi

Новичок
Сообщения
43
Репутация
0
InnI, не понял вас. Можете как то сказать по другому, так что бы понял даже валенок типа меня.
Tempo, вот сколько примеров не смотрел на форуме, почему то 99% используют функцию.
Функции меня пока вводят в ступор (мозг не поспевает за прыганием кода).
Можно ли как то обойтись без функции?
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
kyi, в режиме OnEvent нет. Используйте вариант который предложил InnI если хотите обойтись без объявления функций
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
kyi [?]
что бы понял даже валенок типа меня
Языком валенок не владею. Но могу показать на примере
Код:
#NoTrayIcon ;не показывать иконку в трее

#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
#include <TrayConstants.au3>
#include <WindowsConstants.au3>
#Include <GuiButton.au3>

Opt("TrayMenuMode", 1 + 2) ; Не отображать в трее пункты меню по умолчанию (Script Paused/Exit) и не отмечать галочками при выборе.

Local $test = GUICreate("test",350,214,-1,-1,-1,-1)
GUISetState(@SW_SHOW,$test)

While 1
    Switch GUIGetMsg()

; Проверка нажат ли крестик на окне если нажат, то выходим
        Case $GUI_EVENT_CLOSE
            Exit

; Проверка нажата ли кнопка Свернуть, если нажата, сворачиваем в трей
        Case $GUI_EVENT_MINIMIZE
            Opt("TrayIconHide", 0)  ; Включает отображение иконки в трее
            GUISetState(@SW_HIDE)   ; Сворачивает окно в трей

    EndSwitch

    Switch TrayGetMsg()

        Case $TRAY_EVENT_PRIMARYUP
            Opt("TrayIconHide", 1)
            GUISetState(@SW_SHOW)

    EndSwitch
WEnd
 
Автор
K

kyi

Новичок
Сообщения
43
Репутация
0
InnI, Tempo, спасибо. Пошел разбираться.
Как же отвратительно когда нет нормальных книг.
В свое время Basic на ZXSpectrum изучил в одиночку, исключительно по книгам, а тут чего то с документацией вообще все плохо :blink:
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
kyi
Откройте русскую справку по AutoIt и прочтите её с самого начала и до конца всё подряд. Другими словами, прочтите справку, как книгу. Тогда вы поймёте, что справка по AutoIt - это учебник по AutoIt ;)
 
Верх