Les coordonnée de la ListBox peuvent être trouvées de différentes façons:
- LeftPixel = ActiveWindow.Panes(1).PointsToScreenPixelsX(ListBox.Left)
TopPixel = ActiveWindow.Panes(1).PointsToScreenPixelsY(ListBox.Top)
RightPixel = ActiveWindow.Panes(1).PointsToScreenPixelsX(ListBox.Left + ListBox.Width)
BottomPixel = ActiveWindow.Panes(1).PointsToScreenPixelsY(ListBox.Top + ListBox.Height)
- WindowFromAccessibleObject(ListBox, hWnd)
R = GetWindowRect(hWnd)
- hWnd = WindowFromPoint sur LeftPixel + 2 et TopPixel + 2
R = GetWindowRect(hWnd)
(Redondant avec la 1ère option)
La plus simple étant la 2ème.
Je ne comprends toujours pas en quoi l'
AccessibleObjectFromPoint() te permet de faire la différence.
Qu'espères-tu récupérer avec cette API en haut à droite de la ListBox:
- dans le cas d'une Scroll Bar ?
- dans le cas d'un Item de liste ?
Le problème avec les ListBox c'est que la ScrollBar fait partie de la ListBox. C'est le même objet et sa largeur n'est pas ajoutée à la largeur de la ListBox.
Si ta solution ne donne pas de résultat, j'irai tester la couleur sous le curseur au milieu à droite.
Edit: ou alors peut-être une solution simple sur la sélection du 1er Item.
Sauvegarder le .TopIndex.
Sauvegarder état de sélection de l'Item .TopIndex
Sauvegarder l'item selectionné si .MultiSelect = False
Sauvegarder la position du curseur.
Désélectionner l'Item .TopIndex s'il est sélectionné
Cliquer en haut à droite (mouse_event en ListBox Right - SM_CXVSCROLL / 2 et ListBox Top + SM_CXVSCROLL / 2)
Si le l'Item .TopIndex initial est sélectionné => pas de Scroll Bar
Sinon => Scroll Bar
Remettre le .TopIndex à sa valeur initiale.
Remettre le l'Item .TopIndex dans son état de sélection initial.
Sélectionner l'item initialement selectionné si .MultiSelect = False
Remettre le curseur où il était.