Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   MSGBOX с отсчетом на кнопке по умолчанию (http://forum.oszone.net/showthread.php?t=184166)

Smokie_id11243755 29-08-2010 19:08 1484342

MSGBOX с отсчетом на кнопке по умолчанию
 
Помогите пожалуйста. То ли я не понимаю, то ли стандартными функциями это никак не сделать.

Нужен диалог с двумя кнопками. Текст кнопок можно задать. И чтоб на кнопке по умолчанию шел отсчет.

Medic84 29-08-2010 20:35 1484396

Не, такого диалога нет :)
Напиши его :)

Creat0R 29-08-2010 21:22 1484425

А теперь посмотрите ниже на «Похожие темы», там есть тема: [решено] MsgBox (Ok, Cancel) с обратным отсчетом времени.
Поиском нужно пользоваться перед созданием тем.

Smokie_id11243755 30-08-2010 08:43 1484633

пользовался... не нашел 'msgbox с отсчетом' вот и решил создать.

в похожей теме он какойто глюкавый. первый предложенный вариант, хоть и не глюкавый, вообще требует установленной autoit)) неужели невозможно сделать лучше?

FlatX007 30-08-2010 15:11 1484895

Цитата:

Цитата Smokie_id11243755
установленной autoit »

Вы думаете тут дураки сидят ?! с какой радости AutoIT должен быть установлен. Всё работает из скомпилированного скрипта.

Smokie_id11243755 30-08-2010 15:53 1484933

ой, извиняюсь. ступил насчет этой строки и дже не проверил

Код:

    Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & @TempDir & '\MiscMMB.tmp"')
а можно ли сделать как нибудь без создания нового файла? и чтобы прям на кнопке отсчет шел?

Creat0R 30-08-2010 17:09 1484984

Цитата:

Цитата Smokie_id11243755
не нашел 'msgbox с отсчетом' вот и решил создать »

А если поискать просто по MsgBox?

Цитата:

Цитата Smokie_id11243755
можно ли сделать как нибудь без создания нового файла? и чтобы прям на кнопке отсчет шел? »

Можно.

Код:

#Include <GUIConstantsEx.au3>
#Include <ButtonConstants.au3>
#Include <WindowsConstants.au3>

$Title = "My Custom MsgBox"
$Prompt = "Are you sure?"
$CheckBoxText = "Don't show again"

$hWnd = WinGetHandle("")

$Ask = _GUIMsgBox(256+36, 2, $Title, $Prompt, 330, 120, $CheckBoxText, 10, $hWnd, "OK", "Cancel")

$CheckBitAnd = BitAND($Ask, 8)

$Var = "Pressed "

Select
        Case $Ask - $CheckBitAnd = 1
                $Var &= "'OK'"
        Case $Ask - $CheckBitAnd = 6
                $Var &= "'Yes' or 'OK'"
        Case $Ask - $CheckBitAnd = 7
                $Var &= "'No' or 'Cancel'"
EndSelect

If $CheckBitAnd = 8 Then $Var &= @LF & "And CheckBox <" & $CheckBoxText & "> was Checked"

_GUIMsgBox(64, 1, "Message", "Returned values:" & @LF & @LF & $Var)

