Уроки
Написать нам

Урок 1. Начало. Переменные и условия - Уроки мастерства

Итак, открываем новый раздел уроков, посвященный написанию скриптов в ММВ. Несмотря на то, что на сайте лежит немало примеров, показывающих, как решать разные задачи (особенно в разделе "Отдельные узлы"), на форуме то и дело задаются вопросы о том, как написать скрипт для той или иной цели. Как показывает опыт, скрипты - самое слабое место у ММВ-конструкторов. Поэтому мы и решили начать данный цикл уроков. Всё, что будет рассказано в дальнейшем, относится к версии программы ММВ 4.9.6а, поэтому если у вас более низкая версия, то там может отсутствовать какая-нибудь команда, или функция, или переменная.

Если вы в программе новичок и не читали раздел "Уроки Multimedia Builder. Первые проекты", то ознакомьтесь сначала с ним, так как здесь мы уже не будем объяснять назначение многих команд ММВ, с которыми уже успели поработать ранее.

Что же такое - скрипт? Это сценарий, описывающий некоторую последовательность команд, которые будут выполнены после приведения его в исполнение. То есть будет выполнена не одна команда, а несколько. Однако в отличие от просто последовательности команд в скрипте могут быть заданы некоторые условия, при выполнении или не выполнении которых будут или не будут выполняться те или иные действия (команды). Существуют и другие условия.

Кроме того, скрипт умеет оперировать с переменными (иногда их называют параметрами, но это не совсем правильно, ибо параметром принято считать дополнительное условие запуска какой-нибудь программы или команды - например, команда выключения Windows может быть задана с параметром принудительного закрытия приложений, или какая-то программа может быть запущена с параметром "Во весь экран", но всё это никакого отношения к ММВ не имеет).

А что же представляет из себя переменная? Это некоторое выражение, или значение, или величина, содержание которой может изменяться. Поэтому она так и называется - переменная. А как меняется её значение, почему? Ну во-первых, это значение вы можете менять сами по ходу выполнения вашего приложения, а затем, сравнивая это значение с какими-то постоянными величинами, выполнять или не выполнять те или иные действия. Во-вторых, это значение может меняться в процессе некоторых математических расчетов. В-третьих, значение переменной может изменяться пользователем вашей программы, когда он выполняет какие-то действия - жмёт кнопки, вводит данные в поля объекта EditBox и т.д.

Переменные в ММВ бывают двух типов - строковые и числовые. В переменную первого типа могут быть занесены любые символы - буквы, цифры и т.п. То есть строковой переменной может быть какой-нибудь текст, или число (но с числом этим проводить математические действия будет нельзя). В числовую переменную может быть записано только число. И с ним можно производить некоторые простейшие математические вычисления.

Скрипты, как и команды, нельзя писать в произвольной форме (как захотелось). Скрипты и команды имеют определенную, установленную разработчиками, форму написания, которая называется синтаксисом, или языком, скриптов и команд. Так, например, чтобы записать (задать) переменную, нужно знать, как это правильно записать. Числовая переменная может быть названа любым словом или буквой, а строковая любым словом или буквой с обязательным добавлением в конце знака $, который укажет программе, что это именно строковая переменная. Кроме того, значение строковой переменной записывается обязательно в одинарных кавычках (этот знак называется апостроф), тогда как значение числовой переменной пишется просто числом, без всяких кавычек и апострофов.

Скрипт может быть задан любому объекту, для которого предусмотрено выполнение действия - кнопке, тексту, картинке, горячей области, и даже странице проекта. В последнем случае скрипт будет выполнен немедленно после открытия (запуска)этой страницы. Например, в свойствах страницы вы можете записать:

MMB Script
А=0

Это уже скрипт! После запуска страницы ваша программа будет знать, что значение некоторой числовой переменной с именем А равно нулю. Представьте себе, что на первой странице проекта у вас есть две кнопки. В одной из них вы пишете скрипт:

MMB Script
А=1
NextPage()

А в другой кнопке только:

MMB Script
NextPage()

Тогда при нажатии на первую кнопку произойдет переход к следующей странице, и при этом значение переменной А изменится и станет равным единице. А при нажатии на вторую кнопку произойдет переход к следующей странице, и при этом значение переменной А не изменится и останется равным нулю.

Что это нам даёт? Ещё не поняли? Да вот что - вы сможете управлять программой в зависимости от того, какую кнопку выбрал пользователь! Для этого нужно написать скрипт, в котором эта переменная А будет сравниваться, например, с нулём, и если она будет ему равна, то выполнится одно действие, а если нет - то другое. То есть в скрипте нужно поставить условие.

