DroidScript
DroidScript
учимся и разрабатываем

События

03.12.2016

Работа с событиями в DroidScript происходит легко, что будет рассмотрено на примере компоновщика.

Компоновщики могут реагировать на действия пользователей. Для этого они имеют следующие методы:

  • SetOnTouch( callback ) - короткое прикосновение
  • SetOnLongTouch( callback ) - долгое прикосновение (работает не везде)
  • SetOnTouchDown( callback ) - касание
  • SetOnTouchMove( callback ) - движение
  • SetOnTouchUp( callback ) - отпускание

В качестве единственного параметра в них задаётся функция обратного вызова (ФОВ), в которую, в зависимости от источника и вида события, могут передаваться или не передаваться параметры.

До версии DroidScript 1.42 в качестве функции обратного вызова callback в DroidScript для любого метода-обработчика можно было указать только название глобальной функции или имя глобальной функции в кавычках в качестве параметра метода eval:

SetOnTouch( myFunction );

или

SetOnTouch( eval ('myFunction') );

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

Начиная с версии 1.42 в качестве обработчика событий можно указывать также анонимную функцию:

myObject.SetOnTouch( function(){

app.ShowPopup( 'Произошло касание объекта' );

});

и функциональное выражение:

var myFunc = function(){ alert(); }

myObject.SetOnTouch( myFunc );

});

Если объект не имеет методов SetOnTouchDown, SetOnTouchMove и SetOnTouchUp, то при вызове ФОВ в метода SetOnTouch аргументы ей не передаются:

btn.SetOnTouch( AS );

function AS( t ){
alert( t ); // undefined
}

Если объект имеет методы SetOnTouchDown, SetOnTouchMove, SetOnTouchUp, то в случае использования вместе с ними метода SetOnTouch последний будет перехватывать события down, move, up, получая от системы объект события со следующими полями:

  • source - объект-источник события
  • action - действие 'Up', 'Move' или 'Down'
  • count - количество пальцев 1 (или более для события 'Move')
  • X - горизонтальная координата первой точки касания
  • Y - вертикальная координата первой точки касания
  • x - список горизонтальных координат точек касаний
  • y - список вертикальных координат точек касаний

Скопируйте пример и посмотрите работу событий.

Пример 1. Работа с событиями.

В этом примере определены обработчики SetOnTouchDown, SetOnTouchMove, SetOnTouchUp, но их вызов не производится из-за перехвата всех событий обработчиком SetOnTouch.

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

Пример 2. Функция-роутер событий.

Выполнить

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

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

При помощи опции конструктора компоновщика TouchThrough ему можно запретить захват событий. В этом случае события будут проходить сквозь него, что позволит создать многослойный интерфейс путем наложения компоновщиков друг на друга и обработки событий на нижних слоях.

© 2016-2024 
actech