Опубликован: 04.11.2006 | Уровень: специалист | Доступ: платный
Урок 4:

Объекты и их использование

< Урок 3 || Урок 4: 12345 || Урок 5 >

Работа с объектами string и selection

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

message = "No shoes, no service!"

Эта строка скрипта создает переменную с именем message, значением которой является строка. В данном случае мы можем считать, что эта переменная есть экземпляр объекта String – а значит, мы можем манипулировать ее значением, используя методы объекта String.

Рассмотрим несколько примеров.

Метод toUpperCase() объекта String меняет все буквы строки на заглавные. Например:

message = message.toUpperCase();

Этот скрипт изменил переменную message, и теперь он содержит строку "NO SHOES, NO SERVICE!". Можно достигнуть и противоположного эффекта – сделать все буквы строчными, для этого следует применить метод toLowerCase().

Заметим, что значение экземпляра текстового поля (текст в этом поле) тоже рассматривается как экземпляр объекта String. Так, если бы message было именем экземпляра текстового поля, то предыдущий скрипт следовало бы записать так:

message.text = message.text.toUpperCase();

Есть ли тут какие-либо преимущества? На самом деле, нет: все проекты разные, в одних случаях предпочтительнее пользоваться переменной, в других – именем текстового поля. Итак, экземпляр объекта String можно создать одним из следующих способов:

  • Использовать конструктор, например: myNewStringObject = new String("Hello");. Для обращения к экземпляру объекта служит имя myNewStringObject.
  • Присвоить переменной строковое значение. Для обращения к экземпляру объекта используется имя переменной.
  • Создать текстовое поле. Для обращения к экземпляру объекта используется конструкция имя-ТекстовогоПоля.text.

Большинство проектов в этой книге содержит текстовые поля, так что вы, пожалуй, обнаружите, что мы чаще всего используем последний вариант.

Еще один полезный метод объекта StringindexOf() – позволяет найти в строке определенный (первый встретившийся) символ или последовательность символов. В результате возвращается число – индекс символа, то есть номер первого встреченного в строке совпавшего символа. Первый символ в строке имеет индекс 0, второй – индекс 1, и так далее. Если метод indexOf() не находит совпадения символа или группы символов, то возвращается значение -1. Вот пример использования метода indexOf():

message.text = "No shoes no service!";
firstS = message.text.indexOf("s");

Переменной firstS будет присвоено значение 3 – именно таков индекс первой встреченной в строке буквы s.

No shoes no service!
|||||||
0123456

Порой может быть полезно определить число символов в строке. Сделать это просто, поскольку всякий экземпляр объекта String имеет такое свойство, как длинаlength. Длина строки часто применяется для проверки введенной пользователем в текстовое поле информации. Скажем, вы хотите, чтобы пользователь ввел в поле правильный почтовый индекс; при этом вы знаете, что индекс должен состоять из пяти символов. Тогда вы можете создать несложный скрипт для проверки:

zipCode.text = "27609";
zipLength = zipCode.text.length;
if (zipLength == 5) {
  // Длина индекса верная
} else {
  //Длина индекса неверна
}

В первой строке задается текстовое значение, отображаемое в текстовом поле zipCode (мы предполагаем, что его ввел пользователь). В следующей строке создается переменная с именем zipLength и ей присваивается значение свойства length экземпляра zipCode.text – в данном случае 5, поскольку именно столько символов содержит поле zipCode. Последняя часть скрипта – оператор if, который должен содержать один набор действий на тот случай, если zipLength равно 5, и другой набор на случай, если это не так.

Объект Selection позволяет управлять различными аспектами текстового поля, находящегося в фокусе, в том числе выделенным текстом, получением и установкой текущей позиции курсора и так далее. Считается, что текстовое поле находится в фокусе, если пользователь установил в него курсор. Если ни одно из текстовых полей в фокусе не находится, то объект Selection не существует.

Итак, щелкнув в текстовом поле, пользователь устанавливает его в фокус. Однако вы можете отвергнуть выбор пользователя при помощи метода setFocus() – очень важная возможность, ведь в каждый момент времени существует только один объект Selection, и прочие его методы применяются к полю, находящемуся в фокусе (в следующем упражнении вы убедитесь, что далеко не всегда можно положиться на то, что пользователь выберет – и установит в фокус – нужное текстовое поле).

И еще об одном методе объекта Selection – он позволяет выделить порцию текста динамически, без участия пользователя. Этот метод (синтаксис Selection.setSelection(param1, param2) ) имеет два параметра: индекс символа, с которого начинается выделение и индекс символа, которым выделение заканчивается. Допустим, имеется текстовое поле, содержащее текст "Derek is the craziest person I know". Чтобы выделить слово craziest (мы предполагаем, что поле находится в фокусе), нужно написать так:

Selection.setSelection(13, 20);

В этом упражнении мы создадим простенький текстовый редактор, используя большую часть методов объектов String и Selection.

  1. Откройте файл wordProcessor1.fla из папки Lesson04/Assets.

В этом файле два слоя – Background и Buttons. Слой Background содержит изображение окна текстового редактора, а также текстовые поля. В слое Buttons находятся четыре кнопки, расположенные в верхней части окна редактора. На сцене три текстовых поля. Самое большое, в центре, представляет "текстовый документ". Имя экземпляра этого поля – inputField. Следующее поле, рядом с кнопкой Find, называется findField. При воспроизведении фильма пользователь сможет ввести в это поле символ или строку символов, с тем, чтобы они были найдены в поле inputField. Результат поиска будет отображен в третьем текстовом поле, в нижней части окна – оно называется status. В этом же текстовом поле будут отображаться результаты подсчета общего числа символов в документе. К кнопкам в верхней части окна мы присоединим различные скрипты, обеспечивающие работу нашего текстового редактора.

  1. Откройте панель действия, выделите кнопку Uppercase (c большой буквой A) и введите следующий скрипт:
