Диалоговые окна (Dialogs)
Автор: Ceta Перевод: Basilisk
Дата: 11/10/1999
URL:http://irc-scripts.com/articles/view.php3?id=9
С появлением новой версии mIRC, 5.5 появилась новая возможность - диалоговые окна, диалоги.
Это было то, что требуется для написания скриптов более высокого уровня, для тех, кто до сих пор пытался использовать графические окна для создания более дружественного интерфейса с пользователем.
Для нормального восприятия этой статьи неплохо было бы знать основы написания скриптов. Не рекомендуется для новичков в этом деле. Следующие разделы написания скриптов для mIRC неплохо было бы знать для нормального изучения этой статьи.
Использование переменныхидентификаторов (variablesidentifiers)
Знание алиасов (aliases)
Базовые знания скриптов (remote)
Для работы всего, что приведено в примерах требуется наличие mIRC 5.51, но не менее, т.к. со времён 5.5 были некоторые добавления, касающиеся диалогов. И вообще, хорошо писать скрипты используя последнюю версию mIRC, которая всегда доступна на http://www.mirc.com/get.html.
Для тех, кто все ещё интересуется, что же это за такие диалоговые окна - продолжаете читать и вставлять примеры в редакторе mIRC. Вы получите ясную картину и понятие, что же это за такое.
Ну хватит предыстории, приступим к скриптописательству. Начнём это с простейшего диалогового окна "введите пароль".
Это будет диалоговое окно, которое появляется и запрашивает у человека пароль, который затем хранится в переменной. Вставьте всё это в mIRC редакторе в раздел remote:
alias enterpass dialog -m Enterpass Enterpass
dialog Enterpass {
title "Введите ваш пароль"
size -1 -1 300 60
edit "",1,20 10 260 20, pass
button "&OK",2,21 30 129 17, ok
button "&Cancel",3,150 30 130 17, cancel
}
Ну графический интерфейс для нашего диалогового окна завершён. Чтобы посмотреть на это творение просто наберите /enterpass в любом окне.
А сейчас нам предстоит разобраться, что же всё это значит.
В первой строке мы видим алиас. Алиас называется enterpass и делает немодальное диалоговое окно под названием Enterpass с таблицей, имеющей название Enterpass. Большинство диалоговых меню, которые делаются являются немодальными. Вообще немодальное диалоговое окно - такое окно, которое не возвращает никакого значения в вызывающий скрипт. Формат этого таков: /dialog -m [название] [таблица]
А сейчас нам надо создать таблицу диалогового окна. Всё это описано в файле справки от mIRC, но рассмотрим подробнее:
Первая часть - это заголовок (title) появляющийся вверху окна.
Далее нам надо задать размер окна (size), а используя -1 and -1 мы можем отцентрировать наше окно. Следующие 2 значения - это значение ширины и высоты окна.
На следующей строке мы создаём editbox - "то, куда быквы пишут" (с). В качестве параметров задаём идентификатор, координаты и снова ширину и высоту. Идентификатор - это число, с помощью которой различают элементы диалогового окна. Т.к. в окне может быть только одно название и одни размеры, для предыдущих строк задавать идентификатор не нужно, но требуется для любых других элементов. "pass" в конце строки означает, что все вводимые символы будут заменяться звёздочками ("*").
Следующий элемент, который мы создаём - кнопка под названием &OK. Символ "&" в названии перед буквой "O", означает, что она будет подчёркнута и будет горячей клавишей, доступной в комбинации с Alt (т.е. нажатие Alt+O нажмёт кнопку). А "ok" в конце описания означает, что кнопка это кнопка типа "ОК".
Следующая строка, вообще говоря, делает похожую кнопку и не нуждается в дополнительных комментариях.
Но как вы уже могли заметить, ввод пароля в окне не делает абсолютно ничего. Ведь нами диалог только нарисован. Сейчас пойдём дальше. Вставьте следующую строку в секцию remote:
on 1:DIALOG:Enterpass:sclick:2:{ set %password $did(Enterpass,1).text }
Что это значит? Всё просто. При одиночном нажатии на кнопку с идентификатором 2 (а ведь это кнопка OK), в переменную %password заносится текст, содержавшийся на этот момент времени в строке и идентификатором 1 (наш editbox)
Здесь используются как события в диалоговых окнах, так и идентификатор $did(). Рассмотрим по порядку.
Для событий в диалоговых окнах используется следующая конструкция:
on 1:DIALOG:Название:Событие:Идентификатор:{ Команды }
Название нашего диалога Enterpass. Событие, которое происходит - sclick (это означает одиночный щелчок мышью)
Допустимые события - init, edit, sclick, dclick.(Подробную информацию смотрите в справке. Там это всё детально описано)
Идентификатор элемента, который мы хотим использовать - 2. Это наша кнопка ОК. Поэтому как только пользователь нажимает кнопку, пароль сохраняется. При нажатии Cancel ничего не происходит.
Конечно, пароль ввести проще используя такую конструкцию:
alias enterpass set %password $?*="Enter your password"
Но это всего лишь пример, которыйможет быть усложнён, в отличие от последнего варианта, который не позволяет практически никакой модернизации.
Как разъяснялось выше, это пример немодального диалогового окна. Но есть ещё один тип диалоговых окон - модальные. Для скрипта, рассмотренного в качестве примера, наверное, лучше использовать именно модальное диалоговое окно.
Мы можем модернизировать скрипт, для создания модального окна. Для этого нам необходимо изменить всего лишь одну строку. Перейдите к той строке, где мы описывали editbox и добавьте ",result". Таким образом, строка примет такой вид:
edit "",1,20 10 260 20, pass, result
А теперь добавьте ещё одну строку в remote:
alias enterpass2 %password = $dialog(Enterpass,Enterpass)
Теперь вызов /enterpass2 нарисует нам такое же диалоговое окно, и всё, что было введено, сохранится в переменной %password.
Добавление слова "result" информирует скрипт о том, что информация должна быть сохранена, при выходе из скрипта. Нажатие Cancel в переменную %password занесёт "".
Модальные диалоговые окна гораздо более удобны для такого типа скриптов, потому что они используются для непосредственного ввода информации от пользователя. Но с другой стороны, немодальные диалоговые