PDA

Показать полную графическую версию : [решено] как выдать сообщение не остонавливая скрипт до закрытия его пользователем?


andr_mozg
07-01-2010, 19:52
MsgBox устраивает всем, кроме того что до закрытия сообщения пользователем скрипт останавливается, а надо чтобы он не прекращал работать.
Как можно это реализовать, таймаут в MsgBox не предлагать

Coutty
07-01-2010, 20:08
Может просто создать дочернее окно, в котором будет только сообщение и кнопка? Скрипт при этом не должен останавливаться.

andr_mozg
07-01-2010, 20:11
так там будит то же цыкл, который будит следить не нажата ли кнопка, получится то же самое что и с MsgBox.

Creat0R
07-01-2010, 23:43
$iRet = _MsgBoxEx(36, "My Title", "Message", 10, 0, "_SetData")

MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(64, "", "Returned Value is: " & $iRet)

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _SetData($iCount)
ConsoleWrite (http://www.autoitscript.com/autoit3/docs/functions/ConsoleWrite.htm)("The script is not paused " & $iCount & " second(s)" & @LF (http://www.autoitscript.com/autoit3/docs/macros.htm#@LF))
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _MsgBoxEx($iType, $sTitle, $sText, $iTimeOut=0, $hWnd=0, $sCallBackFunc="")
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sAu3Line = '"ConsoleWrite(MsgBox(' & $iType & ', ''' & $sTitle & ''', ''' & $sText & ''', ' & _
$iTimeOut & ', ' & $hWnd & '))"'
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $iAu3PID = Run (http://www.autoitscript.com/autoit3/docs/functions/Run.htm)(@AutoItExe (http://www.autoitscript.com/autoit3/docs/macros.htm#@AutoItExe) & ' /AutoIt3ExecuteLine ' & $sAu3Line, '', @SW_SHOW (http://www.autoitscript.com/autoit3/docs/macros.htm#@SW_SHOW), 6)

Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $iStdOutRead
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $iTimerInit = TimerInit (http://www.autoitscript.com/autoit3/docs/functions/TimerInit.htm)(), $iTimerDiff = Round (http://www.autoitscript.com/autoit3/docs/functions/Round.htm)(TimerDiff (http://www.autoitscript.com/autoit3/docs/functions/TimerDiff.htm)($iTimerInit)/1000, 0), $iLastTimer = $iTimerDiff
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $iOld_WWD_Opt = Opt (http://www.autoitscript.com/autoit3/docs/functions/Opt.htm)("WinWaitDelay", 0)

WinWait (http://www.autoitscript.com/autoit3/docs/functions/WinWait.htm)($sTitle, $sText)

Opt (http://www.autoitscript.com/autoit3/docs/functions/Opt.htm)("WinWaitDelay", $iOld_WWD_Opt)

While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
$iStdOutRead &= StdoutRead (http://www.autoitscript.com/autoit3/docs/functions/StdoutRead.htm)($iAu3PID)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) <> 0 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) ExitLoop (http://www.autoitscript.com/autoit3/docs/keywords.htm#ExitLoop)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $sCallBackFunc <> "" Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$iTimerDiff = Round (http://www.autoitscript.com/autoit3/docs/functions/Round.htm)(TimerDiff (http://www.autoitscript.com/autoit3/docs/functions/TimerDiff.htm)($iTimerInit)/1000, 0)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iLastTimer <> $iTimerDiff Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$iLastTimer = $iTimerDiff
Call (http://www.autoitscript.com/autoit3/docs/functions/Call.htm)($sCallBackFunc, $iTimerDiff)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

Sleep (http://www.autoitscript.com/autoit3/docs/functions/Sleep.htm)(1)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)

Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $iStdOutRead
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

andr_mozg
08-01-2010, 00:02
Спасибо

snoitaleR
09-01-2010, 08:59
andr_mozg
Я для этих целей использую функцию SplashTextOn()...
А когда надо убрать сообщение (в любом месте скрипта) вызываю SplashOff()...

Creat0R
09-01-2010, 11:50
Я для этих целей использую функцию SplashTextOn()... »
Для каких целей?

А когда надо убрать сообщение (в любом месте скрипта) вызываю SplashOff() »
А если нужно предоставить эту возможность пользователю? :)

snoitaleR
09-01-2010, 18:28
Creat0R
Тогда по-другому:


; НАЧАЛО

$GUI1=GUICreate("",300,300)
$EDIT=GUICtrlCreateEdit("",0,0,300,200,0x1000)
$BUTTON1=GUICtrlCreateButton("MsgBox",0,200,300,50)
$BUTTON2=GUICtrlCreateButton("GUI2",0,250,300,50)

GUISetState(@SW_SHOW,$GUI1)

$GUI2=GUICreate("Внимание!",200,100,-1,-1,0x00400000)
$LABEL1=GUICtrlCreateLabel("Приложение продолжает работу"&@CRLF&"Нажмите OK, чтобы закрыть окно",10,10)
$BUTTON0=GUICtrlCreateButton("Ok",-1,45,50,25)

$R=""

While true

Switch GUIGetMsg()
Case -3
ExitLoop
Case $BUTTON1
MsgBox(0,"Внимание!","Приложение заблокировано"&@CRLF&"Нажмите OK, чтобы закрыть окно")
Case $BUTTON2
GUISetState(@SW_SHOW,$GUI2)
Case $BUTTON0
GUISetState(@SW_HIDE,$GUI2)
EndSwitch

$R=$R&Chr(Random(32,127,1))

GUICtrlSetData($EDIT,$R)

Sleep(50)

Wend

; КОНЕЦ

Creat0R
09-01-2010, 18:36
Тогда по-другому »
Что подругому, разве мой пример не подходит?

snoitaleR
09-01-2010, 18:42
Creat0R
Не в этом дело...
Мой пример сначала не подходил, а теперь подходит... :)

Creat0R
09-01-2010, 23:42
Мой пример сначала не подходил, а теперь подходит »
Не совсем, т.к нужно каждый раз следить за событиями дочернего окна, и что если нужно несколько сообщений выводить?

Если делать по этому методу, тогда лучше так:


Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $aMsgBox_Data[2][2] = [[0, -1], [0, -1]]

$hGUI = GUICreate (http://www.autoitscript.com/autoit3/docs/functions/GUICreate.htm)("", 300, 300)
$nEDIT = GUICtrlCreateEdit (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateEdit.htm)("", 0, 0, 300, 200, 0x1000)
$nBUTTON1 = GUICtrlCreateButton (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateButton.htm)("MsgBox", 0, 200, 300, 50)
$nBUTTON2 = GUICtrlCreateButton (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateButton.htm)("GUI2", 0, 250, 300, 50)

GUISetState (http://www.autoitscript.com/autoit3/docs/functions/GUISetState.htm)(@SW_SHOW (http://www.autoitscript.com/autoit3/docs/macros.htm#@SW_SHOW), $hGUI)

AdlibEnable (http://www.autoitscript.com/autoit3/docs/functions/AdlibEnable.htm)("_SetEditData_Proc", 50)

While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
$nMsg = GUIGetMsg (http://www.autoitscript.com/autoit3/docs/functions/GUIGetMsg.htm)()

Switch (http://www.autoitscript.com/autoit3/docs/keywords.htm#Switch) $nMsg
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) -3
ExitLoop (http://www.autoitscript.com/autoit3/docs/keywords.htm#ExitLoop)
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $nBUTTON1
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(48, "Внимание!", "Приложение заблокировано" & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@CRLF) & "Нажмите OK, чтобы закрыть окно", 0, $hGUI)
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $nBUTTON2
_GUI_MsgBox("Внимание!", "Приложение продолжает работу" & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@CRLF) & "Нажмите OK, чтобы закрыть окно", $hGUI)
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) 0
;None
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else) ;Any event except 0, it's can be only the new created elements of child GUIs
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $aTmp_Arr[1][2]

For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aMsgBox_Data[0][0]
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $aMsgBox_Data[$i][1] <> $nMsg Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$aTmp_Arr[0][0] += 1
ReDim (http://www.autoitscript.com/autoit3/docs/keywords.htm#ReDim) $aTmp_Arr[$aTmp_Arr[0][0]+1][2]
$aTmp_Arr[$aTmp_Arr[0][0]][0] = $aMsgBox_Data[$i][0]
$aTmp_Arr[$aTmp_Arr[0][0]][1] = $aMsgBox_Data[$i][1]
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
GUISetState (http://www.autoitscript.com/autoit3/docs/functions/GUISetState.htm)(@SW_HIDE (http://www.autoitscript.com/autoit3/docs/macros.htm#@SW_HIDE), $aMsgBox_Data[$i][0])
GUIDelete (http://www.autoitscript.com/autoit3/docs/functions/GUIDelete.htm)($aMsgBox_Data[$i][0])
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) WinActive (http://www.autoitscript.com/autoit3/docs/functions/WinActive.htm)($hGUI) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) WinActivate (http://www.autoitscript.com/autoit3/docs/functions/WinActivate.htm)($hGUI)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)

$aMsgBox_Data = $aTmp_Arr
EndSwitch (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndSwitch)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _SetEditData_Proc()
GUICtrlSetData (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlSetData.htm)($nEDIT, Chr (http://www.autoitscript.com/autoit3/docs/functions/Chr.htm)(Random (http://www.autoitscript.com/autoit3/docs/functions/Random.htm)(32, 127, 1)), 1)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _GUI_MsgBox($sTitle, $sMsg, $hWnd)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $hGUI, $nButton, $iIndex

$hGUI = GUICreate (http://www.autoitscript.com/autoit3/docs/functions/GUICreate.htm)("GUI #" & $aMsgBox_Data[0][0] + 1 & " - " & $sTitle, 200, 100, -1, -1, 0x00400000, -1, $hWnd)
GUICtrlCreateLabel (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateLabel.htm)($sMsg, 10, 10)
$nButton = GUICtrlCreateButton (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateButton.htm)("Ok", -1, 45, 50, 25)

GUISetState (http://www.autoitscript.com/autoit3/docs/functions/GUISetState.htm)(@SW_SHOW (http://www.autoitscript.com/autoit3/docs/macros.htm#@SW_SHOW), $hGUI)

$iIndex = -1

For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aMsgBox_Data[0][0]
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $aMsgBox_Data[$i][0] = $hGUI Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$iIndex = $i
ExitLoop (http://www.autoitscript.com/autoit3/docs/keywords.htm#ExitLoop)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iIndex = -1 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$aMsgBox_Data[0][0] += 1
$iIndex = $aMsgBox_Data[0][0]
ReDim (http://www.autoitscript.com/autoit3/docs/keywords.htm#ReDim) $aMsgBox_Data[$iIndex+1][2]
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

$aMsgBox_Data[$iIndex][0] = $hGUI
$aMsgBox_Data[$iIndex][1] = $nButton
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)




© OSzone.net 2001-2012