4.4.1.4.2.4.12.20. Перемещение

 
При работе в рантайм из объекта в объект можно перетаскивать данные. Перетаскивать данные можно внутри одного проекта либо между объектами разных проектов.
 
Вы можете передавать между объектами:
значения свойств объектов/отдельных элементов проекта;
произвольный текст.
 
Данные, полученные от другого объекта, можно использовать как угодно, настроив их обработку.
 
Вы можете перетаскивать одни и те же данные с одного объекта-отправителя на разные объекты-получатели. При этом любой объект может одновременно быть и отправителем и получателем.
 
Чтобы добавить объекту возможность передавать/принимать данные, добавьте ему дочерний элемент Перемещение и разрешите отправку/прием данных с помощью свойств Активность переноса и Активность приема элемента Перемещение.
 
   
 
Чтобы указать изображение, отображаемое рядом с курсором при перетаскивании, перейдите к объекту-отправителю и укажите название файла в свойстве Изображение элемента Перемещение. По умолчанию при переносе отображается изображение объекта-отправителя.
 
Чтобы создать иллюзию перетаскивания данных, используйте обработчики событий MousePress объекта-отправителя и OnDrop элемента Перемещение на стороне объекта-получателя. Укажите передаваемые данные в обработчике события MousePress и настройте обработку принимаемых данных в обработчике события OnDrop. Для перетаскивания щелкните на объекте-отправителе и не отпуская клавишу мыши, перетащите данные на объект-получатель.
 
При перетаскивании на сторону объекта-получателя "сбрасываются" абсолютно все данные, заложенные в обработчик события MousePress объекта-отправителя. Какие из "сброшенных" данных будут приняты объектом-получателем, зависит от настройки обработчика события OnDrop.
 
Перед указанием передаваемых данных на стороне объекта-отправителя оцените объем и содержание передаваемых данных и выберите способ передачи.
 
Способы передачи данных между объектами:
передача данных единым блоком;
передача данных частями;
передача массива бинарных данных.
 

Передача данных единым блоком

 
Если вы намерены передать большой блок данных (например, произвольный текст), который целиком нужен каждому объекту-получателю, передавайте данные одним блоком. Для передачи используйте функции SetText (SetHtml) элемента Перемещение на стороне объекта-отправителя и функции GetText (GetHtml) параметра data события OnDrop элемента Перемещение на стороне объекта-получателя.
 
Чтобы настроить передачу единого блока данных, выполните:
1. Для объекта-отправителя и объекта-получателя добавьте дочерний элемент Перемещение.
2. В обработчике события MousePress объекта-отправителя укажите передаваемые данные с помощью функции SetText (SetHtml) элемента Перемещение.
 
 
 
3. Для запуска перемещения данных используйте функцию DoDragDrop элемента Перемещение. Вызывайте функцию сразу же после вызова функции SetText (SetHtml) (см. рисунок выше).
 
4. В обработчике события OnDrop элемента Перемещение разрешите объекту-получателю принимать любой текстовый блок с помощью функции GetText (GetHtml) параметра data.
 
Пропишите как вы будете использовать полученный блок данных. Вы можете по своему усмотрению настроить обработку полученного блока так, чтобы блок после получения разбивался на части. Для этого на стороне объекта-получателя запишите передаваемые данные в виде JSON-структуры или строки с разделителями.
 
 

Передача данных частями

 
Если каждому из объектов-получателей нужна только определённая часть из всего передаваемого блока, либо вы хотите разбить блок данных на части перед отправкой, используйте функцию SetData элемента Перемещение на стороне объекта-отправителя. С помощью функции SetData каждой отдельной части можно присвоить тип (идентификатор). Типы позволяют ограничить объем принимаемых данных на объекте-получателе.
 
Используйте функцию AddAcceptedFormat элемента Перемещение, чтобы указать типы, разрешённые для приёма. При получении блока данных объект-получатель ориентируется на список разрешённых принимаемых типов и принимает только типы из списка. Для приёма типов на стороне объекта-получателя используйте функцию GetData параметра data события OnDrop элемента Перемещение.
 
Чтобы настроить передачу данных по частям, выполните:
1. Для объекта-отправителя и объекта-получателя добавьте дочерний элемент Перемещение.
2. В обработчике события MousePress объекта-отправителя укажите передаваемые данные с помощью функции SetData элемента Перемещение. Для каждой отдельной части используйте свою функцию SetData и присваивайте свой тип (идентификатор).
 
 
3. Для запуска перемещения данных используйте функцию DoDragDrop элемента Перемещение. Вызывайте функцию сразу же после вызова функции SetData (см. рисунок выше).
4. Составьте список разрешённых принимаемых типов для объекта-получателя с помощью функции AddAcceptedFormat элемента Перемещение. Необходимо, чтобы список был обработан перед сбросом данных на объект-получатель. К примеру, укажите список принимаемых типов в обработчике события Opened для формы.
 
 
5. В обработчике события OnDrop элемента Перемещение настройте обработку полученных типов с помощью функции GetData параметра data. Для каждого принимаемого типа используйте свою функцию GetData.
 
 

Передача бинарных данных

 
Если вы хотите передать блок бинарных данных, передавайте такие данные в виде массива. Имя массива и его размер указывайте с помощью функции SetDataSize. Для указания передаваемых данных используйте функцию SetDataAt элемента Перемещение на стороне объекта-отправителя. Для получения размера массива на стороне объекта-получателя используйте функцию GetDataSize параметра data события OnDrop элемента Перемещение. Для получения значений из массива используйте функцию GetDataSize параметра data события OnDrop элемента Перемещение.
 
Чтобы настроить передачу данных в виде массива, выполните:
1. Для объекта-отправителя и объекта-получателя добавьте дочерний элемент Перемещение.
2. В обработчике события MousePress объекта-отправителя укажите размер и имя массива с помощью функции SetDataSize. Укажите передаваемые данные с помощью функции SetDataAt элемента Перемещение. Для каждого элемента массива используйте свою функцию SetDataAt.
 
 
3. Для запуска перемещения данных используйте функцию DoDragDrop элемента Перемещение. Вызывайте функцию сразу же после вызова функции SetData (см. рисунок выше).
4. На стороне объекта-получателя в обработчике события OnDrop элемента Перемещение настройте обработку полученного массива с помощью функции GetDataAt параметра data. Для каждого элемента массива используйте свою функцию GetDataAt.