Войти

Показать полную графическую версию : [решено] Как в функцию вписать?


JaguarSP
23-04-2010, 12:08
что нужно сделать чтобы в функции проверялось нажата ли кнопка свертывания в трее, уже все передумал =( вот func:

Func _Timer()
$iOld_Opt = Opt("GUIOnEventMode", 1)
GUICtrlSetOnEvent($cancel, "_Main_Events")
GUISetOnEvent($GUI_EVENT_CLOSE, "_Main_Events")

For $Start = $pas To 0 Step -1
Select
Case $Start >= 7
GUICtrlSetColor($Label1, 0x00FF00)
GUICtrlSetData($Label1, $Start)
Case $Start > 3
GUICtrlSetColor($Label1, 0xFF8000)
GUICtrlSetData($Label1, $Start)
Case $Start >= 0
GUICtrlSetColor($Label1, 0xFF0000)
GUICtrlSetData($Label1, $Start)
EndSelect
If $iStop Then
MsgBox(64, 'Atention', 'Таймер остановлен! Выход из программы.')
$iStop = 1
ExitLoop
EndIf
Sleep(1000)
Next
Return
EndFunc

И вот скрипт сварачивания в трее:

#NoTrayIcon
#include <GUIConstantsEx.au3>

;

Opt("TrayMenuMode", 1)
Opt("TrayOnEventMode", 1)

$hGUI = GUICreate("Пример в трей", 300, 200)

$RestoreItem = TrayCreateItem("Восстановить.")
TrayItemSetOnEvent(-1, "_RestoreFromTray_Proc")

TraySetOnEvent(-13, "_RestoreFromTray_Proc")
TraySetClick(1)

GUISetState()

While 1
Switch GUIGetMsg()
Case -3
ExitLoop
Case -4
GUISetState(@SW_HIDE)
TraySetState(1)
EndSwitch
WEnd

Func _RestoreFromTray_Proc()
If BitAND(WinGetState($hGUI), 2) = 2 Then Return
TraySetState(2)
GUISetState(@SW_SHOW)
GUISetState(@SW_RESTORE)
EndFunc

Creat0R
23-04-2010, 14:02
уже все передумал »
Тема решена?

JaguarSP
23-04-2010, 14:34
эм =) ну это же я все передумал =) а есть еще умные люди ;-) передумал в том плане что не могу найти решение...

Creat0R
23-04-2010, 14:41
это же я все передумал »
Мне показалось что там написано «придумал» :sorry:

А что если при свёртываний присвоить также переменной $iStop = True?

JaguarSP
23-04-2010, 15:10
А что если при свёртываний присвоить также переменной $iStop = True? »
хм не понял... покажи примером пожалуйста :-)

Creat0R
23-04-2010, 15:16
покажи примером пожалуйста »
Func _RestoreFromTray_Proc()
$iStop = 1

If BitAND(WinGetState($hGUI), 2) = 2 Then Return
TraySetState(2)
GUISetState(@SW_SHOW)
GUISetState(@SW_RESTORE)
EndFunc

и у тебя ошибка в функции таймера, там после MsgBox нужно ставить $iStop = 0 а не 1 ;) иначе в следующий раз не сработает.

JaguarSP
23-04-2010, 15:34
ставить $iStop = 0 а не 1 »
неее так задуманно =) это вот для этого:

Case $Shutdown
_Timer()
If $istop=1 Then Exit
$msg=MsgBox(262145,"Atention", "Ваш компъютер будет через 20 секунд", 15)
If $msg=1 Then
;Sleep(20000)
Shutdown(1)


если не сделать так то другие месаджи пойдут...

Creat0R
24-04-2010, 00:06
так задуманно »
Ну тогда оно вообще не нужно, т.к переменной $iStop присваивается значение 1 (True) при нажатии на кнопку, ну или вообще вместо ExitLoop сразу поставить Exit, т.к всё ровно по завершению функции происходит выход (при условий что она остановлена конечно).

JaguarSP
24-04-2010, 01:17
ну по идеи то да... я когда все написал там было не оч и переделал чтобы было хорошо =)

Creat0R
24-04-2010, 01:29
JaguarSP, ну а теперь то тема решена? http://files.myopera.com/Creat0R/Opera_AC/Icons/whistle.gif

JaguarSP
24-04-2010, 01:44
можно сказать да =) просто забил =( там получается надо добавить в основные кнопки, свертывание и в _func2() а как ето все осуществить %)




© OSzone.net 2001-2012