begin process at 2012 02 12 17:06:00
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Formulaire

 > SAVOIR SI UN OBJET EST CACHÉ PAR UN AUTRE(FENÊTRES, CONTROLES ...)

SAVOIR SI UN OBJET EST CACHÉ PAR UN AUTRE(FENÊTRES, CONTROLES ...)


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Formulaire Niveau :Débutant Date de création :12/09/2004 Vu / téléchargé :3 922 / 177

Auteur : azerty25

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note


 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

  • 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
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 ;)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip WINDOWSMOVE(R) - DÉPLACER DES FENÊTRES (HANDLES) QUI NE SONT...
TECHNIQUES POUR EMPECHER LE DÉCHARGEMENT DE LA FEUILLE
SAVOIR SI UNE FENETRE EST AU PREMIER PLAN PERMANENT
EXTRAIRE LE RÉPERTOIRE D'UN FICHIER, SON EXTENSION, SON NOM,...
Source avec Zip Source avec une capture TOPMOST M@N@G(R) - METTRE UNE FENETRE AU PREMIER PLAN PERMAN...

 Sources de la même categorie

Source avec Zip GEST COTISATION - ASSOCIATION par MOHA555
Source avec Zip HSCROLLBAR POUR L'ARRIÈRE PLAN par 320C
Source avec Zip Source avec une capture Source .NET (Dotnet) METTRE VOTRE FORM VB.NET EN PLEINE ÉCRAN par Gabilach
RECHERCHE DANS UNE LISTE À PARTIR D'UN CHAMP TEXTE par jmeunier
Source avec Zip GESTION DES COMSOMMABLE par gboraud

Commentaires et avis

Commentaire de sarl_adc le 24/02/2005 09:17:49

Je voulais savoir si tu savais si on pouvait forcer un controle à être au premier plan par rapport à un autre (par le code ou non) ?

Là avec ton code, on peut savoir si un controle est au premier plan par rapport à un autre, mais on ne peut pas modifier cela.

Si tu as une réponse, je prendrais avec plaisir :-)

Merci !!!

Commentaire de azerty25 le 24/02/2005 10:58:01

Oui, c'est possible, tu fait TON_CONTROLE.zorder(0), et il passe au premier plan

Commentaire de sarl_adc le 24/02/2005 11:18:57

Merci pour ta réponse rapide, mais ave cce ComboBox (de la bibliothèque Microsoft Forms 2.0), ça ne fonctionne pas ;-)

Commentaire de azerty25 le 25/02/2005 19:11:55

Arf, et j'ai même pas d'idée alternative, le pire c'est que je peux pas faire des essais car comme par hasard (tj quand il faut!!), les controles ne fonctionnent pas. Quand j'essaye d'en mettre un sur la form, j'ai une erreur système avec un chiffre incompréhensible.
Essaye de demander sur le forum, y'a a coup sur une API qui permet ça. Ou sinon, tu peux toujours essayer, c'est un peu barbare, d'afficher tout tes controles et d'afficher le combobox en dernier de manière à ce qu'il soit au dessus, car apparu en dernier.

Commentaire de sarl_adc le 28/02/2005 08:30:43

azerty25 : j'ai ma solution (grace à un message que j'ai posté sur le forum). En fait l'idée est de mettre le controle ComboBox sur un controle PictureBox (sachant que ce dernier peut etre mis au 1er plan). C'est +galère à gérer mais ça fonctionne :)

merci quand même d'y avoir réfléchi :)

Commentaire de azerty25 le 28/02/2005 18:42:07

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

Commentaire de azerty25 le 28/02/2005 18:42:24

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 ;-)

Commentaire de sarl_adc le 01/03/2005 08:32:46

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 :)

Commentaire de mti le 10/11/2005 22:47:51

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!

Commentaire de azerty25 le 11/11/2005 09:47:13

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...

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,058 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales