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

Урок 3. Константы. Часть 1 - Уроки мастерства

Константы в ММВ имеют огромное значение. И потому знание констант и умение грамотно их применять в проектах играет важную роль в создании профессиональных мультимедийных и других программ при помощи Multimedia Builder.

Так что же такое константы? Само это слово говорит о том, что это нечто постоянное, неизменное. Но в применении к ММВ это не совсем так. Действительно, константы - это некие постоянные значения данных - например символы, числа. Однако некоторые константы могут всё-таки изменяться, но... не вами :) То есть, значение константы может измениться при изменении некоторых внешний условий, но только не по вашему желанию - вы не можете изменить это значение так, как вам угодно.

Поясню это примером. Существует константа с именем CBK_TimeHMS, которая содержит информацию о текущем системном времени компьютера в формате чч:мм:сс. Постоянно ли значение этой константы? И да и нет. Постоянно оно в течение текущей секунды, но каждую секунду изменяется. Итак, может ли меняться значение константы? Да. А можете ли вы изменить это значение произвольно, по собственному желанию? Разумеется, нет.

Другой пример. Константа с именем CBK_MP3Name всегда содержит имя мр3-файла (без точки и расширения), который выбран в плейлисте и воспроизводится в настоящий момент плеером. Началось воспроизведение следующей песни - изменилось и значение константы CBK_MP3Name. Итак, значение этой константы было постоянным, пока воспроизводилась текущая песня, но изменилось, когда изменились внешние условия (зазвучала другая композиция). А можем ли мы сами записать в эту константу произвольное значение? Нет.

Итак, это мы с вами усвоили :)

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

Но об этом немного позже. Для начала перечислим типы констант, используемых в ММВ:

  1. CBK-константы:
    • CBK-константы аудио
    • CBK-константы плейлиста
    • CBK-константы видео
    • CBK-константы времени и даты
    • CBK-константы общие
    • CBK-константы сценария
  2. Системные константы
  3. Макрокоманды пути
  4. Параметры команд

C некоторыми из CBK-констант мы с вами уже сталкивались, когда конструировали мр3-плеер. Эти константы содержали информацию о мр3-файлах - об имени файла, времени его звучания, о ID3-тэгах, битрейте, частоте сэмплирования, каналах и прочем. Всё это были CBK-константы аудио. CBK-константы времени и даты, как уже понятно, содержат всю информацию о времени и дате: текущем годе, месяце, порядковом дне и дне недели, а также о текущих часах, минутах и секундах. Другие CBK-константы рассмотрим чуть ниже.

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

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

Макрокоманды пути(<SrcDir> и другие) вам, вероятно, уже знакомы. Более подробнее их мы рассмотрим во второй части урока о константах.

Параметры команд, как ни странно, тоже относятся к константам (так написано в справке - прим.автора). Такими параметрами могут являться указания об открытии проекта В НОВОМ ОКНЕ, о перемещении окна проекта ПОВЕРХ ДРУГИХ ОКОН, и другие указания.

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

Передать значение из константы в переменную очень просто. Для этого нужно всего лишь поставить знак равенства между переменной и константой. Важно лишь не перепутать, КАКУЮ переменную вы хотите получить: строковую или числовую. Примеры:

MMB Script
Year=CBK_Year
**в числовую переменную Year будет записан текущий год

name$=CBK_MP3Name
**в строковую переменную name$ будет записано имя текущего мр3-файла

MouseX=MouseX()
**в числовую переменную MouseX запишется координата Х текущего положения мыши

Path$=<SrcDir>
**в строковую переменную Path$ будет записан полный путь к папке, откуда запущена ваша программа

Получив таким образом значения констант в переменные, далее вы можете использовать эти значения как только вам заблагорассудится и насколько позволяет ваша программистская фантазия :)

А теперь принимаемся расматривать константы подробнее. И начнем с категории...

CBK-константы

Как уже было сказано выше, CBK-констант имеется шесть типов: константы аудио, видео, плейлиста, времени и даты, общие и константы сценария.

Интересной особенностью CBK-констант является то, что они все без исключения могут быть объектами ММВ - в виде обычного текстового объекта. Чтобы создать объект константы, создайте в проекте объект простого текста и задайте ему имя нужной константы. Кстати, писать вручную имя CBK-константы необязательно - её можно выбрать непосредственно в свойствах текстового объекта, если нажать на кнопочку рядом с полем для ввода имени объекта (см.рисунок):

