Accueil > > > FONCTION REGIONINREGION
FONCTION REGIONINREGION
Information sur la source
Description
Suite a une demande sur le Forum ('Fuck'), j'ajoute ma source ici, parce que ca pourrait en interesser certains. Merci a lui, qui au fil de l'utilisation de la fonction y a trouvé une fuite mémoire, qui est maintenant corrigée Il s'agit en fait d'une fonction qui permet de savoir si deux regions ont des zones en commun. En effet, il existe PtInRgn (un point dans une region ?) ou bien RectInRgn ( un rectangle dans une region ?) mais pas entre deux régions !! Pour ce faire, j'utilise l'API CombineRgn. Je demande ainsi la region correspondant a l'intersection des 2 (RGN_AND). Cette API renvoie une valeur particulière si la region créée est vide. On a donc juqu'a tester la valeur renvoyée :)
Source
- Option Explicit
-
- Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
- Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
- Private Declare Function DeleteObject Lib "gdi32" Alias "DeleteObject" (ByVal hObject As Long) As Long
- Private Const RGN_AND = 1
- Private Const NULLREGION = 1
-
- Private Sub Form_Load()
- Dim RGN1 As Long, RGN2 As Long
-
- '# Cas d'intersection entre les deux regions
- RGN1 = CreateRectRgn(0, 0, 100, 100)
- RGN2 = CreateRectRgn(50, 50, 150, 150)
-
- MsgBox "Cas 1 : Intersection entre les 2 régions - " & RgnInRgn(RGN1, RGN2)
-
- '# Cas de non intersection entre les deux regions
- RGN1 = CreateRectRgn(0, 0, 100, 100)
- RGN2 = CreateRectRgn(150, 150, 250, 250)
-
- MsgBox "Cas 2 : Non-intersection entre les 2 régions - " & Not RgnInRgn(RGN1, RGN2)
-
- End
- End Sub
-
- Public Function RgnInRgn(ByVal RGN1 As Long, ByVal RGN2 As Long) As Boolean
- '# RGNOUT doit pointer sur une region valide !!
- Dim RGNOUT As Long: RGNOUT = CreateRectRgn(0, 0, 0, 0)
-
- '# CombineRGN renvoie NULLREGION si la region est vide
- '# Dans le cas présent, on tente d'effectuer une intersection des deux regions. (RGN_AND)
- RgnInRgn = NULLREGION <> CombineRgn(RGNOUT, RGN1, RGN2, RGN_AND)
- Call DeleteObject ( RGNOUT )
- End Function
Option Explicit
Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" Alias "DeleteObject" (ByVal hObject As Long) As Long
Private Const RGN_AND = 1
Private Const NULLREGION = 1
Private Sub Form_Load()
Dim RGN1 As Long, RGN2 As Long
'# Cas d'intersection entre les deux regions
RGN1 = CreateRectRgn(0, 0, 100, 100)
RGN2 = CreateRectRgn(50, 50, 150, 150)
MsgBox "Cas 1 : Intersection entre les 2 régions - " & RgnInRgn(RGN1, RGN2)
'# Cas de non intersection entre les deux regions
RGN1 = CreateRectRgn(0, 0, 100, 100)
RGN2 = CreateRectRgn(150, 150, 250, 250)
MsgBox "Cas 2 : Non-intersection entre les 2 régions - " & Not RgnInRgn(RGN1, RGN2)
End
End Sub
Public Function RgnInRgn(ByVal RGN1 As Long, ByVal RGN2 As Long) As Boolean
'# RGNOUT doit pointer sur une region valide !!
Dim RGNOUT As Long: RGNOUT = CreateRectRgn(0, 0, 0, 0)
'# CombineRGN renvoie NULLREGION si la region est vide
'# Dans le cas présent, on tente d'effectuer une intersection des deux regions. (RGN_AND)
RgnInRgn = NULLREGION <> CombineRgn(RGNOUT, RGN1, RGN2, RGN_AND)
Call DeleteObject ( RGNOUT )
End Function
Conclusion
La fonction interessante est juste :
Public Function RgnInRgn(ByVal RGN1 As Long, ByVal RGN2 As Long) As Boolean Dim RGNOUT As Long: RGNOUT = CreateRectRgn(0, 0, 0, 0) RgnInRgn = NULLREGION <> CombineRgn(RGNOUT, RGN1, RGN2, RGN_AND) Call DeleteObject ( RGNOUT ) End Function
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
OFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONSOFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONS par junarnoalg
De nombreuses entreprises font le choix de SharePoint Online, service fourni au travers de l'offre de Microsoft Office 365. S'il est vrai que ce choix apporte un grand nombre d'avantages; rapidité de mise en œuvre, disponibilité, large couvertu...
Cliquez pour lire la suite de l'article par junarnoalg PRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGEPRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGE par richardc
http://www.c2idotnet.com/articles/presentation-des-api-rest-de-windows-azure-lister-les-comptes-de-storage
Désolé pour "toto", mais c2i existait avant blogs.developpeur.org et c'est mon site "officiel" ;-) ...
Cliquez pour lire la suite de l'article par richardc [HTML5] SLIDES ET DéMOS : AUTOUR DU W3C , NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] SLIDES ET DéMOS : AUTOUR DU W3C , NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Très bonne après-midi passée lors cette conférence avec le W3C, organisée par L' Inria sur les nouveaux standards, ce Mardi 14 Février, on sent vraiment que çà bosse au W3C, et l'avenir est très très prometteur pour le HTML5, notamment ...
Cliquez pour lire la suite de l'article par Gio GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc
Forum
RE : VITESSERE : VITESSE par ucfoutu
Cliquez pour lire la suite par ucfoutu
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|