Наглядный перенос изображения

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Наглядный перенос изображения

Сообщение Alex[fj] » 21.10.2007 (Вс) 12:00

Решил я добить PictureBox'ы :)

Из одного бокса Drag&Drop'ом тащится картинка. Как сделать это видимым? Ну, чтобы полупрозрачное изображение следовало за курсором.

Буду очень благодарен за исходник, т.к. советы мне уже давали - бестолку :)
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 06.11.2007 (Вт) 14:33

Пытаюсь делать как-то так... Нефига не получается :? А как еще эту фишку реализовать, даже в голову не приходит... Подскажите, пожалуйста.
Код: Выделить всё
Dim IsMouseDown As Boolean = False
    Dim bit As Bitmap
    Dim MouseOffset As System.Drawing.Point

    ' Handles the MouseDown event for both PictureBox controls. This event fires
    ' when the mouse is in the control's bounds and the mouse button is
    ' clicked.
    Private Sub PictureBox_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles picLeft.MouseDown, picRight.MouseDown, PictureBox1.MouseDown
        If e.Button = Windows.Forms.MouseButtons.Left Then
            IsMouseDown = True

            MouseOffset.X = e.X
            MouseOffset.Y = e.Y

            Dim pic As PictureBox = CType(sender, PictureBox)
            bit = CType(pic.Image, Bitmap)
            'invoke the drag and drop operation
            If Not pic.Image Is Nothing Then
                pic.DoDragDrop(pic.Image, DragDropEffects.Move Or DragDropEffects.Copy)
            End If
        End If
    End Sub

    ' Handles the DragEnter event for both PictureBox controls. DragEnter is the
    ' event that fires when an object is dragged into the control's bounds.
    Private Sub PictureBox_DragEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles picLeft.DragEnter, picRight.DragEnter, PictureBox1.DragEnter
        ' Check to be sure that the drag content is the correct type for this
        ' control. If not, reject the drop.
        If (e.Data.GetDataPresent(DataFormats.Bitmap)) Then
            ' If the Ctrl key was pressed during the drag operation then perform
            ' a Copy. If not, perform a Move.
            If (e.KeyState And CtrlMask) = CtrlMask Then
                e.Effect = DragDropEffects.Copy
            Else
                e.Effect = DragDropEffects.Move
            End If
        Else
            e.Effect = DragDropEffects.None
        End If
    End Sub

    ' Handles the DragDrop event for both PictureBox controls. One handler can be
    ' used for both PictureBox controls by casting the sender and then checking the
    ' Name property to determine which control should remove the image.
    Private Sub PictureBox_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles picLeft.DragDrop, picRight.DragDrop, PictureBox1.DragDrop
        Dim pic As PictureBox = CType(sender, PictureBox)
        pic.Image = CType(e.Data.GetData(DataFormats.Bitmap), Bitmap)

        ' Cause the image in the other PictureBox (that is, the PictureBox that was
        ' not the sender in the DragDrop event) to be removed if the Ctrl key was
        ' not pressed.
        If (e.KeyState And CtrlMask) <> CtrlMask Then
            If pic.Name = "picLeft" Then
                picRight.Image = Nothing
            Else
                picLeft.Image = Nothing
            End If
        End If
    End Sub

 
    Dim rectangle As System.Drawing.Rectangle
    Private Sub frmMain_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
        If IsMouseDown Then


            Dim rect As New System.Drawing.Rectangle(Me.Location.X + e.X - MouseOffset.X, Me.Location.Y + e.Y - MouseOffset.Y, bit.Width, bit.Height)
            rectangle = rect
            Me.Refresh()

        End If
    End Sub

    Private Sub frmMain_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        If IsMouseDown Then
            bit = CType(picLeft.Image, Bitmap)
            e.Graphics.DrawImage(bit, rectangle)
        End If
    End Sub
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 09.11.2007 (Пт) 19:00

Код вверху чуть-чуть поправил... Но все равно фигня получается... :(
Изображение начинает бегать за курсором только после того, как уже кинем изображение в другой бокс :(
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 09.11.2007 (Пт) 19:45

я бы таскал полупрозрачную форму с картинкой
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 09.11.2007 (Пт) 21:08

Спасибо, я так пробовал уже - не катит... Но проект уже почти готов! Там просто есть одна фишка :roll:
Код нужно подправить, тогда выложу... Может, кому интересно будет :)
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 97

    TopList