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 :

Problème sur property Items de ListBox


Sujet :

Langage Delphi

  1. #1
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut Problème sur property Items de ListBox
    Salut à tous.

    Pour un test, je me suis fabriqué une petite classe avec comme property un TStrings et une fonction qui transforme une String en TStrings.
    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
     
    function StringToItems(Chaine : String): TStrings;
    Var Itm : TStrings;
    begin
      if Chaine <> '' then
      begin
        Itm := TStringList.Create;
        try
          While Pos(sLineBreak,Chaine) > 0 do
          begin
            Itm.Add(Copy(Chaine,1,Pos(sLineBreak,Chaine) -1));
            Delete(Chaine,1,Pos(sLineBreak,Chaine) + Length(SLineBreak));
          end;
          Itm.Add(Chaine);  
          Result  := Itm;
        finally
          Itm.Free;
        end;
      end;
    end;
    et celui de la classe
    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
     
      TPersistAccessoire = Class(TPersistClass)
      private
        .....
        FAxConso: TStrings;
        .....
        procedure SetAxConso(const Value: TStrings);
        function GetAxExist: Boolean;
      public
        Property  AxConso   : TStrings read FAxConso write SetAxConso;
        Property  AxExist   : Boolean read GetAxExist;
        Constructor Create; Virtual;
        Destructor  Destroy;
        Procedure Load;   Virtual;
        .....
      end;
     
    Implementation
     
    constructor TPersistAccessoire.Create;
    begin
      Inherited;
      FAxConso  := TStringList.Create;
      FAxConso.Add('AUCUN');
      ....
    end;
     
    destructor TPersistAccessoire.Destroy;
    begin
      FreeAndNil(FAxConso);
      ....
      Inherited;
    end;
     
    procedure TPersistAccessoire.SetAxConso(const Value: TStrings);
    begin
      FAxConso  := Value;
    end;
     
    procedure TPersistAccessoire.Load;
    var lect : String;
    begin
      //lecture  du fichier et affectation de AxConso.
       .....
          FAxConso        := StringToItems(Lect);
        .....
    end;
    Le code se compile très bien sous delphi. Mon problème est sur cette ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
         SavAccessoire.Load
        Lb_axconso.Items     := SavAccessoire.AxConso; //Ici
    Avec SavAccessoire de type TPersistAccessoire.
    et la j'ai un beau message d'erreur différent à chaque fois.

    Merci de votre aide

    Andry
    On progresse .....

  2. #2
    Membre émérite
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 216
    Points : 2 303
    Points
    2 303
    Par défaut
    bonjour,

    je pense que le problème vient de la méthode StringToItems. Dedans tu créé un TStringlist, que tu rempli et que tu affect à Result. Mais tu n'affecte à Result que le pointeur de ce TstringList, et comme tu le détruit, Result pointe sur un objet qui n'existe plus
    Il faudrait je pense ajouter un result := tstringlist.create; et à la fin au lieu de faire une affectation, tu fait un Result.addstrings( Itm);

    @++
    Dany

  3. #3
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Merci.

    Ca a bien marche après changement comme suit.
    donc soit je fais comme tu le dis soit je le transforme en procedure avec paramètre Var.
    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
     
    function StringToItems(Chaine : String; Const NoItems : String = 'AUCUN'): TStrings;
    begin
      Result  := TStringList.Create;
      Result.Clear;
      if Chaine <> '' then
      begin
        While Pos(sLineBreak,Chaine) > 0 do
        begin
          Result.Add(Copy(Chaine,1,Pos(sLineBreak,Chaine) -1));
          Delete(Chaine,1,Pos(sLineBreak,Chaine) + Length(SLineBreak));
        end;
        Result.Add(Chaine);
      end
      else
      Result.Add(NoItems);
    Je me demande tout de même s'il n'y a pas des fonctions standards toutes prêtes pour parser des chaines comma ça.

    A+
    On progresse .....

  4. #4
    Membre émérite
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 216
    Points : 2 303
    Points
    2 303
    Par défaut
    ben j'osais pas le dire car je n'en suis pas certain, mais je pense que FaxConso.text := Lect le fait naturellement en coupant sur chr(13).

    @++
    Dany

  5. #5
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 258
    Points : 156
    Points
    156
    Par défaut
    Citation Envoyé par Andry
    Je me demande tout de même s'il n'y a pas des fonctions standards toutes prêtes pour parser des chaines comma ça.

    A+
    essaie http://www.delphibasics.co.uk/index.html

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

Discussions similaires

  1. Click sur un Item d'une ListBox
    Par Morgoth818 dans le forum Windows Presentation Foundation
    Réponses: 14
    Dernier message: 07/05/2009, 12h35
  2. [ListBox] Comment réaliser un Drag&Drop sur les items ?
    Par Anto03 dans le forum Windows Presentation Foundation
    Réponses: 14
    Dernier message: 11/10/2008, 16h53
  3. Réponses: 2
    Dernier message: 27/08/2008, 10h58
  4. Réponses: 8
    Dernier message: 09/05/2007, 00h35
  5. Réponses: 2
    Dernier message: 30/11/2006, 10h22

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