Войти

Показать полную графическую версию : Изменить текст кнопки MSGBOX'a


sashadeg
19-11-2009, 09:06
Здраствуйте. Нужно изменить текст кнопки Отмена в msgbox'e который вылазит после подключения с интернетом.

8 и 21 строка кода - это тот самый msgbox
Вот код программы:
Opt("TrayAutoPause", 0)
TrayTip("The Internet is Сonnected? v.1.3.beta", "Подождите...", 5, 1)
$var = Ping("www.google.com")

;------------------------------------------------------------------------------------------

If $var<> 0 Then
MsgBox(65, "The Internet is Сonnected?", "Все в порядке, Интрернет работает :)"& @CRLF &"Время подключения: " & @hour &":"& @min &":"&@sec)
Exit
Else
$1=_MsgBoxTimer(36, 'The Internet is Сonnected? v.1.3.beta',"К сожалению, сейчас Интернет не подключен :(" & @CRLF & "Сообщить, если Интернет будет работать?", 5)
EndIf

;------------------------------------------------------------------------------------------

If $1 <> 7 Then
TrayTip("The Internet is Сonnected? v.1.3.beta","Программа ожидает подключения сети Интернет...", 7, 1)
While 1
$var = Ping("www.google.com")
If $var <> 0 Then
MsgBox(65, "The Internet is Сonnected? v.1.3.beta", "Все в порядке, Интрернет работает :)"& @CRLF &"Время подключения: " & @hour &":"& @min &":"&@sec)
Exit
EndIf
sleep(500)
WEnd
Else
TrayTip("The Internet is Сonnected? v.1.3.beta","Bye-bye!!!", 3, 1)
Sleep(3000)
EndIf

Func _MsgBoxTimer($iFlag, $sTitle, $sText, $iMBTimeOut = 0, $hWnd = 0)
Local $hFile, $sMBLine, $sSet_Text, $iRet
$sMBLine = '#NoTrayIcon' & @CRLF
$sMBLine &= '$h_Title = WinGetHandle("' & $sTitle & '")' & @CRLF
$sMBLine &= 'Opt("WinWaitDelay", 1)' & @CRLF
$sMBLine &= 'While Not WinExists($h_Title)' & @CRLF
$sMBLine &= ' Sleep(10)' & @CRLF
$sMBLine &= 'WEnd' & @CRLF

If $iMBTimeOut > 0 Then
$sMBLine &= _
'$sButtonText = ControlGetText($h_Title, "", "Button1")' & @CRLF & _
'ControlSetText($h_Title, "", "Button1", $sButtonText & " (' & $iMBTimeOut & ')")' & @CRLF & _
'$TimerInit = TimerInit()' & @CRLF & _
'$iTime = ' & $iMBTimeOut & @CRLF & _
'While $iTime > 0' & @CRLF & _
' If Not WinExists($h_Title) Then ExitLoop' & @CRLF & _
' $sButtonText = StringRegExpReplace(ControlGetText($h_Title, "", "Button1"), " \(\d+\)$", "")' & @CRLF & _
' ControlSetText($h_Title, "", "Button1", $sButtonText & " (" & $iTime & ")")' & @CRLF & _
' If Not WinExists($h_Title) Then ExitLoop' & @CRLF & _
' Sleep(1000)' & @CRLF & _
' If Not WinExists($h_Title) Then ExitLoop' & @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 ;==>_MsgBoxTimer

Creat0R
19-11-2009, 10:10
Что это? Пример, или тут есть скрытый вопрос? :)

sashadeg
19-11-2009, 10:35
Ой, простите пожалуйста... Почему то не вывелся текст сообщения, щас исправлю

Creator, ты входишь в состав команды MultiAC???Я даже подумать не мог, что на этом форуме увижу ТАКИХ ЛЮДЕЙ!!! РЕСПЕКТ И УВАЖУХА!!!!

