+ Répondre à la discussion Actualité déjà publiée
  1. #1
    Responsable Delphi

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    février 2013
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2013
    Messages : 1 116
    Points : 13 913
    Points
    13 913
    Billets dans le blog
    34

    Par défaut Mettre de la couleur dans un TListView avec l'utilisation de l'apparence dynamique

    Chers membres du club,

    Nous avons le plaisir de publier un nouveau tutoriel proposé par Serge Girard.


    Mettre en exergue, via une couleur de fond, l'élément d'un TListView est une demande fréquemment formulée dans les forums consacrés à Delphi. Les solutions proposées ne sont pas toujours faciles à mettre en œuvre, car, contrairement à une liste simple de type TListBox, il n'est pas possible de passer par des styles personnalisés pour le faire.

    L'apparition de l'apparence dynamique d'un élément de liste avec la version Berlin 10.1, ainsi que les compétences techniques et pédagogiques de Serge Girard vont vous permettre de résoudre ce problème très simplement !

    http://serge-girard.developpez.com/t...ings/ListView/

    Nom : serge.PNG
Affichages : 143
Taille : 9,4 Ko


    Que pensez-vous de ce tutoriel ?

    Quels problèmes rencontrez-vous dans la manipulation des couleurs et des contrôles avec Delphi ?

    Retrouvez les meilleurs cours et tutoriels pour apprendre la programmation Delphi
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  2. #2
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    août 2008
    Messages
    611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 611
    Points : 565
    Points
    565

    Par défaut

    Bonsoir,

    Je tiens à remercier notre ami Serge d'avoir pris le temps de rédiger cet intéressant tutoriel. Il est toujours disponible ce vieux codeur

    Ce tutoriel, je le trouve formidable ! Il est bien expliqué, clair et net.
    Bravo

    Encore merci !

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    10 870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 10 870
    Points : 18 094
    Points
    18 094

    Par défaut

    Intéressant de voir à quel point la même chose avec un VCL TListView fait à l'ancienne n'a rien à voir avec un FMX TListView


    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
    procedure TZooXXXXVCLMainForm.lvColorsClick(Sender: TObject);
    begin
      if Assigned(TListView(Sender).Selected) then
        ShowMessage(TListView(Sender).Selected.Caption);
    end;
     
    procedure TZooXXXXVCLMainForm.lvColorsColumnClick(Sender: TObject; Column: TListColumn);
    var
      Critere: string;
      I: Integer;
    begin
      if InputQuery('Recherche', 'la couleur contient', Critere) then
      begin
        for I := 0 to TListView(Sender).Items.Count - 1 do
        begin
          if ContainsText(TListView(Sender).Items[I].Caption, Critere) then
          begin
            TListView(Sender).Selected := TListView(Sender).Items[I];
            TListView(Sender).Selected.MakeVisible(False);
            Exit;
          end;
        end;
      end;
    end;
     
    procedure TZooXXXXVCLMainForm.lvColorsCustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
     
      function GetConstratedColor(AColor: TColor): TColor;
      var
        H, S, L: Word;
      begin
        ColorRGBToHLS(ColorToRGB(AColor), H, L, S);
        if L > 120 then
        begin
          if L < 168 then
          begin
            if H <= 140 then
            begin
              if (H in [0..20]) or (H in [220..240]) then
                Result := clWhite // Clair sur rouge
              else
                Result := clBlack // Foncé jaune et vert moyen
            end
            else
              Result := clWhite // Clair sur bleu ou violet moyen
          end
          else
            Result := clBlack // Foncé sur Clair
        end
        else
        begin
          if L > 90 then
          begin
            if (H in [0..20]) or (H in [48..240]) then
            begin
              if (S > 200) and (H in [48..128]) then
                Result := clBlack // Vert Citron
              else
                Result := clWhite // Clair sur Marron, Vert, Bleu et Pourpre
            end
            else
              Result := clBlack // Foncé sur le Jaune et Fuschia
          end
          else
            Result := clWhite; // Clair sur Foncé
        end;
      end;
     
     
    var
      ItemRect: TRect;
      ItemText: string;
    begin
      DefaultDraw := False;
      Sender.Canvas.Pen.Color := GetConstratedColor(Item.GroupID);
      Sender.Canvas.Brush.Color := Item.GroupID;
      ItemRect := Item.DisplayRect(drBounds);
      Sender.Canvas.FillRect(ItemRect);
     
      ItemText := Item.Caption;
      Sender.Canvas.Font.Color := GetConstratedColor(Item.GroupID);
      Sender.Canvas.TextRect(ItemRect, ItemText, [tfSingleLine, tfCenter, tfVerticalCenter]);
    end;
     
    procedure TZooXXXXVCLMainForm.ColorCallBack(const AName: String);
    var
      L: Integer;
    begin
      L := Length(FColorArray);
      SetLength(FColorArray, L + 1);
      FColorArray[L].Name := AName;
      FColorArray[L].Value := ColorToRGB(StringToColor(AName));
    end;
     
    procedure TZooXXXXVCLMainForm.lvColorsDblClick(Sender: TObject);
    var
      iWebColor: Integer;
      I, L: Integer;
    begin
      SetLength(FColorArray, 0);
      TListView(Sender).Items.Clear();
     
      Vcl.Graphics.GetColorValues(ColorCallBack);
     
      L := Length(FColorArray);
      SetLength(FColorArray, L + Length(Vcl.GraphUtil.WebNamedColors));
     
      for iWebColor := Low(Vcl.GraphUtil.WebNamedColors) to High(Vcl.GraphUtil.WebNamedColors) do
      begin
        FColorArray[L + iWebColor].Name := Vcl.GraphUtil.WebNamedColors[iWebColor].Name;
        FColorArray[L + iWebColor].Value := ColorToRGB(Vcl.GraphUtil.WebNamedColors[iWebColor].Value);
      end;
     
      SortColorArray(FColorArray, Low(FColorArray), High(FColorArray), stSaturation);
     
      for I := Low(FColorArray) to High(FColorArray) do
        with TListView(Sender).Items.Add() do
        begin
          Caption := FColorArray[I].Name;
          GroupID := FColorArray[I].Value;
        end;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. alterner les couleurs dans un tableau avec xsl
    Par Eithelgul dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 04/05/2015, 00h29
  2. Mettre une couleur dans une cellule avec user form
    Par moilou2 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 10/01/2008, 13h12
  3. mettre de la couleur dans une cellule
    Par Jiraiya42 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 03/06/2005, 11h16

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