Так поступают в случаях, когда хотят, чтобы значение константы выводилось непосредственно в окне проекта. Например, если вы создадите текстовые объекты с именами констант CBK_MP3Bit, CBK_MP3Freq, CBK_Channels, CBK_Total и CBK_Time и разместите их на информационном окне вашего мр3-плеера, то при прослушивании музыки автоматически будет выводиться информация о текущем мр3-файле: его битрейт, частота семплирования, канальность (моно или стерео), а также общее и текущее время звучания.

Другая особенность CBK-констант заключается в том, что некоторые из них обязательно должны присутствовать в проекте в виде указанных текстовых объектов, если вы собираетесь в дальнейшем извлекать из них информацию в переменные. То есть, если объект с именем константы в проекте не был создан, то извлечь информацию из этой константы будет невозможно.

Например. Создайте пустой проект, в нём простую кнопку, а в кнопке напишите сценарий:

MMB Script
Date$=CBK_DateLong
Message("Date$","")

Теперь запустите проверку проекта (клавишей F5). Нажмите кнопку. Ну и что вы видете? Правильно, выдается пустое сообщение. А теперь создайте в проекте текстовый объект с именем CBK_DateLong и запустите проверку снова. Теперь после нажатия на кнопку выдается сообщение о текущей дате.

Что отсюда следует? А то, что для извлечения информации из констант о текущем времени или дате в проекте должны присутствовать объекты с именем соответствующей константы.

Ещё один пример. Всё то же самое, но скрипт в кнопке:

MMB Script
Volume=CBK_Volume
Volume$=CHAR(Volume)
Message("Volume$","")

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

И в этом случае, как вы увидели, при отсутствии в проекте объекта с именем CBK_Volume извлечь информацию об уровне громкости оказалось нельзя.

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

MMB Script
AudioOpen("")

И другую кнопку с таким сценарием:

MMB Script
name$=CBK_MP3Name
Message("name$","")

Всё, больше ничего. Теперь запускаем (F5), нажимаем первую кнопку и открываем какой-нибудь мр3-файл. Он сразу начнет воспроизводиться. А вот теперь жмите на вторую кнопку, и вы увидите, что выскочит сообщение с именем загруженного мр3-файла. А ведь объекта с именем CBK_MP3Name в нашем проекте нет!

"Как же так?" - спросите вы. - "В одном случае для извлечения информации из CBK-константы потребовалось создать объект с её именем на странице, а в другом случае - нет". У меня нет ответа на этот вопрос. Наверное, разработчики что-нибудь перемудрили. По логике вещей, создавать объект с именем константы должно быть не нужно. Однако, в каждом конкретном случае вам придется выяснять необходимость этого самостоятельно.

Для всех других типов констант, кроме CBK, создавать объекты с их именами не надо. Вот пара примеров (скрипты назначайте обычной кнопке, как и раньше):

MMB Script
Width=PubWidth()
Width$=CHAR(Width)
Message("Width$","")

Запустите, нажмите на кнопку. Что вы видете? Выскочило сообщение с размером окна вашего проекта по горизонтали (попросту - с шириной окна). При этом, обратите внимание, в вашем проекте отсутствует текстовый объект с именем какой-либо константы.

Ещё пример:

В пустом проекте создайте текстовый объект с именем по умолчанию (Text), и объект скрипта с именем Script следующего содержания:

MMB Script
x=MouseX()
DisplayValue("Text","x")
ScriptTimer("Script","50")

Для того, чтобы запустить этот скрипт, в старте страницы пропишите команду:

MMB Script
RunScript("Script")

Это всё, запускайте. Теперь подвигайте мышью - и вы увидите, как будет отслеживаться координата мыши по горизонтали и выводиться в текстовый объект (примечание: координата мыши отсчитывается не от левого верхнего угла экрана монитора, а от левого верхнего угла окна вашего проекта, и это разумно). И опять-таки, никаких объектов-констант в проекте мы не создавали.

Надеюсь, небольшая ясность по поводу констант у вас наступила :)

Но вернёмся к нашим CBK-константам. Полный их перечень вы найдёте в справке. А некоторые мы рассмотрим здесь.

