Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] MsgBox (Ok, Cancel) с обратным отсчетом времени.

Ответить
Настройки темы
[решено] MsgBox (Ok, Cancel) с обратным отсчетом времени.
A4S A4S вне форума

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Перерыл гугл, но не нашел изящного решения данной задачи.
Необходимо сделать форму вроде этой:



PHP код: Выделить весь код

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

Global $Wait 10
Global $smsMessage 'Тема: ' $subject & @CRLF 'Сообщение: ' $sms & @CRLF "Время до отправки SMS: "
Global $smsMessagEnd "сек. " & @CRLF & @CRLF "Нажмите Отмена, если Вы НЕ хотите получить эту СМС"
Global $smsWinTitle "Оповещение SMS"
$isSend MsgBox1$smsWinTitle$smsMessage $Wait ' ' $smsMessagEnd

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

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

Отправлено: 18:13, 01-09-2009

 

Аватара для FlatX007

Ветеран


Сообщения: 553
Благодарности: 87

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Dim $iMsgBoxAnswer
$iMsgBoxAnswer = MsgBox(5244593,Default,"Тут текст",10)
Select
   Case $iMsgBoxAnswer = 1  ;OK

   Case $iMsgBoxAnswer = 2  ;Cancel

   Case $iMsgBoxAnswer = -1 ;Timeout

EndSelect

Отправлено: 18:54, 01-09-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

A4S A4S вне форума Автор темы

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Я же написал:

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

Отправлено: 18:57, 01-09-2009 | #3


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


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

Код: Выделить весь код
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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:10, 01-09-2009 | #4

A4S A4S вне форума Автор темы

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


эм, мне необходимо автономное от самого 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 1001500 )
_Timer_SetTimer($gui,1000,"changetitle")
$isSend MsgBox256 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($smsWinTitleThen 
        $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-кодом правильно подсвечивать синтаксис?

Отправлено: 19:18, 01-09-2009 | #5


Аватара для FlatX007

Ветеран


Сообщения: 553
Благодарности: 87

Профиль | Отправить PM | Цитировать


Если по проще то это так

Сам подгониш под себя ... таймер тикает

Код: Выделить весь код
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Global $subject = "Заголовок", $sms = "Проверка"
Global $Wait = 10
Global $smsMessage = 'Тема: ' & $subject & @CRLF & 'Сообщение: ' & $sms & @CRLF & "Время до отправки SMS: "
Global $smsMessagEnd = "сек. " & @CRLF & @CRLF & "Нажмите Отмена, если Вы НЕ хотите получить эту СМС"
Global $smsWinTitle = "Оповещение SMS"

$nForm = GUICreate($smsWinTitle, 442, 147, 192, 124)
$Button1 = GUICtrlCreateButton("OK", 272, 112, 75, 25)
$Button2 = GUICtrlCreateButton("Отмена", 360, 112, 75, 25)
$Label1 = GUICtrlCreateLabel("", 8, 8, 420, 81)
GUISetState(@SW_SHOW)

$Begin = TimerInit()

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE, $Button2
            Exit

        Case 0
            $vTime = $Wait - Round(Round(TimerDiff($Begin)) / 1024)
            GUICtrlSetData($Label1, "Времени осталось :" & $vTime)
            If $vTime = 0 Then
                $isSend = MsgBox( 1, $smsWinTitle, $smsMessage & $Wait & ' ' & $smsMessagEnd)
                Exit
            EndIf

    EndSwitch
WEnd

Отправлено: 19:23, 01-09-2009 | #6


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата A4S:
мне необходимо автономное от самого autoit приложение »
Я привёл то, что вам нужно (судя по описанию задачи).

Цитата A4S:
По ОК или по истечении таймера - отправлять смс
При нажатии Отмена - выходить из программы »
В чём проблема, функция возвращет те же значения что и обычная MsgBox:

Код: Выделить весь код
$isSend = _MsgBoxTimer(1, $smsWinTitle, $smsMessage, $Wait)
If $isSend = 2 Then Exit ;нажали Отмена

If $isSend = 1 Or $isSend = -1 Then SendSMS_Proc() ;Нажали OK или истекло время
Цитата A4S:
каким bb-кодом правильно подсвечивать синтаксис? »
Никаким, это отдельная утилита Au3ToPost.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 19:29, 01-09-2009 | #7

A4S A4S вне форума Автор темы

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


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


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

Отправлено: 19:38, 01-09-2009 | #8


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата A4S:
В моём примере функция $isSend возвращает 2 и когда истек таймер и когда нажата кнопка отмены
то есть $isSend = -1 такого нет. »
И что? а тут есть, в чём проблема? Вместо проверки «If $isSend = 2» можно проверять «If $isSend <> 1», это индикация отмены.

Цитата A4S:
твой пример мне не подходит к сожалению, т.к. exe должен быть автономен (работать без AutoIt) »
Вы хоть немного имеете понятие о чём говорите? В чём проблема скомпилировать этот код?

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 20:00, 01-09-2009 | #9


Аватара для beve

Старожил


Сообщения: 307
Благодарности: 137

Профиль | Отправить PM | Цитировать


Цитата A4S:
твой пример мне не подходит к сожалению, т.к. exe должен быть автономен (работать без AutoIt) »
Лучшего примера для своей задачи ты не найдеш!
P.S. Если твой код должен работать без Autoit, так пиши его на другом языке, или используй батник, или winapi.

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.


Отправлено: 20:04, 01-09-2009 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] MsgBox (Ok, Cancel) с обратным отсчетом времени.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Изменить текст кнопки MSGBOX'a sashadeg AutoIt 13 20-11-2009 18:00
[решено] Абзац в MsgBox teverus AutoIt 5 13-08-2009 15:05
[решено] MsgBox. Как расположить текст в столбик? Firebolt AutoIt 5 26-05-2009 23:35
Использование кнопок MsgBox'a sashadeg AutoIt 4 15-05-2009 19:29
[решено] Фиксация времени Tosha_l Microsoft Windows 2000/XP 2 09-06-2007 13:06




 
Переход