Использование Drag and Drop |
Drag and Drop в VIP интерфейсах основан на стандартном механизме обмена данными Windows. Возможен как обмен внутри одного приложения, так и между другими приложениями Windows, поддерживающими Drag and Drop.
Для использования Drag and Drop в интерфейсах, необходимо при помощи функций DNDWindowAcceptDrag и DNDFieldAcceptDrag указать окна и поля которые могут принимать данные (т.е. "приёмники"), и при помощи функции DNDFieldDropSource указать поля из которых возможно "перетаскивание" (т.е. "источники").
По умолчанию Drag and Drop включен только в редакторе, который может обмениваться блоками текста с другими окнами редактора или внешними приложениями, либо перемещать и копировать текcт внутри себя самого.
Для правильной работы Drag and Drop в интерфейсах должны быть обработчики событий (см. "События Drag and Drop."), которые сохраняют и загружают данные в буфере обмена. Буфер обмена может хранить несколько порций данных в различных форматах. Для идентификации формата используется целое число типа longInt. Идентификаторы стандартных форматов описаны как константы с префиксом CF. Перед использованием данных в нестандартном формате, его (формат) необходимо зарегестрировать функцией DNDRegisterFormat.
Для работы с текстовыми данными реализован перевод кодировок. Использование формата CF_TEXT гарантирует правильность кодировки при записи или считывании данных.
Запись и считывание данных производится при помощи функций DNDSetData, DNDGetData, DNDSetContainer, DNDGetContainer, DNDSetSContainer, DNDGetSContainer. Поддерживается запись и считывание переменных простых типов, структур и контейнеров.
Чтобы обеспечить универсальность механизма, важно реализовать максимальную независимость данных в буфере от текущего состояния системы, избегать использования для передачи данных переменных, полей временных таблиц и других способов делающих интерпретацию данных из буфера неоднозначной.