【ご質問】
ドラッグ&ドロップでBoxオブジェクトのサイズ変更することは可能でしょうか。
【回答】
PointerPress、PointerMotion、PointerReleaseのイベントを使用することで実現可能です。
サイズを変えたいオブジェクト上でPointerPressイベントが発生したタイミングで
PointerMotionイベントを貼り付けます。
そのPointerMotionイベントではマウスの動きに合わせてオブジェクトのサイズを変更します。
そして、PointerReleaseイベントで貼り付けたPointerMotionイベントを取り除きます。
詳細は以下のサンプルをご参照ください。
{curl 6.0,7.0,8.0 applet} {curl-file-attributes character-encoding = “shift-jis”}
{value let frame:#Frame let start-x:Distance let start-width :Distance let p-mo:EventHandler = {on e:PointerMotion at canvas:Canvas do set frame.width = start-width + (e.x – start-x) } let canvas:Canvas = {Canvas width = 15cm, height = 10cm, background = “silver”, {on e:PointerRelease at canvas:Canvas do {try {canvas.remove-event-handler p-mo} catch e:Exception do ||do nothing } } } set frame = {Frame width = 3cm, height = 3cm, background = “#D4D0C8”, border-width = 1pt, border-color = “black”, {VBox {Fill}, {HBox {Fill}, {Frame width = 10pt, height = 10pt, background = “red”, {on e:PointerPress at f:Frame do let (canvas-x:Distance, canvas-y:Distance) = {frame.get-origin-in-graphical-ancestor canvas} set start-x = canvas-x + e.x set start-width = f.width {canvas.add-event-handler p-mo} {e.continue-implicit-pointer-grab canvas} } } } } }
{canvas.add frame, x = 4cm, y = 4cm} canvas }
|