Rich UI 끌어서 놓기

사용자가 한 위치에서 다른 위치로 위젯을 끌어서 놓을 수 있도록 코드를 작성할 수 있습니다. 좀 더 광범위하게 사용자 코드가 다음 사용자 이벤트에 응답할 수 있습니다(사용자가 위치를 잡을 때의 단일 마우스 다운 이벤트, 이후의 마우스 이동 이벤트, 단일 마우스 업 이벤트). 끌어서 놓기에 의해 표시되는 런타임 태스크를 이행할 수 있습니다. Rich UI에서는 이 동작을 정의하지 않습니다.

위젯 선언에서 세 개의 특성을 정의하고 해당 특성 값에서 참조할 함수를 작성하여 끌어서 놓기 코드를 작성합니다. 예를 들어 다음은 단추에 대한 선언입니다.
b1 Button { 
   text = "Button 1", position="absolute",	x=10, y=10,
   onStartDrag = start, onDrag = drag, onDropOnTarget = drop};

다음은 끌어서 놓기를 사용 가능하게 하는 세 개의 특성입니다.

다음은 작업공간으로 가져올 수 있는 예입니다.
import com.ibm.egl.rui.widgets.TextField;

handler MyHandler type RUIHandler{initialUI =[myTextField]}
   myTextField TextField{text = 
                   "What a drag!", position = "absolute", x = 110, y = 210, width = 120, 
                   onStartDrag = start, onDrag = drag, onDropOnTarget = drop};
   dx, dy int;

   function start(myWidget Widget in, x int in, y int in) returns(boolean)
      dx = x - myWidget.x;
      dy = y - myWidget.y;
      return(true);
   end

   function drag(myWidget Widget in, drop Widget in, x int in, y int in)
      myWidget.x = x - dx;
      myWidget.y = y - dy;
   end

   function drop(widget Widget in, drop Widget in, x int in, y int in)
   end
end
start 함수는 마우스 포인터의 위치와 위젯의 왼쪽 맨 위 모서리 간의 차이를 계산합니다. 해당 계산을 사용하면 조작하는 동안 마우스 포인터가 동일한 위치에 표시되는 효과가 있습니다. 이러한 효과를 보려면 코드를 두 번 실행하고 위젯의 오른쪽 맨 아래 모서리를 클릭하여 다음과 같은 상황이 발생할 때마다 끌어서 놓기 조작을 시작합니다.
  1. 표시된 대로 코드를 실행합니다.
  2. drag 함수의 명령문을 다음 지정으로 바꾼 후에만 코드를 실행합니다.
       myWidget.x = x;
       myWidget.y = y;

추가 예는 Rich UI 새도우에 있습니다.