Func _GUIMsgBox($iIcoType,$iBtnNum,$sTitle,$sTxt,$iW=350,$iH=130,$sCB_Txt=-1,$iTimer=-1,$hWnd=0,$sB1Txt=-1,$sB2Txt=-1,$nExStyle=-1)
        Local $nYes_Button, $nNo_Button, $nOK_Button, $nCheckBox=-1, $hMsgBox_GUI, $iGuiHeight = $iH
        Local $nStyle = BitOR($WS_CAPTION, $WS_POPUP)
        Local $nMsg, $iReturnVal = 0
        Local $nDefButton, $sDefButtonText = $sB1Txt, $iCounter
        Local $iMessageBeep = -1, $iIcon_Id = 102
       
        Local $iOld_Opt_GOEM = Opt('GuiOnEventMode', 0)
        Local $iOld_Opt_GCOE = Opt('GUICloseOnESC', 0)
       
        If $iBtnNum = 1 Then $nStyle = BitOR($nStyle, $WS_SYSMENU)
       
        If BitAND($iIcoType, 262144) Then
                If $nExStyle = -1 Or $nExStyle = Default Then $nExStyle = 0
                $nExStyle = BitOR($nExStyle, $WS_EX_TOPMOST)
        EndIf
       
        If $sCB_Txt <> -1 Then $iGuiHeight += 25
       
        If $sB1Txt = -1 Then $sB1Txt = 'OK'
        If $sB2Txt = -1 Then $sB2Txt = 'Cancel'
       
        If IsHWnd($hWnd) Then WinSetState($hWnd, "", @SW_DISABLE)
       
        $hMsgBox_GUI = GUICreate($sTitle, $iW, $iGuiHeight, -1, -1, $nStyle, $nExStyle, $hWnd)
       
        Select
                Case $iIcoType = 16 Or $iIcoType = 16 + 256
                        $iIcon_Id = 103
                        $iMessageBeep = 0x00000010
                Case $iIcoType = 32 Or $iIcoType = 32 + 256
                        $iIcon_Id = 102
                        $iMessageBeep = 0x00000020
                Case $iIcoType = 48 Or $iIcoType = 48 + 256
                        $iIcon_Id = 101
                        $iMessageBeep = 0x00000030
                Case $iIcoType = 64 Or $iIcoType = 64 + 256
                        $iIcon_Id = 104
                        $iMessageBeep = 0x00000040
        EndSelect
       
        GUICtrlCreateIcon('user32.dll', $iIcon_Id, 10, 10)
        GUICtrlCreateLabel($sTxt, 70, 15, $iW-80, $iH-50)
       
        Select
                Case $iBtnNum = 2
                        $nYes_Button = GUICtrlCreateButton($sB1Txt, ($iW/2)-90, $iH-35, 70, 20, $BS_DEFPUSHBUTTON)
                        $nDefButton = $nYes_Button
                       
                        Local $iSecButtDeffStyle = 0
                        If BitAND($iIcoType, 256) Then $iSecButtDeffStyle = $BS_DEFPUSHBUTTON
                       
                        $nNo_Button = GUICtrlCreateButton($sB2Txt, ($iW/2)+20, $iH-35, 70, 20, $iSecButtDeffStyle)
                        If BitAND($iIcoType, 256) Then $nDefButton = $nNo_Button
                Case Else
                        $nOK_Button = GUICtrlCreateButton($sB1Txt, ($iW-70)/2, $iH-35, 70, 20)
                        GUICtrlSetState($nOK_Button, $GUI_ONTOP)
                        $nDefButton = $nOK_Button
        EndSelect
       
        If $sCB_Txt <> -1 Then $nCheckBox = GUICtrlCreateCheckbox($sCB_Txt, 15, $iH-10)
       
        GUISetState(@SW_SHOW, $hMsgBox_GUI)
        DllCall("user32.dll", "int", "MessageBeep", "int", $iMessageBeep)
       
        If $iTimer > 0 Then
                $iCounter = $iTimer
                $iTimer = TimerInit()
                $sDefButtonText = GUICtrlRead($nDefButton)
                GUICtrlSetData($nDefButton, $sDefButtonText & ' (' & $iCounter & ')')
        EndIf
       
        While 1
                $nMsg = GUIGetMsg()
               
                If $iTimer > 0 And TimerDiff($iTimer) >= 1000 Then
                        $iTimer = TimerInit()
                        $iCounter -= 1
                        GUICtrlSetData($nDefButton, $sDefButtonText & ' (' & $iCounter & ')')
                        If $iCounter < 0 Then $nMsg = $nDefButton
                EndIf
               
                Select
                        Case $iBtnNum = 2 And $nMsg = $nYes_Button
                                $iReturnVal = 6
                                ExitLoop
                        Case $iBtnNum = 2 And $nMsg = $nNo_Button
                                $iReturnVal = 7
                                ExitLoop
                        Case $nMsg = -3 Or ($nMsg = $nOK_Button And $iBtnNum <> 2)
                                $iReturnVal = 1
                                ExitLoop
                EndSelect
        Wend
       
        If GUICtrlRead($nCheckBox) = 1 Then $iReturnVal += 8
       
        If IsHWnd($hWnd) Then WinSetState($hWnd, "", @SW_ENABLE)
        GUIDelete($hMsgBox_GUI)
       
        If IsHWnd($hWnd) Then GUISwitch($hWnd)
       
        Opt('GuiOnEventMode', $iOld_Opt_GOEM)
        Opt('GUICloseOnESC', $iOld_Opt_GCOE)
       
        Return $iReturnVal
EndFunc


Smokie_id11243755 30-08-2010 18:43 1485041

сэнкс

х) тока ща заметил што создал тему о какомто DLGBOX)

Smallkey 16-01-2012 18:43 1837254

А можно ли сделать так, чтобы отсчет останавливался при нажатии кнопок клавиатуры или клика мышкой? Как обычно и происходит в таких диалогах в полноценных программах

Creat0R 16-01-2012 21:58 1837406

Цитата:

Цитата Smallkey
можно ли сделать так, чтобы отсчет останавливался при нажатии кнопок клавиатуры или клика мышкой? »

Ну если нажать Enter или кликнуть мышкой по одной из кнопок, то так и произойдёт :)

Цитата:

Цитата Smallkey
Как обычно и происходит в таких диалогах в полноценных программах »

Что-то не видел я такого (если я правильно понял).

Smallkey 17-01-2012 22:38 1838416

Ну просто в любом месте щелкнуть если. Или я и вправду путаю...

И кстати: в примерах, приведенных в этой теме, нет этой самой возможности остановки отсчета


Время: 23:10.

Время: 23:10.
© OSzone.net 2001-