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

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

  • Classeur5.xlsm
    29.9 KB · Affichages: 1
Dernière édition:

Dudu2

XLDnaute Barbatruc
Voila la démo.
Tu créés 2 fénêtres juxtaposées de ce classeur (par exemple avec WIN + <- et WIN + ->) et tu testes.
1 - affichage du UserForm bouton 1 et fermeture de la fenêtre utilisée
2 - affichage du UserForm bouton 2 et fermeture de la fenêtre utilisée
Tu verras la différence !
 

Pièces jointes

  • Classeur3.xlsm
    27 KB · Affichages: 1
Dernière édition:

patricktoulon

XLDnaute Barbatruc
Bonjour,
J'aime bien le Call SetWindowPos(UserFormHandle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE).
Ça m'évite effectivement de gérer le changement d'Owner pour les recouvrements par des Windows autres.
Par contre c'est du violent. Devant c'est devant ! Rien n'y résiste, pas même une autre application.
Mais le jeu en vaut la chandelle.
ben c'est fait pour ca
et tu peux blinder le truc c'est &h1+&h2+&h20+&h40+&h200
 

Dudu2

XLDnaute Barbatruc
HELP !
Je voudrais quand même ré-introduire le OWNER à 0 malgré l'inconvénient de la minimisation à -19200.
Je vous passe les détails de la mise en œuvre conditionnelle.

Il me faut savoir si le UserForm a été ajouté et minimisé en TaskBar.

Pour l'ajouter et provoquer sa minimisation en TaskBar je fais ça:
VB:
    Call SetWindowPos(UserFormHandle, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE Or SWP_NOACTIVATE Or SWP_HIDEWINDOW)
    Call SetWindowLongPtr(UserFormHandle, GWL_EXSTYLE, WS_THICKFRAME)
    Call SetWindowPos(UserFormHandle, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE Or SWP_NOACTIVATE Or SWP_SHOWWINDOW)

Mais à l'inverse, je n'arrive pas à trouver un moyen de tester a posteriori s'il est en TaskBar ou pas.
Pourquoi ? Voir le texte en bleu mon Post #14.

Je vais faire un fichier de démo pour vous faciliter les recherches.
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Ça ne marche pas davantage avec le UserForm minimisé, car quelque soit la manière de le définir (en standard ou en TaskBar) quand il est minimisé, IsIconic retourne True ce qui me semble normal.

En fait ce qu'il me faudrait c'est une liste des Windows de la TaskBar.
J'avais ça autrefois mais je l'ai perdu !
 

Pièces jointes

  • Classeur1.xlsm
    31.2 KB · Affichages: 1

patricktoulon

XLDnaute Barbatruc
ben chez moi elle donne 0 quand c'est non et 1 quand c'est oui et c'est tout
maintenant en effet j'ai pris la peine de regarder ton fichier
et je crois que tu confond mettre l'icone (raccourci du userform) en barre des tache) et réduire dans la barre des taches c'est pas la même chose
1° ton fichier userform( réduit ou pas) tu a l'icone dans la taskbar
2°chez moi avec mon code ,l'icone y est UNIQUEMENT!! quand le userform est réduit
tel que tu le fait tu te prive de tout les outils dont tu a besoin (visiblement) en l'occurrence ici l'api isiconic
prend la peine de regarder la video
 

Dudu2

XLDnaute Barbatruc
ben chez moi elle donne 0 quand c'est non et 1 quand c'est oui et c'est tout
Si c'est pas minimisé c'est normal que ça rende 0.
Mon problème est de différencier un minimisé standard d'un minimisé TaskBar.
Et là, le fichier du Post #24 montre que IsIconic ne fait évidemment pas la différence.

P.S. Je te repondrai sur ta vidéo plus tard pour ne pas mélanger les problèmes.
 

Dudu2

XLDnaute Barbatruc
J'ai effectivement utilisé cette API et manipé à ma sauce et à l'aveugle sur le résultat.
Ça marche chez moi et j'aimerais que tu ou vous (si @Dranreb suit toujours le sujet, ou tout autre lecteur du post) testassiez ce fichier pour voir s'il répond Vrai ou Faux de manière correcte dans des configurations VBA7 32 bits et non VBA7 32 bits.
 

Pièces jointes

  • Classeur1.xlsm
    32.6 KB · Affichages: 3

patricktoulon

XLDnaute Barbatruc
re
2013 vba7 32
1718557485704.png

donc c'est pas bon
 

Discussions similaires

Statistiques des forums

Discussions
312 964
Messages
2 094 012
Membres
105 913
dernier inscrit
FlavieL