ИЗУЧАЕМ
СКРИПТЫ
Урок
1. Начало. Переменные и условия.
Автор -
as-master
Итак, открываем новый раздел уроков,
посвященный написанию скриптов в ММВ. Несмотря на то, что на сайте лежит
немало примеров, показывающих, как решать разные задачи (особенно в разделе
"Отдельные узлы"), на форуме то и дело задаются вопросы о том, как написать
скрипт для той или иной цели. Как показывает опыт, скрипты - самое слабое
место у ММВ-конструкторов. Поэтому мы и решили начать данный цикл уроков.
Всё, что будет рассказано в дальнейшем, относится к версии программы ММВ
4.9.6а, поэтому если у вас более низкая версия, то там может отсутствовать
какая-нибудь команда, или функция, или переменная.
Если вы в программе новичок и не читали раздел
"Уроки Multimedia Builder. Первые проекты", то
ознакомьтесь сначала с ним, так как здесь мы уже не будем объяснять
назначение многих команд ММВ, с которыми уже успели поработать ранее.
Что же такое - скрипт? Это сценарий,
описывающий некоторую последовательность команд, которые будут выполнены
после приведения его в исполнение. То есть будет выполнена не одна команда,
а несколько. Однако в отличие от просто последовательности команд в скрипте
могут быть заданы некоторые условия, при выполнении или не выполнении
которых будут или не будут выполняться те или иные действия (команды).
Существуют и другие условия.
Кроме того, скрипт умеет оперировать с
переменными (иногда их называют параметрами, но это не совсем правильно, ибо
параметром принято считать дополнительное условие запуска какой-нибудь
программы или команды - например, команда выключения
Windows может быть задана с параметром принудительного закрытия
приложений, или какая-то программа может быть запущена с параметром "Во весь
экран", но всё это никакого отношения к ММВ не имеет).
А что же представляет из себя переменная?
Это некоторое выражение, или значение, или величина, содержание которой
может изменяться. Поэтому она так и называется - переменная. А как меняется
её значение, почему? Ну во-первых, это значение вы можете менять сами по
ходу выполнения вашего приложения, а затем, сравнивая это значение с
какими-то постоянными величинами, выполнять или не выполнять те или иные
действия. Во-вторых, это значение может меняться в процессе некоторых
математических расчетов. В-третьих, значение переменной может изменяться
пользователем вашей программы, когда он выполняет какие-то действия - жмёт
кнопки, вводит данные в поля объекта EditBox и т.д.
Переменные в ММВ бывают двух типов -
строковые и числовые. В переменную первого типа могут быть
занесены любые символы - буквы, цифры и т.п. То есть строковой переменной
может быть какой-нибудь текст, или число (но с числом этим проводить
математические действия будет нельзя). В числовую переменную может
быть записано только число. И с ним можно производить некоторые простейшие
математические вычисления.
Скрипты, как и команды, нельзя писать в
произвольной форме (как захотелось). Скрипты и команды имеют определенную,
установленную разработчиками, форму написания, которая называется
синтаксисом, или языком, скриптов и команд. Так, например, чтобы
записать (задать) переменную, нужно знать, как это правильно записать.
Числовая переменная может быть названа любым словом или буквой, а
строковая любым словом или буквой с обязательным добавлением в конце
знака $, который укажет программе, что это
именно строковая переменная. Кроме того, значение строковой
переменной записывается обязательно в одинарных кавычках (этот знак
называется апостроф), тогда как значение числовой переменной пишется
просто числом, без всяких кавычек и апострофов.
Скрипт может быть задан любому объекту, для
которого предусмотрено выполнение действия - кнопке, тексту, картинке,
горячей области, и даже странице проекта. В последнем случае скрипт будет
выполнен немедленно после открытия (запуска)этой страницы. Например, в
свойствах страницы вы можете записать:
А=0
Это уже скрипт! После запуска страницы ваша
программа будет знать, что значение некоторой числовой переменной с именем А
равно нулю. Представьте себе, что на первой странице проекта у вас есть две
кнопки. В одной из них вы пишете скрипт:
А=1
NextPage()
А в другой кнопке только:
NextPage()
Тогда при нажатии на первую кнопку произойдет
переход к следующей странице, и при этом значение переменной А изменится и
станет равным единице. А при нажатии на вторую кнопку произойдет переход к
следующей странице, и при этом значение переменной А не изменится и
останется равным нулю.
Что это нам даёт? Ещё не поняли? Да вот что -
вы сможете управлять программой в зависимости от того, какую кнопку выбрал
пользователь! Для этого нужно написать скрипт, в котором эта переменная А
будет сравниваться, например, с нулём, и если она будет ему равна, то
выполнится одно действие, а если нет - то другое. То есть в скрипте нужно
поставить условие.
Как же записывается условие в ММВ, или каков
его синтаксис? Вот он:
If ()
Then
Else
End
Смотрите внимательно. После слова
If ("Если") в скобках пишется необходимое условие.
И если это условие выполняется, то будет выполнена команда (или
последовательность команд), которые вы напишете сразу после слова
Then ("Тогда"). Только со следующей строки. А если
условие не выполняется, то будут выполнены команды, записанные вами после
слова Else ("В противном случае"). Кстати, это
слово, Else, вы можете и не писать. Тогда условие
будет работать так. Если оно выполняется, то скрипт выполнит всё, что ему
указано после слова Then. А если не выполняется,
скрипт проигнорирует эти команды и перейдёт к исполнению того, что будет
написано после слова End ("Конец условия").
Вернёмся к нашему примеру с двумя кнопками и
параметром А. Представьте себе, что вы делаете некий тест, и на первой
странице проекта у вас написан текст "Выберите ваш пол". А на кнопках
написано: на первой - "Мужчина" и на второй -"Женщина". На следующей
странице вашего проекта-теста вы собираетесь спросить у тестируемого, женат
ли он, или замужем ли, если это женщина. Вот тут-то мы и используем наш
параметр А. Представим себе, что его значение, равное нулю, соответствует
женщине, а единицы - мужчине. Итак, испытуемый выбрал кнопку, произошел
переход к следующей странице, и ваша программа знает значение переменной А -
либо оно сейчас равно нулю, либо единице.
Давайте создадим на второй странице текстовый
объект Paragraph с пустым текстом, а вот в окне сценария этой страницы
напишем следующий скрипт:
If (А=0)
Then
LoadText("Paragraph","Вы
замужем?")
Else
LoadText("Paragraph","Вы
женаты?")
End
Видите, как всё просто! После перехода ко
второй странице выполнится сценарий, в котором значение переменной А
сравнится с нулём и в зависимости от её значения в текстовый объект
Paragraph загрузится нужный вопрос.
Рассмотрим другой пример, уже со строковой
переменной.
Например, на первой странице своего проекта вы
хотите поприветствовать пользователя. Давайте создадим здесь несколько
объектов.
Первый объект - EditBox, то есть редактируемый
текст. Растяните небольшой узкий прямоугольник текста, чтобы туда можно было
вводить одну короткую строку. Пользователь будет вводить туда своё имя.
Зайдите в свойства EditBox, текст по умолчанию удалите, а в нижнем поле
"Вывод", где написано имя переменной EditBox$,
замените это имя на Name$. Тип переменной оставьте
"Строка". Напоминаю, что имя строковой переменной всегда должно оканчиваться
знаком $ - именно он сообщает программе, что эта
переменная - строковая.
Итак, всё, что пользователь введёт в объект
EditBox, будет сразу записано в переменную Name$.
С которой мы и будем оперировать в дальнейшем.
Второй объект - обычный прямоугольник. Он
нужен лишь для того, чтобы объект EditBox не затерялся на странице. Сделайте
прямоугольник чуть больше объекта EditBox, назначьте ему утопленную границу
и поместите его вниз объекта EditBox, под него.
Третий объект - кнопка с надписью
"Здравствуйте!" И последний, четвертый, объект - обычная надпись "Введите
ваше имя:", которую поместите чуть выше поля для ввода имени.
Итак, проект запущен, пользователь ввёл (или
не ввёл) своё имя и нажал на кнопку "Здравствуйте!". Теперь что-то должно
произойти. Для этого кнопке назначим следующий скрипт:
If (Name$=
'') Then
Message("Вы не сообщили
своего имени, и поэтому я буду звать вас Вася Пупкин","")
Else
Hi$='Здравствуйте, ' + Name$ +
'!'
Message("Hi$","")
End
NextPage()
Разобрались? То есть если пользователь ничего
не ввёл в поле и значение Name$='' (внимание,
это не кавычки, а два апострофа, между которыми нет ни одного символа, то
есть значение строковой переменной ничему не равно), тогда программа выдаёт
обиженно-издевательское сообщение "Вы не сообщили своего имени, и поэтому я
буду звать вас Вася Пупкин". В противном случае, если имя введено,
выполнится та часть скрипта, что написана после слова
Else. Здесь сначала задается значение новой строковой переменной
Hi$, которое складывается из трёх составляющих (такая запись через
знаки "плюс" допускается, только добавляемые составляющие должны быть
заключены в апострофы, а если эти составляющие сами являются строковыми
переменными - апострофы не нужны). Между первыми двумя апострофами я
поместил слово "Здравствуйте", запятую и пробел, потом добавил значение
переменной Name$, в которой содержится имя, и в
конце добавил восклицательный знак. Дальше программа выдаст сообщение, в
которое загрузит значение переменной Hi$. Таким
образом, если пользователь ввёл своё имя, например Сергей, и нажал на
кнопку, появится сообщение "Здравствуйте, Сергей!" После этого в обоих
случаях произойдет переход на следующую страницу.
А вот изменённый вариант того же скрипта,
который не даст пользователю попасть на следующую страницу, пока он не
введет своё имя (вообще-то, строго говоря, пользователь сможет ввести вместо
имени любую абракадабру и обмануть программу, но регулировать это уже
архисложно):
If (Name$=
'') Then
Message("Вы не сообщили
своего имени!","")
Return()
Else
Hi$='Здравствуйте, ' + Name$ +
'!'
Message("Hi$","")
End
NextPage()
Смотрите. Если пользователь ничего не ввёл,
выводится напоминание ему об этом, после чего выполняется команда
Return() - то
есть возврат. Запомните эту команду! После того как скрипт "натыкается" на
неё, он не идёт дальше и завершает свою работу. Таким образом, в нашем
примере скрипт не дойдёт до команды NextPage()
и пользователь останется на первой странице.
На форуме часто можно услышать вопрос, как
запаролить проект. То есть разрешить пользователю работать с программой
только в том случае, если он введёт правильный пароль. Вообще-то я не
понимаю, зачем это нужно, ибо я и другие ММВ-креаторы распространяем
свои проекты всегда открыто и бесплатно. Но раз вы просите, давайте
рассмотрим, как это можно реализовать.
Создайте проект из двух страниц. Вторая
страница - это начало вашей программы, куда можно будет попасть только через
пароль. А первая страница - для ввода пароля. На ней создайте четыре
объекта:
1. Объект EditBox для ввода пароля. Имя
строковой переменной оставьте EditBox$, текст по
умолчанию удалите.
2. Прямоугольник с утопленной границей под первым объектом.
3. Объект Paragraph с текстом "Введите пароль и нажмите кнопку
"Войти".
4. Эту самую текстовую кнопку "Войти".
Допустим, пароль на вход в программу -
as-master. Тогда напишем в кнопке "Войти"
следующий скрипт:
If (EditBox$=
'as-master') Then
NextPage()
Else
Message("Пароль не
верный!","")
EditBox$=''
LoadText("EditBox","EditBox$")
End
Если значение эдитбокса равно значению пароля,
тогда выполняется переход к следующей странице и пользователь к работе с
программой допущен. В противном случае - следите за скриптом - сначала
выдается сообщение, что пароль не верный, затем значение переменной EditBox$
задается равным пустому месту, и потом в объект EditBox загружается значение
переменной EditBox$, то есть поле, куда ввели неверный пароль, очищается.
Давайте усложним задачу. Допустим, вы хотите
дать пользователю только три попытки ввести пароль, и если с трёх попыток
правильный пароль не будет введён, программа закроется. Для этого нам
придётся ввести счётчик попыток. Значит, без числовой переменной нам не
обойтись. Назовём эту переменную буквой i и
запишем в старте первой страницы простейший скрипт:
i
=0
То есть когда программу запустили, число
попыток ввести пароль ещё равно нулю. Давайте изменим наш скрипт для кнопки
"Войти". Удалим слово Else и всё, что после него,
кроме слова End, но добавим команду
Return():
If (EditBox$=
'as-master') Then
NextPage()
Return()
End
То есть если пароль правильный, происходит
переход к следующей странице, и скрипт завершает свою работу. Если же пароль
не верный, программа игнорирует эту часть скрипта и идёт работать дальше. А
дальше мы начинаем считать попытки пользователя ввести пароль. Одну попытку
он уже совершил, поэтому напишем:
i=i+1
Этим самым мы увеличиваем значение переменной
i на единицу. То есть при каждой следующей
неверной попытке первая часть скрипта будет пропускаться, а значение
i будет увеличиваться на единицу. Теперь нам
осталось сравнить значение i с числами от одного
до трёх и в зависимости от этого значения вынести пользователю свой вердикт:
If (i=1)
Then
Message("Пароль
неверный. Попробуйте еще раз.","")
EditBox$=''
LoadText("EditBox","EditBox$")
LoadText("Paragraph","Вы
использовали одну попытку. У вас осталось еще две. Введите пароль еще раз.")
End
If (i=2) Then
Message("Пароль неверный.
Попробуйте еще раз.","")
EditBox$=''
LoadText("EditBox","EditBox$")
LoadText("Paragraph","Вы
использовали две попытки. Осталась последняя. Внимательно вводите пароль!")
End
If (i=3) Then
Message("Вы использовали все
три попытки. Программа будет закрыта.","")
Exit()
End
Здесь вы уже и сами разберётесь. В первых двух
случаях, когда значение i равно 1 или 2, выдаётся
сообщение о неверном пароле, очищается поле ввода пароля, и кроме того, в
текстовый объект Paragraph, в котором до этого были написаны слова "Введите
пароль", загружаются другие тексты - предупреждения пользователя о том, что
он уже использовал одну или две попытки.
Ну а когда i станет
равным трём, программа выдаст сообщение, что все попытки использованы, и
закроется.
Попробуйте проделать все описанные здесь
примеры, и вы увидите, как приятно подчиняется вашим задумкам проект
Multimedia Builder.
Продолжение следует.
Написать отзыв
|