Описание функции


MsgBox

Отображает простое окно сообщения с опциональным временем отображения.

MsgBox(flag,'title','text'[,timeout=0[,hwnd]])

Параметры

flag Параметр указывает на тип окна сообщения и возможные комбинации отображаемых кнопок. См. примечания.
title Заголовок окна сообщения.
Если параметр "title" равен ключевому слову Default, будет использован макрос @ScriptName
Если параметр "title" равен ключевому слову Null, то названия в заголовке не будет.
text Текст окна сообщения.
timeout [необязательный] Время ожидания (в секундах), по истечении которого MsgBox будет автоматически закрыт (по умолчанию 0, что означает, что время отображения не ограничено).
hwnd [необязательный] Дескриптор родительского окна. Предотвращает доступ к родительскому окну, пока существует MsgBox.

Возвращаемое значение

Успех:Возвращает ID нажатой кнопки.
Ошибка:Возвращает -1, если истекло время отображения окна сообщения.

Нажатая кнопкаВозвращаемое значение (ID нажатой кнопки)
OK1
Отмена (Cancel)2
Прервать (Abort)3
Повтор (Retry)4
Пропустить (Ignore)5
Да (Yes)6
Нет (No)7
Повторить (Try again) **10
Продолжить (Continue) **11

Примечания

Параметр flag может быть комбинацией следующих значений:

flag, DecОтображаемые кнопкиflag, Hex
0OK0x0
1OK и Отмена0x1
2Прервать, Повтор и Пропустить0x2
3Да, Нет и Отмена0x3
4Да и Нет0x4
5Повтор и Отмена0x5
6 **Отмена, Повторить, Продолжить0x6
Отображаемая иконка
0(Нет)0x0
16"Стоп"0x10
32"Знак вопроса"0x20
48"Предупреждение"0x30
64"Информация", с 'i' в кружке0x40
Выделенная кнопка по умолчанию, вызываемая по Enter
0Первая кнопка0x0
256Вторая кнопка0x100
512Третья кнопка0x200
768Четвёртая кнопка0x300
Модальность
0Приложение (Application)0x0
4096Системная, поверх всех окон (System modal)0x1000
8192Блокирует родительское окно (Task modal)0x2000
Другое
0(ничего специального)0x0
262144MsgBox имеет атрибут "поверх всех окон"0x40000
524288Заголовок и текст выравниваются по правому краю0x80000
1048576Заголовок и текст отображается справа налево0x100000

** Доступно только в Windows 2000/XP и выше.

К примеру, чтобы указать окно SYSTEMMODAL с кнопками Да/Нет, следует указать параметр flag равным 4096+4 (или 4100). При использовании шестнадцатеричного значения - 0x1000+0x4 (или 0x1004).

Окно сообщения появляется в центре экрана с размерами, пропорциональными выводимому тексту. Однако заголовок может быть обрезан при использовании флага SYSTEMMODAL (4096).


Функцию можно подключить через команду exect
Для передачи пустой строки можно воспользоваться ключевым словом Null
Для передачи значения по умолчанию можно воспользоваться ключевым словом Default

См. также

ToolTip, SplashTextOn, _MsgBox, InputBox, [msgbx], shape, style, dilog, stylp, infbx, infht, posts

Примеры:
 Как создать кнопку?


exect=$var_ibutton=MsgBox(4096,'Сообщение','Сделайте~~выбор.') GLOBALEXECT<a> ;; пример окна сообщения

exect=$var_vbutton=InputBox('Вопрос','Где~~вы~~родились?')||$var_input=MsgBox(4096,'Сообщение','$var_button') GLOBALEXECT<a> ;; пример окна ввода информации и вывода в окне сообщения

exect=$var_i=2+5||$var_k=8 exect=$var_i=$var_k*$var_n+55 exect=MsgBox(4096,'Результат','$var_i') ;; пример работы с переменными и математическими действиями

exect=$var_s1='привет'||$var_s2='пока' exect=$var_s1='$var_s2'&'~~'&'$var_s1' exect=MsgBox(4096,'Результат','$var_s1') ;; пример работы с переменными и со строками

