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 :

TREEVIEW : changer la couleur d'un node en fonction du texte qu'il contient


Sujet :

Composants VCL Delphi

  1. #1
    Membre habitué

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Direction financière et formateur en gestion et contrôle de gestion
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2003
    Messages : 194
    Points : 127
    Points
    127
    Par défaut TREEVIEW : changer la couleur d'un node en fonction du texte qu'il contient
    Bonjour à tous,
    Mince, j'ai posté ma demande initiale dans Accueil / Index du forum / Environnements de développement / Delphi, je la reposte sous ... / Delphi / Composants VCL

    Je débute avec les TrieView et je patauge ...
    J'ai une application qui comporte un TrieView avec des nodes parent et enfants.
    Je souhaiterai faire une recherche dans le TrieView et mettre dans une couleur différente les nodes qui contiennent le texte recherché.
    Facile avec tous les composants ... mais avec les TrieView ...
    Pour la recherche j'ai trouvé le code suivant qui recherche bien la chaine de caractère mais il ne va pas plus loin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Type
        TFindTree_Sens=(Up,Down); // sens de la recherche (vers le début ou la fin de l'arborescence)
    blablabla ... déclaration ....
    note : FindTree_Depart = départ de l'arborescence : 0=début ou ailleurs dans la liste. est déclaré en variable globale

    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
    function TForm2.FindTreeText(Depart:Integer; FindTree_Sens:TFindTree_Sens; AText: string): TTreeNode;
    var
       iLoop: integer;
       S,S1:String;
    begin
        result := nil;
        if not Assigned(TreeView1) then
        exit;
     
        if TreeView1.Items.Count > 0 then
        begin
            if FindTree_Sens=Down // vers la fin
            then begin
                for iLoop := Depart to Pred(TreeView1.items.Count) do
                begin
                    S:=Trim(TreeView1.Items[iLoop].Text);
                    if AnsiContainsText(S,Edit2.Text)=true
                    then begin
                         Result := TreeView1.Items[iLoop];
                         FindTree_Depart:=iLoop;
                         Break;
                    end;
                end;
            end
            else begin
                for iLoop := Depart downTo 0 do  // vers le début
                begin
                    S:=Trim(TreeView1.Items[iLoop].Text);
                    if AnsiContainsText(S,Edit2.Text)=true
                    then begin
                         FindTree_Depart:=iLoop;
                         TreeSearch:=true;
                         TreeSearch:=false;
                         Result := TreeView1.Items[iLoop];
                         Break;
                    end;
                end;
     
            end;
        end;
    end;
    Et j'appelle le code avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm2.Image1Click(Sender: TObject);
    begin
        Node := FindTreeText(0,Down,Edit2.Text);
        if Node <> nil
        then TreeView1.Selected := Node   // Ca ne sélectionne rien du tout
        else ShowMessage('Non trouvé');
    end;
    Merci à tous de votre aide

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 730
    Points : 5 391
    Points
    5 391
    Par défaut
    Avec l'événement OnCustomDrawItem :

    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TFSampleForm.TVCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
    begin
      if (TextToFind <> '') and (Pos(TextToFind, Node.Text) > 0) then
      begin
        with Sender as TCustomTreeView do
        begin
          Canvas.Brush.Color := clBlack; // Couleur du fond
          Canvas.Font.Color := clWhite // Couleur du texte
        end;
      end;
    end;

  3. #3
    Membre habitué

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Direction financière et formateur en gestion et contrôle de gestion
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2003
    Messages : 194
    Points : 127
    Points
    127
    Par défaut
    Et bien c'est tout simplement parfait!
    du coup, je peux simplifier mon code puisque maintenant les occurrences sont surlignées

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Changer la couleur d'une cellule en fonction du contenu
    Par titourock dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 16/09/2009, 16h29
  2. Changer la couleur de la bordure d'un input text
    Par Gregory.M dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 28/10/2008, 17h18
  3. Changer la couleur de fond et la police du texte d'un GtkEntry ?
    Par kitsune dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 25/06/2007, 12h22
  4. [Treeview] Changer le parent d'un Node
    Par Aloneghost dans le forum Delphi
    Réponses: 2
    Dernier message: 07/01/2007, 06h25

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