ИЗУЧАЕМ СКРИПТЫ Урок
3. Константы. Часть 1 Автор - as-master
Константы в ММВ имеют огромное значение. И потому
знание констант и умение грамотно их применять в проектах играет важную роль в
создании профессиональных мультимедийных и других программ при помощи
Multimedia Builder.
Так что же такое константы? Само это слово
говорит о том, что это нечто постоянное, неизменное. Но в применении к ММВ это
не совсем так. Действительно, константы - это некие постоянные значения
данных - например символы, числа. Однако некоторые константы могут всё-таки
изменяться, но... не вами :) То есть, значение константы может измениться при
изменении некоторых внешний условий, но только не по вашему желанию - вы не
можете изменить это значение так, как вам угодно.
Поясню это примером. Существует константа с именем
CBK_TimeHMS, которая содержит информацию о текущем
системном времени компьютера в формате чч:мм:сс. Постоянно ли значение
этой константы? И да и нет. Постоянно оно в течение текущей секунды, но каждую
секунду изменяется. Итак, может ли меняться значение константы? Да. А можете ли
вы изменить это значение произвольно, по собственному желанию? Разумеется, нет.
Другой пример. Константа с именем
CBK_MP3Name всегда содержит имя мр3-файла (без
точки и расширения), который выбран в плейлисте и воспроизводится в настоящий
момент плеером. Началось воспроизведение следующей песни - изменилось и значение
константы CBK_MP3Name. Итак, значение этой
константы было постоянным, пока воспроизводилась текущая песня, но изменилось,
когда изменились внешние условия (зазвучала другая композиция). А можем ли мы
сами записать в эту константу произвольное значение? Нет.
Итак, это мы с вами усвоили :)
Однако константы могут быть не только символами и
числами. Они могут также представлять собой некоторые данные, содержащие
описание тех или иных условий, которые могут быть изменены. Например, константа
может содержать информацию о том, свёрнуто ли окно вашей программы, или о том,
видим или не видим в текущий момент некоторый объект на странице проекта.
Но об этом немного позже. Для начала перечислим
типы констант, используемых в ММВ:
CBK-константы:
- CBK-константы аудио
- CBK-константы
плейлиста
- CBK-константы
видео
- CBK-константы
времени и даты
- CBK-константы
общие
- CBK-константы
сценария
Системные
константы
Макрокоманды пути
Параметры
команд
C
некоторыми из CBK-констант
мы с вами уже сталкивались, когда конструировали мр3-плеер. Эти константы
содержали информацию о мр3-файлах - об имени файла, времени его звучания, о
ID3-тэгах, битрейте, частоте сэмплирования, каналах и
прочем. Всё это были CBK-константы аудио.
CBK-константы
времени и даты, как уже понятно, содержат всю информацию о времени и дате:
текущем годе, месяце, порядковом дне и дне недели, а также о текущих часах,
минутах и секундах. Другие CBK-константы рассмотрим чуть ниже.
Системные константы могут содержать
сведения о версии установленной на компьютере Windows,
о процессоре и оперативной памяти данного компьютера, о разрешении экрана и
глубине цветов монитора, о размере окна и положении вашего проекта на экране, о
размерах и положении конкретного объекта на странице вашего проекта, о
координатах курсора мыши и т.п. Вы только представьте, какие возможности это
открывает при создани ваших проектов!!!
Например, вы совершенно точно знаете, что ваш
проект будет работать только под управлением
Windows XP, потому-что использует системные программы
и библиотеки этой операционной системы. Тогда, используя сведения из константы о
версии Windows, вы можете запретить запуск вашей
программы на других операционках, написав соответствующий сценарий в скрипте
первой страницы.
Макрокоманды пути (<SrcDir>
и другие) вам, вероятно, уже знакомы. Более подробнее их мы рассмотрим во второй
части урока о константах.
Параметры команд, как ни странно, тоже
относятся к константам (так написано в справке - прим.автора). Такими
параметрами могут являться указания об открытии проекта В НОВОМ ОКНЕ, о
перемещении окна проекта ПОВЕРХ ДРУГИХ ОКОН, и другие указания.
Необходимо сказать об очень важной особенности
констант в ММВ. Это способность передачи их значений
в строковые и числовые переменные. Что это даёт? Во-первых,
возможность извлечения различной информации, а во-вторых, управление поведением
программы в зависимости от полученной информации.
Передать значение из константы в переменную очень
просто. Для этого нужно всего лишь поставить знак равенства между переменной и
константой. Важно лишь не перепутать, КАКУЮ переменную вы хотите получить:
строковую или числовую. Примеры:
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-констант
заключается в том, что некоторые из них обязательно должны присутствовать в
проекте в виде указанных текстовых объектов, если вы собираетесь в
дальнейшем извлекать из них информацию в переменные. То есть, если объект с
именем константы в проекте не был создан, то извлечь информацию из этой
константы будет невозможно.
Например. Создайте пустой проект, в нём
простую кнопку, а в кнопке напишите сценарий:
Date$=CBK_DateLong
Message("Date$","")
Теперь запустите проверку проекта (клавишей
F5). Нажмите кнопку. Ну и что вы видете? Правильно,
выдается пустое сообщение. А теперь создайте в проекте текстовый объект с именем
CBK_DateLong и запустите проверку снова. Теперь
после нажатия на кнопку выдается сообщение о текущей дате.
Что отсюда следует? А то, что для извлечения
информации из констант о текущем времени или дате в проекте должны
присутствовать объекты с именем соответствующей константы.
Ещё один пример. Всё то же самое, но скрипт
в кнопке:
Volume=CBK_Volume
Volume$=CHAR(Volume)
Message("Volume$","")
Вторая строка нужна здесь для того, чтобы
преобразовать числовую переменную в строковую. Запускаем, нажимаем. Выводится
ноль. Теперь создайте в проекте текстовый объект с именем
CBK_Volume. Еще раз проверьте - выведется сообщение об уровне
установленной громкости звука в системе, в процентах от ста.
И в этом случае, как вы увидели, при отсутствии в
проекте объекта с именем CBK_Volume извлечь
информацию об уровне громкости оказалось нельзя.
А теперь приготовьтесь - будет другой пример.
Также в пустом проекте создайте одну кнопку со следующим скриптом (кстати, все
приводимые здесь скрипты можно вставлять в проекты ММВ обычным копированием с
этой страницы):
AudioOpen("")
И другую кнопку с таким сценарием:
name$=CBK_MP3Name
Message("name$","")
Всё, больше ничего. Теперь запускаем (F5),
нажимаем первую кнопку и открываем какой-нибудь мр3-файл. Он сразу начнет
воспроизводиться. А вот теперь жмите на вторую кнопку, и вы увидите, что
выскочит сообщение с именем загруженного мр3-файла. А ведь объекта с именем
CBK_MP3Name в нашем проекте нет!
"Как же так?" - спросите вы. - "В одном случае для
извлечения информации из CBK-константы потребовалось
создать объект с её именем на странице, а в другом случае - нет". У меня нет
ответа на этот вопрос. Наверное, разработчики что-нибудь перемудрили. По логике
вещей, создавать объект с именем константы должно быть не нужно. Однако, в
каждом конкретном случае вам придется выяснять необходимость этого
самостоятельно.
Для всех других типов констант, кроме
CBK, создавать объекты с их именами не надо. Вот пара
примеров (скрипты назначайте обычной кнопке, как и раньше):
Width=PubWidth()
Width$=CHAR(Width)
Message("Width$","")
Запустите, нажмите на кнопку. Что вы видете?
Выскочило сообщение с размером окна вашего проекта по горизонтали (попросту - с
шириной окна). При этом, обратите внимание, в вашем проекте отсутствует
текстовый объект с именем какой-либо константы.
Ещё пример:
В пустом проекте создайте текстовый объект с
именем по умолчанию (Text), и объект скрипта с именем
Script следующего содержания:
x=MouseX()
DisplayValue("Text","x")
ScriptTimer("Script","50")
Для того, чтобы запустить этот скрипт, в старте
страницы пропишите команду:
RunScript("Script")
Это всё, запускайте. Теперь подвигайте мышью - и
вы увидите, как будет отслеживаться координата мыши по горизонтали и выводиться
в текстовый объект (примечание: координата мыши отсчитывается не
от левого верхнего угла экрана монитора, а от левого верхнего угла окна
вашего проекта, и это разумно). И опять-таки, никаких объектов-констант в
проекте мы не создавали.
Надеюсь, небольшая ясность по поводу констант у
вас наступила :)
Но вернёмся к нашим CBK-константам. Полный их
перечень вы найдёте в
справке. А некоторые мы рассмотрим здесь.
Начнём с CBK-констант
аудио. При конструировании мр3-плеера обязательным условием является вывод на
дисплей такой важнейшей информации из мр3-файла, как имя исполнителя и название
композиции (песни). Вы, наверное, знаете, что эта инфорамция содержится в так
называемых ID3-тэгах, и в то время как сам файл может
называться как-нибудь Track01.mp3, однако при
проигрывании его в плеере появится, например, Elton John - Blue Eyes. Эта
информация извлекается плеером из тэгов - специальной служебной области. Ну так
вот. Для извлечения этих сведений в проекте ММВ служат CBK-константы
аудио CBK_ID3Artist и
CBK_ID3Song.
Сделаем простейший пример. В пустом проекте
создадим кнопку для открытия аудиофайлов, в скрипте кнопки напишем:
AudioOpen("")
Теперь создадим два текстовых объекта с именами
указанных выше констант - CBK_ID3Artist и
CBK_ID3Song. Запускаем проект, открываем мр3-файл,
начинается его воспроизведение. И вы увидите, как в текстовые объекты загрузится
имя исполнителя и название песни проигрываемого мр3-файла. При условии, конечно,
что эта информация в тэгах существует (предварительно проверьте это с помощью
Winamp'a).
Давайте усложним пример - сделаем его покруче, с
грамотным поведением, как у настоящих плееров! Для начала удалите из проекта оба
текстовых объекта с именами констант - они больше не понадобятся :) Вместо них
создайте текстовый объект с именем Titul - в него будет выводиться вся
информация. Скрипт в кнопке напишите следующий:
AudioOpen("")
ScriptTimer("GetTitul","100")
То есть после открытия мр3-файла будет еще
запускаться некий скрипт с именем GetTitul, который и будет формировать
заголовок. Значит, нужно создать еще объект скрипта и дать ему имя GetTitul. А
содержание его будет следующим (зеленым цветом выделены комментарии):
**Создаём три строковых
переменных, значения которых будут извлекаться из соответствующих констант. Две
первые константы вам уже знакомы, а константа 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. Поместите
их где-нибудь за пределами окна проекта. Теперь напишем в старте первой страницы
следующий сценарий:
N$ = CBK_DateNum
D$ = CBK_Day
M$ = CBK_Month
Y$ = CBK_Year
**Формируем содержание переменной
Data$:
Data$ = 'Здравствуйте! Сегодня ' + D$ +
', ' + N$ + ' число, '
+ M$ + ' ' + Y$ + ' года'
**Выводим сообщение:
Message("Data$","")
Запустите проект. В самом начале выскочит
сообщение вида: "Здравствуйте! Сегодня суббота, 3 число,
Июнь 2006 года". Всё бы хорошо, но хотелось бы не 3 число, Июнь, а
3 июня, да и месяц надо бы с маленькой буквы - всё-таки у нас в России не
принято писать имена нарицательные с заглавной.
Итак, что надо сделать? Найти мягкий знак в
названиях месяцев и заменить его на букву я - тогда вместо январь,
июль, октябрь будет выводиться месяц в родительном падеже: января, июля,
октября. Но есть еще три месяца, не оканчивающиеся на мягкий знак: март,
май и август. Причём в слове май нужно
заменить последнюю букву на букву я, а в двух остальных -
добавить (а не заменить) в конце букву а.
Кроме того, нужно избавиться от заглавных букв в названии месяцев.
Давайте перепишем скрипт в старте страницы:
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, расположенный где-нибудь в проекте:
LoadText("Data","Data$")
С CBK-константами
времени и даты, надеюсь, вам всё ясно.
Пятый вид CBK-констант -
так называемые общие (по-английски - General)
константы. Но об этом - в следующий раз. А пока отдыхайте. А на
досуге усваивайте пройденный материал :) Продолжение следует.
Написать отзыв |