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 :

Drag & drop de composants graphiques (pb pour les creer aussi)


Sujet :

VB.NET

  1. #1
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut Drag & drop de composants graphiques (pb pour les creer aussi)
    Bonjour a tou(te)s !
    Je dois réaliser une application ou des icônes seront déplacées sur un plan (rectangle graphique). J'aurais besoin de créer des instances de chacun de ces icônes et de définir des propriétés pour chacune, tout en enregistrant leur positions a l'écran/plan.
    Enfin, je débute un peu sur VS 2008 (vb.net), alors je cherche des conseils sur les méthodes utilisables?!

    une partie du code :
    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
       Public Sub New(ByVal BTid As Integer, ByVal BTtype As TypeEnum, ByVal BTlocx As Integer, ByVal BTlocy As Integer)
          'creation selon le type
          Select Case BTtype
             Case 1      ' = truc
                 ....
             Case 2
                ....
             Case 3      ' = Poste
                'dessin du fond de BTerm
                FondBTerm = New Bitmap(Me.Width, Me.Height)
                Dim gFondBTerm As Graphics = Graphics.FromImage(FondBTerm)
                'definition du BTerm = PC
                Me.Status_ = StatusEnum.AccesLibre
                Me.LocX = BTlocx
                Me.LocY = BTlocy
                PaintTermPoste(gFondBTerm)
     
             Case Else
                ....
          End Select
       End Sub
     
       Private Sub PaintTermPoste(ByRef g As Graphics)
          'definition
          Dim CouleurEcran As Color
          Dim CouleurBordure As Color = Color.White
          Dim Rect As Rectangle
          Dim TermStatus As LBTerm.StatusEnum = Me.Status
          Dim X As Integer = X0 + Me.LocX
          Dim Y As Integer = Y0 + Me.LocY
          'On va regarder le status du terminal
          Select Case TermStatus
             ....
             Case Else : CouleurEcran = Color.Red
          End Select
          'on décale le dessin pour avoir un contour en cas de surbrillance
          X += 2
          Y += 2
          'dessin ecran
          Rect = New Rectangle(X, Y, 36, 28)
          g.FillRectangle(New SolidBrush(Color.White), Rect)
          Rect = New Rectangle(X + 2, Y + 2, 32, 24)
          g.FillRectangle(New SolidBrush(CouleurEcran), Rect)
          'dessin clavier
          Rect = New Rectangle(X + 2, Y + 32, 31, 4)
          g.DrawRectangle(New Pen(Color.White), Rect)
          'dessin texte
          Rect = New Rectangle(X, Y + 40, 40, 14)
          g.DrawString(Me.BDesc, New Font(FontFamily.GenericSansSerif, 8), Brushes.White, Rect)
      End Sub
    voila sauf, qu'il ne dessine rien... je suis un peu dans le flou.
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  2. #2
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    Bon comme je galère un peu, et que la rame c'est pas mon truc:
    voila ou j'en suis, mon image est correctement dessine (enfin si je demande de l'enregistrer sur le disque dur => elle est comme je l'a souhaite)
    MAIS je n'arrive toujours pas à l'afficher!
    il me semblait qu'avec cette methode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gFondBTerm.DrawImage(FondBTerm, New System.Drawing.Point(10, 10))
    on dessinait l'image (c'est du moins ce que prétend msdn).
    Alors comme je cherche a dessiner par dessus (ou sur) un composant usercontrol avec une backgroundimage, est-ce que ca ne poserait pas pb?

    Comme je cherche a faire un drag & drop, je voudrais faire glisser mon image sur le usercontrol. Donc dans l'evt OnMouseMove:
    On m'a dit que je devais recuperer une partie de la backgroundimage pour la passer en argument a ma fonction de dessin, pour qu'elle dessine mon graphics dessus avant de le retourner. Je trouve la solution bien complique (en + je maitrise pas les outils graphics).

    Je souhaiterais créer un composant que je pourrais faire glisser indépendamment de mon usercontrol, comme une image audessus d'une autre (sans avoir a redessiner une partie de mon usercontrol)
    Bien, j'espere avoir ete clair, et meme si ce n'était pas le cas j'espere que qqun me repondra. Merci.
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  3. #3
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    Je ne sais pas si j'ai tout saisi, mais avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim gFondBTerm As Graphics = Graphics.FromImage(FondBTerm)
    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gFondBTerm.DrawImage(FondBTerm, New System.Drawing.Point(10, 10))
    Ca ne peut pas marcher.

    Si tu essayes de dessiner sur un truc qui hérite de control, passe par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Me.CreateGraphics.DrawImage(FondBTerm, New System.Drawing.Point(10, 10))
    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  4. #4
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    Super!
    Je te remercie, effectivement avec createGraphics, je dessine bien mon Terminal par dessus mon usercontrol.
    Il est pas encore permanent, c-a-d qu'il s'efface apres qq secondes, mais je suis sur la bonne voie, merci.


    bon, j'avance, j'avance (reste là l'escargot )
    voila depuis ce matin, j'ai réussi a créer, afficher, déplacer mes terminaux (composants graphics).
    J'utilise les evts:
    - icone_MouseClick (icone de depart ou l'utilisateur vient chercher son composant)
    - Fond_MouseMove remplace par l'evt Timer (redessine mon composant au nouvelle coordonnees souris, a propos les localisation c'est coton alors je me suis aidé de ceci
    - FOnd_MouseUp (definit la derniere position de l'objet)
    - Fond_MouseClick (selectionne un composant selon position de la souris)
    - Timer (redessine tous mes terminaux sur le fond)
    c'est surement pas la meilleure solution

    J'en suis a peu pres satisfait, toutefois (hormis qq bugs que je regarde presentement) il subsiste un effet de dédoublement de mon composant lors du deplacement. Y a t'il une solution?

    Autre question:
    voici mon code pour afficher mon composant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    're-dessiner le BTerm selectionne
                temp.GetGraphicsForImage.DrawImage(temp.GetImage, temp.pointBT)
                Fond.CreateGraphics.DrawImage(temp.GetImage, temp.pointBT)
    'temp => mon objet Terminal
    'Fond => mon usercontrol sur lequel je dessine
    excuse moi, si mon ignorance éblouit, mais cela veut dire qu'il me redessine aussi le fond (avec BackgroundImage) a chaque fois que je deplace un terminal??
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  5. #5
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    Désolé, mais sans plus de code, ça me semble difficile d'identifier la source du probléme.

    Essayes de poster un code simplifié au max où le probléme persiste.

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  6. #6
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    Bonjour (et bonne semaine )
    Voici un peu de mon code concernant mon projet:
    Dans PPlan.vb:
    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
       '@name: PB_BTermPC_Click()
       '@action: pour ajouter un BTerm de type PC(3)
       Private Sub PB_BTermPC_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PB_BTermPC.Click
          'test etat du bouton
          If PB_BTermPC.BorderStyle = BorderStyle.None Then
             'enfonce le button
             PB_BTermPC.BorderStyle = BorderStyle.Fixed3D
             CreationEnCours = True
             Dim NextId As System.Int32 = L.BTermFindNextId()
             'lancer(creation)
             '    desactive timerMAJ
             TimerMAJ.Enabled = False
             'recuperer la localisation de la souris sur ecran
             Dim locXm As System.Int32 = MousePosition.X
             Dim locYm As System.Int32 = MousePosition.Y
             'creation du BTerm
             Dim BT As New LBTerm(NextId, LBTerm.TypeEnum.Poste, locXm, locYm)
             'recuperation du Point Mouse et conversion en Point Mouse equivalent sur UCPlan
             BT.pointBT = UcPlan1.PointToClient(New Point(locXm, locYm))
             'stock BTerm selectionne
             TabBTerm.Add(BT)
             SelectedTerm = TabBTerm.Count() - 1     'le dernier est selectionne car min Index = 0
             'dessiner le BTerm
             BT.GetGraphicsForImage.DrawImage(BT.GetImage, BT.pointBT)
             UcPlan1.CreateGraphics.DrawImage(BT.GetImage, BT.pointBT)
             're-active timerMAJ
             TimerMAJ.Enabled = True
          Else
             'button normal
             PB_BTermPC.BorderStyle = BorderStyle.None
             CreationEnCours = False
             'annuler creation
             ' ...
          End If
    End sub
     
       '@name: TimerMAJ_Tick()
       '@action: rafraichissement de l affichage => redessiner les BTerm
       Private Sub TimerMAJ_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerMAJ.Tick
    For i As Integer = 0 To TabBTerm.Count() - 1
             Dim temp As LBTerm = TabBTerm(i)
             'test que 1 BTerm est bien selectionné
             If SelectedTerm = i Then
                'recuperer la localisation de la souris
                Dim locXm As System.Int32 = MousePosition.X
                Dim locYm As System.Int32 = MousePosition.Y
                temp.pointBT = UcPlan1.PointToClient(New System.Drawing.Point(locXm, locYm))
             Else
                'pointBT doit deja etre defini
             End If
             're-dessiner le BTerm selectionne
             temp.GetGraphicsForImage.DrawImage(temp.GetImage, temp.pointBT)
             UcPlan1.CreateGraphics.DrawImage(temp.GetImage, temp.pointBT)
          Next
       End Sub
       '@name: UcPlan1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
       '@action: UcPlan1 = Fond -> afficher / masquer les proprietes des BTerm
       Private Sub UcPlan1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles UcPlan1.Click
          'definition
          Dim MPos_UCPlan As System.Drawing.Point = UcPlan1.PointToClient(New Point(MousePosition.X, MousePosition.Y))
          'test si creation BTerm en cours
          If Me.CreationEnCours Then
             'definition
             Dim createBT As LBTerm = TabBTerm(SelectedTerm)
             'recuperer la localisation de la souris sur UCPlan
             createBT.pointBT = MPos_UCPlan
             'enregistrement dans la bdd
             Dim res As Integer = L.BTermUpdateOrInsert(createBT)
             If res = 0 Then
                MsgBox("Une erreur s'est produite...", MsgBoxStyle.Critical)
             End If
             'fin de la creation
             SelectedTerm = -1
             CreationEnCours = False
             'button normal
             PB_BTermPC.BorderStyle = BorderStyle.None
          Else
             'pas de creation en cours
             '   test si 1 BTerm est selectionne
             If SelectedTerm <> -1 Then
                'definition
                Dim SelectedBT As LBTerm = TabBTerm(SelectedTerm)
                'recuperer la localisation de la souris sur UCPlan
                SelectedBT.pointBT = MPos_UCPlan
                'maj dans la base (update)
                Dim res As Integer = L.BTermUpdateOrInsert(SelectedBT)
                If res = 0 Then
                   MsgBox("Une erreur s'est produite...", MsgBoxStyle.Critical)
                End If
                'fin de la selection
                SelectedTerm = -1
                CreationEnCours = False
             Else
                'pas de selection en cours
                '   boucle sur tous les BTerm du plan
                For Each Term As LBTerm In TabBTerm
                   'test si la souris est au-dessus de 1 BTerm
                   If MouseOnBTermPoint(Term, MPos_UCPlan) Then
                      'selectionner ce BTerm
                      SelectedTerm = TabBTerm.IndexOf(Term)
                      'recuperer son id et ses proprietes
                      '.....
                      'afficher ses proprietes
                      '.....
                   End If
                Next
             End If
          End If
       End Sub
    et dans la declaration de mon objet BTerm, LBTerm.vb:
    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
       '@name: GetGraphicsForImage() As System.Drawing.Bitmap
       '@action: retourne image cree pour le terminal
       Public Function GetGraphicsForImage() As System.Drawing.Graphics
          'dessin du fond de BTerm
          If FondBTerm Is Nothing Then
             FondBTerm = New Bitmap(Me.Width, Me.Height)
          ElseIf FondBTerm.Width <> Me.Width Or FondBTerm.Height <> Me.Height Then
             FondBTerm.Dispose()
             FondBTerm = Nothing
             FondBTerm = New Bitmap(Me.Width, Me.Height)
          End If
          Dim gFondBTerm As Graphics = Graphics.FromImage(FondBTerm)
          PaintTermPoste(gFondBTerm)
          Return gFondBTerm
       End Function
     
       '@name: PaintTermPoste(ByRef g As Graphics, ByVal ListeBTermsIndex As Integer)
       '@action: creer 1 BTerm (graph), surcharge LBTerm.New()
       Private Sub PaintTermPoste(ByRef g As Graphics)
          'definition
          Dim CouleurEcran As Color
          Dim CouleurBordure As Color = Color.White
          Dim Rect As Rectangle
          Dim TermStatus As LBTerm.StatusEnum = Me.Status
          Dim X As Integer = X0 + Me.posXDebDraw
          Dim Y As Integer = Y0 + Me.posYDebDraw
          'on décale le dessin pour avoir un contour en cas de surbrillance
          X += 2
          Y += 2
          'dessin ecran
          Rect = New Rectangle(X, Y, 36, 28)
          g.FillRectangle(New SolidBrush(Color.White), Rect)
          Rect = New Rectangle(X + 2, Y + 2, 32, 24)
          g.FillRectangle(New SolidBrush(CouleurEcran), Rect)
          'dessin clavier
          Rect = New Rectangle(X + 2, Y + 32, 31, 4)
          g.DrawRectangle(New Pen(Color.White), Rect)
          'dessin texte
          Rect = New Rectangle(X, Y + 40, 40, 14)
          g.DrawString(Me.BDesc, New Font(FontFamily.GenericSansSerif, 8), Brushes.White, Rect)
       End Sub
    Voila. Ce sont les principales fonctions en rapport avec la création et le déplacement de mon dessin (1 PC dessiné) sur mon fond (1 usercontrol avec image en fond).
    Et mon principale souci actuellement, c'est la persistance (pendant les déplacements de mes PC (dessinés) du dessin précédent (celui d'origine, comme ceux qui sont dessinés ensuite => effet chenille). Merci
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  7. #7
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    Ok, je vois le soucis.

    Comme tu ne redessines pas le fond de UcPlan1 avant d'afficher ton image par UcPlan1.CreateGraphics.DrawImage(temp.GetImage, temp.pointBT), ça dois effectivement laisser de la bavure...

    Le mieux serais de garder en mémoire la partie de UcPlan1 sur laquelle tu dessines pour pouvoir la réinitialiser lors du dessin suivant.

    Ce que tu pourrais faire donc avant de faire le drawimage :
    - si tu as déjà fait un drawimage auparavant
    - faire un drawimage de l'image sauvegardée à la position sauvegardée
    - sauvegardé la position courrante
    - faire une capture du rendu de UcPlan1 et gardé l'image (c'est ce que j'appelle plus haut l'image sauvegardée)
    - faire ton drawimage.

    Pour la capture, tu peux te référer à ce post :
    http://www.developpez.net/forums/sho...d.php?t=271443

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  8. #8
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    ok, merci beaucoup. Je suis dessus aujourd'hui ...
    Ca me pixellise le cerveau cette histoire!
    Merci, pour tes précieux conseils (je perds moins de temps comme ca). J'ai essayé de reprendre la form PPlan.vb pour utiiliser la méthode que tu conseillais ... mais pour le résultat, je crois que je suis a côté.
    Alors voila mon code (en perpetuelle evolution depuis qq jours) pour PPlan.vb, je n'ai pas touché a ma classe LBTerm:
    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
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    Public Class PPlan
       'definition
       Public SelectedTerm As System.Int32 = -1       'Bterm qui est selectionné ou qui vient d'etre créé
       Public TabBTerm As New ArrayList()                  'liste de tous les BTerm affichés
       Public CreationEnCours As System.Boolean = False      'creation de BTerm en cours
       ' AVANT ^^
     
       ' var de config graphique
       Private BackImgWidth As System.Int32 = 50          'largeur du rectangle de capture du background
       Private BackImgHeight As System.Int32 = 60         'hauteur du rectangle de capture du background
       Private BackImgOriginale As System.Drawing.Image   'rectangle de capture originel du fond (sans BTerm)
       Private BackImgPosX As System.Int32                'position x du rectangle de capture originel
       Private BackImgPosY As System.Int32                'position y du rectangle de capture originel
       Private EntreePosX As System.Int32                 'position x du rectangle de capture originel a son entree dans UCPlan
       Private EntreePosY As System.Int32                 'position y du rectangle de capture originel a son entree dans UCPlan
       Private BackImgWithBTerm As System.Drawing.Image   'rectangle de capture originel + dessin de BTerm (non-selectionne)
       Private InBTposXDebDraw As System.Int32 = 5        'Position X a l'interieur de la capture pour commencer a dessiner le BTerm
       Private InBTposYDebDraw As System.Int32 = 5        'Position Y a l'interieur de la capture pour commencer a dessiner le BTerm
       ' var Terminaux
       Private CurrentBT As LBTerm                        'Objet LBTerm en cours d'utilisation (selectionne)
       ' Enum
       Public Enum TernaryRasterOperations As Integer
          SRCCOPY = 13369376     'dest = source
          SRCPAINT = 15597702    'dest = source OR dest
          SRCAND = 8913094       'dest = source AND dest
          SRCINVERT = 6684742    'dest = source XOR dest
          SRCERASE = 4457256     'dest = source AND (NOT dest )
          NOTSRCCOPY = 3342344   'dest = (NOT source)
          NOTSRCERASE = 1114278  'dest = (NOT src) AND (NOT dest) 
          MERGECOPY = 12583114   'dest = (source AND pattern)
          MERGEPAINT = 12255782  'dest = (NOT source) OR dest
          PATCOPY = 15728673     'dest = pattern
          PATPAINT = 16452105    'dest = DPSnoo
          PATINVERT = 5898313    'dest = pattern XOR dest
          DSTINVERT = 5570569    'dest = (NOT dest)
          BLACKNESS = 66     'dest = BLACK
          WHITENESS = 16711778   'dest = WHITE
       End Enum
     
       ' Declarations
       Public Declare Function BitBlt Lib "gdi32.dll" (ByVal hdc As IntPtr, ByVal nXDest As Integer, ByVal nYDest As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer, ByVal dwRop As TernaryRasterOperations) As Boolean
     
       '@name: Plan_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
       '@action: chargement de la Form PPlan
       Private Sub Plan_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
          'qq definition rien de dessinne
       End Sub
     
       '### Evenements Buttons ###
     
       '@name: PB_BTermPC_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
       '@action: pour ajouter un BTerm de type PC(3)
       Private Sub PB_BTermPC_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PB_BTermPC.Click
          'test etat du bouton
          If PB_BTermPC.BorderStyle = BorderStyle.None Then
             'enfonce le button
             PB_BTermPC.BorderStyle = BorderStyle.Fixed3D
             CreationEnCours = True
             Dim NextId As System.Int32 = L.BTermFindNextId()
             'recuperer la localisation de la souris sur ecran
             Dim locXm As System.Int32 = MousePosition.X
             Dim locYm As System.Int32 = MousePosition.Y
             'creation du BTerm
             Dim BT As New LBTerm(NextId, LBTerm.TypeEnum.Poste, 0, 0)
             'recuperation du Point Mouse et conversion en Point Mouse equivalent sur UCPlan
             BT.pointBT = UcPlan1.PointToClient(New Point(locXm, locYm))
             BT.LocX = BT.pointBT.X
             BT.LocY = BT.pointBT.Y
             'Bterm selectionne
             BT.Selected_() = False     'pas de surbrillance a la creation
             'stock BTerm selectionne
             Me.CurrentBT = BT
             'TabBTerm.Add(BT)
             'SelectedTerm = TabBTerm.Count() - 1     'le dernier est selectionne car min Index = 0
          Else
             'button normal
             PB_BTermPC.BorderStyle = BorderStyle.None
             CreationEnCours = False
             'annuler creation
             ' ...
          End If
       End Sub
     
       '### Evenements Souris ###
       '@name: UcPlan1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
       '@action: UcPlan1.MouseMove -> Drag and drop
       Private Sub UcPlan1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles UcPlan1.MouseMove
          'test que drag and drop en cours (currentBT definit)
          If Not CurrentBT Is Nothing Then
             'definition
             Me.BackImgPosX = e.X
             Me.BackImgPosY = e.Y
             Dim TempBackImg As System.Drawing.Image
             'debug
             'replacer BackImgOriginale a sa place (position avant le deplacement)
             'Me.ReplaceImage(Me.BackImgOriginale, Me.EntreePosX, Me.EntreePosY)
             'stock nouvelle image de fond (sans BTerm) apres OnMove
             TempBackImg = Me.BackImgOriginale
             Me.BackImgOriginale = Me.GetBackgroundImage(Me.BackImgPosX, Me.BackImgPosY, BackImgWidth, BackImgHeight)
             'liberation memoire pour BackImgWithBTerm
             Me.BackImgWithBTerm.Dispose()
             'faire une copie de BackImgOriginale pour y ajouter le BTerm
             Me.BackImgWithBTerm = Me.CloneImage(Me.BackImgOriginale)
             'recuperer le graphics de la nouvelle image pour pouvoir la modifier
             Dim graphBTerm As Graphics = Graphics.FromImage(Me.BackImgWithBTerm)
             'dessin de BTerm = PC
             Me.PaintTermPoste(graphBTerm)
             'replacer BackImgOriginale a sa place (position avant le deplacement)
             'Me.ReplaceImage(TempBackImg, Me.EntreePosX, Me.EntreePosY)
             'remplacer BackImgOriginale par BackImgWithBTerm (BTerm non-selectionne dessine)
             Me.ReplaceImage(Me.BackImgWithBTerm, Me.BackImgPosX, Me.BackImgPosY)
          End If
       End Sub
     
       '@name: UcPlan1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs)
       '@action: UcPlan1.MouseEnter -> 1ere phase du drag and drop: memoriser une partie de l image autour de la souris pour pouvoir la redessiner ensuite
       Private Sub UcPlan1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles UcPlan1.MouseEnter
          Dim locXm As System.Int32 = MousePosition.X
          Dim locYm As System.Int32 = MousePosition.Y
          'test si user vient de cliquer sur PB_BTermPC (creation de BTerm)
          If Me.CreationEnCours Then
             'definition du point d'affichage du BTerm
             Me.CurrentBT.pointBT = UcPlan1.PointToClient(New Point(locXm, locYm))
             'recuperer le fond autour de la souris et le stocker dans Me.BackImgOriginale
             Me.BackImgOriginale = Me.GetBackgroundImage(Me.CurrentBT.pointBT.X, Me.CurrentBT.pointBT.Y, Me.BackImgWidth, Me.BackImgHeight)
             Me.BackImgPosX = Me.CurrentBT.pointBT.X
             Me.BackImgPosY = Me.CurrentBT.pointBT.Y
             'point entree dans le control UCPlan
             Me.EntreePosX = Me.CurrentBT.pointBT.X
             Me.EntreePosY = Me.CurrentBT.pointBT.Y
             'faire une copie de BackImgOriginale pour y ajouter le BTerm
             Me.BackImgWithBTerm = Me.CloneImage(Me.BackImgOriginale)
             'recuperer le graphics de la nouvelle image pour pouvoir la modifier
             Dim graphBTerm As Graphics = Graphics.FromImage(Me.BackImgWithBTerm)
             'dessin de BTerm = PC
             Me.PaintTermPoste(graphBTerm)
             'remplacer BackImgOriginale par BackImgWithBTerm (BTerm non-selectionne dessine)
             Me.ReplaceImage(Me.BackImgWithBTerm, Me.BackImgPosX, Me.BackImgPosY)
          End If
       End Sub
     
       '### Methodes Graphiques ###
       '@name: GetBackgroundImage(ByVal MPx As System.Int32, ByVal MPy As System.Int32)
       '@action: Recupere et stock 1 rectangle de l'image en fond (Client) sous la souris
       '@param: MPx, MPy            coordonnees de la souris sur le fond du Client
       '@param: BiWidth, BiHeight   taille du rectangle recupere
       '@e-src: http://www.developpez.net/forums/showthread.php?t=271443
       Private Function GetBackgroundImage(ByVal MPx As System.Int32, ByVal MPy As System.Int32, ByVal BiWidth As System.Int32, ByVal BiHeight As System.Int32) As System.Drawing.Image
          'definitions
          Dim G1 As Graphics = Me.CreateGraphics
          Dim MyImage As Image = New Bitmap(BiWidth, BiHeight, G1)
          Dim G2 As Graphics = Graphics.FromImage(MyImage)
          'traitements
          Dim dc1 As IntPtr = G1.GetHdc()
          Dim dc2 As IntPtr = G2.GetHdc()
          BitBlt(dc2, 0, 0, BiWidth, BiHeight, dc1, MPx, MPy, TernaryRasterOperations.SRCCOPY)
          G1.ReleaseHdc(dc1)
          G2.ReleaseHdc(dc2)
          'liberation de la memoire
          G1.Dispose()
          G2.Dispose()
          'retour
          Return MyImage
       End Function
     
       '@name: GetBackgroundImage(ByVal MPx As System.Int32, ByVal MPy As System.Int32)
       '@action: Recupere et stock 1 rectangle de l'image en fond (Client) sous la souris
       '@param: PreviousImg     System.Drawing.Image source pour la copie
       '@return: System.Drawing.Image (copie de PreviousImg)
       Private Function CloneImage(ByVal PreviousImg As System.Drawing.Image) As System.Drawing.Image
          Return PreviousImg
       End Function
     
       '@name: Public Sub ReplaceImage(ByRef NextImg As System.Drawing.Image, ByVal NImgPosX As System.Int32, ByVal NImgPosY As System.Int32)
       '@action: remplace une image par une autre (BackImgOriginale -> BackImgWithBTerm)
       '@param: NextImg                 System.Drawing.Image remplacante
       '@param: NImgPosX, NImgPosY      int32, position angle superieur gauche du rectangle forme par Image
       Public Sub ReplaceImage(ByRef NextImg As System.Drawing.Image, ByVal NImgPosX As System.Int32, ByVal NImgPosY As System.Int32)
          UcPlan1.CreateGraphics.DrawImageUnscaled(NextImg, NImgPosX, NImgPosY)
       End Sub
     
       '@name: UcPlan1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)
       '@action: Evt lance a chaque modification de UCPlan1 (redim, hide, ...), de l'affichage en general
       Private Sub UcPlan1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles UcPlan1.Paint
             '   pas encore fait
       End Sub
     
       '@name: PaintTermPoste(ByRef g As Graphics, ByVal ListeBTermsIndex As Integer)
       '@action: creer 1 BTerm (graph)
       Private Sub PaintTermPoste(ByRef g As Graphics)
          'definition
          Dim CouleurEcran As Color
          Dim CouleurBordure As Color = Color.White
          Dim Rect As Rectangle
          Dim TermStatus As LBTerm.StatusEnum = 3         'REMARQUE: temporaire, def a faire
          Dim X As Integer = Me.InBTposXDebDraw
          Dim Y As Integer = Me.InBTposYDebDraw
          'On va regarder le status du terminal
          Select Case TermStatus
             Case LBTerm.StatusEnum.AccesLibre : CouleurEcran = Color.Lime
             Case LBTerm.StatusEnum.Occupe : CouleurEcran = Color.Blue
             Case LBTerm.StatusEnum.EnLigne : CouleurEcran = Color.Green
             Case Else : CouleurEcran = Color.Red
          End Select
          'on décale le dessin pour avoir un contour en cas de surbrillance
          X += 2
          Y += 2
          'dessin ecran
          Rect = New Rectangle(X, Y, 36, 28)
          g.FillRectangle(New SolidBrush(Color.White), Rect)
          Rect = New Rectangle(X + 2, Y + 2, 32, 24)
          g.FillRectangle(New SolidBrush(CouleurEcran), Rect)
          'dessin clavier
          Rect = New Rectangle(X + 2, Y + 32, 31, 4)
          g.DrawRectangle(New Pen(Color.White), Rect)
          'dessin texte
          Rect = New Rectangle(X, Y + 40, 40, 14)
          g.DrawString("Nouveau", New Font(FontFamily.GenericSansSerif, 8), Brushes.White, Rect)
       End Sub
    Attention, le code est plutot approximatif mais il me permet deja de voir qu'il y a des erreurs: les ralentissements sont toujours la, je crois que je dessine encore au-dessus de UCPlan.
    remarque: pourquoi dessiner avec un pinceau alors que l'on peut le faire au niveau des pixels; soit pourquoi programmer en vb.net alors qu'il existe l'assembleur.
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  9. #9
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    Salut

    Toujours dans mon problème, on m'a conseillé d'utiliser les méthodes Clip() et la classe Region. Ce qui devrait me permettre d'optimiser mon drag (and drop, oh my god j'en suis pas la encore).
    Mais je patauge davantage, alors je cherche des exemples?
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  10. #10
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Au risque de dire une enorme bêtise (ce sera pas la première), si je comprends bien ton problème tu cherches à déplacer une image qui est une icone ? Une fois cette icone déplacée tu peux en ajouter une autre que tu peux déplacer aussi, c'est bien ça ?
    Roulement de tambour, je me lance, si c'est une icone que tu déplaces, tu ne pourrais pas changer l'icone du curseur souris et lui affecter ton image ? Premier clic, le curseur prend la forme de ton image, tu déplaces ton curseur, reclic, tu mets ton image à l'endroit du clic et tu remets le curseur souris par défaut. tu n'aurais ainsi à effacer qu'une fois l'image à son emplacement d'origine et à la redessiner une seule fois à son emplacement de destination.
    Mais je sais pas pourquoi, j'ai l'impression que je viens d'écrire une grosse bêtise.
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  11. #11
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    euh là comme ça (environ 17h) il y aurait peut être une idée à creuser (pas desespere le gars) avec l'utilisation du cursor.
    Malheureusement, mon pb viendrait plutôt du fait que je dois pouvoir ajouter (drag and droppy pour etre precis) des instances d'une classe (avec selon la valeur d'1 propriete, 1 objet graphique correspondant). Objet qui doit être dessine (et là c'est le drame).
    Pour être plus simple, le principe c'est de pouvoir sur un plan schématique, glisser-deposer des PC (pour commencer) dessinés, afficher leurs propriétés (@dresse IP, ...), de pouvoir les deplacer, puis d'autres fonctionnalites; mais parlons graphisme!
    ps: tu saurais transformé un Graphics en Cursor, allez meme un Bitmap en Cursor? je suis preneur!
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  12. #12
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Peux tu préciser les caractéristiques de tes dessins ? (taille en pixel, nombre de couleur)
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  13. #13
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    Tous mes graphiques feront au max w=50 px h=60 px et ils seront soit en noir et blanc, soit en RGB (ce n'est pas au choix).
    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
       '
       '@action: creer 1 BTerm (graph)
       Private Sub PaintTermPoste(ByRef g As Graphics)
          'definition
          Dim CouleurEcran As Color
          Dim CouleurBordure As Color = Color.White
          Dim Rect As Rectangle
          Dim TermStatus As LBTerm.StatusEnum = 3         'REMARQUE: temporaire, def a faire
          Dim X As Integer = Me.InBTposXDebDraw
          Dim Y As Integer = Me.InBTposYDebDraw
          'On va regarder le status du terminal
          Select Case TermStatus
             Case LBTerm.StatusEnum.AccesLibre : CouleurEcran = Color.Lime
             Case LBTerm.StatusEnum.Occupe : CouleurEcran = Color.Blue
             Case LBTerm.StatusEnum.EnLigne : CouleurEcran = Color.Green
             Case Else : CouleurEcran = Color.Red
          End Select
          'on décale le dessin pour avoir un contour en cas de surbrillance
          X += 2
          Y += 2
          'dessin ecran
          Rect = New Rectangle(X, Y, 36, 28)
          g.FillRectangle(New SolidBrush(Color.White), Rect)
          Rect = New Rectangle(X + 2, Y + 2, 32, 24)
          g.FillRectangle(New SolidBrush(CouleurEcran), Rect)
          'dessin clavier
          Rect = New Rectangle(X + 2, Y + 32, 31, 4)
          g.DrawRectangle(New Pen(Color.White), Rect)
          'dessin texte
          Rect = New Rectangle(X, Y + 40, 40, 14)
          g.DrawString("Nouveau", New Font(FontFamily.GenericSansSerif, 8), Brushes.White, Rect)
       End Sub
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  14. #14
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    Je rejoins OhMonBato, et je me dis que finalement la solution initiale n'est pas forcément la bonne.

    J'ai repris depuis le début et si je comprends tout, c'est du déplacement d'objets (ici des images) dans un UserControl. Donc au lieu de se faire des noeuds au cerveau (je me sens un peu responsable sur le coup !), pourquoi ne pas faire un control pour ton Term que tu places dans ton UC ?

    Pour me faire pardonner, je te propose de tester ce control :
    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
     
     
    Public Class TermControl
        Inherits Control
        Implements IMessageFilter
     
     
    #Region "Gestion de la souris"
        Dim ptInitMousePosition As Point
        Dim ptInitFormPosition As Point
        Dim cur As Cursor
     
        Private Sub F_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
            If (e.Button = MouseButtons.Left) Then
                Application.RemoveMessageFilter(Me)
            End If
        End Sub
        Private Sub F_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
            If e.Button = MouseButtons.Left Then
                ptInitMousePosition = Control.MousePosition
                ptInitFormPosition = Me.Location
                Application.AddMessageFilter(Me)
            End If
        End Sub
     
    #End Region
     
        Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
            e.Graphics.DrawImage(Me.Buffer, New Point(0, 0))
        End Sub
     
        Private FondBTerm As Bitmap
        Private sPrevSize As Size = New Size(0, 0)
        Public ReadOnly Property Buffer() As Bitmap
            Get
                If FondBTerm Is Nothing Or sPrevSize <> Me.Size Then
                    SetBuffer()
                End If
                Return FondBTerm
            End Get
        End Property
        Public Sub SetBuffer()
     
            FondBTerm = New Bitmap(Me.Width, Me.Height)
            Dim gFondBTerm As Graphics = Graphics.FromImage(FondBTerm)
            Dim Rect As Rectangle
            Dim X As Integer = 0
            Dim Y As Integer = 0
            'dessin ecran
            Rect = New Rectangle(X, Y, 36, 28)
            gFondBTerm.FillRectangle(New SolidBrush(Color.White), Rect)
            Rect = New Rectangle(X + 2, Y + 2, 32, 24)
            gFondBTerm.FillRectangle(New SolidBrush(Color.Red), Rect)
            'dessin clavier
            Rect = New Rectangle(X + 2, Y + 32, 31, 4)
            gFondBTerm.DrawRectangle(New Pen(Color.White), Rect)
            'dessin texte
            Rect = New Rectangle(X, Y + 40, 40, 14)
            gFondBTerm.DrawString(Me.Text, New Font(FontFamily.GenericSansSerif, 8), Brushes.White, Rect)
     
            gFondBTerm = Nothing
     
        End Sub
     
        Private Const WM_MOUSEMOVE = &H200
        Public Function PreFilterMessage(ByRef m As System.Windows.Forms.Message) As Boolean Implements System.Windows.Forms.IMessageFilter.PreFilterMessage
     
            If m.Msg = WM_MOUSEMOVE Then
                Dim ptPosition As Point = Control.MousePosition
                Dim ptNewLocation = New Point(Me.ptInitFormPosition.X + (ptPosition.X - ptInitMousePosition.X), Me.ptInitFormPosition.Y + (ptPosition.Y - ptInitMousePosition.Y))
                Dim rRectangle As New Rectangle(ptNewLocation, Me.Size)
                If Me.Parent.ClientRectangle.Contains(rRectangle) Then
                    Me.Location = ptNewLocation
                Else
                    Application.RemoveMessageFilter(Me)
                End If
            End If
     
            Return False
     
        End Function
     
    End Class
    Nota :
    - c'est graphiquement assez moyen, mais c'est pas le but de l'exemple d'être beau
    - j'utilise un prefilter plutôt que le MouseMove qui n'est pas trés bon en cas de déplacement rapide.

    Ca me semble un piste simple à creuser.

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  15. #15
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    Bonjour,
    Je te remercie Olsimare pour ton aide. De mon cote je debute en vb.net (on pourrait meme dire que je suis en formation); alors je ne vois pas trop comment utiliser ta class .
    Pourrais tu me donner un exemple d'utilisation?
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  16. #16
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    Pour tester le truc, il suffit de créer une form et d'ajouter une classe dans laquelle tu recopies le code.

    Ensuite tu regénéres et via la boite à outils tu peux directement ajouter un "Termcontrol".

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  17. #17
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    QQ taches + tard:
    Alors j'ai utilisé cette méthode pour utiliser la classe TermControl:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Class PPlan
       Dim bt_one As TermControl = New PM.TermControl
       Dim fond As System.Drawing.Image = New Bitmap(50, 60)
    Private Sub PB_BTermPC_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PB_BTermPC.Click
          fond = bt_one.Buffer()
    end sub
    Private Sub UcPlan1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles UcPlan1.MouseMove
          Dim locXm As System.Int32 = MousePosition.X
          Dim locYm As System.Int32 = MousePosition.Y
          Dim pointBT As Point = UcPlan1.PointToClient(New Point(locXm, locYm))
          UcPlan1.CreateGraphics.DrawImageUnscaled(fond, pointBT)
    end sub
    end class
    Mais j'ai toujours cet effet de dédoublement ... Est-ce que la méthode est incorrecte?
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

Discussions similaires

  1. Drag and Drop d'objet graphique
    Par sylum dans le forum Windows Forms
    Réponses: 1
    Dernier message: 03/07/2010, 02h55
  2. Composant Crystal reports pour les projets WPF
    Par bellak dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 26/08/2009, 16h29
  3. [Humour]Une petite explication pour mesdemoiselles (et pour les messieurs aussi ;) )
    Par chaval dans le forum La taverne du Club : Humour et divers
    Réponses: 44
    Dernier message: 12/07/2006, 15h28

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