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

Windows Forms Discussion :

rectangle de sélection


Sujet :

Windows Forms

  1. #1
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Par défaut rectangle de sélection
    Bonjour tout le monde,

    j'aimerais inclure dans mon application un rectangle de sélection comme dans windows. Le problème est que je ne sais pas du tout comment faire

    Quelqu'un pourrait-il m'aider?

    Merci pour votre aide
    Kevin

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 50
    Par défaut
    l'idée générale est d'utiliser GDI + à mon avis avec ce genre de méthodologie :

    création d'un rectangle avec les coordonnées du premier points qui sont fixées grâce à l'event du Click de la souris : style e.X, e.Y

    implémentation de la meme manière du pour les coordonnées finales au mouseMove

    et finalisation de la meme façon également
    ensuite tout dépend ce que tu veux faire avec cet object !

    bon courage

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

    Lostini, ta solution est trés bien si tu travailles dans un seul control donné et donc si tu disposes d'un seul graphics.

    A mon avis, pour avoir le même comportement que Windows, il faut créer une fenêtre "popup" transparent mais avec bordure dont l'un de point reste figé (le point de down de la souris + une détermination du sens du mouvement de la souris) et dont la taille augmente.

    Ce fonctionnement exige cependant de gérer un Hook sur la souris ou un application.prefilter pour récupérer les event liés à l'activité de la souris.

    Question intéressante en tout cas, je vais voir à faire un petit source la dessus.

    Cdt.

  4. #4
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 184
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 184
    Par défaut
    Re

    Comme je trouvais l'idée intéressante, j'ai fait cette petite classe qui peut t'orienter :
    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
     
    Option Explicit On
    Option Strict On
    Public Class SelectionForm
        Implements Windows.Forms.IMessageFilter
     
        Private intStartPoint As Point
        Private blnShown As Boolean = False
        Private blnWaitingMove As Boolean = False
        Private iParentForm As Form
     
        Public Sub New(ByVal parentForm As Form)
            ' Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
     
            Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
            Me.BackColor = System.Drawing.Color.DodgerBlue
            Me.ShowInTaskbar = False
            Me.Opacity = 0.4
            iParentForm = parentForm
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            Application.AddMessageFilter(Me)
            Me.Hide()
        End Sub
     
        Protected Overrides Sub Finalize()
            Application.RemoveMessageFilter(Me)
            MyBase.Finalize()
        End Sub
     
    #Region "Declaration constantes"
        Protected Const WM_MOUSEMOVE As Integer = &H200
        Protected Const WM_LBUTTONDOWN As Integer = &H201
        Protected Const WM_LBUTTONUP As Integer = &H202
    #End Region
     
        Public Function PreFilterMessage(ByRef m As System.Windows.Forms.Message) As Boolean Implements System.Windows.Forms.IMessageFilter.PreFilterMessage
     
            Dim mbMouseButton As MouseButtons = MouseButtons.None
            Dim intClick As Integer
     
            Select Case m.Msg
                Case WM_LBUTTONDOWN
                    If Not blnShown Then
                        blnWaitingMove = True
                    End If
                Case WM_LBUTTONUP
                    If blnShown Then
                        blnShown = False
                        Me.Hide()
                    End If
                    blnWaitingMove = False
                Case WM_MOUSEMOVE
                    If blnWaitingMove Then
                        blnShown = True
                        blnWaitingMove = False
                        intStartPoint = Control.MousePosition
                        Me.Location = intStartPoint
                        Me.Size = New Size(0, 0)
                        Me.Show()
                    Else
                        If blnShown Then
                            MouseMoveProc()
                        End If
                    End If
            End Select
     
            If mbMouseButton <> MouseButtons.None Then
                Dim meaArgs As New MouseEventArgs(mbMouseButton, intClick, Control.MousePosition.X, Control.MousePosition.Y, 0)
            End If
     
            Return False
     
        End Function
     
        Private intMousePreviousPosition As Point = Control.MousePosition
        Private Sub MouseMoveProc()
     
            Dim intMouseCurrentPosition As Point = Control.MousePosition
            Dim r As Rectangle = iParentForm.RectangleToScreen(iParentForm.ClientRectangle)
     
            If intMouseCurrentPosition.Y > r.Bottom Then
                intMouseCurrentPosition.Y = r.Bottom
            End If
            If intMouseCurrentPosition.Y < r.Top Then
                intMouseCurrentPosition.Y = r.Top
            End If
            If intMouseCurrentPosition.X > r.Right Then
                intMouseCurrentPosition.X = r.Right
            End If
            If intMouseCurrentPosition.X < r.Left Then
                intMouseCurrentPosition.X = r.Left
            End If
     
            Dim sFormSize As Size
            Dim ptFormLocation As Point
            Dim XOffset As Integer = intMouseCurrentPosition.X - intStartPoint.X
            Dim YOffset As Integer = intMouseCurrentPosition.Y - intStartPoint.Y
            If XOffset < 0 Then
                ptFormLocation.X = intMouseCurrentPosition.X
                sFormSize.Width = -XOffset
            Else
                ptFormLocation.X = intStartPoint.X
                sFormSize.Width = XOffset
            End If
            If YOffset < 0 Then
                ptFormLocation.Y = intMouseCurrentPosition.Y
                sFormSize.Height = -YOffset
            Else
                ptFormLocation.Y = intStartPoint.Y
                sFormSize.Height = YOffset
            End If
     
            Me.Location = ptFormLocation
            Me.Size = sFormSize
     
        End Sub
     
    End Class
    Pour l'utiliser, il suffit de faire dans un formulaire de l'appli :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim c As New SelectionForm(Me)
    Ca ne marche que dans un formulaire (le rectangle de sélection n'est actif que dans la form) mais c'est "facilement" extensible à tout le bureau (utilisation d'un Hook au lieu du prefilter).

    C'est donc perfectible !

    Il ne reste plus qu'à implémenter pour les controls ou autres objets "survolés" une méthode de mise en évidence et de gestion de la sélection.

    Mais ça c'est un autre sujet ...

    Cdt.

  5. #5
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Par défaut
    bonjour

    merci à tous pour votre aide. je vais m'y pencher de suite et je vous tiendrais au courant

    Un grand merci à vous
    ++

  6. #6
    Membre émérite Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Par défaut
    D'ailleurs t'en est où dans ton OS? Faudra me le montrer après les vacances!

    Pour le zoom, y a toujours des lags où c'est plus fluide?

Discussions similaires

  1. dessiner un rectangle de sélection
    Par ninours23 dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 13/02/2008, 16h51
  2. Réponses: 6
    Dernier message: 30/01/2008, 21h05
  3. Rectangle de sélection "bleuté" style Explorateur
    Par phplive dans le forum Langage
    Réponses: 2
    Dernier message: 02/03/2006, 15h22
  4. Rectangle de sélection
    Par duckaurore dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/01/2006, 16h43
  5. [Info]Rectangles de sélection : logiciel de dessin ?
    Par rozwel dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 27/03/2004, 17h49

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