Как перетаскивать элементы в приложении LiveCode?

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

Я также хотел бы сообщить пользователю, что он на самом деле перетаскивает. Миниатюра была бы идеальной.

Я знаю, как изменить курсор при наведении курсора на изображение:

on mouseEnter
   lock cursor
   set the cursor to "hand"
end mouseEnter

on mouseLeave
   unlock cursor 
end mouseLeave

person LiveCode Support    schedule 03.03.2014    source источник


Ответы (2)


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

Скрипт изображения 1

on dragStart
   set the dragData["text"] to the text of image 1
   set the dragImage to the id of me
end dragStart

Сценарий изображения 2

on dragEnter
 set the dragaction to "copy"
end dragEnter

on dragDrop
 set the text of the target to the dragData["text"]
end dragDrop

Когда изображение 1 щелкают и перетаскивают, его текст (содержимое) помещается в массив dragData, его dragAction устанавливается на копирование, а перетаскиваемое изображение устанавливается на идентификатор самого изображения. Это прозрачное изображение, которое указывает, что вы перетаскиваете.

На изображении 2, когда пользователь перетаскивает и вводит изображение, для acceptDrop устанавливается значение true, а когда пользователь отпускает мышь (dragDrop), текст изображения устанавливается в массив dragData["text"]

person Neil Roger    schedule 03.03.2014

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

on mouseDown
   grab me
end mouseDown

on mouseUp
   # do whatever evaluation you need to do here
   # e.g., check to see whether the drop location is a valid target area
   # Here is one way to do it:
   if the location of the target is within the rect of graphic "hotspot" then
     put "That's right!" into fld "feedback"
   end if

   # If you are dragging to an irregular target area do this instead:
   if within(graphic "irregularPoly",the loc of the target) then
     put "That's right!" into fld "feedback"
   end if
end mouseUp
person Devin    schedule 04.03.2014
comment
Вы пишете # например, проверьте, является ли место сброса допустимой целевой областью. Как бы Вы это сделали? - person z--; 11.03.2014