Savoir si un objet est caché par un autre(fenêtres, controles ...)

Soyez le premier à donner votre avis sur cette source.

Vue 4 997 fois - Téléchargée 264 fois

Description

Hello la compagnie

Je participe en ce moment un lecteur Multimédia avec des animations qui consomment beaucoup de puissante de calcul, et pour éviter de devoir faire ces calculs si on ne voit pas la surface (ça sert à rien de faire une animation si on ne la voit pas !), je me suis posé la question de comment savoir si la surface (ici un picturebox) est visible ou masqué par une fenêtre etc. Je vous met donc un exemple. La surface est considérée comme masqué quand les 4 points extremes du rectangle sont recouvert par un autre objet. Vous pouvez bien sur ajouter un taux de tolérence, regardez plus bas, dans le cadre code. J'ai regardé vite fait s'il y avait un exemple sur le site et j'ai rien vu, je poste donc en espérant en aider quelques uns ;)

Fonctionnement : on prend 4 points dans le rectangle décrit par la picturebox (ou moins), et on vérifie s'il sont bien au premier plan ou non grace à l'API WindowFromPoint.

Source / Exemple :


Dim Rec As RECT
GetWindowRect Form2.Picture1.hwnd, Rec
'c'est à la ligne ci dessous qu'on ajoute la tolérence, on peux par exemple vérifier 2 points au lieu de 4, ou encore soustraire un certains chiffre à rec.XXX pour ne pas avoir le rectangle entier du handle.
Label1.Caption = "BOTTOM : " & Rec.Bottom & "| Right : " & Rec.Right & "| TOP : " & Rec.Top & "| LEFT : " & Rec.Left
If WindowFromPoint(Rec.Left, Rec.Top) <> Form2.Picture1.hwnd And WindowFromPoint(Rec.Right, Rec.Top) <> Form2.Picture1.hwnd And WindowFromPoint(Rec.Bottom, Rec.Left) <> Form2.Picture1.hwnd And WindowFromPoint(Rec.Bottom, Rec.Right) <> Form2.Picture1.hwnd Then
Label2.Caption = "Picture 1 est masquée"
Else: Label2.Caption = "Picture 1 n'est pas masquée"
End If

Conclusion :


Bien sur, c'est pas efficace à 100%, par exemple dans le cas ou la picturebox serait recouverte par une autre picturebox plus petite de 2 pixels en hauteur et 2 en largeur, et qui serait placée à X+1,Y+1 par rapport à la picturebox à tester, c'est pour ça qu'on faire une sorte de tolérence à notre guise comme je vous l'ai dit. Pour etre éfficace à 100%, il faudrai vérifier TOUT les points qui sont dans le rectangle décrit, ce qui fait un peu plus de calculs. Vous pouvez bien sur le faire vous même, vous avez la base de travail ;)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1115
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
6 mai 2007

J'ai pas trop compris :(
Quand Eurobarre demande ce code, t'as tout simplement besoin de l'entrer dans la fenetre qui s'ouvre, je vois pas en quoi mon code peut servir deçu, si tu veux expliquer un peu plus...
Messages postés
51
Date d'inscription
mardi 28 juin 2005
Statut
Membre
Dernière intervention
29 mars 2008

ca marche pr quand la eurobarre vous demande un code de confirmation de présence, on fait afficher un message et vous venez tranquillement taper le code de présence!
Messages postés
141
Date d'inscription
lundi 3 novembre 2003
Statut
Membre
Dernière intervention
20 octobre 2005

J'y avais pensé mais j'ai qu'un seul controle de ce type à utiliser et pas assez d'XP pour faire un OCX rapidement. Mais merci pour l'info :)
Messages postés
1115
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
6 mai 2007

Tu peux toujours transformer le couple PictureBox+Combo en OCX, sa sera moins galere a gérer du fait que tu le vera comme un seul controle ;-)
Messages postés
1115
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
6 mai 2007

Tu peux toujours transformer le couple PictureBox+Combo en OCX, sa sera moins galere a gérer du fait que tu le vera comme un seul controle
Afficher les 10 commentaires

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.