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

Composants VCL Delphi Discussion :

Comment savoir si une StringList a été créée ?


Sujet :

Composants VCL Delphi

  1. #1
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut Comment savoir si une StringList a été créée ?
    Bonjour,

    La question est dans le sujet.
    Je voudrais un test détectant si une StringList a été créée pour y ajouter une chaine de caractère si c'est le cas, ou la créer au préalable si ce n'est pas le cas.

    Merci d'avance

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut,

    Et if Assigned(maList) then ... ça ne marche pas ?

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  3. #3
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    J'ai trouvé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            if Not(MaListe is TStringList) then MaListe := TStringList.Create ;
            MaListe.add(Chaine);

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Citation Envoyé par defluc Voir le message
    J'ai trouvé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            if Not(MaListe is TStringList) then MaListe := TStringList.Create ;
            MaListe.add(Chaine);
    Ta méthode va provoquer une fuite mémoire. Il faut suivre la recommandation de Gilbert et vérifier si ta MaListe est oui ou non "assigned".
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  5. #5
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Je vais suivre ton conseil mais qu'est-ce que tu entends par une «Fuite de mémoire» ?

  6. #6
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if Not(MaListe is TStringList) then MaListe := TStringList.Create ;
            MaListe.add(Chaine);
    La condition "MaListe is TStringList" permet de déterminer si MaListe est de type TStringList voire un descendant de cette classe.
    Dans le code ci-dessus, tu crées une instance de MaListe si MaListe n'est pas de type TStringList ?
    C'est tout de même un petit peu incohérent

    Quand je parle de fuite mémoire c'est tout simplement Créer une nouvelle instance de TStringList sans libérer (Free) une instance existante.
    Il faut pour éviter cela et palier à la bizarerie de ta condition écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if not Assigned(MaListe) then MaListe := TStringList.Create;
    Du coup si un peu plus loin dans ton code survient un MaListe.Free, tu seras assuré avec la condition "not Assigned..." de recréer une nouvelle instance de MaListe dès que tu appelleras de nouveau cette partie de code. Cela évite les erreurs de violation d'accès.

    Par ailleurs, si dans ton code MaVariable doit être créée qu'une seule et unique fois, il faut mettre en place singleton, qui te garantira l'unicité de l'instance MaListe.
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/04/2009, 22h15
  2. [JScrollPane]Comment savoir quand une scrollbar apparait ?
    Par FrigoAcide dans le forum Composants
    Réponses: 4
    Dernier message: 29/04/2004, 10h10
  3. Comment savoir si une impression s'est bien déroulé?
    Par Cyrilh7 dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/11/2003, 20h49
  4. Comment savoir qu'une fonction est standard ?
    Par D[r]eadLock dans le forum C
    Réponses: 5
    Dernier message: 24/03/2003, 14h42
  5. Réponses: 4
    Dernier message: 10/09/2002, 17h09

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