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

Delphi Discussion :

initialisation d'une var


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut initialisation d'une var
    Hello,

    Je cherche à initialisé une variable qui est définit dans une Form.

    Example j aimerais pouvoir passé lors de la création d une Form un attribut CurrentLanguage et ainsi loadé les Caption des boutons correspondant
    que dois je ajouter dans ma class appellante j ai ceci pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TSDIAppForm.ButtonGoodiesClick(Sender: TObject);
    var
     FormGoodies : TFormGoodies;
    begin
      FormGoodies := TFormGoodies.Create(self);
      FormGoodies.Show;  
    end;

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    tu peut tres bien creer une methode dans lequel tu passe tes parametre

    exemple
    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
     
     TFormGoodies = Class(Tform)
    ...
    Public
      Init(Monparam : Integer) ;
    end;
    ...
    TFormGoodies.init(Monparam : Integer) ;
    begin
      ...
      Show
    end;
     
     
    procedure TSDIAppForm.ButtonGoodiesClick(Sender: TObject);
    var
     FormGoodies : TFormGoodies;
    begin
      FormGoodies := TFormGoodies.Create(self);
      FormGoodies.init(monParam);  
      ...
    end;

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Février 2003
    Messages
    4 341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 4 341
    Par défaut
    Tu peux créér un constructeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       Private
           Variable1 : String;
           Variable2 : Integer;
       Public
          Constructor MaCreation( AOwner: TComponent; MonParam1 : String; MonParam2 : Integer); override;

    Ensuite dans l'implémentation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Constructor TForm1.MaCreation( AOwner: TComponent; MonParam1 : String; MonParam2 : Integer);
    Begin
        inherited Create( AOwner);
     
        Variable1 := MonParam1;
        Variable2 := MonParam2;
    end;
    Par contre, il ne faut pas que la fenêtre soit créée automatiquement en début de projet, mais que tu la créés dynamiquement dans ton programme en faisant, par exemple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Procedure TForm2.Button1Cliqk( Sender : TObject);
    Begin
        Form1 := TForm1.MaCreation( Self, "Toto", 18);
        Form1.ShowModal;
        Form1.Free;
    End;
    En espérant t'avoir aidé...

    Kwasin

  4. #4
    Membre chevronné
    Avatar de Philippe Gormand
    Inscrit en
    Mars 2002
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 330
    Par défaut
    Salut

    Kwasin a écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    Procedure TForm2.Button1Cliqk( Sender : TObject);
    Begin
        Form1 := TForm1.MaCreation( Self, "Toto", 18);
        Form1.ShowModal;
        Form1.Free;
    End;
    ATTENTION : C'est plantage assuré. La méthode Free d'une fiche (TForm) libère la mémoire mais ne détruit pas l'objet. Il faut (impérativement) utiliser la méthode Release.
    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    Procedure TForm2.Button1Cliqk( Sender : TObject);
    Begin
        Form1 := TForm1.MaCreation( Self, "Toto", 18);
        Form1.ShowModal;
        Form1.Release;
    End;

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Février 2003
    Messages
    4 341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 4 341
    Par défaut
    Citation Envoyé par Philippe Gormand
    ATTENTION : C'est plantage assuré. La méthode Free d'une fiche (TForm) libère la mémoire mais ne détruit pas l'objet. Il faut (impérativement) utiliser la méthode Release.
    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    Procedure TForm2.Button1Cliqk( Sender : TObject);
    Begin
        Form1 := TForm1.MaCreation( Self, "Toto", 18);
        Form1.ShowModal;
        Form1.Release;
    End;
    T'es sûr ?
    J'ai toujours utiliser Free, et j'ai jamais eu de plantage !
    Rmq, je suis en Delphi5, c'est peut-être la raison.

  6. #6
    Membre Expert
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Par défaut
    Citation Envoyé par kwasin
    T'es sûr ?
    J'ai toujours utiliser Free, et j'ai jamais eu de plantage !
    Rmq, je suis en Delphi5, c'est peut-être la raison.
    En fait ce n'est pas obligatoire que ça plante. Mais je confirme ce que dit philippe il faut utiliser Release au lieu de Free. D'ailleurs même l'aide Delphi le confirme (Et c'est valable sur la version 5) :

    Tous les gestionnaires d'événements de la fiche ou ses enfants doivent utiliser Release àla place de Free (Delphi)ou delete (C++).Sinon,des erreurs d'accès àla mémoire se produiront.

  7. #7
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Citation Envoyé par Philippe Gormand
    ATTENTION : C'est plantage assuré. La méthode Free d'une fiche (TForm) libère la mémoire mais ne détruit pas l'objet. Il faut (impérativement) utiliser la méthode Release.
    Je ne comprend pas. Comment un objet peut-il exister s'il n'existe plus en mémoire ?

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  8. #8
    Membre Expert
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Par défaut
    Citation Envoyé par Lung
    Je ne comprend pas. Comment un objet peut-il exister s'il n'existe plus en mémoire ?

    En fait l'objet n'existe plus avec un Free. Le problème vient simplement du fait que le Free libère la fiche directement sans s'occuper des évenements possibles. Du coup des plantages sont possible. La doc Delphi dit ceci :
    Release ne détruit pas la fiche avant que tous les gestionnaires d'événements de la fiche et des composants de la fiche n'aient eu le temps de terminer leur exécution.Cette procédure garantit aussi que tous les messages de la file d'attente des événements de la fiche sont traités avant la libération de la fiche.

Discussions similaires

  1. Case a contourné l'initialisation d'une var
    Par Asmod_D dans le forum C++
    Réponses: 5
    Dernier message: 20/08/2006, 22h26
  2. Initialisation d'une colonne par rapport à une autre colonne
    Par jeromesco dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 13/04/2005, 17h15
  3. Affectation d'un champs blob dans une var de type TStrings
    Par Andry dans le forum Bases de données
    Réponses: 1
    Dernier message: 16/03/2005, 18h26
  4. [Initialisation] Remplir une structure une fois
    Par Kimael dans le forum Langage
    Réponses: 14
    Dernier message: 08/06/2004, 15h33
  5. [FLASH 5] Passer une var ou un paramètre
    Par Harry dans le forum Flash
    Réponses: 8
    Dernier message: 18/03/2004, 17h46

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