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

Composants VCL Delphi Discussion :

Comment intégrer des applications multiples ?


Sujet :

Composants VCL Delphi

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 142
    Points : 120
    Points
    120
    Par défaut Comment intégrer des applications multiples ?
    J'ai une appli A et une appli B, toutes 2 Delphi (2005, Win32).

    Sur une Form de l'appli A, je dois rajouter un bouton qui permettra d'accéder à une Form (je l'appelle Form F) de l'appli B. Lorsque je suis dans la Form F, je peux, bien sûr, accéder à toutes les Form de l'appli B...

    Est-ce que cela signifie que je dois inclure dans l'appli A, l'ensemble des Forms et Fiches de l'appli B ?

    Les 2 applis pèsent chacune 7Mo et, par la suite je devrai accéder de la même manière à 3, 4, 5 ou plus autres applis... A ce train là je vais donc me retrouver avec un unique programme de 100Mo.

    J'ai l'impression que je me trompe quelque part...

    Merci de votre réponse

  2. #2
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 556
    Points : 3 936
    Points
    3 936
    Par défaut
    Pour réduire la taille de ton exécutable, tu peux envisager d'utiliser les paquet d'exécution (fichier BPL). Mais cela t'oblige à déployer ces paquets avec tes applications, ce n'est pas toujours possible (contexte des utilisateurs, licence, pas de contrôle sur le déploiement...). Regardes la doc et juges.

    Une autre solution consiste à fragmenter ton application en plusieurs DLL que tu charges selon les besoins (pas d'exemple à te donner).

    cdlt

    e-ric

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 142
    Points : 120
    Points
    120
    Par défaut
    Merci de ta réponse. C'est une bonne piste que tu me donnes là. Je n'ai jamais trop touché aux DLL et aux package et c'est donc l'occasion...

    Je viens de lire la chose suivante (DELPHI 7 de Dahan & Toth) :
    Avec les packagess runtime, Delphi n'associe plus le code des composants à celui de l'EXE. Ce dernier devient donc plus petit(...) Comme l'éditeur de liens de Delphi est "intelligent", il supprime le code non appelé; de fait, un EXE avec les packages de runtime semblera plus petit mais l'ensemble des fichiers à fournir sera bien plus gros que l'EXE original sans package. En effet, le code n'étant pas inclus dans l'exec. final, le linker ne peut supprimer le code inutile(...) La possibilité de réduire le code est toute relative et ne s'apprécie que si vous devez fournir de nombreux EXE sur un site client (...)
    Rares sont les situations réelles où cela représente un véritable avantage (les pb. de stockage sur disque dur n'existent plus, et la fourniture et le maintiend'1 ensemble cohérent de packages ont un coût qui est loin d'être négligeable)
    Donc, comme le dit notre auteur, il faut peut-être relativiser...

    A ce propos : un truc concernant la gestion de la mémoire que je n'ai pas compris. Dans mes applis, la grande majorité de mes fiches sont créées en utilisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if not Assigned(form1) then form1 := Tform.Create(self);
      form1.Show;
    Si l'utilisateur ouvre l'ensemble des fiches, est-ce que cela signifie qu'elles se trouvent toutes en mémoire à un moment donné ? Ou alors que ça n'a rien à voir et que Windows se débrouille pour vider le code correspondant aux fiches inactives ? Clairement, comment fonctionne le "garbage collector" de Windows ? (si je déborde des limites de ce forum, excusez-moi...)

  4. #4
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    Salut je ne sais pas si c'est ce que tu cherches ou si j'ai bien compris ta question , mais mon appli marche un peu comme la tienne ( si j'ai bien compris )

    En fait la mienne est une appli qui est decomposé en plusieurs dlls.
    Chaque dll peuvent etres appelées par plusieurs applications differentes,
    Et chaque dll peut appeller les Dlls de mon appli.

    en fait j'ai crée une Unité commune a tout le monde qui a en charge de charger dynamiquement toutes les dll de mon appli .
    Donc quand je lance une appli ou que je fais appel a une dll , ces derniere charge toute mes DLLs , qui me donne donc acces a tout le monde .

    peut etre une solution pour toi ..

    bye
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  5. #5
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 142
    Points : 120
    Points
    120
    Par défaut
    Oui, c'est ça que je recherche. Tu as parfaitement compris
    Je pense que c'est la meilleure solution.

    Merci de ta réponse.

  6. #6
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 556
    Points : 3 936
    Points
    3 936
    Par défaut
    Salut

    A ma connaissance, pas de garbage collector dans Windows et dans Delphi encore moins pour les objets comme les TForm. Mais ceci est à nuancer car si le propriétaire de la fiche n'est pas Nil mais un composant comme TApplication, la destruction de celui-ci entraînera la destruction de la fiche si ce n'est pas déjà fait.

    Si c'est Nil, tu as intérêt à libérer explicitement ta fiche. Il est possible de détruire automatiquement une fiche à la fermeture de celle-ci via son événement OnClose (F1 pour les détails). Mais attention dans ce cas, les références à la fiche (Form1...) deviennent indéterminée et font rende le test Assigned() noin significatif d'où quelques agréables plantages en perspective.

    cdlt

    e-ric

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  7. #7
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 142
    Points : 120
    Points
    120
    Par défaut
    Salut e-eric,

    Ok. Effectivement, j'avais oublié le Release sur la Form qui permet de la libérer. Je n'ai jamais essayé.

    Mais si le Assigned ne fonctionne plus dans ce cas, comment peut-on tester si la Form est créée ou non ?

    Pardonne-moi d'insister...

  8. #8
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 556
    Points : 3 936
    Points
    3 936
    Par défaut
    Salut

    Pour répondre directement avec une variable : bernique !
    Free agit sur l'objet mais n'affecte pas la référence (la variable, c'est un pointeur amélioré).

    Une idée consiste à utiliser FreeAndNil si tu contrôle la destruction, mais cela fait que tu n'utilise pas Release (on tourne un peu en rond).
    Tu peux facilement bricoler un équivalent pour les fiches :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    uses 
     Forms;
     
    procedure ReleaseAndNil(var Obj);
    var
      Temp: TForm;
    begin
      Temp := TForm(Obj);
      Pointer(Obj) := nil;
      Temp.Release;
    end;
    A tester bien sûr car il est évident que je ne l'ai pas fait (loin de moi ces contigences "techniques"). J'avoue que ce code (FreeAndNil) m'a toujours laissé preplexe et donné l'impression de ne pas avoir tout compris : La référence est affectée à Nil avant que l'objet soit libéré, y sont culottés ces Borland.

    Alors attention aux p'tits rigolos qui emploie la variable FormXX déclarée automatiquement par Delphi dans le texte de leur classe de form, du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var
      Form1: TForm;
    ...
     
    procedure TForm1.FormDestroy (Sender: TObject);
    begin 
    ...
      Form1.Coucou := 'Je peux planter avec un plaisir inégalé';
    end;
    Rigolez pas (en 8 ans de Delphi, je l'ai vu un nombre incommensurable de fois, self a été défini pour les chiens!)

    avec la routine plus haut ça peut faire Boum à l'exécution


    Donc le mieux que tu as à faire reste de donner toujours un propriétaire en paramètre au constructeur.

    cdlt

    e-ric

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  9. #9
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 142
    Points : 120
    Points
    120
    Par défaut
    Merci de la leçon
    Je vais donc faire quelques expériences... et je passe en résolu.

    A+

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/04/2016, 15h29
  2. Comment intégrer des application au cd d'installation d'XP
    Par Tmutantv1 dans le forum Windows XP
    Réponses: 12
    Dernier message: 23/02/2009, 14h40
  3. comment intégrer des dll dans une application c#
    Par imene_t1 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 23/11/2007, 23h40
  4. Réponses: 8
    Dernier message: 29/11/2004, 16h28

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