[решено] MsgBox (Ok, Cancel) с обратным отсчетом времени.

Аватара пользователя
A4S

[решено] MsgBox (Ok, Cancel) с обратным отсчетом времени.

Сообщение A4S »

Перерыл гугл, но не нашел изящного решения данной задачи.

Необходимо сделать форму вроде этой:



Изображение





PHP код:

Код: Выделить всё

Global $subject = "Заголовок", $sms = "Проверка"

Global $Wait = 10

Global $smsMessage = 'Тема: ' & $subject & @CRLF & 'Сообщение: ' & $sms & @CRLF & "Время до отправки SMS: "

Global $smsMessagEnd = "сек. " & @CRLF & @CRLF & "Нажмите Отмена, если Вы НЕ хотите получить эту СМС"

Global $smsWinTitle = "Оповещение SMS"

$isSend = MsgBox( 1, $smsWinTitle, $smsMessage & $Wait & ' ' & $smsMessagEnd) 






с обратным отсчетом времени (не просто таймаутом)

то есть чтобы секунды в форме изменялись



$isSend должен принимать нужное значение (по умолчанию - отправить СМС = 1)
Аватара пользователя
FlatX007

Re: [решено] MsgBox (Ok, Cancel) с обратным отсчетом времени.

Сообщение FlatX007 »

Код:

Код: Выделить всё

Dim $iMsgBoxAnswer
$iMsgBoxAnswer = MsgBox(5244593,Default,"Тут текст",10)
Select
   Case $iMsgBoxAnswer = 1  ;OK
   Case $iMsgBoxAnswer = 2  ;Cancel
   Case $iMsgBoxAnswer = -1 ;Timeout
EndSelect
Аватара пользователя
A4S

Re: [решено] MsgBox (Ok, Cancel) с обратным отсчетом времени.

Сообщение A4S »

Я же написал:



> с обратным отсчетом времени (не просто таймаутом)
Аватара пользователя
A4S

Re: [решено] MsgBox (Ok, Cancel) с обратным отсчетом времени.

Сообщение A4S »

Я же написал:



> с обратным отсчетом времени (не просто таймаутом)
Аватара пользователя
Creat0R

Re: [решено] MsgBox (Ok, Cancel) с обратным отсчетом времени.

Сообщение Creat0R »

Если по проще, то вот:





Код:

Код: Выделить всё

Global $subject = "Заголовок", $sms = "Проверка"
Global $Wait = 10
Global $smsWinTitle = "Оповещение SMS"
Global $smsMessage = _
    'Тема: ' & $subject & @CRLF & 'Сообщение: ' & $sms & @CRLF & 'Время до отправки SMS: %s' & @CRLF & _
    'сек. ' & @CRLF & @CRLF & 'Нажмите Отмена, если Вы НЕ хотите получить эту СМС'
$isSend = _MsgBoxTimer(1, $smsWinTitle, $smsMessage, $Wait)
Func _MsgBoxTimer($iFlag, $sTitle, $sText, $iMBTimeOut = 0, $hWnd=0)
    Local $hFile, $sMBLine, $sSet_Text, $iRet
    $sSet_Text = StringReplace($sText, @CRLF, '\n')
    $sMBLine = '#NoTrayIcon' & @CRLF
    $sMBLine &= 'Opt("WinWaitDelay", 1)' & @CRLF
    $sMBLine &= 'While Not WinExists("' & $sTitle & '")' & @CRLF
    $sMBLine &= '    Sleep(10)' & @CRLF
    $sMBLine &= 'WEnd' & @CRLF
    $sMBLine &= 'ControlSetText("' & $sTitle & '", "", "Static1", StringFormat("' & $sSet_Text & '", ' & $iMBTimeOut & '))' & @CRLF
    If $iMBTimeOut > 0 Then
        $sMBLine &= _
            '$TimerInit = TimerInit()' & @CRLF & _
            '$iTime = ' & $iMBTimeOut & @CRLF & _
            'While $iTime > 0' & @CRLF & _
            '   ControlSetText("' & $sTitle & '", "", "Static1", StringFormat("' & $sSet_Text & '", $iTime))' & @CRLF & _
            '   If Not WinExists("' & $sTitle & '") Then ExitLoop' & @CRLF & _
            '   Sleep(1000)' & @CRLF & _
            '   $iTime -= 1' & @CRLF & _
            'WEnd'
    EndIf
    $hFile = FileOpen(@TempDir & '\MiscMMB.tmp', 2)
    FileWrite($hFile, $sMBLine)
    FileClose($hFile)
    Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & @TempDir & '\MiscMMB.tmp"')
    $iRet = MsgBox($iFlag, $sTitle, StringFormat($sText, $iMBTimeOut), $iMBTimeOut)
    While FileExists(@TempDir & '\MiscMMB.tmp')
        FileDelete(@TempDir & '\MiscMMB.tmp')
    WEnd
    Return $iRet
EndFunc
Аватара пользователя
A4S

Re: [решено] MsgBox (Ok, Cancel) с обратным отсчетом времени.

Сообщение A4S »

эм, мне необходимо автономное от самого autoit приложение..

Вообще сейчас я использую вот такой вариант:





PHP код:

Код: Выделить всё

