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 :

[XE2]Type de classe en paramètre de fonction


Sujet :

Langage Delphi

  1. #1
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 505
    Points : 3 135
    Points
    3 135
    Par défaut [XE2]Type de classe en paramètre de fonction
    Bonjour

    Est-ce qu'on passer un type de classe en paramètre d'une fonction ?
    Le but est de pouvoir faire un truc comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure Appeler(myclassform);
    begin
      with myclassform.Create do
        ShowModal;
    end;
    Papy ;

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 736
    Points : 25 645
    Points
    25 645
    Par défaut
    Tu avais un exemple sous les yeux depuis le début dans le DPR et le célèbre TApplication.CreateForm


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure Appeler(myclassform: TFormClass);
    begin
      with myclassform.Create(nil) do
      try
        ShowModal();
      finally
        Free();
      end;
    end;
    TFormClass est un type prédéfini !

  3. #3
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 505
    Points : 3 135
    Points
    3 135
    Par défaut
    Je n'étais pas allé voir ici, merci pour cette réponse hyper-rapide. :-)

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 466
    Points
    28 466
    Par défaut
    tient...mais pourquoi donc la VCL passe-t-elle par un appel à newInstance()...je ne m'étais jamais posé la question mais le code de Shail suffit puisque le constructor invoque automatiquement newInstance...

  5. #5
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Le Create standard va chercher les ressources .dfm liées à la fiche pour l'initialiser. Dans TApplication on bypasse ceci avec NewInstance, et on fait ça plus tard. Je ne connais plus les détails, mais il y a une raison.

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 736
    Points : 25 645
    Points
    25 645
    Par défaut
    SJRD, tu ne confonds pas avec la différence entre Create et CreateNew ?
    Create utilise CreateNew puis si hérite de TForm va lire la DFM
    CreateNew créé un objet vierge sans DFM !

    Si on lit le code de CreateForm, il semble que NewInstance permet de séparer les exceptions liées à l'allocation de l'objet de celle pour le chargement de la DFM (avec tous les délires liées à la MainForm)
    le constructeur est appelé fait juste 8 lignes plus bas, ce n'est pas si tard que cela !
    On se demande pourquoi ils n'ont pas plutôt appelé CreateNew puis InitInheritedComponent
    J'ai toujours pensé qu'il manquait un TForm.LoadFormResource !!!

    D'ailleurs ce code a été revu, la directive CLR étant de retour (curieux ce n'était pas du .NET ???),
    En 2007, c'était seulement NewInstance
    En XE2, c'est soit NewInstance, soit TComponentClass.Create en mode CLR !

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

Discussions similaires

  1. Passer un type de classe en paramètre
    Par Mister Nono dans le forum Langage
    Réponses: 3
    Dernier message: 16/04/2013, 09h28
  2. Choisir un type de classe en paramètre
    Par Kaneda Shotaro dans le forum C#
    Réponses: 2
    Dernier message: 27/06/2011, 13h13
  3. Type de class et arguments pour fonctions et new
    Par Alfred12 dans le forum C++
    Réponses: 15
    Dernier message: 19/01/2007, 02h02
  4. Réponses: 2
    Dernier message: 04/09/2006, 19h07
  5. [.NET2.0][C#]Passage type de classe dans une fonction
    Par SLE dans le forum Windows Forms
    Réponses: 4
    Dernier message: 06/06/2006, 16h48

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