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

IHM Discussion :

Gdi+ éditeur de dessin


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 61
    Points : 40
    Points
    40
    Par défaut Gdi+ éditeur de dessin
    Dans le but de créer un petit éditeur de dessin à inclure dans un projet access, j'incorpore une forme dans une controle image avec le code suivant.

    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
    Private sub Image0_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
     
    Select Case stDessin		‘Stdessin designe un bouton de commande
    Case "12"
     Select Case Button
        Case vbKeyLButton ' bouton gauche
     
          ' Conserve l'image
        oGdi.KeepImage
      ‘Stmaregion correspond au nom de l’image ajoutée, stmonclip est le chemin de l’image
        oGdi.ImageListAdd StMaRegion, StMonClip
        imX = oGdi.CtrlToImgX(X, Me.Image0) 	‘Coordonnée  X de la souris
        imY = oGdi.CtrlToImgY(Y, Me.Image0)
        'Le vbWhite dans la fonction drawimage enlève le contour blanc des images
        oGdi.DrawImage StMaRegion, imX, imY, , , vbWhite, Gdi32SizeModeAutoSize, Gdi32AlignTopLeft, _
        , True, StMaRegion, vbRed
        oGdi.ImageListGetPixel StMaRegion, 1, 1
        ' Supprime l'image de la liste
        oGdi.ImageListDel StMaRegion
     
        ' Affichage de l'image dans le contrôle
        oGdi.RepaintControl Me.Image0, , , True
    oGdi.RepaintControlNoFormRepaint Me.Image0
       End Select
     
    Case Else
    End Select
     
    End Sub
    Le dessin de l’image s’affiche et si je clique sur la forme, je peux obtenir un message donnant la valeur de la région « stmaregion ».
    J’aimerais pouvoir sélectionner cette forme avec un rectangle ou en cliquant dessus afin de pouvoir le déplacer sur sur le contrôle image en suivant le pointeur de la souris.
    J’utilise GDI+ sous access 2007 en me servant des excellents tutoriels d’arkham46.developpez.com

  2. #2
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Points : 1 266
    Points
    1 266
    Par défaut
    Bonjour Thermo,

    J'utilise moi même la GDIPlus, mais cela est vraiment compliqué.
    Heureusement, les Tutos et bases exemples de Thierry sont supers.
    N'hésites pas à le contacter, il est friand d'utilisateur GDIPlus afin d'avoir des idées d'améliorations des projets qu'il présente.

    Pour ma part, voilà comment je fais.
    J'ai un contrôle image qui reçoit mon image principale.
    J'ai un second contrôle qui reçoit une image transparente *.png et sur cette image, je dessine mon symbole.
    Pour le déplacement de cette dernière image, je prévois 2 champs pour mémoriser les coordonnées X et Y.

    Pour le déplacement, voici le code que j'utilise, à toi de l'adapter à tes besoins.

    Cordialement

    Christophe

    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
    Option Explicit
     
    Dim DeplacXy, X1, Y1 'Pour gestion du déplacement de la souris
    Dim CtrlImg As Object
    Dim CtrlOrigine As image
     
    Dim DeplacX As Integer
    Dim DeplacY As Integer
     
    Dim CtrlX As Control
    Dim CtrlY As Control
     
    Sub SourisDeplacee(nButton As Integer, nX As Single, nY As Single, nCtrlImg As Object, nCtrlOrigine As image, _
                Optional nCtrlX As Control, Optional nCtrlY As Control, Optional TypeImg As Integer = 1)
     
    Set CtrlX = nCtrlX
    Set CtrlY = nCtrlY
    Set CtrlImg = nCtrlImg
    Set CtrlOrigine = nCtrlOrigine
     
    'TypeImg=1 : code pour mémoriser les coordonnées (ce qui n'est pas le cas pour l'équerre report de point)
     
    DeplacX = CtrlImg.Left + nX - X1
    DeplacY = CtrlImg.Top + nY - Y1
     
    If nButton = 1 Then 'Si clic sur bouton gauche
        If DeplacXy = True Then 'Si déplacement autorisé
     
            'Si l'objet sort du cadre à gauche
            'If DeplacX - CtrlOrigine.Left < CtrlOrigine.Left Then
            If DeplacX < CtrlOrigine.Left Then
                'Position X du contrôle
                CtrlImg.Left = CtrlOrigine.Left
                'On mémorise les coordonnées X dans le champ
                If TypeImg = 1 Then CtrlX = 0
            'Si l'objet sort du cadre à droite
            ElseIf DeplacX > CtrlOrigine.Left + CtrlOrigine.Width - CtrlImg.Width Then
                'Position X du contrôle
                CtrlImg.Left = CtrlOrigine.Left + CtrlOrigine.Width - CtrlImg.Width
                'On mémorise les coordonnées X dans le champ
                If TypeImg = 1 Then CtrlX = CtrlOrigine.Width - CtrlImg.Width
            Else 'Sinon, l'objet est dans le cadre
                CtrlImg.Left = DeplacX 'Position X du contrôle
                'On mémorise les coordonnées X dans le champ
                If TypeImg = 1 Then CtrlX = DeplacX - CtrlOrigine.Left
            End If
     
            'Si l'objet sort du cadre en haut
            'If DeplacY - CtrlOrigine.Top < CtrlOrigine.Top Then
            If DeplacY < CtrlOrigine.Top Then
                'Position Y du contrôle
                CtrlImg.Top = CtrlOrigine.Top
                'On mémorise les coordonnées Y dans le champ
                If TypeImg = 1 Then CtrlY = 0
            'Si l'objet sort du cadre en bas
            ElseIf DeplacY > CtrlOrigine.Top + CtrlOrigine.Height - CtrlImg.Height Then
                'Position Y du contrôle
                CtrlImg.Top = CtrlOrigine.Top + CtrlOrigine.Height - CtrlImg.Height
                'On mémorise les coordonnées Y dans le champ
                If TypeImg = 1 Then CtrlY = CtrlOrigine.Height - CtrlImg.Height
            Else 'Sinon, l'objet est dans le cadre
                CtrlImg.Top = DeplacY 'Position Y du contrôle
                'On mémorise les coordonnées Y dans le champ
                If TypeImg = 1 Then CtrlY = DeplacY - CtrlOrigine.Top
            End If
        End If
    End If
     
    End Sub
     
    Sub SourisRelachee(nButton As Integer, nX As Single, nY As Single, nCtrlImg As Object)
     
    Set CtrlImg = nCtrlImg
    'Sur souris relachée
    CtrlImg.BorderStyle = 0 'On enlève la bordure rouge
    DeplacXy = False 'On annule l'autorisation
     
    End Sub
     
    Sub SourisAppuyee(nButton As Integer, nX As Single, nY As Single, nCtrlImg As Object)
     
    Set CtrlImg = nCtrlImg
     
    If nButton = 1 Then 'Si clic sur bouton gauche
        CtrlImg.BorderStyle = 1 'On défini de la taille d'un bordure
        CtrlImg.BorderColor = vbRed 'Couleur de la bordure en rouge
        DeplacXy = True 'Déplacement autorisé
        X1 = nX 'On mémorise les coordonnées X et Y
        Y1 = nY
    End If
     
    End Sub
    Pour appeler ces codes :
    Cercle est le nom de mon image
    Carte_Extrait est le contrôle de mon image principale
    X_Cercle et Y_cercle sont les champs qui mémorisent les coordonnées.
    Sur souris appuyée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call SourisAppuyee(Button, X, Y, Me.Cercle)
    Sur souris déplacée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call SourisDeplacee(Button, X, Y, Me.Cercle, Me.Carte_Extrait, Me.X_Cercle, Me.Y_Cercle)
    Sur souris relachée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call SourisRelachee(Button, X, Y, Me.Cercle)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 61
    Points : 40
    Points
    40
    Par défaut Gdi+ éditeur de dessin
    Merci de m'avoir répondu.
    J’ai trouvé une solution à mon problème sans utiliser de table, mais c’est du bricolage.
    En fait, je récupère le nom de la région en cliquant sur le dessin à déplacer.
    Je récupère les coordonnées de la région.
    Je dessine un rectangle de la couleur du fond avec les coordonnées de la région pour cacher le dessin
    Je mets en mémoire l’image
    Je redessine le dessin à chaque mouse move après avoir restitué l’image en mémoire.
    Je doute vraiment que ça se passe comme cela dans msword.
    Quelqu’un aurait-il une solution qui tienne la route?

    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
    Private Sub Image0_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim lX1 As Long, lY1 As Long, lX2 As Long, lY2 As Long
    Select Case stDessin         
    Case "13"
            Select Case Button
            Case vbKeyLButton ' bouton gauche
            If oGdi Is Nothing Then Exit Sub
                ' Récupère le nom de la région sur laquelle on a cliqué
                StMaRegion = oGdi.GetRegionXY(X, Y)
        ' Position et coordonnées de la région
        If oGdi.GetRegionRect(StMaRegion, lX1, lY1, lX2, lY2) Then
        imX = lX1
        imY = lY1
        End If
    ‘Trace un rectangle de la couleur du fond avec les coordonnées de la region
        oGdi.DrawRectangle oGdi.PixelToPointsX(lX1), oGdi.PixelToPointsY(lY1), oGdi.PixelToPointsX(lX2), oGdi.PixelToPointsY(lY2) + 10, RGB(181, 255, 106), RGB(181, 255, 106), 1
        oGdi.KeepImage     'Garde en mémoire l'image d'origine
        'Le vbWhite dans la fonction drawimage enleve le contour blanc des images
        oGdi.DrawImage StMaRegion, imX, imY, , , vbWhite, Gdi32SizeModeAutoSize, Gdi32AlignCenter, _
        , True, StMaRegion, vbRed
        ' Affichage de l'image dans le contrôle
        oGdi.RepaintControl Me.Image0, , , True
            End Select
      End sub
     
    Private Sub Image0_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
                 Case "12", "13"
         Select Case Button
        Case vbKeyLButton ' bouton gauche
     
           oGdi.ResetImage
     
        imX = oGdi.CtrlToImgX(X, Me.Image0)
        imY = oGdi.CtrlToImgY(Y, Me.Image0)
     
        ‘Redessine l’image avec les coordonnées de la région
        oGdi.DrawImage StMaRegion, imX, imY, , , vbWhite, Gdi32SizeModeAutoSize, Gdi32AlignCenter, _
        , True, StMaRegion, vbRed
     
        oGdi.ImageListGetPixel StMaRegion, 1, 1
     
        ' Conserve l'image
        ' Affichage de l'image dans le contrôle
        oGdi.FastRepaint Me.Image0
     
        End Select
        End sub

  4. #4
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Points : 1 266
    Points
    1 266
    Par défaut
    Bonsoir Thermo,

    Finalement, je ne suis pas sur d'avoir bien compris ce que tu souhaitais faire.
    Mais à mon avis regarde le tuto , sur la création d'un jeu, de Thierry et cela devrait répondre à tes attentes.
    Sinon, lance un appel à Thierry, je suis sur qu'il se fera un plaisir de te guider.

    Cordialement

    Christophe

  5. #5
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    bjr,

    voir dans la base d'exemple, il y a un formulaire de déplacement d'images

  6. #6
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Points : 1 266
    Points
    1 266
    Par défaut
    Tu vois, j'étais sur que Thierry interviendrait sur ce sujet.
    Il a l'oeil

    Cordialement

    Christophe

Discussions similaires

  1. Gdi+ copier un dessin dans un champs OLE
    Par thermo dans le forum IHM
    Réponses: 0
    Dernier message: 29/04/2011, 17h11
  2. [Turbo Pascal] Petit éditeur de dessin (320x240-16 couleurs)
    Par Frantz76 dans le forum Contribuez
    Réponses: 1
    Dernier message: 11/11/2008, 16h21
  3. Un éditeur de dessin dans une page web
    Par Kyp dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 31/01/2006, 01h52
  4. Dessiner un repere avec GDI ?
    Par djiwalloo dans le forum MFC
    Réponses: 19
    Dernier message: 12/10/2004, 11h57
  5. [GDI] dessin qui s'affiche en couleur puis en noir et blanc
    Par Harry_polin dans le forum Windows
    Réponses: 4
    Dernier message: 25/06/2004, 12h57

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