Начнём с CBK-констант аудио. При конструировании мр3-плеера обязательным условием является вывод на дисплей такой важнейшей информации из мр3-файла, как имя исполнителя и название композиции (песни). Вы, наверное, знаете, что эта инфорамция содержится в так называемых ID3-тэгах, и в то время как сам файл может называться как-нибудь Track01.mp3, однако при проигрывании его в плеере появится, например, Elton John - Blue Eyes. Эта информация извлекается плеером из тэгов - специальной служебной области. Ну так вот. Для извлечения этих сведений в проекте ММВ служат CBK-константы аудио CBK_ID3Artist и CBK_ID3Song.

Сделаем простейший пример. В пустом проекте создадим кнопку для открытия аудиофайлов, в скрипте кнопки напишем:

MMB Script
AudioOpen("")

Теперь создадим два текстовых объекта с именами указанных выше констант - CBK_ID3Artist и CBK_ID3Song. Запускаем проект, открываем мр3-файл, начинается его воспроизведение. И вы увидите, как в текстовые объекты загрузится имя исполнителя и название песни проигрываемого мр3-файла. При условии, конечно, что эта информация в тэгах существует (предварительно проверьте это с помощью Winamp'a).

Давайте усложним пример - сделаем его покруче, с грамотным поведением, как у настоящих плееров! Для начала удалите из проекта оба текстовых объекта с именами констант - они больше не понадобятся :) Вместо них создайте текстовый объект с именем Titul - в него будет выводиться вся информация. Скрипт в кнопке напишите следующий:

MMB Script
AudioOpen("")
ScriptTimer("GetTitul","100")

То есть после открытия мр3-файла будет еще запускаться некий скрипт с именем GetTitul, который и будет формировать заголовок. Значит, нужно создать еще объект скрипта и дать ему имя GetTitul. А содержание его будет следующим (зеленым цветом выделены комментарии):

MMB Script
**Создаём три строковых переменных, значения которых будут извлекаться из соответствующих констант. Две первые константы вам уже знакомы, а константа CBK_NumInList получает значение количества загруженных в плеер аудиофайлов:
Artist$=CBK_ID3Artist
Song$=CBK_ID3Song
Item=CBK_NumInList
**Если в тэгах нет информации ТОЛЬКО об исполнителе или композиции, тогда заменяем эти данные словами "Неизвестная композиция" или "Неизвестный исполнитель"...
If (Song$='') Then
  If (Artist$ <> '') Then
    Song$='Неизвестная композиция'
  End
End
If (Artist$='') Then
  If (Song$ <> '') Then
    Artist$='Неизвестный исполнитель'
  End
End
**...и формируем заголовок. Он будет состоять из имени исполнителя и названия композиции, разделенных знаком дефиса, а в скобках будет указано еще и время звучания, которое мы возьмем из константы CBK_Total:
Titul$=Artist$ + ' - ' + Song$ + ' (' + CBK_Total + ')'
**Если в тэгах не нашлось информации ни об исполнителе, ни о композиции, а при этом файл загружен (что проверяется с помощью значения переменной Item - ведь если ее значение равно нулю, то файл просто не загрузили), тогда заголовок будет сформирован просто из имени мр3-файла - может, хотя бы в имени файла будет какая-нибудь информация:
If (Artist$='') Then
  If (Song$='') Then
    If (Item <> 0) Then
      Titul$=CBK_MP3Name + ' (' + CBK_Total + ')'
    End
  End
End
**А вот если в плеер ничего не загрузили (тогда переменная Item будет равна нулю), то в заголовке будет сообщено, что ничего не загружено:
If (Artist$='') Then
  If (Song$='') Then
    If (Item=0) Then
      Titul$='Ничего не загружено!'
    End
  End
End
**И в заключение выводим значение переменной Titul$ в текстовый объект Titul:
LoadText("Titul","Titul$")

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

Следующий вид CBK-констант - константы плейлиста. Одну из них - CBK_NumInList - мы уже только что использовали. А всего их четыре (смотри справку). Познакомьтесь с ними самостоятельно.

Третий вид CBK-констант - это константы видео. Их немного, назначение их легко узнать из справки.

Четвертый вид CBK-констант - константы времени и даты. Из них можно получить информацию о текущем времени в часах, минутах и секундах, как по отдельности, так и виде чч:мм:сс; о текущем дне недели, числе и месяце, а также годе. Вся эта информация будет соответствовать, разумеется, системной информации компьютера, так что если в компьютере неправильные дата и время, то и в вашей программе они будут неправильными.

