Les zones avec api gdi32

FanchyTonnerre Messages postés 13 Date d'inscription vendredi 24 novembre 2006 Statut Membre Dernière intervention 26 juillet 2010 - 11 déc. 2006 à 17:21
FanchyTonnerre Messages postés 13 Date d'inscription vendredi 24 novembre 2006 Statut Membre Dernière intervention 26 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.

2 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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 ...
0
FanchyTonnerre Messages postés 13 Date d'inscription vendredi 24 novembre 2006 Statut Membre Dernière intervention 26 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 ?

Merci par avance
0
Rejoignez-nous