Global $subject = "Заголовок", $sms = "Проверка"







Global $Wait = 10

Global $smsMessage = 'Тема: ' & $subject & @CRLF & 'Сообщение: ' & $sms & @CRLF & "Время до отправки SMS: "

Global $smsMessagEnd = "сек. " & @CRLF & @CRLF & "Нажмите ОК, если Вы НЕ хотите получить эту СМС"

Global $smsWinTitle = "Оповещение SMS (" & $sms & ")"

Global $smsSend = 1



;Const $WM_SETTEXT = 0x000C

$gui = GUICreate( "dummy")

;$egg = GUICtrlCreatePic("egg01.png",0,0)



;Beep ( 100, 1500 )

_Timer_SetTimer($gui,1000,"changetitle")

$isSend = MsgBox( 1 + 256 + 262144, $smsWinTitle, $smsMessage & $Wait & ' ' & $smsMessagEnd)



GUIDelete($gui)

;$Wait = $Wait - 1







If $isSend = 2 Then

    SendSMStoMegafon($subject, $sms)

EndIf





Func changetitle($a,$b,$c,$d)

    Global $Wait, $smsMessageEnd

    Global $smsSend

    If winexists($smsWinTitle) Then 

        $Wait = $Wait - 1

        If $Wait = 0 Then

            _Timer_KillAllTimers($gui)

            WinClose($smsWinTitle)

        EndIf        

        

        $sd = DllStructCreate("Char[500]")

        DllStructSetData($sd,1, $smsMessage & $Wait & ' ' & $smsMessagEnd)

        _SendMessage(controlgethandle($smsWinTitle,"","Static1"),0x000C,0,DllStructGetPtr($sd))



    ElseIf

        _Timer_KillAllTimers($gui)

    EndIf

EndFunc 






хреновость варианта в том, что я не могу отслеживать нажатие кнопки Cancel

то есть в идеале мне нужно сделать обратную функцию

По ОК или по истечении таймера - отправлять смс

При нажатии Отмена - выходить из программы



В моём вариант Ок - это выход из программы а Cancel и таймаут - отправка.



P.S. Подскажите каким bb-кодом правильно подсвечивать синтаксис?
Аватара пользователя
FlatX007

Re: [решено] MsgBox (Ok, Cancel) с обратным отсчетом времени.

Сообщение FlatX007 »

Цитата A4S:



мне необходимо автономное от самого autoit приложение
[решено] MsgBox (Ok, Cancel) с обратным отсчетом времени.




Я привёл то, что вам нужно (судя по описанию задачи).




Цитата A4S:



По ОК или по истечении таймера - отправлять смс

При нажатии Отмена - выходить из программы
[решено] MsgBox (Ok, Cancel) с обратным отсчетом времени.




В чём проблема, функция возвращет те же значения что и обычная MsgBox:





Код:

Код: Выделить всё

$isSend = _MsgBoxTimer(1, $smsWinTitle, $smsMessage, $Wait)
If $isSend = 2 Then Exit ;нажали Отмена
If $isSend = 1 Or $isSend = -1 Then SendSMS_Proc() ;Нажали OK или истекло время


Цитата A4S:



каким bb-кодом правильно подсвечивать синтаксис?
[решено] MsgBox (Ok, Cancel) с обратным отсчетом времени.




Никаким, это отдельная утилита Au3ToPost.
Аватара пользователя
Creat0R

Re: [решено] MsgBox (Ok, Cancel) с обратным отсчетом времени.

Сообщение Creat0R »

В моём примере функция $isSend возвращает 2 и когда истек таймер и когда нажата кнопка отмены

то есть $isSend = -1 такого нет.





твой пример мне не подходит к сожалению, т.к. exe должен быть автономен (работать без AutoIt)

FlatX007, спасибо за вариант, но хотелось бы обойтись без рисования GUI, обычным msgbox
Аватара пользователя
A4S

Re: [решено] MsgBox (Ok, Cancel) с обратным отсчетом времени.

Сообщение A4S »

Цитата A4S:



В моём примере функция $isSend возвращает 2 и когда истек таймер и когда нажата кнопка отмены

то есть $isSend = -1 такого нет.
[решено] MsgBox (Ok, Cancel) с обратным отсчетом времени.




И что? а тут есть, в чём проблема? Вместо проверки «If $isSend = 2» можно проверять «If $isSend 1», это индикация отмены.




Цитата A4S:



твой пример мне не подходит к сожалению, т.к. exe должен быть автономен (работать без AutoIt)
[решено] MsgBox (Ok, Cancel) с обратным отсчетом времени.




Вы хоть немного имеете понятие о чём говорите? В чём проблема скомпилировать этот код?
Аватара пользователя
Creat0R

Re: [решено] MsgBox (Ok, Cancel) с обратным отсчетом времени.

Сообщение Creat0R »

Цитата A4S:



твой пример мне не подходит к сожалению, т.к. exe должен быть автономен (работать без AutoIt)
[решено] MsgBox (Ok, Cancel) с обратным отсчетом времени.




Лучшего примера для своей задачи ты не найдеш!

P.S. Если твой код должен работать без Autoit, так пиши его на другом языке, или используй батник, или winapi.
Ответить

Вернуться в «AutoIt»