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 :

Liste des TForm de mon application


Sujet :

Langage Delphi

  1. #1
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut Liste des TForm de mon application
    Bonjour,

    Suite au visionnage du webinaire de PP, je cherche une solution pour avoir la liste de toute mes TForm même celles qui ne sont pas auto-créées au démarrage du programme.
    Apparemment ça n'est pas aussi simple qu'il y parait.

    Une idée de solution ?

  2. #2
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Screen.Forms contient toutes les instances de fiches en cours, pas seulement celles qui sont autogérées par le projet.

    Les autres fiches n'existent pas tant qu'elles ne font pas l'objet d'une instanciation puisque ce ne sont que des classes. La RTTI devrait y donner accès.

  3. #3
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Je viens de tester avec une tform principale et une secondaire.
    Si les 2 sont auto-créées après le Application.Initialize, elles font parties de Screen.Forms.
    Celles qui ne sont pas créées au démarrage, elles sont absentes.

    J'ai aussi essayer les RTTI mais c'est pareil.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    uses TypInfo, RTTI;
     
    procedure ListAllFormClasses(Target: TStrings);
    var
      aClass: TClass;
      context: TRttiContext;
      types: TArray<TRttiType>;
      aType: TRttiType;
    begin
      context := TRttiContext.Create;
      types := context.GetTypes;
      for aType in types do
      begin
        if aType.TypeKind = tkClass then
        begin
          aClass := aType.AsInstance.MetaclassType;
          if (aClass <> TForm) and aClass.InheritsFrom(TForm) then
          begin
            Target.Add(aClass.ClassName);
          end;
        end;
      end;
    end;
     
    procedure TForm7.Button1Click(Sender: TObject);
    var
      F: TCustomForm;
      I, J: Integer;
    begin
     
      ListAllFormClasses(Memo1.Lines);
     
      for I := 0 to Pred(Screen.CustomFormCount) do
      begin
        F := Screen.CustomForms[I];
        ShowMessage(F.Name);
      end;
    end;
    Avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      Application.Initialize;
      Application.MainFormOnTaskbar := True;
     
      Application.CreateForm(TForm7, Form7);
      Application.CreateForm(TForm8, Form8);
      Application.Run;
    J'ai bien les 2.

    Si j'enlève la ligne de Form8, je ne l'ai plus au démarrage.

    Précision: Delphi XE7

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    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 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Screen.Forms, cela compte les instances, pas le nombre de classe
    Ne pas oublier aussi que le compilateur élimine les types non utilisés
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    En tous cas, si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    RegisterClass(TForm8);
    ListAllFormClasses(Memo1.Lines);
    Là, j'ai bien mes 2 classes affichées.
    Mais Screen.Forms ne contient que celle auto-créée

  6. #6
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Pour être plus précis, je cherche un moyen d'obtenir dans un fichier texte la liste de touts les TForm, TFrame de mon application, et pour chacun tous les composants qui s'y trouvent.
    Un peu comme ce que fait DKLang, sauf que j'imagine que lui doit fouiller quelque part dans les ressources

  7. #7
    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 : 54
    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 445
    Points
    28 445
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Pour être plus précis, je cherche un moyen d'obtenir dans un fichier texte la liste de touts les TForm, TFrame de mon application, et pour chacun tous les composants qui s'y trouvent.
    Un peu comme ce que fait DKLang, sauf que j'imagine que lui doit fouiller quelque part dans les ressources
    "de ton application" mais à partir de quoi ? du code compilé, des sources ?

    à priori tu as un DFM pour chaque fiche et chaque frame...tu peux donc prendre la liste des ressources par exemple...comme dans ce très vieux code
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #8
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Je travaille sur une application qui contient beaucoup de TForm contenant chacune des dizaines et des dizaines de composants.
    Il faudrait que je puisse avoir la liste complète de toutes ces TForm et pour chacun les composants avec leur type (en filtrant sur les composants de données).
    Je pourrais fouiller chaque DFM mais mes premiers essais rapides pour faire ça n'ont pas été trop réussis.
    C'est pour ça que je pensais passer plutôt par du code dans le programme lui-même pour récupérer ça dans l'application.

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    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 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    En tous cas, si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    RegisterClass(TForm8);
    ListAllFormClasses(Memo1.Lines);
    Là, j'ai bien mes 2 classes affichées.
    Mais Screen.Forms ne contient que celle auto-créée
    Oui puis que le type est utilisé donc pas éliminé
    La solution de Paul sur l'exploration des ressources, est une l'une des possibilités
    J'ai pas utilisé une seule fois la même technique pour l'équivalent d'un translator :
    - héritage de TForm, interface implémentation, composition de composant externe depuis un Exe, au final, globalement un bouton ou MainMenu permettait d'accéder à l'éditeur de langue depuis la fenêtre
    - gnuGetText/POEdit, MultiLizer, ... depuis les DFM, permet de traduire d'un seul coup et fournir des fichiers Excel aux traducteurs


    Screen.Forms ne contient que les instances, toujours cette confusion entre l'instance et la classe
    Le CreateFom, j'ai n'en ai toujours qu'un seul, pour le MainForm, tout le reste est crée à la volée et surtout la variable globale, par défaut, supprimée
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  10. #10
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    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
    procedure TForm7.Button1Click(Sender: TObject);
    var
      F: TCustomForm;
      I, J: Integer;
      P: TPersistentClass;
    begin
      RegisterClass(TForm7);
      RegisterClass(TForm8);
     
      ListAllFormClasses(Memo1.Lines);
     
      for I := 0 to Pred(Memo1.Lines.Count) do
      begin
        P := GetClass(Memo1.Lines[I]);
     
        if Assigned(P) then
        begin
          Application.CreateForm(TComponentClass(P), F);
     
          for J := 0 to Pred(F.ControlCount) do
            ShowMessage(F.Controls[J].ClassName);
        end;
      end;
    end;
    ça fonctionne ça, mais ça m'oblige à un RegisterClass "manuel" de chaque TForm

    Je pensais juste pourvoir obtenir la liste des classes facilement et surtout ne pas être obligé d'ajouter chaque unité à mes uses.

  11. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    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 455
    Points : 24 867
    Points
    24 867
    Par défaut
    C'est illogique cette histoire
    Soit c'est du code utile soit cela ne l'est pas !
    N'est-ce pas l'occasion de nettoyer le source des codes inutilisés ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  12. #12
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Je n'ai pas dû être clair :-(
    Faudrait limiter les anesthésies générales dans une vie

    Cette application contient beaucoup de TForm mais seules 3 sont créées avant le Application.run.
    Les autres sont créées à la volée quand c'est nécessaire.
    Mon but n'est pas de lister les instances des TForm actuellement créées à un instant T mais une fois l'application démarrée, d'obtenir une cartographie complète de toutes les TForm et leurs composants.
    Je suis d'accord que ça correspond à prendre chaque DFM dans un éditeur de texte et à les parser pour en extraire les éléments qui les composent.
    Je cherche juste à faire un truc du style

    Clic sur un bouton
    Obtenir toutes les classes qui héritent de TForm que je pourrais créer si j'en avais besoin
    En créer une instance avec Application.CreateForm
    Lister les composants qui s'y trouvent
    Passer au suivant.

    Ce n'est pas pour le fonctionnement de l'application en elle-même, c'est juste pour sortir une liste des trop nombreux éléments présents et qui font que cette application est devenue impossible à gérer
    Montrer les différents écrans au client serait trop fastidieux et ils ne comprendrait pas forcément la problématique.
    Mais si je leur sors un listing, il verra mieux les implications de ce qu'il compte nous demander au niveau évolutions et nettoyage de code.

  13. #13
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    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 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Je confirme que cela fonctionne parfaitement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    begin
      Application.Initialize;
      Application.MainFormOnTaskbar := True;
      Application.CreateForm(TOffice365MailMainForm, Office365MailMainForm);
      Application.Run;
    le résultat dans le Memo

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TOffice365MailClassesPreASTForm
    Tfrm_OAuthWebForm
    TOffice365MailClassesTestingForm
    TOffice365MailMainForm
    C'est votre projet de Test qui ne doit pas être correct, problème de dépendance

    Et toutes vos TForm peuvent être instanciés sans problème de façon machinale hors d'un contexte d'utilisation cohérent ?
    pas de DataModule, pas de lien entre des objets ?


    Vous devriez plutôt partir sur un chargement des DFM en Resources, cela évitera les codes dans le constructor, dans le gestionnaire de OnCreate, ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  14. #14
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Avec le code qui utilise les RTTI ?

  15. #15
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    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 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Oui, pour ma part c'est la construction de votre projet qui rend les classes non utilisés donc non compilés donc exclu du RTTI

    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
    26
    27
    28
    29
     
    procedure TOffice365MailMainForm.Button1Click(Sender: TObject);
     
      procedure ListAllFormClasses(Target: TStrings);
      var
        aClass: TClass;
        context: TRttiContext;
        types: TArray<TRttiType>;
        aType: TRttiType;
      begin
        context := TRttiContext.Create;
        types := context.GetTypes;
        for aType in types do
        begin
          if aType.TypeKind = tkClass then
          begin
            aClass := aType.AsInstance.MetaclassType;
            if (aClass <> TForm) and aClass.InheritsFrom(TForm) then
            begin
              Target.Add(aClass.ClassName);
            end;
          end;
        end;
      end;
     
     
    begin
      ListAllFormClasses(Memo1.Lines);
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  16. #16
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Alors là je pige pas. :-(

    J'ai mis le code du projet ici.
    Fichiers attachés Fichiers attachés

  17. #17
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    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 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Ce code d'essai n'a aucun intérêt, tout est bidon, cela n'est pas représentatif de votre projet.

    Vous oubliez la notion de dépendance entre les unités qui provoque leur liaison, si TForm8 n'est pas utilisé, c'est éliminé par le lieur.
    Ajouter le listing (juste le listing, pas l'instanciation et le ControlCount) dans votre MainForm de votre projet
    Déjà, cela sera plus intéressant, vous verrez si il manque des classes, si elle manque, c'est parce qu'elles ne sont pas utilisés dans le projet, code mort, malgré tout ce que vous pourriez penser
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  18. #18
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    évidemment :-(
    Si je rajoute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm7.Button2Click(Sender: TObject);
    begin
      with TForm8.Create(nil) do
      begin
        ShowModal;
        Free;
      end;
    end;
    ça me donne bien ce qui est utilisé réellement.
    Je pensais que ne pas utiliser l'optimisation dans les options du projet pouvait contourner ce problème.

    Mais finalement, ça va aussi me servir pour savoir quelles TForm ne sont pas utilisées.

    Merci de m'avoir mis le nez dans ce que je n'avais pas vu

  19. #19
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Comme ça, c'est impec' !

    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
    26
    27
    28
    29
    30
    procedure ListAllFormClasses(Target: TStrings);
    var
      aClass: TClass;
      context: TRttiContext;
      types: TArray<TRttiType>;
      aType: TRttiType;
     
      F: TCustomForm;
      I: Integer;
    begin
      context := TRttiContext.Create;
      types := context.GetTypes;
      for aType in types do
      begin
        if aType.TypeKind = tkClass then
        begin
          aClass := aType.AsInstance.MetaclassType;
          if (aClass <> TForm) and aClass.InheritsFrom(TForm) then
          begin
            Target.Add(aClass.ClassName);
     
            Application.CreateForm(TComponentClass(aClass), F);
     
            for I := 0 to F.ComponentCount - 1 do
              Target.Append(#9 + F.Components[I].Name);
     
          end;
        end;
      end;
    end;

  20. #20
    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 : 54
    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 445
    Points
    28 445
    Par défaut
    personnellement je ne tenterais pas d'instancier chaque fiche, cela déclenche les traitements OnCreate etc...qui potentiellement peuvent avoir un comportement non voulu....

    partir des ressources DFM en les lisant me parait une meilleure approche

    http://lookinside.free.fr/delphi.php?Delphi+et+les+DFM
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Liste des mots français pour application JAVA
    Par elitost dans le forum Général Java
    Réponses: 15
    Dernier message: 16/08/2010, 15h57
  2. trouver des icones pour mon application
    Par rudhf dans le forum Général Dotnet
    Réponses: 14
    Dernier message: 25/02/2010, 12h15
  3. liste des impirmante de mon réseau
    Par shirya dans le forum C#
    Réponses: 1
    Dernier message: 02/02/2007, 11h09
  4. Comment passer et lire des paramètres passé à mon application VB
    Par ssakhri dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 27/11/2006, 16h50
  5. [POO] Liste des variables de mon Objet
    Par hisy dans le forum Langage
    Réponses: 2
    Dernier message: 20/09/2006, 10h51

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