shapeコントロールをマウスで動かすようにしたいのですが、ドラッグしようとするとカーソルがドラッグ対象物の左角に動いたり、対象物上でない所でダブルクリックし動かすと、そこにshapeコントロールが一瞬で移動してしまいます。どのようにしたら良いのか教えてください。
Dim a As Boolean
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
a = True
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If a = True Then
Shape1.Move X, Y
End If
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
a = False
End Sub
コードはこんな感じです。お願いします。
考えるべきポイントは
フォームのどこをクリックした時にフラグを立てるかということです
あくまで、シェープ内をクリックした時にフラグを立てるということをしたいだけですよね?
その条件を加えましょう!
あと画面外にマウスをドラッグされた時はどうするのかとか
クリックしてフラグを立てた時にシェープの左端と上端とカーソルの位置の差分を取っておき
移動時にその差分を加えてあげると自然なドラッグができるかもしれませんよ
返信ありがとうございました。
shapeコントロールを移動させる時のカーソルが角っこに行かないように
はなんたのですが、shapeコントロール外でダブルクリックし、マウスを動かすとそこに動かさないようにするフラグはどのようにしたらいいのでしょうか?
度々すいません。
やりたい順序で紙に書くとわかりやすいですよ
設計書というより手順書という感覚で
どういうプログラムでダブルクリックで飛ぶのか不明ですけど以下ロジック
Private mblnRes As Boolean
Private mlngX As Long
Private mlngY As Long
Private Sub Form_Load()
mblnRes = False
End Sub
Private Sub Form_MouseDown(〜省略〜)
Dim lngRight As Long
Dim lngBottom As Long
lngRight = Shape1.Left + Shape1.Width
lngBottom = Shape1.Top + Shape1.Height
If X >= Shape1.Left And X <= Shape1.Right _
Y >= Shape1.Top And Y <= Shape1.Bottom Then
mlngX = Shape1.Left - X
mlngY = Shape1.Top - Y
mblnRes = True
End If
End Sub
Private Sub Form_MouseMove(〜省略〜)
If mblnRes = True Then
If X <= Me.ScaleWidth And Y <= Me.ScaleHeight
If X >= 0 And Y >= 0 then
Shape1.Move X + mlngX, Y + mlngY
Enf If
Enf If
Enf If
End Sub
Private Sub Form_MouseUp(〜省略〜)
mblnRes = False
End Sub
こんなんでどうでしょうか?
すまそ・・・Enf Ifってなんじゃ・・・
End Ifの間違いです・・・
葉月さんのコードを参考にしたら、私のしたい事ができました!
本当に感謝しています!!
ありがとうございました。(^^)
間違いだらけのコードで申し訳ありませんでした
マウスダウンのところ
Shape1.RightはlngRight
Shape1.BottomはlngBottomの間違いですね
あとそのIF文にAndが抜けていますね
一応VB上で動作を確認しているのでロジック的間違いはないと思いますが
何分VBマシンと投稿しているマシンが別なもので打ち直しとなり
間違いが発生、申し訳ありませんでした
度々すいません。
今回shapeコントロールをマウスで(数個)を動かす事は出来たのですが…
これをForm上で別のshapeコントロールで枠(範囲)を作って、その中で動かす事ようにしたいのですが、shapeコントロールに座標(範囲)を決めてその中で動かすような事はできるのでしょうか?
VB6を始めて間もないので、ご迷惑をお掛けします。
ヒントでも良いんでお願いします。
シェープコントロールをフレームに変更するか
フレーム枠を消したフレームの中にシェープをおいて
フレームを移動させればまとめて動きます
この時はフレームに対してのイベントに処理をいれてあげればいいと思います
返信と細かな回答していただきありがとうございます。
Frameではできたのですが、やはりshapeコントロールを
使わなくてはいけなくなりました。
shpaeをFormのように扱うのにはどうしたらいいのでしょうか?
質問ばかりですいません。
ツイート | ![]() |