shapeコントロールをマウスで動かすには?

解決


すもも  2004-10-29 09:18:10  No: 117260

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

コードはこんな感じです。お願いします。


葉月  2004-10-29 18:50:03  No: 117261

考えるべきポイントは
フォームのどこをクリックした時にフラグを立てるかということです
あくまで、シェープ内をクリックした時にフラグを立てるということをしたいだけですよね?
その条件を加えましょう!

あと画面外にマウスをドラッグされた時はどうするのかとか

クリックしてフラグを立てた時にシェープの左端と上端とカーソルの位置の差分を取っておき
移動時にその差分を加えてあげると自然なドラッグができるかもしれませんよ


すもも  2004-11-04 10:25:48  No: 117262

返信ありがとうございました。
shapeコントロールを移動させる時のカーソルが角っこに行かないように
はなんたのですが、shapeコントロール外でダブルクリックし、マウスを動かすとそこに動かさないようにするフラグはどのようにしたらいいのでしょうか?
度々すいません。


葉月  2004-11-04 18:18:08  No: 117263

やりたい順序で紙に書くとわかりやすいですよ
設計書というより手順書という感覚で
どういうプログラムでダブルクリックで飛ぶのか不明ですけど以下ロジック

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
こんなんでどうでしょうか?


葉月  2004-11-04 18:19:11  No: 117264

すまそ・・・Enf Ifってなんじゃ・・・
End Ifの間違いです・・・


すもも  2004-11-05 03:18:20  No: 117265

葉月さんのコードを参考にしたら、私のしたい事ができました!
本当に感謝しています!!
ありがとうございました。(^^)


葉月  2004-11-06 01:04:36  No: 117266

間違いだらけのコードで申し訳ありませんでした
マウスダウンのところ
Shape1.RightはlngRight
Shape1.BottomはlngBottomの間違いですね
あとそのIF文にAndが抜けていますね

一応VB上で動作を確認しているのでロジック的間違いはないと思いますが
何分VBマシンと投稿しているマシンが別なもので打ち直しとなり
間違いが発生、申し訳ありませんでした


すもも  2004-11-08 09:50:34  No: 117267

度々すいません。
今回shapeコントロールをマウスで(数個)を動かす事は出来たのですが…
これをForm上で別のshapeコントロールで枠(範囲)を作って、その中で動かす事ようにしたいのですが、shapeコントロールに座標(範囲)を決めてその中で動かすような事はできるのでしょうか?
VB6を始めて間もないので、ご迷惑をお掛けします。
ヒントでも良いんでお願いします。


葉月  2004-11-08 17:51:05  No: 117268

シェープコントロールをフレームに変更するか
フレーム枠を消したフレームの中にシェープをおいて
フレームを移動させればまとめて動きます

この時はフレームに対してのイベントに処理をいれてあげればいいと思います


すもも  2004-11-09 08:21:47  No: 117269

返信と細かな回答していただきありがとうございます。
Frameではできたのですが、やはりshapeコントロールを
使わなくてはいけなくなりました。
shpaeをFormのように扱うのにはどうしたらいいのでしょうか?
質問ばかりですいません。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加