Position de n'importe quel controle corrige

Contenu du snippet

'Cette fonction renvoie la position haut gauche de n'importe quelle controle de n'importe quelle fenêtre active par
'rapport à la position de la fenêtre et non par rapport au bord Haut gauche de l'écran
'à condition de connaitre le Handle de la fenêtre et du contrôle

Source / Exemple :


Public Function PositionControle(ByVal HwndFenetre As Integer, ByVal HwndControle As Integer) As Integer
  
  Dim rc As RECT
  Dim PosFenX, PosFenY As Integer
  Dim PosContX, PosContY As Integer
  ' On Recherche la position de la fenêtre par rapport à l'écran grace a son handle
  result = GetWindowRect(HwndFenetre, rc)
  PosFenX = rc.Left
  PosFenY = rc.Top
  
  ' On Recherche la position du controle par rapport à l'écran grace a son handle
  result = GetWindowRect(HwndControle, rc)
  PosContX = rc.Left
  PosContY = rc.Top
  
  'On calcule la position du contrôle par rapport à la position de la fenétre
  '
  ' Methode : PosContX - PosFenX = Position du controle en X
  '           PosContY - PosFenY = Position du controle en Y
  
  If coord = 1 Then
    PosContX = (PosContX - PosFenX) - 4
    PositionControle = PosContX
  Else
    PosContY = (PosContY - PosFenY) - 23
    PositionControle = PosContY
  End If
End Function

Conclusion :


'Faut d'abord déclarer les APIs et un type rect qui va contenir les positions
Public Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Public Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long

Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

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.