Как же записывается условие в ММВ, или каков его синтаксис? Вот он:

MMB Script
If () Then

Else

End

Смотрите внимательно. После слова If ("Если") в скобках пишется необходимое условие. И если это условие выполняется, то будет выполнена команда (или последовательность команд), которые вы напишете сразу после слова Then ("Тогда"). Только со следующей строки. А если условие не выполняется, то будут выполнены команды, записанные вами после слова Else ("В противном случае"). Кстати, это слово, Else, вы можете и не писать. Тогда условие будет работать так. Если оно выполняется, то скрипт выполнит всё, что ему указано после слова Then. А если не выполняется, скрипт проигнорирует эти команды и перейдёт к исполнению того, что будет написано после слова End ("Конец условия").

Вернёмся к нашему примеру с двумя кнопками и параметром А. Представьте себе, что вы делаете некий тест, и на первой странице проекта у вас написан текст "Выберите ваш пол". А на кнопках написано: на первой - "Мужчина" и на второй -"Женщина". На следующей странице вашего проекта-теста вы собираетесь спросить у тестируемого, женат ли он, или замужем ли, если это женщина. Вот тут-то мы и используем наш параметр А. Представим себе, что его значение, равное нулю, соответствует женщине, а единицы - мужчине. Итак, испытуемый выбрал кнопку, произошел переход к следующей странице, и ваша программа знает значение переменной А - либо оно сейчас равно нулю, либо единице.

Давайте создадим на второй странице текстовый объект Paragraph с пустым текстом, а вот в окне сценария этой страницы напишем следующий скрипт:

MMB Script
If (А=0) Then
  LoadText("Paragraph","Вы замужем?")
Else
  LoadText("Paragraph","Вы женаты?")
End

Видите, как всё просто! После перехода ко второй странице выполнится сценарий, в котором значение переменной А сравнится с нулём и в зависимости от её значения в текстовый объект Paragraph загрузится нужный вопрос.

Рассмотрим другой пример, уже со строковой переменной.

Например, на первой странице своего проекта вы хотите поприветствовать пользователя. Давайте создадим здесь несколько объектов.

Первый объект - EditBox, то есть редактируемый текст. Растяните небольшой узкий прямоугольник текста, чтобы туда можно было вводить одну короткую строку. Пользователь будет вводить туда своё имя. Зайдите в свойства EditBox, текст по умолчанию удалите, а в нижнем поле "Вывод", где написано имя переменной EditBox$, замените это имя на Name$. Тип переменной оставьте "Строка". Напоминаю, что имя строковой переменной всегда должно оканчиваться знаком $ - именно он сообщает программе, что эта переменная - строковая.

Итак, всё, что пользователь введёт в объект EditBox, будет сразу записано в переменную Name$. С которой мы и будем оперировать в дальнейшем.

Второй объект - обычный прямоугольник. Он нужен лишь для того, чтобы объект EditBox не затерялся на странице. Сделайте прямоугольник чуть больше объекта EditBox, назначьте ему утопленную границу и поместите его вниз объекта EditBox, под него.

Третий объект - кнопка с надписью "Здравствуйте!" И последний, четвертый, объект - обычная надпись "Введите ваше имя:", которую поместите чуть выше поля для ввода имени.

Итак, проект запущен, пользователь ввёл (или не ввёл) своё имя и нажал на кнопку "Здравствуйте!". Теперь что-то должно произойти. Для этого кнопке назначим следующий скрипт:

MMB Script
If (Name$='') Then
  Message("Вы не сообщили своего имени, и поэтому я буду звать вас Вася Пупкин","")
Else
  Hi$='Здравствуйте, ' + Name$ + '!'
  Message("Hi$","")
End
NextPage()

Разобрались? То есть если пользователь ничего не ввёл в поле и значение Name$='' (внимание, это не кавычки, а два апострофа, между которыми нет ни одного символа, то есть значение строковой переменной ничему не равно), тогда программа выдаёт обиженно-издевательское сообщение "Вы не сообщили своего имени, и поэтому я буду звать вас Вася Пупкин". В противном случае, если имя введено, выполнится та часть скрипта, что написана после слова Else. Здесь сначала задается значение новой строковой переменной Hi$, которое складывается из трёх составляющих (такая запись через знаки "плюс" допускается, только добавляемые составляющие должны быть заключены в апострофы, а если эти составляющие сами являются строковыми переменными - апострофы не нужны). Между первыми двумя апострофами я поместил слово "Здравствуйте", запятую и пробел, потом добавил значение переменной Name$, в которой содержится имя, и в конце добавил восклицательный знак. Дальше программа выдаст сообщение, в которое загрузит значение переменной Hi$. Таким образом, если пользователь ввёл своё имя, например Сергей, и нажал на кнопку, появится сообщение "Здравствуйте, Сергей!" После этого в обоих случаях произойдет переход на следующую страницу.

