Что нового

[Окна, Диалоги] Одновременная работа Основного окна и иконки в трее.

Sergy

Новичок
Сообщения
24
Репутация
1
Есть программа, основное время она сидит в трее, по клику выводит своё окошко. Проблема в том, что пока окно активно, программа никак не реагирует на нажатие пунктов в трее, а когда окно закроешь, только тогда отработает всё, что было нащёлкано.
Образец:


Код:
#cs вопрос
1. двойным кликом по иконке в трее открываем окно программы.
2. если в трее нажать правой кнопкой мыши и сделать Exit, програма не выйдет, пока не закроется окно программы.
как победить, что бы закрывалась?
#ce

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>

Opt("TrayOnEventMode",1)
Opt("TrayMenuMode", 1+2+4+8)   ; Default tray menu items (Script Paused/Exit) will not be shown.
TraySetClick(16)	; показ меню только по отпусканию правой кнопки
$exit = TrayCreateItem("Exit")
TrayItemSetOnEvent(-1,"ExitEvent")	; обработка на закрытие программы
TraySetOnEvent($TRAY_EVENT_PRIMARYDOWN,"MainWindow")	; по клику
TraySetState()

while 1
	sleep(100)
WEnd

Func MainWindow ()
	$Form1 = GUICreate("Form1", 141, 124, 192, 124)
	GUISetState(@SW_SHOW)
	While 1
		$nMsg = GUIGetMsg()
		Switch $nMsg
			Case $GUI_EVENT_CLOSE
				GUIDelete()
				Return
		EndSwitch
	WEnd

EndFunc ; <== MainWindow

Func ExitEvent()
    Exit
EndFunc	; <== ExitEvent


что поправить?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 441
Репутация
2 391
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>

Global $Form1

Opt("TrayOnEventMode", 1)
Opt("TrayMenuMode", 1+2+4+8)   ; Default tray menu items (Script Paused/Exit) will not be shown.
TraySetClick(16)    ; показ меню только по отпусканию правой кнопки
$exit = TrayCreateItem("Exit")
TrayItemSetOnEvent(-1, "ExitEvent")  ; обработка на закрытие программы
TraySetOnEvent($TRAY_EVENT_PRIMARYDOUBLE, "MainWindow")    ; по клику
TraySetState()

while 1
	$nMsg = GUIGetMsg()
	
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			GUISetState(@SW_HIDE, $Form1)
	EndSwitch
WEnd

Func MainWindow()
	If Not $Form1 Then
		$Form1 = GUICreate("Form1", 141, 124, 192, 124)
	EndIf
	
	If BitAND(WinGetState($Form1), 2) Then
		GUISetState(@SW_HIDE, $Form1)
	Else
		GUISetState(@SW_SHOW, $Form1)
	EndIf
EndFunc

Func ExitEvent()
    Exit
EndFunc
 
Автор
S

Sergy

Новичок
Сообщения
24
Репутация
1
Спасибо, работает.
 
Автор
S

Sergy

Новичок
Сообщения
24
Репутация
1
Чуток доработал, создавать форму следует там же, где будет опрос, иначе все элементы управления придётся в глобал прописывать.

Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>

Global $Form1

Opt("TrayOnEventMode", 1)
Opt("TrayMenuMode", 1+2+4+8)   ; Default tray menu items (Script Paused/Exit) will not be shown.
TraySetClick(16)    ; показ меню только по отпусканию правой кнопки
$exit = TrayCreateItem("Exit")
TrayItemSetOnEvent(-1, "ExitEvent")  ; обработка на закрытие программы
TraySetOnEvent($TRAY_EVENT_PRIMARYDOUBLE, "MainWindow")    ; по клику
TraySetState()

$Form1 = GUICreate("Form1", 141, 124, 192, 124)
$Button_Test = GUICtrlCreateButton("TestMe", 16, 16, 75, 25, $WS_GROUP)


while 1
    $nMsg = GUIGetMsg()
   
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            GUISetState(@SW_HIDE, $Form1)
		Case $Button_Test
			MsgBox (0,"From main form", "button pressed")
    EndSwitch
WEnd

Func MainWindow()
    If BitAND(WinGetState($Form1), 2) Then
        GUISetState(@SW_HIDE, $Form1)
    Else
        GUISetState(@SW_SHOW, $Form1)
    EndIf
EndFunc

Func ExitEvent()
    Exit
EndFunc
 
Верх