XL 2016 VBA - Taux de recouvrement d'un RECT par un autre RECT

  • Initiateur de la discussion Initiateur de la discussion Dudu2
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Dudu2

XLDnaute Barbatruc
Bonjour à tous,

Le point de départ de ce problème est la question "doit-on changer le OWNER d'un UserForm" ?
Parce que s'il est placé ou déplacé sur l'une des fenêtres d'un classeur qui n'est pas son OWNER, on le sait grâce à l'évènement UserForm_Layoit(), il sera masqué totalement ou partiellement par cette fenêtre dès lors qu'elle sera active. Et dans ce cas, il faut changer son OWNER par le Handle de la fenêtre en question.

D'où la question... Quel est le taux de recouvrement du UserForm RECT par un Window RECT.

La fonction PourcentageUserFormSurfaceCouverteParWindow dans ce fichier est à écrire !
 

Pièces jointes

Dernière édition:
OK merci pour vos retours.

C'était un truc à l'aveugle avec un And sur &HFF donc ça m'étonne pas que ça fonctionne pas en 32 bits.
VB:
Function LeUserFormEstIlEnTaksBar() As Variant  'Boolean
    Dim iStyle As Variant
    
    iStyle = GetWindowLongPtr(UserFormHandle, GWL_EXSTYLE)
    LeUserFormEstIlEnTaksBar = Not CBool(iStyle And &HFF)
End Function
 
re
avant d'essayer ton dernier fichier je peux te dire pourquoi ça ne fonctionne pas
si tu avais pris le temps de regarder la video j'explique justement ça 😉
je le répète il faut faire les choses dans un certain ordre
avec ton fichier 1 je suis déjà à 256 et 262400
 
La fonction c'était ça. Sachant que les 256/257 et 262400 sont les iStyle.
VB:
Function LeUserFormEstIlEnTaksBar() As Variant  'Boolean
    Dim iStyle As Variant
   
    iStyle = GetWindowLongPtr(UserFormHandle, GWL_EXSTYLE)
    LeUserFormEstIlEnTaksBar = Not CBool(iStyle And &HFF)
End Function
 
C'est un test bidon que j'ai fait à l'aveugle qui en plus ne fonctionne pas pour 256.
C'est pour ça que les résultats sont différents en fonction de la valeur que prend le iStyle en affichage standard 256 ou 257.
J'ai tout faux sur ce fichier. Mea culpa !
VB:
Sub a()
    MsgBox "256->" & (Not CBool(256 And &HFF)) & vbCrLf & _
           "257->" & (Not CBool(257 And &HFF)) & vbCrLf & _
           "262400->" & (Not CBool(262400 And &HFF))
End Sub
1718566612745.png


Je préfèrerais que tu testes le fichier du Post #36.

Dans le pire des cas je testerai sur les valeurs du iStyle 256/257 ou 262400. Ou discriminer sur 262400.
Puisque je n'ai rien trouvé dans les API pour déterminer si une Window est dans la TaskBar.
 
Dernière édition:
Merci @Dranreb pour cette confirmation.
C'est moins bourrin que le 262400 mais ce n'est pas non plus la panacée car ce masque CBool(iStyle And WS_EX_APPWINDOW) n'est en rien un indicateur de présence en TaskBar. Je l'ai utilisé en parcourant toutes les Windows du Desktop et ça ne marche absolument pas dans cette perspective. Mais ça semble marcher pour une Window de UserForm alors je vais m'accrocher à cette petite branche.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour