VB6 ドラッグ&ドロップ

解決


ドラッグ  2007-08-29 08:24:29  No: 137282

Image1をPicture1(正方形)にドラッグ&ドロップするプログラム
を作りたいと思っています。

下記のプログラムだとImage1全体がドラッグされるのではなく、
Image1の絵はその位置に残ってImage1の外枠だけがドラッグされてしまいます

外枠だけでなくImage1の絵も一緒にドラッグできるようにするにはどうすれば
いいのでしょうか?

また、下記のプログラムだとドロップする場所(Picture1)以外で
ドロップした場合でも画面上からImage1の絵と外枠が消えてしまいます。

ドロップする場所(Picture1)以外でドロップしてしまった場合は、
Image1全体を画面上に残しておきたいのですがどうすればいいのでしょうか?

Option Explicit

Dim dx As Single, dy As Single

Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)

    Source.Move X - dx, Y - dy
    
End Sub

Private Sub Form_Load()
    
    Image1.Picture = LoadPicture(App.Path & "picture.jpg")
    Image1.Stretch = True
    
End Sub

Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, _
                             X As Single, Y As Single)
    Image1.Drag 1
    dx = X: dy = Y      'マウスダウン位置
    
End Sub

Private Sub Picture1_DragDrop(Source As Control, X As Single, Y As Sin
gle)
    Source.Visible = False   'ドロップオブジェクトを非表示にする
    Picture1.BackColor = RGB(255, 255, 255)
    
End Sub

Private Sub Picture1_DragOver(Source As Control, X As Single, Y As Sin
gle, _
                                State As Integer)
    If State = 0 Then Picture1.BackColor = RGB(0, 0, 255)
    If State = 1 Then Picture1.BackColor = RGB(255, 255, 255)
End Sub


魔界の仮面弁士  2007-08-29 09:17:25  No: 137283

> Image1の外枠だけがドラッグされてしまいます。
Image1 の DragIcon に、適当なアイコンを割り当てておけば OK。
それが邪魔なら、完全透明の無色アイコンを指定しておけば良いかと。

> 外枠だけでなくImage1の絵も一緒にドラッグできるようにするには
イメージをフォーム外に移動させる必要が無く、自フォーム内に限った
話なのであれば、DragDrop/OLEDragDrop を使う必要は無いかと。

Private Sub Image1_MouseDown(……)
    If (Button And vbLeftButton) = vbLeftButton Then
        dx = X
        dy = Y
    End If
End Sub

Private Sub Image1_MouseMove(……)
    If (Button And vbLeftButton) = vbLeftButton Then
        Image1.Move Image1.Left - (dx - X), Image1.Top - (dy - Y)
    End If
End Sub


ドラッグ  2007-08-30 06:56:03  No: 137284

>Image1 の DragIcon に、適当なアイコンを割り当てておけば OK。
 『プロパティの値が不正です。』とでてきました。
拡張子が.jpgのものを「名前の変更」で強引に.icoに変えたのがマズイのでしょうか?

下記のように変更してみたのですが、ドラッグした瞬間に消えてしまうようになってしまいました。
よろしければ間違いの指摘をお願いします。

Option Explicit

Dim dx As Single, dy As Single

Private Sub Form_Load()
    
    Image1.Picture = LoadPicture(App.Path & "Picture.jpg")
    Image1.Stretch = True
    
End Sub

Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, _
                             X As Single, Y As Single)
                             
    If (Button And vbLeftButton) = vbLeftButton Then
        dx = X
        dy = Y
    End If
End Sub

Private Sub Image1_MouseMove(Button As Integer, Shift As Integer, _
                             X As Single, Y As Single)
                             
    If (Button And vbLeftButton) = vbLeftButton Then
        Image1.Move Image1.Left - (dx - X), Image1.Top - (dy - Y)
    End If
End Sub

Private Sub Picture1_DragDrop(Source As Control, X As Single, Y As Single)
    Source.Visible = False   'ドロップオブジェクトを非表示にする
    Picture1.BackColor = RGB(255, 255, 255)
    
End Sub

Private Sub Picture1_DragOver(Source As Control, X As Single, Y As Single, _
                                State As Integer)
    If State = 0 Then Picture1.BackColor = RGB(0, 0, 255)
    If State = 1 Then Picture1.BackColor = RGB(255, 255, 255)
End Sub


まずい  2007-08-30 18:27:46  No: 137285

>拡張子が.jpgのものを「名前の変更」で強引に.icoに変えたのがマズイのでしょうか?

まずいと思いますよ。
私ならば、そう仮定した時点で他の元からicoファイルを使って
動作比較しますが・・・。


@pne  2007-08-31 03:05:33  No: 137286

bmpファイル等をico変換してくれるフリーソフトは多々ありますので、
それらを使って試してみてください。

※32ビットのアイコンは対応していなかったかと・・・


ドラッグ  2007-09-01 02:09:54  No: 137287

回答ありがとうございます。
フリーソフトを探してチャレンジしてみます。


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

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






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