FanchyTonnerre
Messages postés13Date d'inscriptionvendredi 24 novembre 2006StatutMembreDernière intervention26 juillet 2010
-
11 déc. 2006 à 17:21
FanchyTonnerre
Messages postés13Date d'inscriptionvendredi 24 novembre 2006StatutMembreDernière intervention26 juillet 2010
-
11 déc. 2006 à 17:54
je viens de faire avec l'api gdi32 une zone rectangle sur une picture
quand je regarde le resultat c'est tout ce qui se trouve a l'exterieur du rectangle qui disparait et non tout se qui se trouve a l'interieur
j'ai cree une deuxieme zone et lorsque je les fusionne seul la deuxieme zone est visible
alors comment faire pour garder ma picture et pouvoir enlever uniquement ce qui se trouve a l'interieur de mes zones declaree ?
et est ce que le fait de declaree deux elements dans ma picture peut expliquer que seule la deuxieme soit visible ?
enfin quelqu'un a t il la solution pour pouvoir mettre des couleurs a l'endroit ou la zone est declaree...
Merci par avance car actuellement c'est une vrai galere.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 11 déc. 2006 à 17:33
Tu es bien sympathique, mais comment veux-tu qu'on te réponde sans savoir quelle fonction de la librairie gdi32 tu as utilisée et avec quel code tu l'as fait ...
FanchyTonnerre
Messages postés13Date d'inscriptionvendredi 24 novembre 2006StatutMembreDernière intervention26 juillet 2010 11 déc. 2006 à 17:54
que veux tu que je te donne exactement tout le code que j'ai utliser ?
j'ai utiliser les declarations suivantes recupere sur le site :
tout en vb 6
Declare Function CombineRgn Lib "gdi32" ( _
ByVal hDestRgn As Long, _
ByVal hSrcRgn1 As Long, _
ByVal hSrcRgn2 As Long, _
ByVal nCombineMode As CombineMode _
) As Long
'hDestRgn désigne le Handle de la région de destination.
'/--------------------------------------------------------\
'|ATTENTION : POUR QUE CELA FONCTIONNE, IL FAUT ABSOLUMENT|
'|QUE LA REGION SOIT DEJA INITIALISEE A L'AIDE D'UNE DES |
'|FONCTIONS VUE CI-DESSUS. |
'\--------------------------------------------------------/
'hSrcRgn1 désigne le Handle de la première Région à combiner
'hSrcRgn2 désigne le Handle de la deuxième Région à combiner
'nCombineMode désigne le mode utilisé pour la Combinaison
'Tu peux utiliser une des constantes suivante :
Public Enum CombineMode
RGN_AND = 1 ' Créé l'intersection des deux
'régions
RGN_COPY = 5 ' Copie la Région1
RGN_DIFF = 4 ' Combine les parties de Région1
'qui ne font pas partie de région2
RGN_OR = 2 ' Créé l'union des deux régions
RGN_XOR = 3 ' Créé l'union des deux régions à
'laquelle on enleve l'intersection
'des deux régions
End Enum
'//////////////////////////////////////////////////////////////
'// APPLIQUER DES REGIONS //
'//////////////////////////////////////////////////////////////
'Pour appliquer une région à une fenêtre, on utilise la
'fonction suivante :
Declare Function SetWindowRgn Lib "user32" ( _
ByVal hwnd As Long, _
ByVal hRgn As Long, _
ByVal bRedraw As Boolean _
) As Long
'hWnd indique le Handle de la fenêtre à laquelle on veut
'appliquer la région.
'hRgn indique le Handle de la région à appliquer.
'bRedraw indique s'il faut redessiner la fenêtre.
'Mettre True si la fenêtre est visible
'On peut mettre False si elle est cachée.
'Note : On peut utiliser cette fonction avec le handle d'un
'contrôle au lieu de celui d'une Fenêtre
'//////////////////////////////////////////////////////////////
'// SUPPRIMER DES REGIONS //
'//////////////////////////////////////////////////////////////
'Une fois que l'on a plus besoin de la région, il faut la
'supprimer pour libérer de la mémoire.
'Pour cela, on peut utiliser la fonction :
Declare Function DeleteObject Lib "gdi32" ( _
ByVal hObject As Long _
) As Long
'hObject désigne le Handle de la région à supprimer.
'ATTENTION : NE PAS SUPPRIMER UNE REGION QUI EST APPLIQUEE
'A UNE FENETRE. CELA AURAIT POUR EFFET DE LAISSER LA FENETRE
'IMPRIMEE SUR LE BUREAU (CA FAIT PAS BEAU)
et ensuite j'ai fait cette fonction suivante
Option Explicit
Public Rect As Long, rect1 As Long
Dim sect As Long
Dim LesPoints(0 To 4) As POINTAPI
Dim LesPoints1(0 To 4) As POINTAPI
Sub Secteur1(obj As Form)
LesPoints(0).X = 100
LesPoints(0).Y = 200
LesPoints(1).X = 100
LesPoints(1).Y = 200
LesPoints(2).X = 100
LesPoints(2).Y = 500
LesPoints(3).X = 250
LesPoints(3).Y = 500
LesPoints(4).X = 250
LesPoints(4).Y = 200
Rect = CreatePolygonRgn(LesPoints(0), 5, 1)
End Sub
Sub Secteur2(obj As Form)
LesPoints1(0).X = 200
LesPoints1(0).Y = 200
LesPoints1(1).X = 200
LesPoints1(1).Y = 200
LesPoints1(2).X = 300
LesPoints1(2).Y = 400
LesPoints1(3).X = 350
LesPoints1(3).Y = 600
LesPoints1(4).X = 350
LesPoints1(4).Y = 600
rect1 = CreatePolygonRgn(LesPoints1(0), 5, 1)
SetWindowRgn obj.hwnd, rect1, True
SetWindowRgn obj.hwnd, Rect, True
CombineRgn sect, Rect, rect1, 4
End Sub
quand je fait tourner le programme il me supprime tout se qui se trouve en dehors de mon premier polygone et quand j'appelle le deuxieme polygone il me vire le premier et ne m'affiche que le deuxieme
le combinereeg ne semble pas fonctionner tel que je l'ai marque
par contre je voudrais en fait qu'il ne m'efface que ce qui se trouve a l'interieur de la zonbe designer et surtout que lorsque j'appelle la deuxieme zopne la premiere reste afficher....
Alors est ce que le fait de les declarer de maniere independante pourrais etre le coeur de mon probleme ?