Form magnetique a la winamp

Description

Tout d'abord, je tiens à préciser que je suis inspiré de la source de Warny (RENDRE UN CONTROLE DÉPLAÇABLE À LA SOURIS (.NET) - http://www.vbfrance.com/code.aspx?ID=17548)
Je trouvais la source de Warny pas assez explicite, et y avait trop de code pour un si petit truc. Voilà un code beaucoup plus simple, et sans bug.
Donc, comme c'est dit dans le titre, ce code vous permet de rendre une form magnétique.
En approchant votre form des bordures de l'écran, celle-ci se collera vers le bord en question (à la winamp).

Source / Exemple :


Dim x As Integer = 16 'Force du magnétisme
Dim StartControlPos, StartMousePos As Point

Private Sub FormMagnetique_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
    If e.Button <> e.Button.Left Then Exit Sub 'On quitte l'évènement si le bouton de la souris gauche n'est pas enfoncé
    StartMousePos = Me.PointToScreen(New Point(e.X, e.Y))
    StartControlPos = New Point(Me.Left, Me.Top)
End Sub

Private Sub FormMagnetique_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
    If e.Button <> e.Button.Left Then Exit Sub 'On quitte l'évènement si le bouton de la souris gauche n'est pas enfoncé
    Dim NewMousePos As Point = Me.PointToScreen(New Point(e.X, e.Y))
    Dim NewLeft As Long = StartControlPos.X + NewMousePos.X - StartMousePos.X
    Dim NewTop As Long = StartControlPos.Y + NewMousePos.Y - StartMousePos.Y
    If NewLeft < x Then
        NewLeft = 0
    End If
    If NewTop < x Then
        NewTop = 0
    End If
    If NewLeft + x > Screen.PrimaryScreen.WorkingArea.Width - Me.Width Then
        NewLeft = Screen.PrimaryScreen.WorkingArea.Width - Me.Width
    End If
    If NewTop + x > Screen.PrimaryScreen.WorkingArea.Height - Me.Height Then
        NewTop = Screen.PrimaryScreen.WorkingArea.Height - Me.Height
    End If
    Me.Left = NewLeft
    Me.Top = NewTop
End Sub

Private Sub FormMagnetique_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
    If e.Button <> e.Button.Left Then Exit Sub 'On quitte l'évènement si le bouton de la souris gauche n'est pas enfoncé
    StartMousePos = Nothing
End Sub

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.