on (release) {
  inputField.text = inputField.text.toUpperCase();
}

Flash интерпретирует этот скрипт так: "При отпускании этой кнопки перевести содержимое текстового поля inputField в верхний регистр". Иными словами, после нажатия этой кнопки все буквы в поле inputField станут заглавными.

  1. Выделите кнопку Lowercase (c маленькой a) и введите в панели Действия следующий скрипт:
on (release) {
  inputField.text = inputField.text.toLowerCase();
}

Этот скрипт похож на предыдущий; отличие в том, что в данном случае все символы в текстовом поле inputField переводятся в нижний регистр (делаются строчными).

  1. Выделите кнопку Character Count (c надписью "123") и введите следующий скрипт:
on (release) {
  status.text = "В документе " + inputField.length + " символов.";
}

При выполнении этого скрипта в текстовом поле status будет отображено сообщение. Сообщение строится динамически. Определяется свойство Length текстового поля inputField и вставляется в середину сообщения, между словами "В документе" и "символов". Если документ содержит 50 символов, сообщение будет выглядеть так: "В документе 50 символов".

  1. Выделите кнопку Find (с изображением лупы) и введите следующий скрипт:
on(release) {
  result = inputField.text.indexOf(findField.text);
  if(findField.text != "" && result >= 0) {
    status.text = "Первый такой набор начинается с символа номер " + result;
    Selection.setFocus("_root.inputField");
    Selection.setSelection(result, result + findField.text.length);
  } else {
    status.text = "Такой набор символов не найден.";
  }
}

Этот скрипт – самый сложный в этом упражнении. Первая строка присваивает значение переменной result при помощи метода indexOf() объекта String. Скрипт ищет в текстовом поле inputField символ или символы, введенные в поле findField и выдает индекс первого символа найденной комбинации. Этот индекс и становится значением переменной result. Если же такая комбинация символов не найдена, result получает значение –1.

В следующей части скрипта применен оператор if, выполняющий один из двух наборов действий в зависимости от того, выполнено ли условие (точнее, даже два). Если значением поля findField не является пустая строка (это чтобы удостовериться, пользователь ввел хоть что-нибудь в это поле) и значение result больше или равно 0 (так будет, если введенная комбинация символов найдена в документе), выполняются три следующих действия. Если же хотя бы одно из условий не выполнено, оператор переходит к секции else, и тогда выполняется только одно действие, отображающее в поле status сообщение "Такой набор символов не найден".

Предположим, что оба условия выполнены и посмотрим, что же происходит в этом случае. Выполняются три действия из первой секции оператора if. Первое действие отображает в текстовом поле status сообщение, создаваемое динамически – к строке "Первый такой набор начинается с символа номер" добавляется значение result. Если, к примеру, result равно 7, получится сообщение "Первый такой набор начинается с символа номер 7". Следующие два действия используют методы объекта Selection, чтобы выделить в поле inputField найденную комбинацию символов. Как вы помните, текстовое поле должно получить фокус, прежде чем к нему можно будет применить методы объекта Selection. Поскольку мы хотим выделить текст в поле inputField, мы, с помощью следующей строки, устанавливаем фокус на это поле:

Selection.setFocus("_root.inputField");

В следующей строке скрипта с помощью другого метода объекта Selection выделяется порция текста в поле, имеющем фокус. Вот эта строка:

Selection.setSelection(result, result + findField.text.length);

Мы использовали два динамически полученных значения в качестве параметров этого метода, чтобы указать начало и конец выделения. Мы хотим, чтобы выделение начиналось с первого найденного символа, поэтому в качестве стартовой точки выделения используем значение result. Конечная точка выделения вычисляется путем сложения значения result и значения свойства length текстового поля findField. Как это все работает? Предположим, мы ввели в поле inputField текст "У меня есть собака". Затем вы ввели "собака" в поле findField и нажали кнопку Find. При выполнении скрипта result получит значение 12 (слово "собака" начинается с символа 12), а findField.text.length будет иметь значение 6 (текст в этом поле состоит из шести символов). С этими значениями строка скрипта выглядела бы так:

Selection.setSelection(12, 12+6);

или

Selection.setSelection(12, 18);

В результате в текстовом поле inputField будут выделены символы с 12 по 18 – они и составляют слово "собака".

  1. Выполните команду Управление > Проверить фильм (Control > Test Movie).

Введите что-нибудь в поле inputField и попробуйте нажать кнопки Uppercase и Lowercase. Нажмите кнопку Count Characters, чтобы подсчитать число символов в документе. Наконец, попробуйте использовать функцию поиска, введя символ или несколько в поле findField и нажав кнопку Find.

  1. Закройте тестовый фильм и сохраните свою работу в файле wordProcessor2.fla.

Как видите, использовать методы объектов String и Selection совсем несложно – мы думаем, вы будете очень часто применять их для проверки и форматирования данных строкового типа.

< Урок 3 || Урок 4: 12345 || Урок 5 >
Салтанат Бектегенова
Салтанат Бектегенова

Дострочное пересдача экзамена

 

Евгений Стародубцев
Евгений Стародубцев

Вот задание:

7. Открыв панель Действия (Actions) и установив ее в Экспертный режим(Expert Mode), выделите кадр 1 слоя Actions и введите следующий скрипт:

Евгения Дегтяренко
Евгения Дегтяренко
Украина, Запорожье
Анна Елисеева
Анна Елисеева
Россия, Великий Новгород, Ногородский государственный университет имени Ярослава Мудрого, 2003