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

Composants VCL Delphi Discussion :

dégradé sur une listbox avec 1/2 couleurs


Sujet :

Composants VCL Delphi

  1. #1
    Membre habitué Avatar de avogadro
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 412
    Points : 188
    Points
    188
    Par défaut dégradé sur une listbox avec 1/2 couleurs
    bonjour,

    j'ai trouvé quelques procédure pour déssiner sur des forms etc.. et dans les manipulations revenait plusieurs commandes, j'ai donc essayer d'en faire une a ma sauce pour faire un dégradé sur une listbox, mon code par contre ne marche pas, la couleur initial de la listbox reste la meme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
         for x := 0 to ListBox1.Height do
         begin
           ListBox1.Canvas.Pen.color := RGB(0,x,0);
           ListBox1.Canvas.MoveTo(0,x);
           ListBox1.Canvas.LineTo(ListBox1.Width,x);
           ListBox1.Repaint;
           ListBox1.Refresh;
         end;
    =-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=
    (\_/)
    (O.o)
    (> <)
    This is Bunny. Copy Bunny into your signature to help him on his way to world domination!!
    =-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=

  2. #2
    Membre habitué Avatar de avogadro
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 412
    Points : 188
    Points
    188
    Par défaut
    personne??
    =-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=
    (\_/)
    (O.o)
    (> <)
    This is Bunny. Copy Bunny into your signature to help him on his way to world domination!!
    =-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut

    utilise la methode drawitem

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     Procedure Tmaform.ListBox1DrawItem(Control: TWinControl;  Index: Integer; Rect: TRect; State: TOwnerDrawState);
      begin
     with Sender as TListbox do
     begin
     // erase
     Canvas.FillRect (Rect);
     // draw item
     Canvas.Font.Color :=    TColor (Items.Objects[Index]);
     Canvas.TextOut(Rect.Left, Rect.Top,Items[Index]);
     Degrade(Canvas,ColorDeb,ColorFin);
     if (odFocused in State) and (odSelected in State) then
        Canvas.DrawFocusRect(Rect);
    end;
    end;
    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  4. #4
    Membre habitué Avatar de avogadro
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 412
    Points : 188
    Points
    188
    Par défaut
    pour ça il faut utiliser degrade et je ne l'ai pas :s
    =-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=
    (\_/)
    (O.o)
    (> <)
    This is Bunny. Copy Bunny into your signature to help him on his way to world domination!!
    =-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut

    degrade c'est une bete fonction qui va degrader un canvas
    d'une couleur A à une couleur B

    je ne l'est pas mis
    je pensai que tu savait faire

    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
     
    Type
      TRGbColor = Record
        R : word;
        G : word;
        B :  word;
      end;
    procedure Degrade(Canvas : Tcanvas;Arect : Trect;fromColor, toColor: TColor);
    var
      aBand        : TRect; { Bande rectangulaire de couleur courante }
      i, nbDgrad   : integer; { Compteur pour parcourir la hauteur de la fiche }
      RGB_Start : TRGbColor; { RGB de la couleur de départ }
      RGB_Dif   : TRGbColor; { RGB à ajouter à la couleur de départ pour atteindre la couleur de fin }
      RGB_Cur   : TRGbColor; { RGB de la couleur courante }
    begin
     // Calcul des valeurs RGB pour la couleur courante
      RGB_Start.R := GetRValue(ColorToRGB(fromColor));
      RGB_Start.G := GetGValue(ColorToRGB(fromColor));
      RGB_Start.B := GetBValue(ColorToRGB(fromColor));
     
      // Calcul des valeurs à ajouter pour atteindre la couleur de fin
      RGB_Dif.R := GetRValue(ColorToRGB( toColor )) - RGB_Start.R ;
      RGB_Dif.G := GetgValue(ColorToRGB( toColor )) - RGB_Start.G ;
      RGB_Dif.B := GetbValue(ColorToRGB( toColor )) - RGB_Start.B ;
     
      With Canvas do
      begin
        Pen.Style := psSolid;
        Pen.Mode := pmCopy;
        Pen.Width := 1;
        nbDgrad := 255;
     
        if ARect.Bottom - ARect.Top < 255 then
          nbDgrad := ARect.Bottom - ARect.Top;
     
        for i:= 0 to nbDgrad do // Degradé de um max. de 255 cores ...
        begin
          aBand.Left   := ARect.Left;
          aBand.Right  := ARect.Right;
          aBand.Top    := ARect.Top + MulDiv(i   , ARect.Bottom - ARect.Top, nbDgrad+1 );
          aBand.Bottom := ARect.Top + MulDiv(i+1 , ARect.Bottom - ARect.Top, nbDgrad+1 );
     
         // Calcul de la couleur courante
          RGB_Cur.R := (RGB_Start.R + MulDiv( i, RGB_Dif.R, nbDgrad ));
          RGB_Cur.G := (RGB_Start.G + MulDiv( i, RGB_Dif.G, nbDgrad ));
          RGB_Cur.B := (RGB_Start.B + MulDiv( i, RGB_Dif.B, nbDgrad ));
          Brush.color:=RGB(RGB_Cur.R,RGB_Cur.G, RGB_Cur.B);
          FillRect(aBand);
        end;
      end;
    end;
    @+ Phil

    PS : attention il faut que tu calcul les couleur de deb et de fin selon item ou il se trouve
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  6. #6
    Membre habitué Avatar de avogadro
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 412
    Points : 188
    Points
    188
    Par défaut
    wahou, pas super facile pour un dégradé, et sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Degrade(Canvas,ColorDeb,ColorFin);
    il y a je pense trop de paramètre selon la fonction et colordeb je ne sais pas ce que ça représente :s pck il n'est pas déclaré en plus... de la couleur donc je pense un integer enfin la je sais pas, j'ai jamais manipuler des couleurs en codages comme ça sous delphi alors je sais pas

    apres si je la déclare comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var
       colordeb: TColor;
    il y a type incompatible trect et tcolor
    =-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=
    (\_/)
    (O.o)
    (> <)
    This is Bunny. Copy Bunny into your signature to help him on his way to world domination!!
    =-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut

    modifie cet ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Degrade(Canvas,ColorDeb,ColorFin);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Degrade(Canvas,Rect,ColorDeb,ColorFin);
    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  8. #8
    Membre habitué Avatar de avogadro
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 412
    Points : 188
    Points
    188
    Par défaut
    et je let défini en leur attribuant une valeur genre

    couleurdeb := clblack;
    couleurfin := cllime; ???
    =-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=
    (\_/)
    (O.o)
    (> <)
    This is Bunny. Copy Bunny into your signature to help him on his way to world domination!!
    =-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=

  9. #9
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut

    d'apres toi ?
    en fait cela depend de ce que tu veut faire
    si Tu veut un degrader sur toutes la hauteur de ton listbox
    il faut que tu recherche la couleur de debut et de fin de chaque item
    en fait il suffit de faire un peut
    comme j'ai fait pour le degrader final
    ce qui reviendra a calculer come je l'ai fait pour le degrader de chaque item

    donc tu as ta couleur de debut et ta couleur de fin global
    que tu subdivise en couleur de debut et de fin pour chaque item
    la formule et la meme
    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
     
    Procedure Tmaform.ListBox1DrawItem(Control:TWinControl;Index:Integer;Rect:TRect;State:TOwnerDrawState);
     begin
     with Sender as TListbox do
     begin
     // erase
       Canvas.FillRect (Rect);
     // draw item 
      Canvas.Font.Color :=    TColor      (Items.Objects[Index]);
      Canvas.TextOut(Rect.Left, Rect.Top,Items[Index]);
      nbITEM := ItemCount;
      if Index >0 Then
        Indic1 :=  Index-1 ;
     
      if Index < nbITEM Then
        Indic2 :=  Index+1 ;
     
     
    if Index >0 Then
    begin
    GLORGB_Cur.R:=(GLORGB_Start.R+MulDiv(Indic1,GLORGB_Dif.R,nbITEM));      
    GLORGB_Cur.G:=(GLORGB_Start.G+MulDiv(Indic1,GLORGB_Dif.G,nbITEM));
    GLORGB_Cur.B:=(GLORGB_Start.B+MulDiv(Indic1,GLORGB_Dif.B,nbITEM));
    ColordebLoc:=RGB(GLORGB_Cur.R,GLORGB_Cur.G,GLORGB_Cur.B);
    end
    else
     ColordebLoc:=GloBalCordeb;//(couleur windows)
    if Index < nbITEM Then
    Begin
    GLORGB_Cur.R:=(GLORGB_Start.R+MulDiv(Indic2,GLORGB_Dif.R,nbITEM));      
    GLORGB_Cur.G:=(GLORGB_Start.G+MulDiv(Indic2,GLORGB_Dif.G,nbITEM));
    GLORGB_Cur.B:=(GLORGB_Start.B+MulDiv(Indic2,GLORGB_Dif.B,nbITEM));
    ColorfinLoc:=RGB(GLORGB_Cur.R,GLORGB_Cur.G,GLORGB_Cur.B);
    end
    else
     ColorfinLoc:=GloBalCorfin;//(couleur windows)
     
     Degrade(Canvas,rect,ColordebLoc,ColorfinLoc);
    ...
    end;
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

Discussions similaires

  1. Simuler une listbox avec des couleurs
    Par Invité dans le forum Contribuez
    Réponses: 9
    Dernier message: 19/03/2020, 20h49
  2. [CSS 3] Dégradé sur une image avec linear-gradient
    Par comode dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 22/08/2012, 17h06
  3. MVVM - Problème pour Autoscroll sur une ListBox avec du databinding
    Par caramel dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 18/11/2011, 14h29
  4. Dégradé sur une chaine de caractères avec 3 a 4 couleurs
    Par avogadro dans le forum Composants VCL
    Réponses: 6
    Dernier message: 31/03/2006, 13h21
  5. Erreur sur une fonction avec des paramètres
    Par Elois dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/05/2004, 21h00

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