HyperCard tribute

ボタン・フィールドをドラッグする


 ドラッグできるボタンを作りましょう。まずは、自由自在に動かせるボタンです。
 1 
 2 
 3 
on mouseStilldown
  set the loc of me to the mouseloc
end mouseStilldown

  • set the loc of the target to the mouseloc
     このスクリプトが書かれているボタン(自分自身)を、マウスカーソルの座標に設定します。これはmouseStilldownハンドラなので、マウスのボタンを押している間(ドラッグしている間)は、マウスカーソルの座標についていくということになります。
    「me(自分自身)」
      の
    「loc(座標)」
      を
    「mouseloc(マウスカーソルの座標)」
      に
    「set 〜 to 〜 (設定する)」



     次は垂直方向のみにドラッグできるボタンです。
     1 
     2 
     3 
     4 
    
    on mouseStilldown
      put the mouseV-trunc(the height of me/2) into mv
      set the top of me to mv
    end mouseStilldown
    

  • put the mouseV - trunc(the height of me/2) into mv
     2行目では、ボタンをセットする位置を計算しています。the mouseVは、マウスカーソルの垂直座標、the height of meはボタン(自分自身)の縦サイズを示しています。どうして、マウスカーソルの垂直座標からボタンの縦サイズの半分を引いているのかというと、それは、3行目のthe top of meが原因です。
     the top of meは、ボタンの上部の垂直座標を持っています。つまり、マウスカーソルの位置にボタンをセットすると下の図のように位置がずれてしまうことになるのです。

     このずれを解消するために、ボタンの縦サイズの半分だけを上に移動させています。
     このとき、truncかroundをつけるのを忘れないで下さい。ボタンのサイズが奇数であった場合、小数点以下がでてきてしまうのを防ぐためです。
    「the mouseV - trunc(the height of me/2)」
      を
    「変数mv(新しいボタンの座標)」
      に
    「put 〜 into 〜 (上書き代入する)」


  • set the top of me to mv
     3行目で、ボタンの座標をmvに設定しています。
    「me(自分自身)」
      の
    「the top(上部の垂直座標)」
      を
    「変数mv(新しいボタンの座標)」
      に
    「set 〜 to 〜 (設定する)」



     最後は水平方向のみにドラッグできるボタンです。先の垂直方向へのドラッグとほぼ同じです。

     1 
     2 
     3 
     4 
    
    on mouseStilldown
      put the mouseH-trunc(the width of me/2) into mv
      set the left of me to mv
    end mouseStilldown
    

  • put the mouseH-trunc(the width of me/2) into mv
     2行目で、ボタンをセットする位置を計算します。the mouseHは、マウスカーソルの水平座標、the width of meはボタン(自分自身)の横サイズです。先と同じく、ずれを解消するために、左へ移動させておきます。
    「the mouseH - trunc(the width of me/2)」
      を
    「変数mv(新しいボタンの座標)」
      に
    「put 〜 into 〜 (上書き代入する)」


  • set the left of me to mv
     3行目で、ボタンの座標をmvに設定しています。
    「me(自分自身)」
      の
    「the left(左辺の水平座標)」
      を
    「変数mv(新しいボタンの座標)」
      に
    「set 〜 to 〜 (設定する)」