А вот изменённый вариант того же скрипта, который не даст пользователю попасть на следующую страницу, пока он не введет своё имя (вообще-то, строго говоря, пользователь сможет ввести вместо имени любую абракадабру и обмануть программу, но регулировать это уже архисложно):

MMB Script
If (Name$='') Then
  Message("Вы не сообщили своего имени!","")
  Return()
Else
  Hi$='Здравствуйте, ' + Name$ + '!'
  Message("Hi$","")
End
NextPage()

Смотрите. Если пользователь ничего не ввёл, выводится напоминание ему об этом, после чего выполняется команда Return() - то есть возврат. Запомните эту команду! После того как скрипт "натыкается" на неё, он не идёт дальше и завершает свою работу. Таким образом, в нашем примере скрипт не дойдёт до команды NextPage() и пользователь останется на первой странице.

На форуме часто можно услышать вопрос, как запаролить проект. То есть разрешить пользователю работать с программой только в том случае, если он введёт правильный пароль. Вообще-то я не понимаю, зачем это нужно, ибо я и другие ММВ-креаторы распространяем свои проекты всегда открыто и бесплатно. Но раз вы просите, давайте рассмотрим, как это можно реализовать.

Создайте проект из двух страниц. Вторая страница - это начало вашей программы, куда можно будет попасть только через пароль. А первая страница - для ввода пароля. На ней создайте четыре объекта:

  1. Объект EditBox для ввода пароля. Имя строковой переменной оставьте EditBox$, текст по умолчанию удалите.
  2. Прямоугольник с утопленной границей под первым объектом.
  3. Объект Paragraph с текстом "Введите пароль и нажмите кнопку "Войти".
  4. Эту самую текстовую кнопку "Войти".

Допустим, пароль на вход в программу - as-master. Тогда напишем в кнопке "Войти" следующий скрипт:

MMB Script
If (EditBox$='as-master') Then
  NextPage()
Else
  Message("Пароль не верный!","")
  EditBox$=''
  LoadText("EditBox","EditBox$")
End

Если значение эдитбокса равно значению пароля, тогда выполняется переход к следующей странице и пользователь к работе с программой допущен. В противном случае - следите за скриптом - сначала выдается сообщение, что пароль не верный, затем значение переменной EditBox$ задается равным пустому месту, и потом в объект EditBox загружается значение переменной EditBox$, то есть поле, куда ввели неверный пароль, очищается.

Давайте усложним задачу. Допустим, вы хотите дать пользователю только три попытки ввести пароль, и если с трёх попыток правильный пароль не будет введён, программа закроется. Для этого нам придётся ввести счётчик попыток. Значит, без числовой переменной нам не обойтись. Назовём эту переменную буквой i и запишем в старте первой страницы простейший скрипт:

MMB Script
i=0

То есть когда программу запустили, число попыток ввести пароль ещё равно нулю. Давайте изменим наш скрипт для кнопки "Войти". Удалим слово Else и всё, что после него, кроме слова End, но добавим команду Return():

MMB Script
If (EditBox$='as-master') Then
  NextPage()
  Return()
End

То есть если пароль правильный, происходит переход к следующей странице, и скрипт завершает свою работу. Если же пароль не верный, программа игнорирует эту часть скрипта и идёт работать дальше. А дальше мы начинаем считать попытки пользователя ввести пароль. Одну попытку он уже совершил, поэтому напишем:

MMB Script
i=i+1

Этим самым мы увеличиваем значение переменной i на единицу. То есть при каждой следующей неверной попытке первая часть скрипта будет пропускаться, а значение i будет увеличиваться на единицу. Теперь нам осталось сравнить значение i с числами от одного до трёх и в зависимости от этого значения вынести пользователю свой вердикт:

MMB Script
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.

Продолжение следует
03 Февраля 2006
7263

Всего комментариев: 2


2. Гера

15:33, 01 Октября 2010Спам


Очень полезная информация

1. NeonSpy

16:08, 17 Июня 2009Спам


Чесное пионерское спасибо!
Как то лень было разбираться, а вашу статью прочёл с удовольствием. :)

Добавлять комментарии могут только зарегистрированные пользователи
[ Регистрация | Вход ]