IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

SOS opérations sur les régions GDI [Débutant]


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2014
    Messages : 23
    Points : 28
    Points
    28
    Par défaut SOS opérations sur les régions GDI
    Bonjour,

    Comment peut-on recopier les régions d'un controle mobile (déplacé par la souris sur une groupbox) pour tester dynamiquement (pendant le déplacement par la souris) si les régions de ce controle sont en intersection ou autre opérateur (XOR, Union etc...) avec certaines regions définies sur la groupbox ?

    A noter qu'à l'issue du déplacement le controle mobile est ajouté sur la groupbox et ainsi de suite jusqu'à remplissage total de la groupbox.

    Si vous avez des idées pour m'aider.....

    Merci bcp

    Ma demande est très urgente, je suis bloqué dans le developpement d'une appli professionellea

    Ca va être très chaud...

  2. #2
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour

    Ma demande est très urgente, je suis bloqué dans le developpement d'une appli professionellea

    Ca va être très chaud
    Quand c'est urgent,les pompiers,le 17 ou les urgences de la Salpetriere seraient mieux qualifies que moi...
    La chaleur dans la tete,une serviette trempee est le remede pour refroidir les ardeurs et rendre la cervelle plus lucide....
    Treve de plaisanteries:ce que tu veux c'est tester :
    -un geometrie1 du Region1 dessine sur une surface Graphics1 d'un Control1 avec
    -une autre Geometrie2 du Region2 dessine sur une autre surface Graphics2 d'un Control2
    si les 2 geometries intersectent...
    Le test de 2 geometries fait intervenir l'objet Graphics qui doit etre identique pour les 2 geometries...
    Pas de miracle sous le soleil ,il faut creer une copie du Geometrie1 dans la surface du Graphics2 pendant la duree du deplacement la souris...
    Un geometrie etant defini dans les coordonnees clients du control proprietaire ,la seule precaution c'est ramener la copie du dudit Region1 dans les coordonnees clients du control2 pour le tester avec le geometrie2...

    exemple code .vb avec un groupbox,un label (backcolor transparent) et son region semi-transparent pour voir sa "copie" se deplacer sur le groupbox,un bouton pour demarrer et un statusstriplabel "espion":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
     
    Public Class Form3
     
        Private shp1 As Region
        Private shp2 As Region
        Private rect1 As New Rectangle(10, 10, 80, 40)
        Private rect2 As New Rectangle(25, 25, 100, 70)
        Private msgHit As String = "Ok! intersection"
        Private msg As String = "Pas d'intersection"
        Public Sub New()
     
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            Me.Text = msg
            Label1.Size = New Size(150, 150)
            Me.Label1.BackColor = Color.FromArgb(50, Color.LightSkyBlue)
            Me.Label1.BorderStyle = BorderStyle.Fixed3D
            GroupBox1.Size = New Size(400, 300)
     
            StatusLabel1.Text = msg
        End Sub
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
           CreateTwoRegion()
        End Sub
        Private Sub CreateTwoRegion()
            shp1 = New Region(rect1)
            shp2 = New Region(rect2)
            Label1.Invalidate()
            GroupBox1.Invalidate()
        End Sub
     
        Private ptDown As New Point()
        Private isDown As Boolean
        Private Sub Label1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Label1.MouseDown
            ptDown = e.Location
            CreateTwoRegion()
            If e.Button = MouseButtons.Left Then
                If Label1.ClientRectangle.Contains(ptDown) Then
                    isDown = True
                End If
     
            End If
        End Sub
        Private shpTest As Region
        Private hit As Boolean
        Private Sub Label1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Label1.MouseMove
            Dim ptMove As Point = e.Location
            If isDown Then
     
                '------deplace label1
                Label1.Left += ptMove.X - ptDown.X
                Label1.Top += ptMove.Y - ptDown.Y
     
                ' -----Recupere une copie du rectangle du shp1
                Dim rc As Rectangle = rect1
     
                  '------Ramene ses coords clients par rapport au groupbox
                rc.X += Label1.Left
                rc.Y += Label1.Top
                StatusLabel1.Text = rect1.Location.ToString + " - " + rc.Location.ToString
     
                '------Cree une region  en coords clients groupbox
                shpTest = New Region(rc)
                '-------L'intersecte avec le shp2 du groupbox
                '-------nb:le resulat de cet appel genere un 
                '-------region shpTest qui contient l'intersection ou vide
     
                shpTest.Intersect(shp2)
     
                '------Invalidate du groupbox pour effectuer le hit test sur le region shpTest 
                '------le test Region.IsEmpty(graphics) renvoie  un boolean Hit
                GroupBox1.Invalidate()
                If hit Then
                    Me.Text = msgHit
                Else
                    Me.Text = msg
                End If
            End If
     
        End Sub
        Private Sub Label1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Label1.MouseUp
     
            If e.Button = MouseButtons.Right Then
                ptDown = New Point()
                isDown = False
                If hit Then
                    Me.Text = msgHit
                Else
                    Me.Text = msg
                End If
     
            End If
        End Sub
        ' brush region label original: sera un peu transparent pour 
        ' "visualiser la partie intersecte du region groupbox "
        Private brush1 As SolidBrush = New SolidBrush(Color.FromArgb(50, Color.Yellow))
        Private Sub Label1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Label1.Paint
            Dim gr As Graphics = e.Graphics
            If shp1 IsNot Nothing Then
                gr.FillRegion(brush1, shp1)
     
            End If
        End Sub
        'brush region groupbox
        Private brush2 As SolidBrush = Brushes.NavajoWhite
        'brush du "copie region label"  
        Private brushTest As SolidBrush = Brushes.DarkBlue
        Private Sub GroupBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles GroupBox1.Paint
            Dim gr As Graphics = e.Graphics
            If shp2 IsNot Nothing Then
                gr.FillRegion(brush2, shp2)
     
     
            End If
            ' region test est - il vide?
            If shpTest IsNot Nothing Then
                gr.FillRegion(brushTest, shpTest)
                'si intersection non vide 
                If Not shpTest.IsEmpty(gr) Then
                    hit = True
                Else
                    hit = False
                End If
            End If
        End Sub
     
     
    End Class

    bon code...

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2014
    Messages : 23
    Points : 28
    Points
    28
    Par défaut Merci Mabrouki
    Efficace, clair, net et précis

    Un grand merci à toi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Opération sur les dossier...
    Par bdaboah dans le forum Langage
    Réponses: 5
    Dernier message: 01/11/2005, 17h28
  2. [OpenGL/C++] Opérations sur les Textures
    Par Bob.Killer dans le forum OpenGL
    Réponses: 6
    Dernier message: 10/08/2005, 10h27
  3. Opérations sur les matrices...
    Par aokiseiichiro dans le forum C
    Réponses: 32
    Dernier message: 28/07/2005, 17h10
  4. opérations sur les bits d'un byte
    Par petitours dans le forum C++Builder
    Réponses: 4
    Dernier message: 10/02/2004, 20h42
  5. opérations sur les dates
    Par coucoucmoi dans le forum Débuter
    Réponses: 2
    Dernier message: 12/08/2003, 11h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo