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
> 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
>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
>拡張子が.jpgのものを「名前の変更」で強引に.icoに変えたのがマズイのでしょうか?
まずいと思いますよ。
私ならば、そう仮定した時点で他の元からicoファイルを使って
動作比較しますが・・・。
bmpファイル等をico変換してくれるフリーソフトは多々ありますので、
それらを使って試してみてください。
※32ビットのアイコンは対応していなかったかと・・・
回答ありがとうございます。
フリーソフトを探してチャレンジしてみます。
ツイート | ![]() |