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

Langage Delphi Discussion :

un TVirtualStringTree Recalcitrant


Sujet :

Langage Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 091
    Points : 41 064
    Points
    41 064
    Billets dans le blog
    62
    Par défaut un TVirtualStringTree Recalcitrant
    Je dois être fatigué par la chaleur , toujours est-il que j'ai un hic dans ce code , les titres s'initialisent correctement mais j'ai une double image au 3° niveau de l'arbre (en fait j'ai deux images superposées la bonne et celle d'indice 0)

    au pas par pas les valeurs sont correctes

    une idée de mon erreur ?
    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
    type
      PTreeData = ^TTreeData;
      TTreeData = Record
        I : Integer; // the image index of the node
        RecKey : Integer; // Clé Primaire
        Table : Integer;
        Name: string ;      // the identifier of the node
      end;
    ...
    procedure TClient.PageControl1Change(Sender: TObject);
    var CNode  : PVirtualNode;
        DNode : PTreeData;
    
        procedure GetDetail(ANode : PVirtualNode);
        var PNode,INode  : PVirtualNode;
            DNode : PTreeData;
        begin
         TDetails.Active:=True;
         while not TDetails.Eof do
         begin
    // 2° niveau
           if TDetails.FieldByName('N').AsInteger=0 then
             begin
              PNode:=vTree.AddChild(Anode);
              DNode:=vTree.GetNodeData(PNode);
              DNode.Name:=Format('Intervention N°%.5d du %s %s',
                          [TDetails.FieldByName('I').asInteger,
                           FormatDateTime('dd/mm/yy',TDetails.FieldByName('DATE_INTERVENTION').asDateTime),
                           TDetails.FieldByName('NOM').asString]);
              DNode.Table:=1;
              DNode.I:=3;
              DNode.RecKey:=TDetails.FieldByName('I').asInteger;
             end
           // troisième niveau
           else begin 
              // il me fait ici des doubles images
              // et ce , uniquement avec des valeurs d'index >=4   
              if not Assigned(Pnode) then PNode:=ANode;
              INode:=vTree.AddChild(PNode);
              DNode:=vTree.GetNodeData(INode);
              DNode.RecKey:=TDetails.FieldByName('N').asInteger;
              DNode.Table:=2;
              case TDetails.FieldByName('TYPE_DETAIL').asInteger of
                0 : begin
                    DNode.Name:=Format('M.O./Déplacements %25s %3.2f',
                                       [TDetails.FieldByName('NOM').asString,
                                        TDetails.FieldByName('MONTANT').asCurrency]);
                    DNode.I:=4;
                    end;
                1 : begin
                    DNode.Name:=Format('Fournitures %25s %3.2f',
                                       [TDetails.FieldByName('NOM').asString,
                                        TDetails.FieldByName('MONTANT').asCurrency]);
                    DNode.I:=5;
                    end;
                else begin
                    DNode.Name:=Format('Autre %25s %3.2f',
                                       [TDetails.FieldByName('REF').asString,
                                        TDetails.FieldByName('MONTANT').asCurrency]);
                    DNode.I:=6;
                end;
              end;
           end;
           TDetails.Next;
         end;
         TDetails.Active:=False;
        end;
    
    procedure TClient.VTreeGetImageIndex(Sender: TBaseVirtualTree;
      Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
      var Ghosted: Boolean; var ImageIndex: Integer);
    var Data: PTreeData;
    begin
      Data:=Sender.GetNodeData(Node);
      ImageIndex:=Data.i;
    end;
    
    procedure TClient.VTreeGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
      Column: TColumnIndex; TextType: TVSTTextType; var CellText: string);
    var Data: PTreeData;
    begin
      Data:=Sender.GetNodeData(Node);
      CellText:=Data.Name;
    end;
    [EDIT] une piste peut-être , en fait si je mets des valeurs d'index image >=4 il me le fait et ce quelque soit le niveau
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2007
    Messages : 91
    Points : 95
    Points
    95
    Par défaut

    je ne vois pas d'ou vient l'erreur !! j'ai seulement quelques remarques.
    est-ce que le TimageList associé à VTree a des images avec index >=4 ?
    combien de columns comporte VTree ? si c'est plus qu'un tu dois préciser dans quelle cellule sera afficher l'image:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TClient.VTreeGetImageIndex(Sender: TBaseVirtualTree;
      Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
      var Ghosted: Boolean; var ImageIndex: Integer);
    var Data: PTreeData;
    begin
     if Column = VTree.Header.MainColumn then
     begin
      Data:=Sender.GetNodeData(Node);
      ImageIndex:=Data.i;
     end;
    end;
    est-ce la procedure GetDetail est imbriquée dans TClient.PageControl1Change si c'est oui pourquoi a tu déclarer la même variable DNode : PTreeData;
    dans les deux et avant GetDetail ?

    si tout est OK peut-être que l'erreur et dans TDetails
    Salut..

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 091
    Points : 41 064
    Points
    41 064
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par J_apprenti Voir le message
    est-ce que le TimageList associé à VTree a des images avec index >=4 ?
    Oui , quand même je ne suis pas à ce point là
    combien de columns comporte VTree ? si c'est plus qu'un tu dois préciser dans quelle cellule sera afficher l'image
    Qu'une seule dans ma simplification

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if Column = VTree.Header.MainColumn then ...
    ce truc je connaissais pas , j'utilisais toujours par la valeur , c'est mieux, merci

    est-ce la procedure GetDetail est imbriquée dans TClient.PageControl1Change si c'est oui pourquoi a tu déclarer la même variable DNode : PTreeData;
    dans les deux et avant GetDetail ?
    Oui, là y a un doublon pas beau

    SOLUTIONNE en rajoutant un test sur Kind
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure TClient.VTreeGetImageIndex(Sender: TBaseVirtualTree;
      Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
      var Ghosted: Boolean; var ImageIndex: Integer);
    var Data: PTreeData;
    begin
      Data:=Sender.GetNodeData(Node);
      if (Kind in [ikNormal,ikSelected]) then ImageIndex:=Data.i;
    end;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2007
    Messages : 91
    Points : 95
    Points
    95
    Par défaut
    Salut..
    tant mieux que c'est résolu, heureux pour Einstein

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

Discussions similaires

  1. .htpasswd recalcitrant !
    Par dede92 dans le forum Apache
    Réponses: 4
    Dernier message: 24/11/2008, 05h47
  2. Réponses: 6
    Dernier message: 21/10/2008, 09h56
  3. Utilisation de TVirtualStringTree
    Par J_apprenti dans le forum Delphi
    Réponses: 2
    Dernier message: 09/04/2007, 22h28
  4. [JScrollPane] Recalcitrant
    Par Bideul dans le forum Composants
    Réponses: 37
    Dernier message: 09/06/2005, 14h29
  5. [VB6] enabled récalcitrant
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 04/12/2002, 10h09

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