Так что же такое константы? Само это слово говорит о том, что это нечто постоянное, неизменное. Но в применении к ММВ это не совсем так. Действительно, константы - это некие постоянные значения данных - например символы, числа. Однако некоторые константы могут всё-таки изменяться, но... не вами То есть, значение константы может измениться при изменении некоторых внешний условий, но только не по вашему желанию - вы не можете изменить это значение так, как вам угодно.
Поясню это примером. Существует константа с именем CBK_TimeHMS, которая содержит информацию о текущем системном времени компьютера в формате чч:мм:сс. Постоянно ли значение этой константы? И да и нет. Постоянно оно в течение текущей секунды, но каждую секунду изменяется. Итак, может ли меняться значение константы? Да. А можете ли вы изменить это значение произвольно, по собственному желанию? Разумеется, нет.
Другой пример. Константа с именем CBK_MP3Name всегда содержит имя мр3-файла (без точки и расширения), который выбран в плейлисте и воспроизводится в настоящий момент плеером. Началось воспроизведение следующей песни - изменилось и значение константы CBK_MP3Name. Итак, значение этой константы было постоянным, пока воспроизводилась текущая песня, но изменилось, когда изменились внешние условия (зазвучала другая композиция). А можем ли мы сами записать в эту константу произвольное значение? Нет.
Итак, это мы с вами усвоили
Однако константы могут быть не только символами и числами. Они могут также представлять собой некоторые данные, содержащие описание тех или иных условий, которые могут быть изменены. Например, константа может содержать информацию о том, свёрнуто ли окно вашей программы, или о том, видим или не видим в текущий момент некоторый объект на странице проекта.
Но об этом немного позже. Для начала перечислим типы констант, используемых в ММВ:
C некоторыми из CBK-констант мы с вами уже сталкивались, когда конструировали мр3-плеер. Эти константы содержали информацию о мр3-файлах - об имени файла, времени его звучания, о ID3-тэгах, битрейте, частоте сэмплирования, каналах и прочем. Всё это были CBK-константы аудио. CBK-константы времени и даты, как уже понятно, содержат всю информацию о времени и дате: текущем годе, месяце, порядковом дне и дне недели, а также о текущих часах, минутах и секундах. Другие CBK-константы рассмотрим чуть ниже.
Системные константы могут содержать сведения о версии установленной на компьютере Windows, о процессоре и оперативной памяти данного компьютера, о разрешении экрана и глубине цветов монитора, о размере окна и положении вашего проекта на экране, о размерах и положении конкретного объекта на странице вашего проекта, о координатах курсора мыши и т.п. Вы только представьте, какие возможности это открывает при создани ваших проектов!!!
Например, вы совершенно точно знаете, что ваш проект будет работать только под управлением Windows XP, потому-что использует системные программы и библиотеки этой операционной системы. Тогда, используя сведения из константы о версии Windows, вы можете запретить запуск вашей программы на других операционках, написав соответствующий сценарий в скрипте первой страницы.
Макрокоманды пути(<SrcDir> и другие) вам, вероятно, уже знакомы. Более подробнее их мы рассмотрим во второй части урока о константах.
Параметры команд, как ни странно, тоже относятся к константам (так написано в справке - прим.автора). Такими параметрами могут являться указания об открытии проекта В НОВОМ ОКНЕ, о перемещении окна проекта ПОВЕРХ ДРУГИХ ОКОН, и другие указания.
Необходимо сказать об очень важной особенности констант в ММВ. Это способность передачи их значений в строковые и числовые переменные. Что это даёт? Во-первых, возможность извлечения различной информации, а во-вторых, управление поведением программы в зависимости от полученной информации.
Передать значение из константы в переменную очень просто. Для этого нужно всего лишь поставить знак равенства между переменной и константой. Важно лишь не перепутать, КАКУЮ переменную вы хотите получить: строковую или числовую. Примеры:
Получив таким образом значения констант в переменные, далее вы можете использовать эти значения как только вам заблагорассудится и насколько позволяет ваша программистская фантазия
А теперь принимаемся расматривать константы подробнее. И начнем с категории...
CBK-константы
Как уже было сказано выше, CBK-констант имеется шесть типов: константы аудио, видео, плейлиста, времени и даты, общие и константы сценария.
Интересной особенностью CBK-констант является то, что они все без исключения могут быть объектами ММВ - в виде обычного текстового объекта. Чтобы создать объект константы, создайте в проекте объект простого текста и задайте ему имя нужной константы. Кстати, писать вручную имя CBK-константы необязательно - её можно выбрать непосредственно в свойствах текстового объекта, если нажать на кнопочку рядом с полем для ввода имени объекта (см.рисунок):
Так поступают в случаях, когда хотят, чтобы значение константы выводилось непосредственно в окне проекта. Например, если вы создадите текстовые объекты с именами констант CBK_MP3Bit, CBK_MP3Freq, CBK_Channels, CBK_Total и CBK_Time и разместите их на информационном окне вашего мр3-плеера, то при прослушивании музыки автоматически будет выводиться информация о текущем мр3-файле: его битрейт, частота семплирования, канальность (моно или стерео), а также общее и текущее время звучания.
Другая особенность CBK-констант заключается в том, что некоторые из них обязательно должны присутствовать в проекте в виде указанных текстовых объектов, если вы собираетесь в дальнейшем извлекать из них информацию в переменные. То есть, если объект с именем константы в проекте не был создан, то извлечь информацию из этой константы будет невозможно.
Например. Создайте пустой проект, в нём простую кнопку, а в кнопке напишите сценарий:
Теперь запустите проверку проекта (клавишей F5). Нажмите кнопку. Ну и что вы видете? Правильно, выдается пустое сообщение. А теперь создайте в проекте текстовый объект с именем CBK_DateLong и запустите проверку снова. Теперь после нажатия на кнопку выдается сообщение о текущей дате.
Что отсюда следует? А то, что для извлечения информации из констант о текущем времени или дате в проекте должны присутствовать объекты с именем соответствующей константы.
Ещё один пример. Всё то же самое, но скрипт в кнопке:
Вторая строка нужна здесь для того, чтобы преобразовать числовую переменную в строковую. Запускаем, нажимаем. Выводится ноль. Теперь создайте в проекте текстовый объект с именем CBK_Volume. Еще раз проверьте - выведется сообщение об уровне установленной громкости звука в системе, в процентах от ста.
И в этом случае, как вы увидели, при отсутствии в проекте объекта с именем CBK_Volume извлечь информацию об уровне громкости оказалось нельзя.
А теперь приготовьтесь - будет другой пример. Также в пустом проекте создайте одну кнопку со следующим скриптом (кстати, все приводимые здесь скрипты можно вставлять в проекты ММВ обычным копированием с этой страницы):
И другую кнопку с таким сценарием:
Всё, больше ничего. Теперь запускаем (F5), нажимаем первую кнопку и открываем какой-нибудь мр3-файл. Он сразу начнет воспроизводиться. А вот теперь жмите на вторую кнопку, и вы увидите, что выскочит сообщение с именем загруженного мр3-файла. А ведь объекта с именем CBK_MP3Name в нашем проекте нет!
"Как же так?" - спросите вы. - "В одном случае для извлечения информации из CBK-константы потребовалось создать объект с её именем на странице, а в другом случае - нет". У меня нет ответа на этот вопрос. Наверное, разработчики что-нибудь перемудрили. По логике вещей, создавать объект с именем константы должно быть не нужно. Однако, в каждом конкретном случае вам придется выяснять необходимость этого самостоятельно.
Для всех других типов констант, кроме CBK, создавать объекты с их именами не надо. Вот пара примеров (скрипты назначайте обычной кнопке, как и раньше):
Запустите, нажмите на кнопку. Что вы видете? Выскочило сообщение с размером окна вашего проекта по горизонтали (попросту - с шириной окна). При этом, обратите внимание, в вашем проекте отсутствует текстовый объект с именем какой-либо константы.
Ещё пример:
В пустом проекте создайте текстовый объект с именем по умолчанию (Text), и объект скрипта с именем Script следующего содержания:
Для того, чтобы запустить этот скрипт, в старте страницы пропишите команду:
Это всё, запускайте. Теперь подвигайте мышью - и вы увидите, как будет отслеживаться координата мыши по горизонтали и выводиться в текстовый объект (примечание: координата мыши отсчитывается не от левого верхнего угла экрана монитора, а от левого верхнего угла окна вашего проекта, и это разумно). И опять-таки, никаких объектов-констант в проекте мы не создавали.
Надеюсь, небольшая ясность по поводу констант у вас наступила
Но вернёмся к нашим CBK-константам. Полный их перечень вы найдёте в справке. А некоторые мы рассмотрим здесь.
Начнём с CBK-констант аудио. При конструировании мр3-плеера обязательным условием является вывод на дисплей такой важнейшей информации из мр3-файла, как имя исполнителя и название композиции (песни). Вы, наверное, знаете, что эта инфорамция содержится в так называемых ID3-тэгах, и в то время как сам файл может называться как-нибудь Track01.mp3, однако при проигрывании его в плеере появится, например, Elton John - Blue Eyes. Эта информация извлекается плеером из тэгов - специальной служебной области. Ну так вот. Для извлечения этих сведений в проекте ММВ служат CBK-константы аудио CBK_ID3Artist и CBK_ID3Song.
Сделаем простейший пример. В пустом проекте создадим кнопку для открытия аудиофайлов, в скрипте кнопки напишем:
Теперь создадим два текстовых объекта с именами указанных выше констант - CBK_ID3Artist и CBK_ID3Song. Запускаем проект, открываем мр3-файл, начинается его воспроизведение. И вы увидите, как в текстовые объекты загрузится имя исполнителя и название песни проигрываемого мр3-файла. При условии, конечно, что эта информация в тэгах существует (предварительно проверьте это с помощью Winamp'a).
Давайте усложним пример - сделаем его покруче, с грамотным поведением, как у настоящих плееров! Для начала удалите из проекта оба текстовых объекта с именами констант - они больше не понадобятся Вместо них создайте текстовый объект с именем Titul - в него будет выводиться вся информация. Скрипт в кнопке напишите следующий:
То есть после открытия мр3-файла будет еще запускаться некий скрипт с именем GetTitul, который и будет формировать заголовок. Значит, нужно создать еще объект скрипта и дать ему имя GetTitul. А содержание его будет следующим (зеленым цветом выделены комментарии):
Еще раз повторяю, что приведенный скрипт может быть скопирован в проект прямо с этой страницы (даже вместе с комментариями) - он полностью рабочий. Теперь проверьте работу проекта и получите удовольствие от выводимой в заголовок информации А также сделайте для себя заметку о том, что мы не создали в проекте ни одного объекта-константу. Следовательно, для извлечения инфоромации из использованных нами констант их присутствие в проекте не обязательно (однако я всё-таки создаю в проекте 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. Поместите их где-нибудь за пределами окна проекта. Теперь напишем в старте первой страницы следующий сценарий:
Запустите проект. В самом начале выскочит сообщение вида: "Здравствуйте! Сегодня суббота, 3 число, Июнь 2006 года". Всё бы хорошо, но хотелось бы не 3 число, Июнь, а 3 июня, да и месяц надо бы с маленькой буквы - всё-таки у нас в России не принято писать имена нарицательные с заглавной.
Итак, что надо сделать? Найти мягкий знак в названиях месяцев и заменить его на букву я - тогда вместо январь, июль, октябрь будет выводиться месяц в родительном падеже: января, июля, октября. Но есть еще три месяца, не оканчивающиеся на мягкий знак: март, май и август. Причём в слове май нужно заменить последнюю букву на букву я, а в двух остальных - добавить (а не заменить) в конце букву а. Кроме того, нужно избавиться от заглавных букв в названии месяцев.
Давайте перепишем скрипт в старте страницы:
Сделали? Проверяйте. Ну вот, совсем другое дело! Теперь выводится сообщение: "Здравствуйте! Сегодня суббота, 3 июня 2006 года". Кстати, вместо выскакивающего сообщения с неприятным звуком, как при ошибке Windows, можно просто загрузить значение переменной Data$ в текстовый объект Data, расположенный где-нибудь в проекте:
С CBK-константами времени и даты, надеюсь, вам всё ясно.
Пятый вид CBK-констант - так называемые общие (по-английски - General) константы. Но об этом - в следующий раз. А пока отдыхайте. А на досуге усваивайте пройденный материал