exect=$var_ss=StringStripCR('Это~~'&@CR&'строка')||MsgBox(4096,'Результат','$var_ss') ;; пример удаления символа возврата каретки

exect=$var_aa=StringSplit('AAA|BBB|CCC|DDD','|',2)||_ArrayDisplay($var_aa)||$var_s1=_ArrayPop($var_aa)||MsgBox(4096,'Результат','$var_s1')||_ArrayDisplay($var_aa) ;; пример возвращения последнего элемента массива $var_aa, одновременно удаляя его из массива

exect=$var_aa=StringSplit('AAA|BBB|CCC|DDD|EEE|FFF','|',2)||_ArrayDisplay($var_aa)||$var_ii=_ArraySearch($var_aa,'DDD')||MsgBox(4096,'Результат','$var_ii') ;; пример поиска индекса ячейки, в которой находится фраза 'DDD'

exect=$var_aa=StringSplit('AAA|BBB|CCC|DDD|EEE|FFF','|',2)||_ArrayDisplay($var_aa)||$var_ss=_ArrayToString($var_aa,@TAB,1,5)||MsgBox(4096+64,'Результат','$var_ss') ;; пример объединение ячеек массива в одну строку, разделяя @TAB

exect=$var_ii=##[input=BOX68]||$var_im=$var_ii&'n' pause=$var_im sndps=1 exect=MsgBox(262144+64,'Напоминаю','Прошло~~$var_ii~~минут(а/ы)~~!'&@CR&'Пора~~на~~кухню!') ;; через заданное количество минут выдать сообщение (количество вводится в диалоге)

exect=$var_ii=##[input=BOX68]||$var_im=$var_ii&'n'||$var_pid=@AutoItPID pause=$var_im <TIME=h#-1:h#+1:s5> <IF> [info=s70*$var_pid] = 1 <THEN> sndps=1 <ELSE> close=:PID: <ENDIF> <TIMEEND> exect=MsgBox(262144+64,'Напоминаю','Прошло~~$var_ii~~минут~~!'&@CR&'Пора~~на~~кухню!') ;; через заданное количество минут выдать сообщение (количество вводится в диалоге) + в течении отображения диалога издавать звуковое уведомление $var_ii через каждые 5 секунд

