Déplacement de feuilles sans barre de titre avec un modul

Description

Dans une des feuilles :

'Timer1_Timer()
'MoveMe
'End Sub

Source / Exemple :


Type POINTAPI
X As Long
Y As Long
End Type

Public Declare Function GetCursorPos Lib "User32.dll" (lpPoint As POINTAPI) As Long
Public Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer

Private Mv(10) As Long

Sub MoveMe()

Mv(1) = GetFormID 'teste si une feuille de l'application a le pointeur
    If Mv(1) > -1 Then 'fait si une feuille de l'application à le pointeur
    Mv(6) = Mv(1) 'met en mémoire l'ID de la feuille à déplacer
    Forms(Mv(1)).MousePointer = 15 'change le pointeur pour le CrossHair
    Else 'fait si aucune feuille de l'application n'a le pointeur
        If Mv(6) > -1 Then 'une feuille a été déplacée
        Forms(Mv(6)).MousePointer = 0 'on réinitialise la valeur mousepointer a zero
        Mv(6) = -1 'on vide la variable teste qui sert pour l'inialisation pointeur
        End If
    End If

Dim z As POINTAPI
Call GetCursorPos(z) 'position curseur en coordonnées écran
Mv(4) = GetKeyState(1) 'statut bouton gauche de la souris

If Mv(4) > -1 Then 'si pas de bouton souris réinitialise les variables
Mv(0) = 0
Mv(1) = -1
Mv(2) = 0
Mv(3) = 0
End If

If Mv(4) < 0 And Mv(0) = 0 Then 'bouton gauche activé
Mv(0) = 1 'verouille la saisie des valeurs suivantes(instantané)
Mv(1) = GetFormID
If Mv(1) = -1 Then Exit Sub 'sort si aucune feuille application n'a le poiteur
Mv(2) = (Forms(Mv(1)).Left / 15) - z.X 'enregistre les positions relatives feuille / pointeur
Mv(3) = (Forms(Mv(1)).Top / 15) - z.Y '""
End If

If Mv(4) < 0 And Mv(0) = 1 And Mv(1) > -1 Then 'phase de déplacement
Forms(Mv(1)).Move (z.X + Mv(2)) * 15, (z.Y + Mv(3)) * 15 '
End If

End Sub

Function GetFormID() As Long
Dim z As POINTAPI
Call GetCursorPos(z)
u2 = WindowFromPoint(z.X, z.Y) 'u2 est le hWnd de la feuille qui a le pointeur

GetFormID = -1
For n = 0 To Forms.Count - 1
u = Forms(n).hWnd
'on compare le hWnd des feuilles de la collection avec u2 pour trouver l'ID de la feuille pointée (n)
If u = u2 Then
If Forms(n).Visible = False Then GoTo zap
GetFormID = n 'GetFormID renvoie l'ID de la feuille pointée
Exit Function
End If

zap:
Next n
End Function

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.