Position de n'importe quel controle corrige

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 147 fois - Téléchargée 80 fois

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

Ajouter un commentaire

Commentaire

hierroc
Messages postés
6
Date d'inscription
jeudi 6 février 2003
Statut
Membre
Dernière intervention
31 août 2005
-
Tres utile, mais il lui faut encore quelques petites choses pour fonctionner:
1. En VB 6, les X et Y doivent se declarer en long
2. Tu oublies de déclarer coord, qui indique si tu veux rendre le X ou le Y.
Donc je te propose la declaration corrigée suivante:
Public Function PositionControle(ByVal HwndFenetre As long, ByVal HwndControle As long, byval Coord as integer) As Integer.
Passez 1 pour X et autre chose pour Y.

Bonne prog,

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.