exect=$var_s=ClipGet()||$var_i=StringInStr('$var_s','\')||MsgBox(4096,'Результат','$var_i') GLOBALEXECT<a> ;; пример проверки нахождения в буфере обмена пути или ссылки, проверяется символ "\" , переменная $var_i либо 0 либо число больше 0

exect=$var_i=Execute(ClipGet())||MsgBox(4096,'Результат','$var_i') bufsr=##$var_i ;; выполнить математическое выражение в буфере обмена, к примеру: (1+2)*3+2^3

exect=$var_i=Execute(ClipGet()+1)||MsgBox(4096,'Результат','$var_i') bufsr=##$var_i ;; прибавить к числу в буфере обмена единицу

exect=Run('notepad.exe')||$var_h=WinWaitActive('[CLASS:Notepad]')||ControlSend(Eval('var_h'),Null,'Edit1','закройте~~окно')||WinWaitClose(Eval('var_h'))||MsgBox(4096,Null,'окно~~закрыто') ;; запустить "Блокнот", дождаться закрытие окна пользователем

exect=Run('notepad.exe')||$var_h=WinWaitActive('[CLASS:Notepad]')||ControlSend(Eval('var_h'),Null,'Edit1','сверните~~окно')||WinWaitNotActive(Eval('var_h'))||MsgBox(4096,Null,'окно~~не~~активно') ;; запустить "Блокнот", дождаться когда окно не будет активным

exect=ProcessWait('notepad.exe',3)||MsgBox(4096,Null,'процесс~~существует') ;; ожидает запуска "Блокнота"

exect=$var_ipid=Run('notepad.exe')||ProcessWaitClose($var_ipid)||MsgBox(4096,Null,'процесс~~завершился') ;; запускает "Блокнот" и ожидает его закрытия

exect=RunWait('notepad.exe')||MsgBox(4096,Null,'программа~~закрыта') ;; запускает "Блокнот" и приостанавливает работу утилиты до его закрытия

exect=$var_a=5||$var_b=6||$var_imax=$var_a>$var_b?$var_a:$var_b||MsgBox(4096,'Сообщение','Максимальное~~число~~'&$var_imax) ;; определить максимальное число с помощью тернарного условия

exect=$var_a=5||$var_b=6||$var_imin=$var_a<$var_b?$var_a:$var_b||MsgBox(4096,'Сообщение','Минимальное~~число~~'&$var_imin) ;; определить минимальное число с помощью тернарного условия

exect=$var_a=25||$var_b=5||$var_icheck=(Int($var_a/$var_b)<>$var_a/$var_b)?0:1||MsgBox(4096,'Сообщение','Делимость.~~Результат:~~'&$var_icheck) ;; определить делимость одного числа на другое (1 - делится, 0 - не делится)

exect=$var_nradian=3||$var_ngrad=$var_nradian*57.2957795130823||MsgBox(4096,'Сообщение','Градусы:~~'&$var_ngrad) ;; получить градусы из заданных радиан

exect=$var_ngrad=180||$var_nradian=$var_ngrad/57.2957795130823||MsgBox(4096,'Сообщение','Радианы:~~'&$var_nradian) ;; получить радианы из заданных градусов

imgpr=1 <IF> <info=f1%P%N//> = clpget <THEN> exect=$var_ibutton=MsgBox(4096,'Сообщение','Контрольные~~суммы~~совпадают.') <ELSE> exect=$var_ibutton=MsgBox(4096,'Сообщение','Контрольные~~суммы~~не~~совпадают.') <ENDIF> ;; сравнить контрольную сумму MD5 файла с контрольной суммой из буфера обмена, сообщить результат в окне системного образца

exect=$var_n=MsgBox(4+32+262144,'Сообщение','Продолжить~~работу?',20)||$var_i=$var_n=7?_Exit():1||_ViewValues('Работа~~продолжена') ;; пример вызова диалога, завершение при нажатии на кнопку "Нет", продолжение при нажатии на кнопку "Да", при истечении 20 секунд после появления диалога так же продолжения работы...

exect=$var_n=MsgBox(4+32+262144,'Сообщение','Отменить~~задачу?',20)||$var_i=$var_n=6?_Exit():1||_ViewValues('Работа~~продолжена') ;; пример вызова диалога, завершение при нажатии на кнопку "Да", продолжение при нажатии на кнопку "Нет", при истечении 20 секунд после появления диалога так же продолжения работы...

exect=$var_n=MsgBox(4+32+262144,'Сообщение','Заменить~~содержимое~~в~~папке~~ПН?')||$var_i=$var_n=7?_Exit():1 delss=PS<%T%M>||1 copys=FOLDC<%L>||%T%M//0 beepss ;; заменить содержимое каталога в панели назначения на содержимое выделенных папок в активной панели

exect=$var_sext=##<info=f230%P%N//>||MsgBox(4096+64,'Информация',StringUpper('$var_sext')&'~~-~~оригинальное~~расширение~~файла:'&@CRLF&@CRLF&'%P%N') ;; получение оригинального расширения для файла под курсором

exect=$var_n=MsgBox(4+32+262144,'Сообщение','Удалить~~текущую~~папку?')||$var_i=$var_n=7?_Exit():1 tcimg=$cm2002 delsm="%p"||1||upd<1> ;; удалить текущую папку (возможность отмены действия)

<IF> <info=f1%P%N//> = <info=f1%T%M//> <THEN> exect=MsgBox(64+4096,'Результат','Контрольные~~суммы~~совпадают.') <ELSE> exect=MsgBox(48+4096,'Результат','Контрольные~~суммы~~не~~совпадают.') <ENDIF> ;; сравнить контрольные суммы MD5 двух файлов в разных панелях, в сплывающем окне с ручным закрытием, сообщить результат (щелчок сначала по одному файлу, переход в другую панель к проверяемому файлу)

slist=%WL <IF> <info=f1GLOBALSLIST<1>//> = <info=f1GLOBALSLIST<2>//> <THEN> exect=MsgBox(64+4096,'Результат','Контрольные~~суммы~~совпадают.') <ELSE> exect=MsgBox(48+4096,'Результат','Контрольные~~суммы~~не~~совпадают.') <ENDIF> ;; сравнить контрольные суммы MD5 двух выделенных файлов, в сплывающем окне с ручным закрытием, сообщить результат

exect=$var_s=ClipGet()||$var_i=StringRegExp(ClipGet(),'([^A-Za-z\d])',0)?MsgBox(48+4096,'Результат','Число~~в~~буфере~~не~~является~~хэшем.')&_Exit():1||$var_i=StringLen('$var_s')||$var_n=$var_i=8?3:($var_i=32?1:($var_i=64?6:($var_i=128?8:MsgBox(48+4096,'Результат','Число~~в~~буфере~~не подходит~~под~~условие~~проверки.')&_Exit())))||$var_path=$var_n&'%P%N' <IF> <info=f$var_path|1//> = $var_s <THEN> exect=MsgBox(64+4096,'Результат','Контрольные~~суммы~~совпадают.') <ELSE> exect=MsgBox(48+4096,'Результат','Контрольные~~суммы~~не~~совпадают.') <ENDIF> ;; сравнить контрольные суммы файла под курсором и буфера обмена, в зависимости от длины строки буфера: если 8, то сравнение происходит по CRC32, если 32 - MD5, если 64 - SHA256, если 128 - SHA512, в сплывающем окне с ручным закрытием, сообщить результат

textv=C:\Test.txt exect=$var_n=MsgBox(4+32+262144,'Сообщение','Продолжить~~выполнение~~команды?')||$var_i=$var_n=7?_Exit():1 sends=C:\Test.txt??-1||&&[^\r\n]+=!! textt=C:\Test.txt||##TOTALCMD#BAR#DATA@CRLFGLOBALSENDS<x2>@CRLFGLOBALSENDS<x3>@CRLFGLOBALSENDS<x1>@CRLFGLOBALSENDS<x6>@CRLFGLOBALSENDS<x4> ;; открыть в просмотрщике файл C:\Test.txt , закрыть просмотрщик, в появившемся диалоговом окне выбрать продолжение команды или отмена, если продолжить, то в содержимом файла C:\Test.txt оставить все, что после первого знака равенства и манипулируя полученными строками привести их к желаемому виду

exect=$var_n=MsgBox(4+32+262144,'Сообщение','Отменить~~последнее~~переименование?')||$var_i=$var_n=7?_Exit():1 renms=$f200Lists\AfterRenaming.txt||list<$f200Lists\BeforeRenaming.txt>||upd<1> ;; отменить последнее переименование осуществленное командами TCIMG (требуется подтверждение)

exect=$var_i=##<info=t1-1>||$var_s=$var_i=4?'v,1,4':($var_i>4?'v,3,5':MsgBox(4096,'Ошибка','Э-э-э,~~а~~где~~нормальные~~данные?')&_Exit())||_ViewValues('$var_s') rends=-1!!-1||?T|$var_s GLOBALRENDS<a> ;; если в буфера обмена 4 строки, то выполнить одну команду, если больше 4, то другую, если меньше, то сообщение с выходом

exect=$var_n=MsgBox(4+32+262144,'Сообщение','Удалить~~файлы~~с~~счётчиком~~_№~~в~~конце~~имени?')||$var_i=$var_n=7?_Exit():1 delss=PS<"%p"//1//0>||1||test<1n!!_\d+$>||upd<1> ;; удалить файлы в активной панели с нумерацией _№ в конце имени (без рекурсии)

exect=$var_n=MsgBox(4+32+262144,'Сообщение','Удалить~~файлы~~с~~цифрами~~в~~именах?')||$var_i=$var_n=7?_Exit():1 delss=PS<"%p"//1//0>||1||test<1n!!\d>||upd<1> ;; в активной панели удалить файлы в имени которых есть цифры (без рекурсии)

exect=$var_n=MsgBox(4+32+262144,'Сообщение','Удалить~~файлы~~с~~цифрами~~в~~именах?')||$var_i=$var_n=7?_Exit():1 delss=PS<"%p"//1//0>||1||test<1n!!\d>||upd<1> ;; в активной панели удалить файлы в имени которых есть цифры (с запросом для подтверждения)

imgpr=1 start=FLAC||-s||--ignore-chunk-sizes||-8||list<%L>||%%d||&&hide||&&wait exect=$var_n=MsgBox(4+32+262144,'Сообщение','Удалить~~исходные~~файлы~~WAV?')||$var_i=$var_n=7?_Exit():1 delss=%WL||1 ;; конвертировать выделенные файлы WAV в формат FLAC с максимальной компрессией с сохранением в активной панели, с удалением (требуется подтверждение) исходных WAV в корзину (используется кодер/декодер FLAC)

exect=$var_n=MsgBox(4+32+262144,'Сообщение','Удалить~~выделенные~~объекты?')||$var_i=$var_n=7?_Exit():1 delss=%WL||1 ;; удалить выделенные объекты минуя корзину (требуется подтверждение)

imgpr=1 slist=%WL xlist=%WL||##path<4> <FOR> 1 <TO> GLOBALSLIST<0> start=FFmpeg||-i||GLOBALSLIST<:INDEX:>||-acodec||libmp3lame||-q:a||[input=BOX84]||GLOBALXLIST<:INDEX:>.mp3||&&hide||&&wait <NEXT> exect=$var_n=MsgBox(4+32+262144,'Сообщение','Удалить~~исходные~~файлы?')||$var_i=$var_n=7?_Exit():1 delss=$GLOBALSLIST||1||upd<1> ;; конвертировать выделенные файлы (медиаконтент) в mp3 с переменным битрейтом (выбор в диалоговом окне), с сохранением в активной панели + удаление исходных файлов (требуется подтверждение)
marks=1||test<1n!!\(\d+\)$> exect=$var_n=MsgBox(4+32+262144,'Сообщение','Удалить~~файлы~~с~~счётчиком~~()~~в~~конце~~имён?')||$var_i=$var_n=7?_Exit():1 delss=[tc=AL]||1||upd<1> ;; удалить файлы с счётчиком (№) в конце имён

exect=MsgBox(4096+64,'Результат','Заданная~~фраза~~встречается~~в~~файле~~'&(StringSplit(FileRead('%P%N'),'привет',1)[0]-1)&'~~раз(а)') ;; получить количество раз встречающейся фразы в файле под курсором

exect=MsgBox(4096+64,'Результат','Фраза~~из~~буфера~~обмена~~встречается~~в~~файле~~'&(StringSplit(FileRead('%P%N'),ClipGet(),1)[0]-1)&'~~раз(а)') ;; получить количество раз встречающейся фразы из буфера обмена в файле под курсором

exect=MsgBox(4096+64,Null,'Hello') ;; пример сообщения без названия заголовка

exect=MsgBox(4096+64,Default,'Hello') ;; пример сообщения с заголовком имени утилиты

exect=$var_result=MsgBox(4096+64+1,Null,'Hello',0,WinGetHandle('[CLASS:TTOTAL_CMD]'))||_ViewValues($var_result) ;; пример диалога с блокировкой окна (предотвращает доступ к указанному родительскому окну, пока существует MsgBox)

exect=$var_result=MsgBox(16384+4096+64+1,Null,'Hello',0,WinGetHandle('[CLASS:AkelPad4]'))||_ViewValues($var_result) ;; пример диалога с блокировкой окна (предотвращает доступ к указанному родительскому окну, пока существует MsgBox)


© Аверин Андрей для Total Commander Image  Averin-And@yandex.ru