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 :

VitualTreeView et IVTEditLink


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 VitualTreeView et IVTEditLink
    Bonjour,

    J'utilise un virtualtreeview et j'ai besoin d'éditer plusieurs colonnes.
    Une d'elle est une combobox, j'ai créé ma classe dérivée de IVTEditLink que j'appelle via l'événement CreateEditor et ça fonctionne très bien.
    Problème, ce mode d'édition s'applique sur toutes les colonnes éditables alors que je ne souhaite la combo que sur une seule. Sur les autres je voudrais laisser l'édition de base.
    J'ai essayé dans CreateEditor ne faire appel à ma class que si je suis sur la colonne qui m’intéresse, mais du coup j'obtiens le message d'erreur suivant lorsque j'essaye d'éditer une autre colonne :
    Edit Link must not be nil

    Quelqu'un sait il comment faire pour obtenir 2 modes d'édition différents ?

    merci !
    Pascale38

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    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 081
    Par défaut
    Je ne connais pas VirtualTreeView, il semble que le OnCreateEditor fourni des paramètres, un Sender évidemment ainsi qu'un paramètre Column.

    Pourquoi ne pas créer un IVTEditLink par défaut, il doit bien y avoir une classe par défaut pour implémenter cette interface ?
    Regarde dans le code source Delphi de DoCreateEditor, il doit y avoir un code genre :
    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function TVirtualTreeView.DoCreateEditor(Column): IVTEditLink 
    begin
      if FOnCreateEditor then
        FOnCreateEditor(Self, Column, Result)
      else
        Result := LaClasseParDéfaut.Create();  
    end;



    Sinon, pour une simple ComboBox dans une colonne il n'y a rien de plus simple ?
    Tu n'aurais pas une propriété PickList comme on pourrait le voir dans la TDBGrid ?
    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
    Salut ShaiLeTroll,

    pas trouvé plus simple que le IVTEditLink malheureusement ! Tout ce que j'ai trouvé c'est de devoir créer la classe qui dérive donc de IVTEditLink.
    Autant les checkBox sont présentes nativement dans le composant, autant rien concernant les combo...

    J'ai cherché du côté de la classe par défaut bien sûr, mais je n'ai pas trouvé, d'où le post...

    j'ai trouvé ça dans les sources
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function TCustomVirtualStringTree.DoCreateEditor(Node: PVirtualNode; Column: TColumnIndex): IVTEditLink;
     
    begin
      Result := inherited DoCreateEditor(Node, Column);
      // Enable generic label editing support if the application does not have own editors.
      if Result = nil then
        Result := TStringEditLink.Create;
    end;
    mais je ne sais pas trop comment m'en servir et en c++ en plus...???
    (je connais rien au delphi !!!)

    Il semblerait que la solution soit dans ma classe dérivée de gérer les différentes éditions possibles selon ma colonne... pfff quel boulot juste pour une combo !

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    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 081
    Par défaut
    Eh bien mon LaClasseParDéfaut correspond donc à TStringEditLink
    Le code devrait gérer l'utilisation du NULL (nil) et fournir une instance par défaut, tu as une étrange erreur !

    il te suffit de faire

    Tu as bien utiliser OnCreateEditor (via l'inspecteur d'objet) ? tu n'as pas fait un héritage de TVirtualTreeView et redéfini DoCreateEditor ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void TForm1::VirtualTreeView1CreateEditor(TObject* Sender, TColumnIndex Column, IVTEditLink* &EditLink)
    {
      if (Column == IndexDELaColonneAvecCombo)
        EditLink = new TComboLinkDePascale38();
      else
        EditLink = new TStringEditLink();
    }
    cherche dans le code un raise avec le message "Edit Link must not be nil"
    Soit c'est une Exception spécifique au TVirtualTreeView
    Soit c'est une Assertion (EAssertionFailed) avec la fonction Assert()

    Lorsque l'on fait du C++Builder, il est important de savoir lire du Delphi, surtout lorsque l'on utilise des composants externes avec des documentations souvent légères !
    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

  5. #5
    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
    on a donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function TCustomVirtualStringTree.DoCreateEditor(Node: PVirtualNode; Column: TColumnIndex): IVTEditLink;
     
    begin
      Result := inherited DoCreateEditor(Node, Column);
      // Enable generic label editing support if the application does not have own editors.
      if Result = nil then
        Result := TStringEditLink.Create;
    end;
    et TCustomVirtualStringTree hérite de TBaseVirtualTree :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     TCustomVirtualStringTree = class(TBaseVirtualTree)
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function TBaseVirtualTree.DoCreateEditor(Node: PVirtualNode; Column: TColumnIndex): IVTEditLink;
     
    begin
      Result := nil;
      if Assigned(FOnCreateEditor) then
      begin
        FOnCreateEditor(Self, Node, Column, Result);
        if Result = nil then
          ShowError(SEditLinkIsNil, hcTFEditLinkIsNil);
      end;
    end;
    c'est de la que vient le message, et du coup il apparaît avant l'appel de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TStringEditLink.Create
    suis un peu perdue là...

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    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 081
    Par défaut
    As-tu essayé mon exemple de code de 13h16, en créant manuellement un TStringEditLink dont le Gestionnaire d'évèmenent OnCreateEditor

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void TForm1::VirtualStringTree1CreateEditor(TObject* Sender, PVirtualNode Node, TColumnIndex Column, IVTEditLink* &EditLink)
    {
      if (Column == IndexDELaColonneAvecCombo)
        EditLink = new TComboLinkDePascale38();
      else
        EditLink = new TStringEditLink();
    }
    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

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

Discussions similaires

  1. VirtualTreeView et IVTEditLink
    Par Pascale38 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 21/11/2011, 11h09

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