Общение


с двумя типами событий: onscripletevent


DHTML скриплет может работать с двумя типами событий: onscripletevent событие и стандартные оконные события. Первое может быть инициировано в любое время из скриплета. Стандартные оконные события, такие как onclick, onkeypress, не могут быть инициированы самим скриплетом, но скриплет имеет механизм, оповещающий о событии контейнер. Скриплет реагирует на следующие стандартные оконные события:
  • onClick

  • onDblClick

  • onMouseDown

  • onMouseUp

  • onMouseMove

  • onKeyPress

  • onKeyUp

  • onKeyDown

  • Для работы со стандартными оконными событиями из контейнера необходимо написать обработчики событий в двух местах: один в скриплете для передачи уведомления о событии контейнеру, для этого вызывается метод bubbleEvent(), а другой в приложении, использующем скриплет для, непосредственной обработки события. Детальная информация о событии может быть получена через стандартный объект event. Рассмотрим простой пример передачи уведомления контейнеру о событии onKeyUp для поля ввода text1:
    <input type = text onkeyup = "passKeyUp()" name = "text1" value = " "> <script languаge = JavaScript> function passKeyUp() { window.external.bubbleEvent();// передача уведомления, о //событии onKeyUp в //элементе text1
    } </script>
    Есть одна тонкость: при передаче сообщения сначала необходимо убедиться в том, что свойство скриплета frozen имеет значение false, для уверенности, что контейнер способен обработать событие.

    Note: Свойство frozen - read-only булево свойство скриплета; значение true означает, что на данный момент событие в контейнере обработано не будет.
    Если скриплет не содержит обработчика данного события или внутри обработчика не вызывается метод bubbleEvent, то уведомление о событии передано не будет.
    Скриплет взаимодействует со своим контейнером посредством события onscripletevent, содержащим два параметра: строку и произвольно выбранный объект. Обработчик события может выбирать, как реагировать на событие в зависимости от содержимого строчного параметра, а передаваемый объект содержит дополнительную информацию.


    По умолчанию скриплет не вызывает событий, которые могут быть обработаны в контейнере. Однако, реализуя Event interface handler можно добавлять события в скриплет. После этого появляется возможность инициировать события из скриплета в любое время. Для того чтобы добавить событие необходимо:
  • В элементе <implements> объявить об использовании Event interface handler, обеспечивающий механизм генерации событий.
  • Объявить о каждом событии, которое вы хотите иметь возможность вызывать.
  • Создать библиотеку типов для скриплета, чтобы контейнер имел возможность получить список возможных событий. <implements type="Event" id="scriptlet1"> <event name="event1"/> <event name="event2"/> </implements>
    В COM программировании уведомление о событиях происходит через dispatch идентификатор (dispid) - целое число, определяющее событие инициируемое компонентой. Dispid компилируется в библиотеку типов и затем используется приложением для связи с событием. В процессе создания библиотеки типов dispid создается автоматически, но вы можете определить его сами:


    <event name="event1" dispid=22 />.
    После определения события можно его вызывать с помощью метода fireEvent(), например:
    scriplet1.fireEvent("event2");

    Содержание раздела