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 :

Changer la couleur d'une ProgressBar


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 56
    Par défaut Changer la couleur d'une ProgressBar
    Bonsoir,
    Je voudrais savoir s'il est possible de changer la couleur d'une ProgressBar. Actuellement elle sont vertes et j'aurais voulu qu'elle change de couleur (rouge) lorsque la propriété Value arrivait à 80%. Apparement impossible mais quelqu'un a peut-être une solution.
    Merci.

    @+
    Thierry

  2. #2
    Membre expérimenté Avatar de anonymousse
    Profil pro
    Inscrit en
    Février 2011
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 130
    Par défaut
    bonjour,

    propriété ForeColor !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ProgressBar1.Value/ProgressBar1.Max>=0.8 then ProgressBar1.Forecolore=Color.Red

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par anonymousse Voir le message
    bonjour,

    propriété ForeColor !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ProgressBar1.Value/ProgressBar1.Max>=0.8 then ProgressBar1.Forecolore=Color.Red
    Ca ne marchera pas, la ProgressBar est dessinée par l'OS, qui ne tient pas compte de la propriété ForeColor...

    (du moins si les visual styles sont activés)

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    il est possible de dire par code qu'on ne veut pas du style windows sur ses controles, et alors le changement de couleur devrait être pris en compte
    je ne sais plus trop la méthode, mais j'avais déjà réussi je crois
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 56
    Par défaut
    J'ai bien essayé avec la propriété ForeColor mais ca ne marche pas.
    C'est vraiment bizarre de ne pas pouvoir modifier la couleur de la ProgressBar. En tous cas, si quelqu'un a une solution je suis preneur.
    Merci pour vos réponses.

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    la version simple c'est dans la propriétés du projet de décocher "activer les styles visuels xp"
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Ca ne répond pas directement à la question, mais offre une piste de reflexion.

    D'un point de vue ergonomique et pour le confort de tes utilisateurs, il est conseillé d'avoir une certaines constance sur le look de ton application avec le reste de l'environnement (à moins que ça soit clairement une spécification d'utiliser une chart graphique home made, mais ne transformons pas ce topic en débat passionnée sur nos amis du marketing...).

    L'utilisateur à l'habitude de voir une progress bar verte sous Windows (ou autre couleur selon son style) et de lui mettre une couleur rouge risquerait d'être interprétée comme l'affichage d'une erreur par exemple!

    Donc sauf s'il y a vraiement une valeur ajoutée, ou une obligation, à faire ce genre de bidouille. Il faut mieux éviter de perdre du temps la dessus.

    Mieux vaut baser le "Corporate" de son application sur la qualité du développement que sur un sac de poudre aux yeux et un arc en ciel de couleur.

    Ceci reste bien sur du domaine théorique et un avis personnel (partagé je l'espère)!

    Ceci n'enlève en rien mon interet pour la réponse (ne serait-ce que pour la curiosité technique)

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 56
    Par défaut
    En fait, dans mon application, la ProgressBar va servir à indiquer que l'on s'approche d'une valeur limite. Dans mon apllication je gère des analyses de gaz et ces dernières possède une norme à ne pas dépasser. Je veux que lorsque l'on s'approche de 100% (vers 75 ou 80%) la barre passe en orange cela pour indiquer que la limite de la norme va être atteinte. A 100% elle passe en rouge. Voila simplement pourquoi je voudrais changer la couleur.
    Merci.

    Thierry

  9. #9
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    dans ce cas tu peux trouver des contrôles de jauges gratuit sur le net je pense
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    dans ce cas tu peux trouver des contrôles de jauges gratuit sur le net je pense
    En voici quelque exemple

    http://dashboarding.codeplex.com/
    http://gaugethis.codeplex.com/
    http://polymoncontrols.codeplex.com/

    Et surement bien plus si tu cherches un peu.

  11. #11
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 66

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut progressbar,couleur
    bonjour
    En voici un.C'est un simple UserControl que tu peux ameliorer.Tu peux rajouter d'autres fonctionnalites.
    pour l'utilisation que tu envisager(alarm),il suffit dans ton appli de changer le "forecolor" du progressbar pour une valeur donnee de la prop Value du control.
    code du winform de test:
    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
     
    Public Class Form1
        Inherits System.Windows.Forms.Form
     
    #Region " Windows Form Designer generated code "
     
        Public Sub New()
            MyBase.New()
     
            'This call is required by the Windows Form Designer.
            InitializeComponent()
     
            'Add any initialization after the InitializeComponent() call
     
        End Sub
     
        'Form overrides dispose to clean up the component list.
        Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
            If disposing Then
                If Not (components Is Nothing) Then
                    components.Dispose()
                End If
            End If
            MyBase.Dispose(disposing)
        End Sub
     
        'Required by the Windows Form Designer
        Private components As System.ComponentModel.IContainer
     
        'NOTE: The following procedure is required by the Windows Form Designer
        'It can be modified using the Windows Form Designer.  
        'Do not modify it using the code editor.
        Friend WithEvents MyProgBar1 As Progressbar.MonProgBar
        Friend WithEvents Button1 As System.Windows.Forms.Button
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
            Me.MyProgBar1 = New Progressbar.MonProgBar()
            Me.Button1 = New System.Windows.Forms.Button()
            Me.SuspendLayout()
            '
            'MyProgBar1
            '
            Me.MyProgBar1.BackColor = System.Drawing.SystemColors.Control
            Me.MyProgBar1.Location = New System.Drawing.Point(48, 30)
            Me.MyProgBar1.Max = 100
            Me.MyProgBar1.Min = 0
            Me.MyProgBar1.Name = "MyProgBar1"
            Me.MyProgBar1.Size = New System.Drawing.Size(174, 30)
            Me.MyProgBar1.TabIndex = 0
            Me.MyProgBar1.Value = 0
            '
            'Button1
            '
            Me.Button1.Location = New System.Drawing.Point(72, 132)
            Me.Button1.Name = "Button1"
            Me.Button1.Size = New System.Drawing.Size(108, 30)
            Me.Button1.TabIndex = 1
            Me.Button1.Text = "Button1"
            '
            'Form1
            '
            Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
            Me.ClientSize = New System.Drawing.Size(292, 243)
            Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Button1, Me.MyProgBar1})
            Me.ForeColor = System.Drawing.SystemColors.HotTrack
            Me.Name = "Form1"
            Me.Text = "Form1"
            Me.ResumeLayout(False)
     
        End Sub
     
    #End Region
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim i As Integer
            MyProgBar1.Value = 0
            MyProgBar1.ForeColor = Color.Aquamarine
            For i = 1 To 100
                Threading.Thread.Sleep(100)
                MyProgBar1.Value += 1
            Next
        End Sub
    End Class
    code du usercontrol:

    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
     
    Public Class MonProgBar
        Inherits System.Windows.Forms.UserControl
        Protected pMin As Integer
        Protected pMax As Integer
        Protected pValue As Integer
    #Region " Windows Form Designer generated code "
     
        Public Sub New()
            MyBase.New()
     
            'This call is required by the Windows Form Designer.
            InitializeComponent()
     
            'Add any initialization after the InitializeComponent() call
     
        End Sub
     
        'UserControl overrides dispose to clean up the component list.
        Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
            If disposing Then
                If Not (components Is Nothing) Then
                    components.Dispose()
                End If
            End If
            MyBase.Dispose(disposing)
        End Sub
     
        'Required by the Windows Form Designer
        Private components As System.ComponentModel.IContainer
     
        'NOTE: The following procedure is required by the Windows Form Designer
        'It can be modified using the Windows Form Designer.  
        'Do not modify it using the code editor.
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
            '
            'MyProgBar
            '
            Me.Name = "MyProgBar"
            Me.Size = New System.Drawing.Size(150, 48)
     
        End Sub
     
    #End Region
     
        Public Property Min() As Integer
            Get
                Return pMin
            End Get
            Set(ByVal Value As Integer)
                pMin = Value
            End Set
        End Property
        Public Property Max() As Integer
            Get
                Return pMax
            End Get
            Set(ByVal Value As Integer)
                pMax = Value
            End Set
        End Property
        Public Property Value() As Integer
            Get
                Return pValue
            End Get
            Set(ByVal Value As Integer)
                pValue = Value
                Me.Invalidate(New Rectangle(0, 0, Me.Width, Me.Height))
                Application.DoEvents()
            End Set
        End Property
        Public Sub StepOne()
            Me.Value += 1
        End Sub
        Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
            MyBase.OnPaint(e)
            Drawbar(e)
        End Sub
        Protected Sub Drawbar(ByVal e As System.Windows.Forms.PaintEventArgs)
            Dim Pct As Single = pValue / pMax * 100
            'If Pct > 0 Then
            Dim Len As Single = pValue / pMax * Me.Width
            Dim b As Brush = New System.Drawing.SolidBrush(Color.Red)
            e.Graphics.DrawLine(New Pen(Me.ForeColor, Me.Height), 0, 0, Len, 0)
            e.Graphics.DrawString(Pct.ToString & " % Done", Me.Font, b, 0, 0)
            b.Dispose()
            'End If
        End Sub
    End Class
    paste and execute simplement
    bon code.....

  12. #12
    Membre expérimenté Avatar de anonymousse
    Profil pro
    Inscrit en
    Février 2011
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 130
    Par défaut
    bonsoir thibab,

    Actuellement elle sont vertes et j'aurais voulu qu'elle change de couleur (rouge) lorsque la propriété Value arrivait à 80%.
    j'avais compris que tu voulais simplement changer la couleur entière de la barre de progression si elle arrivait à 80%.

    En fait, tu veux qu'elle reste verte jusqu'à 80% et passe rouge entre 80% et 100% ? un affichage à "étage" quoi type jauge ou vumètre ?

    question à MABROUKI : c'est ce que fait ton code ? parce que ça m'intéresse...

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 56
    Par défaut
    Bonsoir Anonymousse,
    Non, je veux simplement qu'elle passe en rouge, entièrement. Car si c'est seulement la partie situéée entre 80 et 100% ça risque de ne pas être assez percutant.
    Sinople m'a donné quelques liens et j'ai trouvé mon bonheur la dedans.
    Merci à tous

    @+
    Thierry

  14. #14
    Membre expérimenté Avatar de anonymousse
    Profil pro
    Inscrit en
    Février 2011
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 130
    Par défaut
    bonsoir thibab,

    je reviens sur la remarque de Tomlev :

    Ca ne marchera pas, la ProgressBar est dessinée par l'OS, qui ne tient pas compte de la propriété ForeColor...
    car ce que je t'avais proposé fonctionne nickel (je te donnes la version complète que j'utilise) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                    ProgressBar1.Maximum = Max ' à définir
                    ProgressBar1.Value = Valeur ' à incrémenter
                    If ProgressBar1.Value / ProgressBar1.Maximum >= 0.8 Then
                        ProgressBar1.ForeColor = Color.Red
                    Else
                        ProgressBar1.ForeColor = Color.Green
                    End If
    bon code

  15. #15
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 66

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut changer la couleur,oui
    bonjour anonymousse
    Non il ne le fait pas.C'est pour ca que je lui ai dit qu'il doit rajouter la fonctionnalite.
    C'est assez simple pour avoir cette fonctionnalite:
    -prop AlarmPercent(pourcentage d'alarme desiree)
    -prop AlarmColor (couleur alarme desiree)
    changer la sub draw pour tenir compte de cet etat de fait.
    code revisee de la forme pour l'utilisateur:
    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
     
    'version forme utilisateur pour MonProgBar revu pour Alarm
    Public Class Form1
        Inherits System.Windows.Forms.Form
     
    #Region " Windows Form Designer generated code "
     
        Public Sub New()
            MyBase.New()
     
            'This call is required by the Windows Form Designer.
            InitializeComponent()
     
            'Add any initialization after the InitializeComponent() call
     
        End Sub
     
        'Form overrides dispose to clean up the component list.
        Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
            If disposing Then
                If Not (components Is Nothing) Then
                    components.Dispose()
                End If
            End If
            MyBase.Dispose(disposing)
        End Sub
     
        'Required by the Windows Form Designer
        Private components As System.ComponentModel.IContainer
     
        'NOTE: The following procedure is required by the Windows Form Designer
        'It can be modified using the Windows Form Designer.  
        'Do not modify it using the code editor.
        Friend WithEvents MyProgBar1 As Progressbar.MonProgBar
        Friend WithEvents Button1 As System.Windows.Forms.Button
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
            Me.Button1 = New System.Windows.Forms.Button
            Me.MyProgBar1 = New Progressbar.MonProgBar
            Me.SuspendLayout()
            '
            'Button1
            '
            Me.Button1.Location = New System.Drawing.Point(72, 132)
            Me.Button1.Name = "Button1"
            Me.Button1.Size = New System.Drawing.Size(108, 30)
            Me.Button1.TabIndex = 1
            Me.Button1.Text = "Button1"
            '
            'MyProgBar1
            '
            Me.MyProgBar1.AlarmColor = System.Drawing.Color.Empty
            Me.MyProgBar1.BackColor = System.Drawing.SystemColors.Control
            Me.MyProgBar1.Location = New System.Drawing.Point(48, 30)
            Me.MyProgBar1.Max = 100
            Me.MyProgBar1.Min = 0
            Me.MyProgBar1.Name = "MyProgBar1"
            Me.MyProgBar1.AlarmPercent = 80
            Me.MyProgBar1.Size = New System.Drawing.Size(174, 30)
            Me.MyProgBar1.TabIndex = 0
            Me.MyProgBar1.Value = 0
            '
            'Form1
            '
            Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
            Me.ClientSize = New System.Drawing.Size(292, 243)
            Me.Controls.Add(Me.Button1)
            Me.Controls.Add(Me.MyProgBar1)
            Me.ForeColor = System.Drawing.SystemColors.HotTrack
            Me.Name = "Form1"
            Me.Text = "Form1"
            Me.ResumeLayout(False)
     
        End Sub
     
    #End Region
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim i As Integer
            MyProgBar1.Value = 0
            MyProgBar1.ForeColor = Color.Blue
            MyProgBar1.AlarmColor = Color.Red
            MyProgBar1.AlarmPercent = 80
            For i = 1 To 100
                Threading.Thread.Sleep(100)
                MyProgBar1.Value += 1
            Next
        End Sub
    End Class
    code du usercontrol :
    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
     
     
    'version  MonProgBar revu pour Alarm
    Public Class MonProgBar
        Inherits System.Windows.Forms.UserControl
        Protected pMin As Integer
        Protected pMax As Integer
        Protected pValue As Integer
        Protected pAlarmColor As Color
        Private pAlarmPercent As Integer
    #Region " Windows Form Designer generated code "
     
        Public Sub New()
            MyBase.New()
     
            'This call is required by the Windows Form Designer.
            InitializeComponent()
     
            'Add any initialization after the InitializeComponent() call
     
        End Sub
     
        'UserControl overrides dispose to clean up the component list.
        Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
            If disposing Then
                If Not (components Is Nothing) Then
                    components.Dispose()
                End If
            End If
            MyBase.Dispose(disposing)
        End Sub
     
        'Required by the Windows Form Designer
        Private components As System.ComponentModel.IContainer
     
        'NOTE: The following procedure is required by the Windows Form Designer
        'It can be modified using the Windows Form Designer.  
        'Do not modify it using the code editor.
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
            '
            'MyProgBar
            '
            Me.Name = "MyProgBar"
            Me.Size = New System.Drawing.Size(150, 48)
     
        End Sub
     
    #End Region
     
        Public Property Min() As Integer
            Get
                Return pMin
            End Get
            Set(ByVal Value As Integer)
                pMin = Value
            End Set
        End Property
        Public Property Max() As Integer
            Get
                Return pMax
            End Get
            Set(ByVal Value As Integer)
                pMax = Value
            End Set
        End Property
        Public Property Value() As Integer
            Get
                Return pValue
            End Get
            Set(ByVal Value As Integer)
                pValue = Value
                Me.Invalidate(New Rectangle(0, 0, Me.Width, Me.Height))
                Application.DoEvents()
            End Set
        End Property
        Public Property AlarmColor() As Color
            Get
                Return pAlarmColor
            End Get
            Set(ByVal value As Color)
                pAlarmColor = value
            End Set
        End Property
     
        Public Property AlarmPercent() As Integer
            Get
                Return pAlarmPercent
            End Get
            Set(ByVal value As Integer)
                pAlarmPercent = value
            End Set
        End Property
        Public Sub StepOne()
            Me.Value += 1
        End Sub
        Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
            MyBase.OnPaint(e)
            Drawbar(e)
        End Sub
        Protected Sub Drawbar(ByVal e As System.Windows.Forms.PaintEventArgs)
            Dim Pct As Single = pValue / pMax * 100
            'dessin ligne si Value < AlarmPercent avec AlarmColor
            If Pct < Me.AlarmPercent Then
                Dim Len As Single = pValue / pMax * Me.Width
                Dim b As Brush = New System.Drawing.SolidBrush(Color.Red)
                e.Graphics.DrawLine(New Pen(Me.ForeColor, Me.Height), 0, 0, Len, 0)
                e.Graphics.DrawString(Pct.ToString & " % Done", Me.Font, b, 0, 0)
                b.Dispose()
                'dessin ligne si Value=AlarmPercent avec AlarmColor
            Else
                Dim lenPercent As Single = Me.AlarmPercent / pMax * Me.Width
                Dim Len As Single = pValue / pMax * Me.Width
                Dim b As Brush = New System.Drawing.SolidBrush(Color.Red)
                'continue dessin pour Value < AlarmPercent
                e.Graphics.DrawLine(New Pen(Me.ForeColor, Me.Height), 0, 0, Len, 0)
                'la suite pour Value >= AlarmPercent
                e.Graphics.DrawLine(New Pen(Me.AlarmColor, Me.Height), lenPercent, 0, Len, 0)
                e.Graphics.DrawString(Pct.ToString & " % Done", Me.Font, b, 0, 0)
                b.Dispose()
            End If
        End Sub
    End Class
    alors mousse tu pourrais aussi exposer en Prop :
    -le Brush du texte(dim b as Brush est inaccessible à l'user) ce qui permettrait de changer la couleur du texte
    -pourquoi pas le font (en limitant les tailles avec if value > dans prop Font).
    Enfin on pourrait dessiner tiens des rectangles comme microsoft mais il faut ajouter dans notre control progressbar :
    -une collection qui stocke les -n-rectangles(exemple:n=50)
    -une sub qui initialise le rectangle modele avec width =100/50=2 ,Height du controle et en stocke 50 exemplaires
    -dans Drawbar parcourir la collection et dessiner les rectangles à la queue leu leu.

    bon code......

  16. #16
    Membre expérimenté Avatar de anonymousse
    Profil pro
    Inscrit en
    Février 2011
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 130
    Par défaut
    bonsoir mabrouki,

    ce que tu proposes est effectivement très bien, merci pour nous (pour moi en tout cas, ça va me servir !).

    mais mon code fait exactement ce que veut thibab :

    Bonsoir Anonymousse,
    Non, je veux simplement qu'elle passe en rouge, entièrement. Car si c'est seulement la partie situéée entre 80 et 100% ça risque de ne pas être assez percutant.
    Sinople m'a donné quelques liens et j'ai trouvé mon bonheur la dedans.
    Merci à tous
    testes le et tu verra, je l'utilise tel que.

  17. #17
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 259
    Par défaut
    anonymouse >> ton code ne marche que si les styles visuels sont désactivés.

    Tomlev a raison, quand les styles visuels sont activés, c'est Windows qui dessine lui-même la progressbar sans tenir compte de certains paramétrages du controle.

    Et pour avoir une progressbar au style Marquee (comme k2000), il faut activer les styles visuels
    Pour avoir les nouveaux styles de W7, aussi.

  18. #18
    Membre expérimenté Avatar de anonymousse
    Profil pro
    Inscrit en
    Février 2011
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 130
    Par défaut
    bonsoir sevyc64,

    mea culpa : tu as (ainsi que Tomlev) tout à fait raison, j'avais fait une mauvaise manip en changeant le style pour passer en XP.

    là est la différence entre les PROS et les amateurs !

    merci de m'avoir rabattu les oreilles ! ça m'a poussé à réessayer ma manip.

    Bon thibab ... supprimes ce foutu visuel XP et en 3 lignes le tour est joué !

    bonne soirée à tous (sans rancunes !)

  19. #19
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    ça tergiverse quand même, ce qu'il lui faut c'est pas un progressbar mais une jauge, et on lui en a trouvé ...
    et en dérivant le code de mabrouki pour avoir plusieurs zones de couleur ca fait l'affaire aussi
    le framework ne peut pas tout contenir et certains controles métiers sont à ajouter soi même
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  20. #20
    Invité de passage
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1
    Par défaut
    Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _
    (ByVal hWnd As IntPtr, ByVal wCmd As Integer, _
    ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr




    SendMessage(progressbar1.Handle, 1040, 2, 0)

    1=vert
    2=rouge
    3=jaune

    la reponse est en retard de 3 ans mais si sa peut servire !!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Changer la couleur d'une ProgressBar
    Par Kemanke dans le forum C++/CLI
    Réponses: 5
    Dernier message: 28/04/2009, 09h44
  2. changer la couleur d'une ProgressBar
    Par a_lincoln54 dans le forum C++Builder
    Réponses: 4
    Dernier message: 03/11/2008, 03h38
  3. Réponses: 7
    Dernier message: 28/06/2005, 11h53
  4. Réponses: 8
    Dernier message: 14/05/2004, 11h18
  5. [VB6]Changer la couleur d'une ligne d'un ListView
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 14/03/2003, 17h02

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