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

C++Builder Discussion :

Remplir un VirtualTreeView


Sujet :

C++Builder

  1. #1
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    54
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 54
    Par d�faut Remplir un VirtualTreeView
    Bonjour, j'esp�re que certains ici connaissent le composant de Soft Gems (VirtualTreeView).

    J'essaie de l'utiliser pour la premi�re fois sour C++ Builder 6.
    Ma premi�re t�che simple est de rajouter des lignes (nodes) dans mon VirtualTreeView avec si possible les diff�rentes valeurs sous les colonnes (Header). Malheureusement je n'ai � disposition que des d�mos pour Delphi et je peine � traduire le tout pour C++ Builder.

    Tout d'abord j'ai traduit le Record de Delphi n�cessaire au stockage des donn�es par cette d�claration:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    struct TreeData
      {
      String Caption;
      };
    TreeData *DataTree;
    puis j'ai vu dans la d�mo qu'il fallait fournir � l'arbre les moyens de g�rer/rafra�chir l'affichage des valeurs � partir des donn�es de mon struct � travers les proc�dures InitNode et Get Text dont voila les versions Delphi:


    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
    procedure TMainForm.VSTInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode;
      var InitialStates: TVirtualNodeInitStates);
     
    var
      Data: PMyRec;
     
    begin
      with Sender do
      begin
        Data := GetNodeData(Node);
        // Construct a node caption. This event is triggered once for each node but
        // appears asynchronously, which means when the node is displayed not when it is added.
        Data.Caption := Format('Level %d, Index %d', [GetNodeLevel(Node), Node.Index]);
      end;
    end;
    et
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TMainForm.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
      var Text: WideString);
     
    var
      Data: PMyRec;
     
    begin
      // A handler for the OnGetText event is always needed as it provides the tree with the string data to display.
      // Note that we are always using WideString.
      Data := Sender.GetNodeData(Node);
      if Assigned(Data) then
        Text := Data.Caption;
    end;
    Que j'ai traduit (pour le d�but) en C++ Builder par:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void __fastcall TForm3::VSTInitNode(TBaseVirtualTree *Sender,
          PVirtualNode ParentNode, PVirtualNode Node,
          TVirtualNodeInitStates &InitialStates)
    {
    TreeData *Data;
     
            Data=Sender->GetNodeData(Node);
     
     
    }
    Mais je chope une erreur � la compilation:
    [C++ Erreur] Unit3.cpp(245): E2034 Impossible de convertir 'void *' en 'TreeData *'
    Et effectivement il est logique que la fonction GetNodeData ne renvoyant qu'un pointeur vide, je ne puisse remplir mes donn�es avec ! Mais comment Delphi fait-il pour que cel� fonctionne ?
    Quelqu'un a une id�e ?

  2. #2
    R�dacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Par d�faut
    Tu as essay� de caster le r�sultat de GetNodeData tout simplement ?

  3. #3
    R�dacteur
    Avatar de dvsoft
    Homme Profil pro
    Architecte technique
    Inscrit en
    Ao�t 2002
    Messages
    176
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : Architecte technique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2002
    Messages : 176
    Par d�faut
    Bonjour,

    Comme le dit Greybird, il faut faire un cast

    DBclik dans l'inspecteur d'objets, sur l'envenement OnGetText, Builder te
    produit le code suivant

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void __fastcall TForm1::VirtualStringTree1GetText(TBaseVirtualTree *Sender,
          PVirtualNode Node, TColumnIndex Column, TVSTTextType TextType,
          WideString &CellText)
    {
        //--- Ajoute ton code
       TreeData* pTree;
        //--- Cast du Sender
        pTree = ((TreeData*)Sender)->GetNodeData(Node);
        //--- Tester si pointeur NULL
        if (pTree)
            CellText = pTree->Caption;
    }
    Tu doit egalement, si tu en a besoin, biensur, reconstruire le paquet VT_AddOn pour C++Builder6. La version fournie ne fonctionne qu'avec
    C++Builder 5

    Voila
    Bon courrage
    Alain

  4. #4
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    54
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 54
    Par d�faut
    OK �a marche niquel maintenant merci

    Voila mon code final, en switchant sur la valeur de la colonne:

    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
    ptrMyRec Data;
       Data = (MyRec *) Sender->GetNodeData(Node);
       switch (Column) {
          case 0:
             CellText = Data->Name;
             break;
          case 1:
             CellText = IntToStr(Data->idorfirstbit);
             break;
          case 2:
             CellText = IntToStr(Data->lengthorlastbit);
             break;
          case 3:
             CellText = Data->type;
             break;
       }
    P.S: les donn�es sont maintenant de type MyRec.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. remplir des tables a partir de fichiers TXT
    Par jeremie dans le forum MS SQL Server
    R�ponses: 5
    Dernier message: 10/03/2004, 14h50
  2. BCB6 => Remplir un ListView
    Par totofweb dans le forum C++Builder
    R�ponses: 6
    Dernier message: 25/02/2004, 15h12
  3. remplir feuille excel
    Par thibaud60 dans le forum Access
    R�ponses: 2
    Dernier message: 24/11/2003, 10h21
  4. [VB.NET] Cr�er et remplir un nouveau fichier Access
    Par Manue.35 dans le forum Acc�s aux donn�es
    R�ponses: 2
    Dernier message: 18/07/2003, 15h42
  5. [TChart] comment remplir un histogramme avec du rouge stri�.
    Par :GREG: dans le forum Composants VCL
    R�ponses: 2
    Dernier message: 12/08/2002, 09h37

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