beve
19-11-2009, 13:23
Нужно изменить текст кнопки Отмена в msgbox'e который вылазит после подключения с интернетом. »
А по аналогии с функцией _MsgBoxTimer() почему не попробовал сделать? Вот такая функция:Func _MsgBoxSetButtonText($sTitleOfMsgbox)
Local $sMBLineTmp, $hFileTmp,$NewNameOfButton="Закрыть"
$sMBLineTmp = '#NoTrayIcon' & @CRLF
$sMBLineTmp &= '$h_Title = WinGetHandle("' & $sTitleOfMsgbox & '")' & @CRLF
$sMBLineTmp &= 'Opt("WinWaitDelay", 1)' & @CRLF
$sMBLineTmp &= 'While Not WinExists($h_Title)' & @CRLF
$sMBLineTmp &= ' Sleep(10)' & @CRLF
$sMBLineTmp &= 'WEnd' & @CRLF

$sMBLineTmp &= _
'$sButtonText = ControlGetText($h_Title, "", "Button2")' & @CRLF & _
'ControlSetText($h_Title, "", "Button2", "'&$NewNameOfButton & '")' & @CRLF & _
'Exit'
$hFileTmp = FileOpen(@TempDir & '\Tmp.tmp', 2)
FileWrite($hFileTmp, $sMBLineTmp)
FileClose($hFileTmp)
Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & @TempDir & '\Tmp.tmp"')
EndFunc ;==>_MsgBoxSetButtonTextЕсли вставиш вызов этой функции перед твоим msgbox-oм, то будет почти то что нужно (только жалко вот что почти...)

sashadeg
19-11-2009, 14:10
вставляю... и как раз твоё почти тут и происходит (вылетает с ошибкой)

FlatX007
19-11-2009, 16:04
Да, что вы как любите проблемы создавать ... да "нарисуй" в Koda любое окошко с любыми кнопками и любым текстом.

