Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
76
Добавлен:
02.04.2015
Размер:
8.79 Mб
Скачать
  1. Глава 21. "Тащить и бросать"

Технология "тащить и бросать" (drag&drop) позволяет Вам перетаскивать произвольные данные внутри приложения или между приложениями.

 Если Вам надо просто перетаскивать графические объекты, см. раздел "Перетаскивание" в главе "События".

В этой главе обсуждается:

  • Механизм транспортировки

  • Использование "тащить и бросать"

  • Регистрация новых транспортных типов

    1. Механизм транспортировки

Механизм транспортировки в Photon'е позволяет Вам переносить любые данные из одного приложения в другое, даже если приложения принадлежат к различным платформам с отличающимся форматом передачи данных (расположением старшего/младшего байтов). Этот механизм используется как основа технологии "тащить и бросать", но может использоваться и для других целей, таких как конфигурационные файлы.

Имеется два способа транспортировки данных:

Inline

Поточный. Данные пакуются в поток (stream) и отсылаются адресату.

By request

По запросу. Пакуются в поток и отсылаются описания данных. Адресат принимает решение, какой тип (типы) данных ему нужен и отсылает запрос обратно на источник, который затем упаковывает только затребовнные данные.

Для того, чтобы транспортировать данные, механизм транспортировки должен паковать данные в источнике – приложении или виджете – и распаковывать их в адресате. Он должен быть способен опознавать тип данных, чтобы определять, какой вид паковки и распаковки должен быть выполнен. Это выполняется через транспортный реестр.

Существует несколько регистрируемых системой типов, которые появляются после инициализации Photon'овской библиотеки через вызовы PtInit() или PtAppInit() – это для приложений PhAB выполняется автоматически. Регистрируемыми системой типами являются:

  • string

  • raw

  • PhDim

  • PhArea

  • PhPoint

  • PhImage

Вы можете добавить в реестр другие типы данных, как это описано в разделе "Регистрация новых транспортных типов" ниже в этой главе. Механизм транспортировки работает посредством построения списка данных, предназначенных для транспортировки, пакования данных в поток, в котором каждому блоку предшествует заголовок, описывающий данные.

              1. Рис. 21-1. Упакованные данные и заголовки

Когда данные прибывают к адресату, заголовки извлекаются для получения распаковочных инструкций к данным. Механизм транспортировки автоматически распаковывает данные; приложение получает данные в своём оригинальном виде.

    1. Использование "тащи и бросай"

Этот раздел включает:

  • Запуск "тащи и бросай"

  • Получение событий по "тащи и бросай"

  • Отмена "тащи и бросай"

Вы можете использовать "тащи и бросай", чтобы переместить данные из одного виджета в другой, используя транспортный механизм Photon'а. Вы можете транспортировать одновременно данные нескольких типов, предоставляя адресату выбор, какие данные получать. Весь обмен между источниками и адресатом является неблокирующимся.

Основными шагами (описанными более подробно в нижеследующих разделах) являются:

  1. Пользователь нажимает кнопку указателя на виджете, который в операции "тащи и бросай" является источником.

  2. В ответной реакции Pt_CB_OUTBOUND виджет-источник пакует данные, предназначенные для перетаскивания, и запускает операцию "тащи и бросай".

  3. Пользователь перетаскивает данные и рашает бросить их на виджет.

  4. В ответной реакции Pt_CB_DND виджет-адресат решает, какую часть перетащенных данных (если таковая имеется) он примет. Все доступные данные распаковываются автоматически. Данные размещаются в выделенной памяти, адресат должен освободить память, когда данные ему больше не нужны.

Виджет-источник может также, если захочет, отменить операцию.

Соседние файлы в папке Литература_1