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 :

Composant utilisant GDIPlus dans un package


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Novembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 11
    Par défaut Composant utilisant GDIPlus dans un package
    Bonjour,

    J'ai créé des composants graphiques utilisant GDIPLus à l'aide de l'implémentation faite par Prodigy (http://www.progdigy.com/).
    J'ai mis ces composants dans un package Delphi (BPL).

    J'utilise ce package dans plusieurs applications. Parfois (rarement) une application ne se ferme pas correctement quand je la quitte: il n'y à plus rien à l'écran mais je peux encore la voir dans la liste de tâche Windows. Je dois alors la tuer manuellement.

    L'utilisation de GDIPLus demande une initialisation(GdiplusStartup) et une finalisation (GdiplusShutdown).

    J'ai fait des recherches sur Internet et j'ai vu que cette initialisation et finalisation ne pouvait pas ce faire dans une DLL

    http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

    Do not call GdiplusStartup or GdiplusShutdown in DllMain or in any function that is called by DllMain. If you want to create a DLL that uses GDI+, you should use one of the following techniques to initialize GDI+:

    * Require your clients to call GdiplusStartup before they call the functions in your DLL and to call GdiplusShutdown when they have finished using your DLL.
    * Export your own startup function that calls GdiplusStartup and your own shutdown function that calls GdiplusShutdown. Require your clients to call your startup function before they call other functions in your DLL and to call your shutdown function when they have finished using your DLL.
    * Call GdiplusStartup and GdiplusShutdown in each of your functions that make GDI+ calls.


    Dans l'implémentation de Prodigy il y a dans l'unité "GDIPOBJ.pas" un appel à GdiplusStartup dans la section Initialization et un appel à GdiplusShutdown dans la section Finalization.
    J'ai donc retiré ces deux appels et ajouté deux fonctions InitGDIPLus et FinishGDIPlus que j'appelle directement dans mon application finalle (dans les section Initialization et Finalization d'une de mes unités).

    Tout à l'air de marcher (je n'ai cependant pas fait de tests intensifs).
    Ce qui m'étonne c'est que quand j'ouvre mon application avec Delphi je peux voir mes composants GDIPlus dans mes TForm sans aucun problème. Poutant dans ce cas il n'y eu aucun appel a la fonction d'initialisation de GDIPlus (GdiplusStatup). Je me demande si cela va durer et si je ne devrais pas faire par exemple un appel à InitGDIPlus et FinishGDIPlus dans une des unités de mon Package de conception.

    Quelqu'un à t'il une expérience dans ce domaine ?

    Merci d'avance.

  2. #2
    Membre Expert Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut
    Citation Envoyé par BeeB1 Voir le message
    Ce qui m'étonne c'est que quand j'ouvre mon application avec Delphi je peux voir mes composants GDIPlus dans mes TForm sans aucun problème. Poutant dans ce cas il n'y eu aucun appel a la fonction d'initialisation de GDIPlus (GdiplusStatup). Je me demande si cela va durer et si je ne devrais pas faire par exemple un appel à InitGDIPlus et FinishGDIPlus dans une des unités de mon Package de conception.
    As-tu reconstruit ton paquet de conception avec GDIPOBJ.pas modifié ?
    Si ce n'est pas le cas, c'est normal, ton paquet de conception contient toujours la version compilée avec l'initialization et la finalization.
    Ce qui m'etonne, c'est que si le bpl utilisé par delphi contient ces appels, ton delphi devrait planter lui aussi a la fermeture !

  3. #3
    Membre habitué
    Inscrit en
    Novembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 11
    Par défaut
    Non, je n'ai pas reconstruit le paquet de conception qui contient donc toujours l'ancien GDIObj.pas.
    ça explique en effet pourquoi je peux toujours voir mes composants à travers l'EDI de Delphi.
    Si je dois reconstruire le paquet de conception il faudra alors que je remette un appel à GdiplusStartup et à GdiplusShutdown dans les sections d'initialization et de finalization dans une unité qui ne se retrouve que dans mon paquet de conception.

    Tu as raison, en faisant ça il y a le risque que Delphi plante à la fermeture. Mais je préfère que ce soit Delphi qui plante plutôt que mon application.

  4. #4
    Membre Expert Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut
    Citation Envoyé par BeeB1 Voir le message
    Si je dois reconstruire le paquet de conception il faudra alors que je remette un appel à GdiplusStartup et à GdiplusShutdown dans les sections d'initialization et de finalization dans une unité qui ne se retrouve que dans mon paquet de conception.
    je penses que c'est ce que j'aurai fait aussi

  5. #5
    Membre habitué
    Inscrit en
    Novembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 11
    Par défaut
    Ok, merci

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/04/2010, 15h40
  2. Réponses: 5
    Dernier message: 17/11/2009, 21h37
  3. Réponses: 4
    Dernier message: 09/04/2009, 14h32
  4. Réponses: 1
    Dernier message: 25/03/2008, 22h11
  5. [Debutant(e)]comme utiliser un .jar dans un package
    Par dietrich dans le forum Eclipse Java
    Réponses: 13
    Dernier message: 22/12/2005, 15h57

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