- ベストアンサー
SCALEの使い方教えてください
宜しくお願いします。 以前座標系のSCALEの使い方で質問させて頂きましたが、 どうしても使い方が分かりません。 Pictureの中をマウスクリックしたらそのポジションをデカルト座標の中心点X0Y0にしたいのですが、色々考えたのですがどうしても出来ません。教えて下さい。 マウスも1:1で動かしたいのですが。。。 宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Private Sub Form_Load() With Picture1 .ScaleWidth = Abs(ScaleWidth) .ScaleHeight = -Abs(.ScaleHeight) End With End Sub Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) With Picture1 .ScaleLeft = -Abs(.ScaleLeft - X) .ScaleTop = Abs(.ScaleTop - Y) .ScaleWidth = Abs(ScaleWidth) .ScaleHeight = -Abs(.ScaleHeight) Picture1.Circle (0, 0), 10 End With End Sub
その他の回答 (2)
- tak2003
- ベストアンサー率32% (174/540)
フォームにピクチャーボックスを貼りつけてスケールを定義するとそのピクチャーの原点を(0,0)にできますが、任意の場所を原点にするならば補正値としてhoseix, hoseiyの二つの変数を用意する必要があります。 この二つの変数に補正値を入れて計算に与えれば形の上で原点を求める事が出来ます。 マウスダウンのプロシージャでx、yを求め、引き算して補正値を求めます。 例えば画面の左上が(0,0)だったら、X,Yの場所を(0,0)にするために計算すれば良いわけです。 あとは補正の変数に入れて計算して表示すれば良いわけです。
お礼
情報を有難う御座いました。 自分でもいろいろやってみましたが、しかたなく「教えて」に投稿した次第です。皆様のご指導を参考にさせて頂きます。有難う御座いました。
- imogasi
- ベストアンサー率27% (4737/17070)
私も力不足ですが、Scaleを使っている下記サイトが見つかりました。参考になりませんか。見当違いの節は済みません。 http://www.nucba.ac.jp/~tkenichi/Lecture/1999/CompGeom/vol6.html 上記の内容を少し判りやすく、上手く動かない原因らしい点を修復しますと (1)Formにリストボックス1、リストボックス2を貼りつける。 またコマンドボタンを貼りつける。 (2)Form_Loadイベントに Private Sub Form_Load() Dim m(10), n(10) m(0) = 1 m(1) = 2 m(2) = 3 m(3) = 5 m(4) = 7 n(0) = 2 n(1) = 3 n(2) = 4 n(3) = 6 n(4) = 8 Pi = 3.1415926536 Picture1.Scale (-1, 1)-(1, -1) For i = 0 To 4 List1.AddItem m(i) ' ここで List1 に配列 m の値を追加している List2.AddItem n(i) Next List1.ListIndex = 0 ' デフォルトで選択されるものを設定 List2.ListIndex = 0 Picture1.AutoRedraw = True ' 画像をファイルに保存する(後で行う)ためのおまじない End Sub (3)そしてコマンドボタンのClickイベントに Private Sub Command1_Click() mm = List1.List(List1.ListIndex) nn = List2.List(List2.ListIndex) Picture1.PSet (1, 0) Pi = 3.1415926536 For t = 0 To 400 Picture1.Line -(Cos(2 * Pi * mm * t / 400), Sin(2 * Pi * nn * t / 400)) Next End Sub を入れる。 (4)これを実行するとPictureBox内にリサジュー図形が書かれます。(テスト済み) この Picture1.Scale (-1, 1)-(1, -1)の1の部分を マウスのポイントにより座標原点に自動設定したいと言うことでしょうか。PictureBoxのマウスのイベントでマウス位置x、yを返すのは、MouseMoveイベントなどしかなく、しかしこれは使えず、難しいのではないでしょうか。 良い回答を期待します。
お礼
情報を有難う御座いました。 自分でもいろいろやってみましたが、しかたなく「教えて」に投稿した次第です。皆様のご指導を参考にさせて頂きます。有難う御座いました。
お礼
有難う御座いました。参考にさせて頂き、ほぼ希望通りのモノが実行することが出来ました。DOSのC言語もカジリましたが、VBは便利な分だけ、難解な部分も多く毎回アタマを抱えて居ります。なるべく考えた末質問するようにしてますが、毎回快く解答を下さる皆様に感謝と畏敬の念を感じます。有難う御座いました。