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 :

Création de composants


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 74

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Par défaut Création de composants
    Bonjour,
    Mon problème est le suivant :
    J'ai crée des composants dérivés de TbitBtn, afin de normaliser les boutons dans mes applications,
    Je charge le bitmap dans le constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TtangBitBtn.ChargerGlyph(CName: String);
    begin
     
      Self.Glyph:=TBitmap.Create;
      Self.Glyph.LoadFromResourceName(HInstance,CName);
    End;

    Jusque là tout fonctionne bien,
    Maintenant je veux changer les images associées: je modifie mon fichier de ressources.
    Après reconstruction, j'ai toujours les anciennes images. La seule solution est d'ouvrir toutes les fiches et d'effacer les glyphs.
    Quelqu'un a t'il une idée ?
    Merci.
    MS

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 096
    Par défaut
    Dommage qu'il n'existe pas un TCustomBitBtn avec un Glyph non plublié !
    Cela aurait évité ce problème !

    Pense que Glyph a un accesseur donc ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Self.Glyph:=TBitmap.Create;
    revient à écrire cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Self.Glyph.Assign(TBitmap.Create);
    Alors même si il n'y a pas une duplication complète du HBITMAP (voir le code de TBitmap.Assign et l'utilisation interne de TBitmapImage), il y a une petite fuite mémoire à cause de l'instance inutile de TBitmap

    Normalement, tu peux retirer cette ligne !

    Ensuite, au lieu de le faire dans le constructor fait le dans le Loaded, cela devrait écraser le contenu de la DFM

    Tu as encore une autre solution, c'est redéclaré dans TtangBitBtn la propriété Glyph comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    property Glyph: TBitmap read GetGlyph stored false;
    Ainsi en lecture Seule elle ne sera pas enregistré dans le DFM
    La c'est le mystère, va-t-il ignorer si la DFM contient déjà une valeur ?
    ou va-t-il faire une erreur de flux ... à tester !

    et refaire ta fonction ChargerGlyph comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TtangBitBtn.ChargerGlyph(CName: String);
    begin
      Glyph.LoadFromResourceName(HInstance,CName);
    End;
    Il aurait pu être intéressant de faire une propriété
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    property GlyphName: string read GetGlyphName write ChargerGlyph;
    Normalement ChargerGlyph devrait s'appeler SetGlyphName

    Sinon, du coup, tu n'as plus d'image en DesignTime, cela doit être un peu perturbant ?
    Mais il est vrai que cela économise des ressources, la taille de l'exe doit être diminué si l'on ne répète pas les mêmes images standard n fois !
    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

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 74

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Par défaut
    Bonjour,
    En le faisant dans le loaded, cela marche nickel .
    Je regarde la seconde solution.
    Merci de ton aide.
    Bonne soirée.
    MS

  4. #4
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 74

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Par défaut
    Bonsoir,
    Je garde la première solution, elle fait exactement ce que je désire, la seconde me génère une exception.
    Par contre, j'ai bien les images en DesignTime.
    Encore merci.
    MS

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

Discussions similaires

  1. [Création de composant] Surcharge de OnMouseMove
    Par yoghisan dans le forum Composants VCL
    Réponses: 2
    Dernier message: 18/02/2004, 22h34
  2. [Création de composant] Composant exclu de ComponentCount
    Par yoghisan dans le forum Composants VCL
    Réponses: 6
    Dernier message: 18/02/2004, 12h45
  3. [Création de composant] Focus
    Par Pedro dans le forum Composants VCL
    Réponses: 4
    Dernier message: 16/02/2004, 13h57
  4. Ordre de création de composant
    Par bobby-b dans le forum Composants VCL
    Réponses: 4
    Dernier message: 15/09/2003, 19h05
  5. [Kylix] Création de composant
    Par glub dans le forum EDI
    Réponses: 2
    Dernier message: 08/01/2003, 16h58

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