Private Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As LongPtr, ByVal Source As LongPtr, ByVal Length As LongPtr)
Private Declare PtrSafe Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As LongPtr, ByVal hmod As LongPtr, ByVal dwThreadId As Long) As LongPtr
Private Declare PtrSafe Function CallNextHookEx Lib "user32" (ByVal hHook As LongPtr, ByVal nCode As Long, ByVal wParam As LongPtr, lParam As Any) As LongPtr
Private Declare PtrSafe Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As LongPtr) As Long
Private Declare PtrSafe Function GetWindowRect Lib "user32" (ByVal hwnd As LongPtr, lpRect As RECT) As Long
Private Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare PtrSafe Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As LongPtr
Bonjour lionel
vous l'aurez dans les ressources quand ça sera dispos
j'attend une idée lumineuse de @Dudu2 au cas ou il aurait une autre méthode plus séduisante pour le ré enroulement de combo
vous pouvez me dire si ces déclaration sont bonne en 64
VB:Private Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As LongPtr, ByVal Source As LongPtr, ByVal Length As LongPtr) Private Declare PtrSafe Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As LongPtr, ByVal hmod As LongPtr, ByVal dwThreadId As Long) As LongPtr Private Declare PtrSafe Function CallNextHookEx Lib "user32" (ByVal hHook As LongPtr, ByVal nCode As Long, ByVal wParam As LongPtr, lParam As Any) As LongPtr Private Declare PtrSafe Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As LongPtr) As Long Private Declare PtrSafe Function GetWindowRect Lib "user32" (ByVal hwnd As LongPtr, lpRect As RECT) As Long Private Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long Private Declare PtrSafe Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As LongPtr
ben c'est le même procédéc'est la détermination du RECT de la DropDown Window d'une ComboBox dans un Frame d'un UserForm.
dim pos as POINTAPI , handlecontrolChild& , RectGle as rect
getcursorpos pos
handlecontrolChild=windowfrompoint(pos.x , pos.y+(combobox1.height*pointtopixel))
getwindowrect(handlecontrolchild,rectgle)
'on inclu la combo elle meme dans le rect
rectgle.top=rectgle.top-(combobox1.height*pointtopixel)
msgbox rectgle.left'........
Quand je traitais sur le Click, j'avais géré un clic souris généré dans la Combo pour la rembobiner dès qu'on changeait de Control Hooké.j'attend une idée lumineuse de @Dudu2 au cas ou il aurait une autre méthode plus séduisante pour le ré enroulement de combo
'------------------------------------------------------------
'Scroll Management Functions
'
'The Scroll is managed through:
'- 1 single event ComboBox_MouseMove() or ListBox_MouseMove()
'- 1 single function ControlScroll()
'------------------------------------------------------------
Mais ça fonctionne pour les listbox et pour les déroulements dans la feuille égalementBon, ben ça c'est plus grave !
quoi de plus carré que le rectangle du windowfrompoint ??Certes, mais je préfère de loin la version des RECT bien plus carrée.
et oui je comprend mieux pourquoi tu n'adhère pas tout de suiteIl pourrait très bien y avoir un autre Control défini juste en dessous. C'est assez théorique je le reconnais, mais c'est une possibilité. Et tu considèrerais que t'est tout le temps en DropDown.
Si je ne trouve rien j'utiliserai cette méthode.