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 :

Initialisation d'une des variable lors de la création d'un composant


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    Par défaut Initialisation d'une des variable lors de la création d'un composant
    Bonjour à tous

    Je souhaite un composant avec certaines variables initialisées lors de la création:

    Voici le code du composant:

    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
     
    unit Fob;
     
    interface
     
    uses
      Classes,  SysUtils, math, StdCtrls, Dateutils, Controls;
     
    type TF1=class(Tobject)
        private
            VCommunication:string;
         protected
            constructor create;
        public
           Property Communication: string read VCommunication write VCommunication;
        end;
     
    implementation
     
    constructor TF1.create;
    begin
        vCommunication:='Bonjour le monde !'
    end;
     
    end.

    Le programme qui appelle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TForm1.Button1Click(Sender: TObject);
    var F1:TF1;
    begin
        F1:=TF1.create;
        showmessage(F1.Communication);
        f1.free;
    end;

    Le résultat du showmessage est simplement un message vide

    Est-ce qu'il y a moyen d'initialiser une variable lors du create ou lors de la déclaration de l'objet, si oui comment? Sinon pourquoi?


    P.S. : Excusez le dédoublement de message

  2. #2
    Membre Expert

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    Mettre le constructeur en public.

    Dans ton cas, le constructeur appelé est celui par défaut pour tout objet, par celui que tu as écrit.

  3. #3
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Par défaut
    Pour la deuxième question, faut que tu passes un paramètre dans ton create (à modifier en conséquence).

  4. #4
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    Je ne comprends pas trop la question et encore moins les réponses.
    Ton code est correct et le create sert exactement à initialiser les valeurs.
    Normalement avec ton code (il faut peut être faire ctrl-Alt-C) tu dois avoir une procédure 'create' générée, tu initialises ta variable dedans et voilà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    constructor TF1.create;
    begin
      VCommunication := 'toto';
    end;

  5. #5
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par philnext Voir le message
    Je ne comprends pas trop la question et encore moins les réponses.
    Ton code est correct et le create sert exactement à initialiser les valeurs.
    Normalement avec ton code (il faut peut être faire ctrl-Alt-C) tu dois avoir une procédure 'create' générée, tu initialises ta variable dedans et voilà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    constructor TF1.create;
    begin
      VCommunication := 'toto';
    end;
    comme dit plus haut, l'erreur est dans la déclaration du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ype TF1=class(Tobject)
        private
            VCommunication:string;
    {     protected
            constructor create; }
        public        
           constructor create; // constructor public
           Property Communication: string read VCommunication write VCommunication;
        end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    Par défaut
    Merci à tous

    Vous avez raison, il faut mettre le constructor create public.

    Donc si j'ai bien compris

    En étant protected, seul les descendants peuvent l'appeler.

    Et l'appel create par un programme ne réserve que les ressources nécessaires pour le fonctionnement sans faire l'initialisation.

    Merci encore

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/03/2013, 22h55
  2. Réponses: 2
    Dernier message: 29/08/2012, 11h05
  3. Suivre l'état des variables lors d'un débugage
    Par dz_robotix dans le forum C++Builder
    Réponses: 1
    Dernier message: 06/10/2008, 12h09
  4. Créer une/des variable(s) dynamique(s)
    Par jojo86 dans le forum Débuter
    Réponses: 3
    Dernier message: 09/04/2008, 14h55
  5. Spécialisation des variables lors de l'héritage
    Par ::oliv:: dans le forum C++
    Réponses: 6
    Dernier message: 22/03/2007, 11h11

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