サイトトップ


回転で値を取得するカスタムコントロール/Xojoサンプル01







 MacのPagesとかの影の角度を変える時に円形のコントロールがありますが、それをまねてみました。他の方法もあるかもしれませんが、三角関数を使って、マウスの位置と中心点の位置から計算して回転する表示と、最後に値をテキストフィールドに表示しています。
マウスの座標を円周の座標に変換しているというアルゴリズムですね。中心点からの距離をピタゴラスの定理を使って計算し、直角三角形の底辺と斜辺の角度をAcosを使ってラジアン角度にしています。こうすることで、角度を得て、コントロールの描画にはコサインがX座標、サインがY座標で座標を決めて、描画しています。
使い道としては、角度を得ているので、画像の回転や、スライダーでは無く、値を設定するような場合とか、ドロップシャドウの角度とか、色々使えると思います。
サンプルなので、グラフックは単純ですが、もう少し手を入れると見た目も良くなると思います。


ファイル
Rotaion Control.xojo_binary_project.zip

これでも動作するのですが、Xojo日本語部の村岡さんが手直ししてくれたのをご紹介します。こっちの方がシンプルです。特徴としてはマウスダウンとドラッグで角度を計算しています。それをvalueという変数で受け渡し、Paintで描画しています。こちらの方が短く、シンプルです。



ファイル
Rotaion Control2.xojo_binary_project.zip

このふたつのコードの相違点は、私の場合は三角形の辺の長さを求めて角度を調べているのですが、村岡さんの場合はAtan2(Y,X)を使って、座標から角度を得ている点が違うと思います。
どちらも動作としては同じ感じです。村岡さんの場合、小さな●を内側にするには、
x = ( Cos( Me.value * DEG2RAD ) * g.Width/2 * 0.9 ) + g.Width / 2 - 5
の0.9の値を0.8とか0.7にすると内側になり、大きさはFillObalの値を変えますが、その値を半分をずらして位置を補正しています。
コントロールとして、角度以外に1~100とかにしたい場合は、得られた角度を3.6で割ってFloorで整数化すればいいと思いますし、回転の角度を制限する場合は、角度を制限するようなIf節を追加すればいいと思います。

If me.Value>40 and me.Value<100 Then
〜〜〜〜〜
End If

というような感じです。

お試しください。また自分のソフトで利用されてかまいません。