Работа с этими константами не требует каких-либо особых пояснений - всё ясно и так. Хочу лишь заметить, что информация о дне недели (понедельник, вторник и так далее) извлекается в виде цифр от 1 до 7, делает это константа CBK_DayNum, и вот тут не ошибитесь!!! Дело в том, что у "буржуев" неделя начинается не с понедельника, как у нас, а... с воскресенья! Проверьте это сами: создайте в проекте текстовый объект с именем CBK_DayNum, запустите, и вы увидите, что если сейчас, например, четверг, то выведется цифра 5, а не 4.

К примеру, вы хотите, чтобы при запуске вашей программы выводилось приветственное сообщение: "Здравствуйте! Сегодня такой-то день недели, число и месяц такого-то года". В принципе, есть константа, которая выводит всю информацию о дате (константа CBK_DateLong), но выводит информацию она в таком виде: Июнь 03, 2006. Что, конечно же, некрасиво. Поэтому мы поступим по другому.

Для начала создадим в проекте четыре текстовых объекта с именами констант CBK_Day, CBK_DateNum, CBK_Month и CBK_Year. Поместите их где-нибудь за пределами окна проекта. Теперь напишем в старте первой страницы следующий сценарий:

MMB Script
N$=CBK_DateNum
D$=CBK_Day
M$=CBK_Month
Y$=CBK_Year
**Формируем содержание переменной Data$:
Data$='Здравствуйте! Сегодня ' + D$ + ', ' + N$ + ' число, ' + M$ + ' ' + Y$ + ' года'
**Выводим сообщение:
Message("Data$","")

Запустите проект. В самом начале выскочит сообщение вида: "Здравствуйте! Сегодня суббота, 3 число, Июнь 2006 года". Всё бы хорошо, но хотелось бы не 3 число, Июнь, а 3 июня, да и месяц надо бы с маленькой буквы - всё-таки у нас в России не принято писать имена нарицательные с заглавной.

Итак, что надо сделать? Найти мягкий знак в названиях месяцев и заменить его на букву я - тогда вместо январь, июль, октябрь будет выводиться месяц в родительном падеже: января, июля, октября. Но есть еще три месяца, не оканчивающиеся на мягкий знак: март, май и август. Причём в слове май нужно заменить последнюю букву на букву я, а в двух остальных - добавить (а не заменить) в конце букву а. Кроме того, нужно избавиться от заглавных букв в названии месяцев.

Давайте перепишем скрипт в старте страницы:

MMB Script
N$=CBK_DateNum
D$=CBK_Day
M$=CBK_Month
Y$=CBK_Year
**Следующие три строки заменяют букву "ь" в названии месяцев, если таковая обнаружится, на букву "я". Произведёт это строковая функция под названием StrChange (строковым функциям будет посвящен отдельный урок):
FromString$='ь'
ToString$='я'
M$=StrChange(M$,FromString$,ToString$)
**Следующие две строки заменяют букву "й" в названии месяца май, если он будет являться текущим месяцем, на букву "я".
FromString$='й'
M$=StrChange(M$,FromString$,ToString$)
**Эта строка сценария заменит все прописные буквы в переменной M$ на строчные:
M$=LOW(M$)
**Два следующих условия, обнаружив, что текущий месяц март или август, заменят значение переменной M$ на "марта" или "августа":
If (M$='март') Then
  M$='марта'
End
If (M$='август') Then
  M$='августа'
End
**Формируем содержание переменной Data$:
Data$='Здравствуйте! Сегодня ' + D$ + ', ' + N$ + ' ' + M$ + ' ' + Y$ + ' года'
**Выводим сообщение:
Message("Data$","")

Сделали? Проверяйте. Ну вот, совсем другое дело! Теперь выводится сообщение: "Здравствуйте! Сегодня суббота, 3 июня 2006 года". Кстати, вместо выскакивающего сообщения с неприятным звуком, как при ошибке Windows, можно просто загрузить значение переменной Data$ в текстовый объект Data, расположенный где-нибудь в проекте:

MMB Script
LoadText("Data","Data$")

С CBK-константами времени и даты, надеюсь, вам всё ясно.

Пятый вид CBK-констант - так называемые общие (по-английски - General) константы. Но об этом - в следующий раз. А пока отдыхайте. А на досуге усваивайте пройденный материал :)

Продолжение следует
02 Июня 2006
3708

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


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