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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé 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
    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;

  2. #2
    Membre éclairé 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
    Par défaut
    personne??

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    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 491
    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

  4. #4
    Membre éclairé 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
    Par défaut
    pour ça il faut utiliser degrade et je ne l'ai pas :s

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    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 491
    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

  6. #6
    Membre éclairé 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
    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

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