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 :

Erreur à la création d'un objet


Sujet :

Langage Delphi

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 398
    Points : 300
    Points
    300
    Par défaut Erreur à la création d'un objet
    Bonjour,

    Je suis sous w10 et Delphi 10.

    Je crée un objet qui doit contenir entre autre 2 TStringlist voici la déclaration de mon objet :
    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
      TScriptPTE = class (TObject)
      private
         FNombreDeBlocs : Integer;
         LeFichier : TStringList;
         procedure AnalyserPTE;
         function CrochetteNomDuBlock(LeNom : String) : String;
      public
        { Déclarations publiques }
        LesBlocks : TStringsList;
        function ValeurClef(Block,clef : string) : string;overload;
        function ValeurClef(clef : string) : string;overload;
        procedure FixerValeurClef(Block,clef,valeur : string);
        procedure InsererBloc(BlockPrecedent, ContenuDuBlock : string);
        function ContenuBloc(Block : String) : string;
        procedure EnregistrePTE(NomFichier : string);
        function ChangerImageBlockSlide(Block, NouvelleImage,NouvelleLegende : String) : Boolean;
    //    function  ListeObjectDuBlock(Block : String) : TStringList;
        property NombreDeBlocs : Integer read FNombreDeBlocs;
      published
        constructor Create(NomScript : string);
        destructor destruction;
      end;
    le constructor est déclaré ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    constructor TScriptPTE.Create(NomScript : string);
    begin
         inherited Create;
         LeFichier := TStringList.Create;
         LesBlocks := TStringList.Create;
         LeFichier.LoadFromFile(NomScript);
         FNombreDeBlocs:= LesBlocks.Count;
         AnalyserPTE;
    end;
    A la compilation tout se passe bien, à l'execution plantage sur la ligne : LeFichier := TStringList.Create;

    J'ai mis cet objet dans une unité dédiée, avant il était dans le fichier de ma fenêtre principale et je n'avais pas de soucis !!
    Quelqu'un peut-il m'expliquer ce qui pose problème ?

    Merci
    Bernard

  2. #2
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Salut,

    je suis étonné que ce code compile !!!

    plusieurs choses m'ont sautés aux yeux
    j'ai donc repris le code vite fait et testé bien sur
    les correction sont marquées en fin de ligne comme ceci : // <------------- ici
    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
    type
      TScriptPTE = class (TObject)
      private
         FNombreDeBlocs : Integer;
         LeFichier : TStringList;
         procedure AnalyserPTE;
         function CrochetteNomDuBlock(LeNom : String) : String;
      public
        { Déclarations publiques }
        LesBlocks : TStringList;   // <------------- ici
        function ValeurClef(Block,clef : string) : string;overload;
        function ValeurClef(clef : string) : string;overload;
        procedure FixerValeurClef(Block,clef,valeur : string);
        procedure InsererBloc(BlockPrecedent, ContenuDuBlock : string);
        function ContenuBloc(Block : String) : string;
        procedure EnregistrePTE(NomFichier : string);
        function ChangerImageBlockSlide(Block, NouvelleImage,NouvelleLegende : String) : Boolean;
    //    function  ListeObjectDuBlock(Block : String) : TStringList;
        property NombreDeBlocs : Integer read FNombreDeBlocs;
      //published                               // <------------- ici
        constructor Create(NomScript : string);
        destructor Destroy; override;           // <------------- ici
      end;
    et le code du Destructeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    destructor TScriptPTE.Destroy;
    begin
      LeFichier.Free;
      LesBlocks.Free;
      inherited Destroy;
    end;
    voilà tout fonctionne et les objets crées sont bien libérés (les 2 TStringList)

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 398
    Points : 300
    Points
    300
    Par défaut
    Bonjour Cirec et merci de ta réponse.

    Pour le TString(s)List c'était juste une erreur de retranscription dans le post.
    Pour le Destroy effectivement je ne sais pas si l'on peut le renommer ? Dans tous les cas ça compilait !

    J'ai identifié le pb, sans en comprendre la raison :
    La prise en compte de tes modifs n'ayant rien changé, j'ai créé un nouveau projet juste pour tester mon objet et là surprise sans rien changer
    tout fonctionne !!
    C'est la form appelante qui déclenche le pb. Pourquoi ?
    J'ai ramené remis tous mes boutons et autres objet d'interface dans la nouvelle form et tout compile et tourne normalement !

    Ce n'est pas très satisfaisant pour l'esprit mais je peux avancer !

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 688
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    Citation Envoyé par Bernard B Voir le message
    C'est la form appelante qui déclenche le pb. Pourquoi ?
    C'est certainement une erreur de frappe, tu appelles une méthode sur l'instance non-initialisée plutôt que sur sa classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ScriptPTE := ScriptPTE.Create;   //Faux
    ScriptPTE := TScriptPTE.Create;  //Correct

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 398
    Points : 300
    Points
    300
    Par défaut
    Andnotor tu es trop fort !!!

    Effectivement et c'est même pire j'ai simplement écrit : ScriptPTE.Create;

    Bien j'essaierais de faire mieux la prochaine fois.

    Merci encore
    Bernard

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

Discussions similaires

  1. Probleme de compilation erreur sur creation de l'objet
    Par fainardi69 dans le forum Langage
    Réponses: 3
    Dernier message: 11/07/2015, 23h19
  2. Erreur en création de vue
    Par arcane dans le forum Requêtes
    Réponses: 5
    Dernier message: 04/07/2006, 23h06
  3. Creation aléatoire d'objets
    Par belzeluc dans le forum C++
    Réponses: 1
    Dernier message: 25/04/2006, 22h45
  4. Réponses: 5
    Dernier message: 08/01/2006, 23h42
  5. [DOM XML] Erreur fonction load() d'un objet dom??
    Par ribrok dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 04/10/2005, 11h43

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