Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Написание скриптов. Пользовательский интерфейс(26.12.2010).rtf
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
56 Мб
Скачать
☆

Пример: живая прокрутка

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

Дополнительно преимущество состоит в том, что можно копировать текст из окна и вставлять в окно.

// создадим пример массива

array = [];

for (i = 0; i < 150; i++)

array.push ("Строка " + String (i));

alert_scroll ("Пример", array);

function alert_scroll (title, input) // string, string/array

{

// если входной параметр -- массив, преобразуем его в строку

if (input instanceof Array)

input = input.join ("\r");

var w = new Window ("dialog", title);

var list = w.add ("edittext", undefined, input, {multiline: true, scrolling: true});

// Список не должен быть больше максимально возможной высоты окна

list.maximumSize.height = w.maximumSize.height - 750; // << эта строка определяет высоту прокручиваемого окна

list.minimumSize.width = 150;

w.add ("button", undefined, "Закрыть", {name: "ok"});

w.show ();

}

Эта функция имеет один недостаток — при работе с большими массивами заметно время их обработки.

Элемент управления button

Нажимаемые кнопки

Можно использовать различные типы кнопок. Ранее были рассмотрены стандартные нажимаемые кнопки ОК и Cancel, часто используемые в окнах

var w = new Window ("dialog");

w.add ("button", undefined, "OK");

w.add ("button", undefined, "Cancel");

w.show ();

По умолчанию щелчок на клавише ОК эквивалентен нажатию на клавишу Enter, а щелчок на Cancel — на клавишу ESC. И такая работа скрипта будет, если названия этих кнопок будут именно так названы.

После щелчка на кнопке ‘Переключить в верхний регистр’ буквы станут прописными. Это простой пример, но функции, вызываемые событием onClick могут быть любой сложности. (есть несколько других откликов на события /в оригинале callback/, с которыми мы познакомимся позднее.)

Кнопки-пиктограммы (icon buttons)

Кроме стандартных нажимаемых кнопок можно использовать пиктограммы как кнопки. На них отображается не текст, такой как ОК, а изображение. Картинка может быть в формате PNG, IDRC или JPEG.

Вот как выглядит запись такой кнопки в программе:

w.add ("iconbutton", undefined, File (myFile));

Это добавляет кнопку (как pushbutton, т.е. стартовую кнопку) на кнопочной панели, а не текст (например, кнопка а на следующем рисунке кнопочной панели).

a b c d

Кнопки могут быть добавлены как инструментальные кнопки (в оригинале toolbuttons), т.е. показано только изображение, но не сама кнопка ( b ). Кнопки могут работать как тумблеры, т.е. иметь два состояния «вкл/выкл», так кнопка c отжата, а кнопка d нажата.

Вот код, реализующий работу этих кнопок:

var w = new Window ("dialog","РАЗНЫЕ КНОПКИ");

w.orientation = "row";

var f = File ("/с/tmp/icon.jpg");

w.add ("iconbutton", undefined, f ); // a

w.add ("iconbutton", undefined, f, {style: "toolbutton"}); // b

var t1 = w.add ("iconbutton", undefined, f, {style: "toolbutton", toggle: true}); // c

var t2 = w.add ("iconbutton", undefined, f, {style: "toolbutton", toggle: true}); // d

t2.value = true;

w.show ();

В интерфейсе индизайна примеры кнопок-тумблеров можно найти на панелях Text и GREP окна Find/Change, там эти кнопки определяют — надо или нет включать в пространство поиска сноски, мастер-страницы и пр. По умолчанию эти тумблеры выключены, и это состояние управляется свойством value, как показано в последнем примере. Это свойство проверяется, если надо узнать состояние переключателя: if (t1.value == true).

Свойства style и toggle имеют смысл только когда определены для кнопок-пиктограмм, для обычных кнопок эти свойства не работают.

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

var w = new Window ("dialog");

var f = File ("/d/test/icon.idrc");

try {var b = w.add ("iconbutton", undefined, f )}

catch (_) {var b = w.add ("button", undefined, "@")}

w.show ();

Если указанного файла не найдено, на экран выводится такое окно: