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 :

Treeview avec des colonnes [IDE]


Sujet :

C++Builder

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Par d�faut Treeview avec des colonnes
    Bonjour,

    je travaille avec C++ builder XE.
    je cherche un composant Treeview dans lequel il y aurait des colonnes.
    Je m'explique : j'ai besoin donc d'un treeview, o� pour chaque noeud, j'aimerai pouvoir afficher des informations suppl�mentaires.
    J'ai installer les composants Jvcl mais je ne trouve rien qui correspond.
    Est ce que ce genre de composant existe (dans la Jvcl ou ailleurs?)
    J'ai pas mal chercher et il me semble que je ne suis pas la seule � avoir ce besoin !

    merci
    Pascale38

  2. #2
    Expert �minent
    Avatar de ShaiLeTroll
    Homme Profil pro
    D�veloppeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Seine Saint Denis (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur C++\Delphi
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par d�faut
    TMS ou DevExpress fournissent des grilles avec TreeView incop�r� mais aussi l'inverse, je suppose !

    Sinon, perso, je l'ai cod� � la main en Delphi, juste avec un OnCustomDrawItem et quelques DrawText que je d�calais pour chaque colonne !
    Si tu je te retrouve le code ...

    Sinon le TVirtualTreeview fourni une gestion de colonne via OnGetText
    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

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Par d�faut
    Je ne connais pas TMS ni devExpress, je vais aller voir ce que c'est.
    En ce qui concerne le Virtual TreeView, je n'arrive pas � l'installer, j'ai l'erreur suivante :
    >>> BPL Output Directory is not defined in "Environment Options"
    >>> DCP Output Directory is not defined in "Environment Options"
    j'ai cherch� sur le web, je ne suis pas la seule � avoir cette erreur mais je n'ai pas trouv� de r�ponse. J'ai essay� d'ouvrir le projet et de compiler mais il me manque des fichiers...

    merci pour ton aide.
    Pascale38

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Par d�faut
    Ok TMS et devExpress malheureusement payant... mon patron va pas �tre d'accord
    Si tu retrouves ton code oui �a m'int�resse bien s�r !!
    merci !

    Pascale38

  5. #5
    Expert �minent
    Avatar de ShaiLeTroll
    Homme Profil pro
    D�veloppeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Seine Saint Denis (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur C++\Delphi
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par d�faut
    Si ton Patron ne veut pas investir 500� dans un pack TMS Grid, rappel lui que tu si tu y passe 3 jours, cela coutera tout aussi cher pour un r�sultat qui ne r�presentent m�me pas 1% des fonctionnalit�s de TMS !

    Sinon, pour le code, il est en Delphi et je ne sais pas o� je l'ai mis, tu devrais te lancer, c'est vraiment pas compliqu� d'utiliser le Canvas et DrawText, tu as m�me des fonctions genre TabbedTextOut qui te permettent de faire l'alignement sans effort

    EDIT : tient, je me suis dit que cela serait un bon exercice pour moi de refaire cela en C++, c'est d�j� une piste mais bon, je suppose que tu avais d�j� r�ussi cela depuis hier 15h, tu as eu le temps de r�gler les d�tails ( comme la gestion du Focus) !

    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
    //---------------------------------------------------------------------------
    void __fastcall TVCLManipForm::BtnTreeViewMiscColumnAddClick(TObject *Sender)
    {
      AnsiString Value;
      if (InputQuery("Ajout d'une Colonne", "Largeur ?", Value))
      {
        int ColWidth;
        if (TryStrToInt(Value, ColWidth))
        {
          if (ColWidth > 0)
          {
            TreeViewColWidths.push_back(ColWidth);
            TreeViewMisc->Invalidate();
          }
        }
      }
    }
     
    //---------------------------------------------------------------------------
    void __fastcall TVCLManipForm::BtnTreeViewMiscColumnDeleteClick(TObject *Sender)
    {
      AnsiString Value;
      if (InputQuery("Suppression d'une Colonne", "Numéro (indice en base 0)", Value))
      {
        int ColIndex;
        if (TryStrToInt(Value, ColIndex))
        {
          if ((0 <= ColIndex) && (ColIndex < (int)TreeViewColWidths.size()))
          {
            for (TTreeViewColWidthList::iterator it = TreeViewColWidths.begin(); it != TreeViewColWidths.end(); ++it)
            {
              if (ColIndex == 0)
              {
                TreeViewColWidths.erase(it);
              }
              else
                ColIndex--;
            }
     
            TreeViewMisc->Invalidate();
          }
        }
      }
    }
     
    //---------------------------------------------------------------------------
    void __fastcall TVCLManipForm::BtnTreeViewNodeAddClick(TObject *Sender)
    {
      TreeViewMisc->Items->AddChild(TreeViewMisc->Selected, "Node N°" + IntToStr(TreeViewMisc->Items->Count))->MakeVisible();
    }
     
    //---------------------------------------------------------------------------
     
    void __fastcall TVCLManipForm::TreeViewMiscAdvancedCustomDrawItem(
          TCustomTreeView *Sender, TTreeNode *Node, TCustomDrawState State,
          TCustomDrawStage Stage, bool &PaintImages, bool &DefaultDraw)
    {
      if ((Stage == cdPostPaint) && Sender->InheritsFrom(__classid(TTreeView)))
      {
        TTreeView *Tree = (TTreeView*)Sender;
        TRect NodeRect = Node->DisplayRect(true);
        if (NodeRect.Left > 0)
        {
          Tree->Canvas->TextOut(NodeRect.Left + 2, NodeRect.Top + 2, Node->Text);
     
          int ColIndex = 0;
          for (TTreeViewColWidthList::const_iterator it = TreeViewColWidths.begin(); it != TreeViewColWidths.end(); ++it)
          {
            Tree->Canvas->TextOut(NodeRect.Left + *it + 2, NodeRect.Top + 2, AnsiString().sprintf("Col N°%d - %d [%s]", ColIndex, *it, Node->Text));
            ColIndex++;
          }
        }
      }
    }
    //---------------------------------------------------------------------------
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    private:	// Déclarations utilisateur
      typedef std::list<int> TTreeViewColWidthList;
      TTreeViewColWidthList TreeViewColWidths;
    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

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Par d�faut
    h� merci, non je n'ai pas eu le temps de re regarder car r�union et d'autres trucs � g�rer avant.
    De plus je ne suis pas super � l'aise avec tous �a car pas du tout sp�cialiste de c++ builder et de ces composants. Donc merci, je pense que ce que tu as fait va beaucoup m'aider car � vrai dire je n'aurai pas trop su comment commencer !!
    Bon ben � moi de jouer !!
    Pascale38

  7. #7
    Membre chevronn�

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Par d�faut
    Citation Envoy� par Pascale38 Voir le message
    Je ne connais pas TMS ni devExpress, je vais aller voir ce que c'est.
    En ce qui concerne le Virtual TreeView, je n'arrive pas � l'installer, j'ai l'erreur suivante :
    >>> BPL Output Directory is not defined in "Environment Options"
    >>> DCP Output Directory is not defined in "Environment Options"
    j'ai cherch� sur le web, je ne suis pas la seule � avoir cette erreur mais je n'ai pas trouv� de r�ponse. J'ai essay� d'ouvrir le projet et de compiler mais il me manque des fichiers.
    Pour installer VirtualTreeView, il faut d�clarer le r�pertoire "source" et les r�pertoires BPL et DCP cr��s par l'installation dans le path:
    1) Ouvrir les options -> C++ Options -> Path and Directories (en anglais)
    2) Cliquer sur le bouton de "Include path" (le premier en haut � droite)
    3) Ajouter les r�pertoires "$(BDSCOMMDIR)\BPL" et "(tonpath)\Virtual Treeview\Source"
    4) Ok
    5) Cliquer sur le bouton de "Library path" (celui en dessous de l'include path)
    6) Ajouter les r�pertoires "$(BDSCOMMDIR)\BPL", "$(BDSCOMMDIR)\DCP" et "(tonpath)\Virtual Treeview\Source"
    7) Ok
    8) Ok

    Le VirtualTreeView est assez difficile � utiliser au d�but mais tr�s efficace et rapide si tu as des grandes listes.

    Edit: J'ai retrouv� une autre note pour l'installation: il faut que la personnalit� Delphi du RAD Studio soit install�e
    http://www.soft-gems.net/support/for...pic.php?p=4945

    Bonne chance

  8. #8
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Par d�faut
    merci ShaiLeTroll pour ton code, �a marche bien, mais �a ne donne pas vraiment ce que je veux, car je n'ai pas des "vraies colonnes". C'est � dire que l'utilisateur ne peut pas les redimensionner...
    Va falloir que j'arrive � d�cider mon boss � investir... c'est pas gagn� !!

    Pascale38

  9. #9
    Expert �minent
    Avatar de ShaiLeTroll
    Homme Profil pro
    D�veloppeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Seine Saint Denis (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur C++\Delphi
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par d�faut
    Pour le redimensionnent de tes colonnes !
    Une astuce, colle un composant avec des colonnes redimensionnable (TStringGrid, TListView, essaye les tous), r�duit le juste de la taille des colonnes, retire les scrollbars, et dans le OnColumnResize (si dispo), tu modifie la liste TreeViewColWidths et force le dessin !
    Et le tour est jou� !
    Tu peux aussi construire tes colonnes avec des Panels, avec OnMouseDown coupl� � des SendMessage comme

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
      PanelSplitterHorizontalTop->Perform(WM_LBUTTONUP, 0, 0);
      PanelTop->Perform(WM_NCLBUTTONDOWN, HTBOTTOM, 0);
    PanelTop et PanelSplitterHorizontalTop en align Top
    PanelSplitterHorizontalTop en dessous de PanelTop
    PanelSplitterHorizontalTop se comporte comme splitter avec juste ces deux lignes dans OnMouseDown !

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    {
      if (Sender->InheritsFrom(__classid(TPanel)))
      {
        ((TPanel*)Sender)->Perform(WM_LBUTTONUP, 0, 0);
        ((TPanel*)Sender)->Perform(WM_SYSCOMMAND, SC_MOVE + 2, 0); // Bloque tant que l'on maintient le bouton de la souris appuyé !
        OutputDebugString(AnsiString("End Move " + ((TPanel*)Sender)->Name).c_str());
      }
    }
    Un autre panel, pos� sans rien modifier d'autre que OnMouseDown, tu obtiens un panel qui se peut �tre d�plac� librement

    Encore un autre panel, aucune modification
    dans le constructeur de la fen�tre

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
      SetWindowLong(PanelImageSizeable->Handle, GWL_STYLE,
        GetWindowLong(PanelImageSizeable->Handle, GWL_STYLE) | WS_SIZEBOX);
     
      PanelImageSizeable->Width += 1; // C'est le seul truc efficace pour que WS_SIZEBOX soit pris en compte, Invalidate, SetWindowPos, rien ne passe à part cette bidouille
    tu obtiens un Panel redimensionnable � volont� !

    Il n'y a pas de limite aux possibilit�s, juste l'imagination et la d�termination ...
    euh �a c'est pas un r�plique de film �a ... merde, j'ai vu Green Lantern hier ...

    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

  10. #10
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Par d�faut
    Tout �a devenait un peu trop compliqu� � g�rer pour moi ;-)
    J'ai finalement r�ussi � installer le VirtualTreeView qui est un composant bien pratique !!!
    Je rajouterai par rapport � l'installation de ce composant qui m'a donn� du fil � retordre, que non seulement il faut avoir delphi d'installer, mais que �a n'est pas pour autant que le composant s'installe comme il faut (ce qui m'est arriv�).
    Dans ce cas il faut compiler et installer le composant � la main avec le profil delphi, ce qui ne pose pas de r�el probl�me, � un bug de l'IDE pr�s qui fait que le composant n'est pas visible en profil c++.
    Donc AVANT de compiler ou si votre composant n'est pas visible aller voir ce lien :
    http://blog.zachsaw.com/2008/10/delp...ring-in-c.html

    Je mets ce post en r�solu ?
    merci beaucoup � tous pour votre aide !!!

    Pascale38

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

Discussions similaires

  1. DataTable avec des colonnes dynamiques
    Par PrinceDeLu dans le forum JSF
    R�ponses: 5
    Dernier message: 15/04/2011, 10h54
  2. [Struts-Layout] treeview avec des checkbox
    Par guiillaume63 dans le forum Struts 1
    R�ponses: 3
    Dernier message: 16/05/2007, 14h46
  3. R�ponses: 3
    Dernier message: 10/05/2007, 14h12
  4. R�ponses: 4
    Dernier message: 05/12/2006, 11h43
  5. [CSS] Remplacer un tableau avec des colonnes
    Par mullger dans le forum Mise en page CSS
    R�ponses: 6
    Dernier message: 22/08/2006, 15h30

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