Вот я себе делал функцию для MsgBox`ов ... различает 8 флагов (16, 17, 32, 33, 48, 49, 64, 65), + таймер в резальтате получается вот, что ... смотри присоединённый файл.

Если нужно соберу рабочий пример (скрипт, картинки, Upx, ResHacker...)

FlatX007
19-11-2009, 17:30
Короче вот ...если что нетак необижатса :), времени не было совсем.

Незабываем накидать в папку Utilities - EXEшнички, скачать можно по ссылкам из моей подписи. (всё вместе не уместилось в присоединённый файл)

sashadeg
19-11-2009, 18:32
FlatX007, спасибо большое... хорошие фунуции. НО.
То что у тебя это все очень сложно... тем более у тебя эти функции используют сторониие скрипты...

Сам смысл всей этой темы (и предыдущей которую я создавал) - уместить все в 1 скрипт
Я думаю найдется умелец, который сможет изменить код (см первый пост) чтобы текст кнопки "Отмена" можно было изменить на любой другой...

beve
19-11-2009, 19:21
вставляю... и как раз твоё почти тут и происходит (вылетает с ошибкой) »
Значит не так вставляеш. А нужно бы уже научится. Мое "почти" значит то, что после появления твоего окна, текст на кнопке Отмена изменяется через несколько милисикунд, и это заметно.

FlatX007
19-11-2009, 19:35
уместить все в 1 скрипт »
- так при запуске и будет один рабочий "скрипт" :),(никаких других сторонних, создаваемых, процессов) в чём проблема непонимаю.

В первом посте получается 2 процесса!

sashadeg
19-11-2009, 19:38
Значит не так вставляеш. »
Я вставляю перед строчкой

MsgBox(65, "The Internet is Сonnected?", "Все в порядке, Интрернет работает :)"& @CRLF &"Время подключения: " & @hour &":"& @min &":"&@sec)

sashadeg
20-11-2009, 12:53
beve, что я не правельно делаю???

beve
20-11-2009, 13:04
что я не правельно делаю?Проверь:
Opt("TrayAutoPause", 0)
TrayTip("The Internet is Сonnected? v.1.3.beta", "Подождите...", 5, 1)
$var = Ping("www.google.com")

;------------------------------------------------------------------------------------------

If $var<> 0 Then
_MsgBoxSetButtonText("The Internet is Сonnected?")
MsgBox(65, "The Internet is Сonnected?", "Все в порядке, Интрернет работает :)"& @CRLF &"Время подключения: " & @hour &":"& @min &":"&@sec)
Exit
Else
$1=_MsgBoxTimer(36, 'The Internet is Сonnected? v.1.3.beta',"К сожалению, сейчас Интернет не подключен :(" & @CRLF & "Сообщить, если Интернет будет работать?", 5)
EndIf

;------------------------------------------------------------------------------------------

If $1 <> 7 Then
TrayTip("The Internet is Сonnected? v.1.3.beta","Программа ожидает подключения сети Интернет...", 7, 1)
While 1
$var = Ping("www.google.com")
If $var <> 0 Then
_MsgBoxSetButtonText("The Internet is Сonnected? v.1.3.beta")
MsgBox(65, "The Internet is Сonnected? v.1.3.beta", "Все в порядке, Интрернет работает :)"& @CRLF &"Время подключения: " & @hour &":"& @min &":"&@sec)
Exit
EndIf
sleep(500)
WEnd
Else
TrayTip("The Internet is Сonnected? v.1.3.beta","Bye-bye!!!", 3, 1)
Sleep(3000)
EndIf

Func _MsgBoxTimer($iFlag, $sTitle, $sText, $iMBTimeOut = 0, $hWnd = 0)
Local $hFile, $sMBLine, $sSet_Text, $iRet
$sMBLine = '#NoTrayIcon' & @CRLF
$sMBLine &= '$h_Title = WinGetHandle("' & $sTitle & '")' & @CRLF
$sMBLine &= 'Opt("WinWaitDelay", 1)' & @CRLF
$sMBLine &= 'While Not WinExists($h_Title)' & @CRLF
$sMBLine &= ' Sleep(10)' & @CRLF
$sMBLine &= 'WEnd' & @CRLF

If $iMBTimeOut > 0 Then
$sMBLine &= _
'$sButtonText = ControlGetText($h_Title, "", "Button1")' & @CRLF & _
'ControlSetText($h_Title, "", "Button1", $sButtonText & " (' & $iMBTimeOut & ')")' & @CRLF & _
'$TimerInit = TimerInit()' & @CRLF & _
'$iTime = ' & $iMBTimeOut & @CRLF & _
'While $iTime > 0' & @CRLF & _
' If Not WinExists($h_Title) Then ExitLoop' & @CRLF & _
' $sButtonText = StringRegExpReplace(ControlGetText($h_Title, "", "Button1"), " \(\d+\)$", "")' & @CRLF & _
' ControlSetText($h_Title, "", "Button1", $sButtonText & " (" & $iTime & ")")' & @CRLF & _
' If Not WinExists($h_Title) Then ExitLoop' & @CRLF & _
' Sleep(1000)' & @CRLF & _
' If Not WinExists($h_Title) Then ExitLoop' & @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 ;==>_MsgBoxTimer




Func _MsgBoxSetButtonText($sTitleOfMsgbox)
Local $sMBLineTmp, $hFileTmp,$NewNameOfButton="Закрыть"
$sMBLineTmp = '#NoTrayIcon' & @CRLF
$sMBLineTmp &= '$h_Title = WinGetHandle("' & $sTitleOfMsgbox & '")' & @CRLF
$sMBLineTmp &= 'Opt("WinWaitDelay", 1)' & @CRLF
$sMBLineTmp &= 'While Not WinExists($h_Title)' & @CRLF
$sMBLineTmp &= ' Sleep(10)' & @CRLF
$sMBLineTmp &= 'WEnd' & @CRLF

$sMBLineTmp &= _
'$sButtonText = ControlGetText($h_Title, "", "Button2")' & @CRLF & _
'ControlSetText($h_Title, "", "Button2", "'&$NewNameOfButton & '")' & @CRLF & _
'Exit'
$hFileTmp = FileOpen(@TempDir & '\Tmp.tmp', 2)
FileWrite($hFileTmp, $sMBLineTmp)
FileClose($hFileTmp)
Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & @TempDir & '\Tmp.tmp"')
EndFunc ;==>_MsgBoxSetButtonText

sashadeg
20-11-2009, 18:00
после появления твоего окна, текст на кнопке Отмена изменяется через несколько милисикунд, и это заметно. »
Странно... у меня совсем ничего не заметно... или у меня комп шустрый... Ну всё равно спасибо огромное!




© OSzone.net 2001-2012