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 :

Bizarrerie sur Property


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 72
    Points : 74
    Points
    74
    Par défaut Bizarrerie sur Property
    Bonjour,

    J'ai un soucis

    J'ai une classe TIntList, qui est une TStringList n'acceptant que des integers.

    J'ai un propriété Path dans une autre classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        property Path            : TIntList read fPath write SetPath;
    fPath étant une TIntList protected.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TGroup.SetPath(Value : TIntList);
    begin
      fPath.Text := Value.Text;
    end;
    Le problème:
    SetPath n'est pas utilisé (pas de points bleus de compilation)!

    La preuve... si je fais ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        property Path            : TIntList read fPath;
    Le programme tourne trés bien! Donc on peut se dire: bah fPath, on y a accés autrement, et c'est comme cela qu'on écrit dedans. Que neni, car si j'enlève la property, qui n'est donc plus qu'avec un Read, ca ne compile plus, il me dit (ce qui est logique): Path est inconnu.

    Donc je ne comprend pas ... Quelqu'un peut m'expliquer?

    Plus généralement, je veux pouvoir mettre en property Path, pour pouvoir intercepter en debugging toute modification qu'on y fait, et je n'y arrive pas! Moi pas futé

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 577
    Points : 25 225
    Points
    25 225
    Par défaut
    fait tu une affectation ? A mon avis non, donc pourquoi compiler du code inutile, la propriété n'étant pas publiée non plus ...

    il ne faut pas confondre un Set qui intervient à l'affectation et la modification de la liste ...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 72
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    fait tu une affectation ? A mon avis non, donc pourquoi compiler du code inutile, la propriété n'étant pas publiée non plus ...

    il ne faut pas confondre un Set qui intervient à l'affectation et la modification de la liste ...

    Si cela m'arrive, faire une copie liste à liste via Group1.Path = Group2.Path

    Bon, mais je fais surtout des Add de la liste. Comment faire pour avoir une property qui gère toute opération de modification de la dite liste? Je pensais que le Set allait les intercepter.

    Reprenons du début, une stringlist, je veux la mettre en property de manière à pouvoir mettre un point d'arrêt pour suivre toute modification de son contenu, je fais comment?

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    Chez moi ceci marche :

    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
    type
      TFoo = class
      private
        FStrings: TStringList;
        function GetStringList: TStringList;
      public
        property Strings: TStringList read GetStringList;
        constructor Create();
        destructor Destroy; override;
      end;
     
    { TFoo }
     
    constructor TFoo.Create;
    begin
      inherited;
      FStrings := TStringList.Create;
    end;
     
    destructor TFoo.Destroy;
    begin
      FStrings.Free;
      inherited;
    end;
     
    function TFoo.GetStringList: TStringList;
    begin
      Result := FStrings;
    end;
     
    procedure TForm4.Button1Click(Sender: TObject);
    var
      Z: TFoo;
    begin
      Z := TFoo.Create;
      Z.Strings.Add('foo');
    end;
    L'appel de "Z.Strings.Add('foo');" appelle bien le breakpoint mis sur "TFoo.GetStringList". Ce code fonctionne t-il correctement dans ta configuration ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 72
    Points : 74
    Points
    74
    Par défaut
    Grand merci Reisubar, cela fonctionne. Mon erreur était de penser que le Get n'allait pas servir à modifier la liste, mais si... Delphi avec le Get récupère le pointeur et manipule la liste avec (ajout, suppression), et je n'avais fait qu'un:

    read fPath

    donc le

    write SetPath ne sert à rien dans ce cas. Disons que tu n'as besoin que d'une property avec Read pour tout faire dans le cas d'une propriété sur un objet. J'ai appris quelque chose!

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

Discussions similaires

  1. [XSL-FO] bizarrerie sur absolute-position avec tableau
    Par titouille dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 16/09/2009, 15h42
  2. Bizarrerie sur les dates
    Par lutecefalco dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/12/2008, 13h21
  3. embed-xml sur property
    Par chtiboss dans le forum Hibernate
    Réponses: 1
    Dernier message: 30/01/2008, 16h19
  4. Problème sur property Items de ListBox
    Par Andry dans le forum Langage
    Réponses: 4
    Dernier message: 24/08/2005, 12h10
  5. Bizarrerie sur nom de table !
    Par Christophe Charron dans le forum Outils
    Réponses: 1
    Dernier message: 22/08/2005, 15h38

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