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

C++Builder Discussion :

TCustomControl transparent ?


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Par défaut TCustomControl transparent ?
    Bonjour,

    j'ai réalisé un composant dérivant de TCustomControl.

    Pourquoi ce choix ?

    car mon composant intégre un second composant, un TTntLabel, pour pouvoir afficher des caractère unicode.

    Voici le composant (voir 1er pièce jointes)

    jusque là tout va bien.

    Mais j'ai voulu mettre mon composant sur un TImage, (voir 2ème pièces jointes), et là j'ai vu que le composant n'avait pas un fond transparent.

    J'ai alors cherché une solution, sur le forum et j'en ai trouvé une, la voici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void __fastcall TCellule::CreateParams(TCreateParams &Params){
      TCustomControl::CreateParams(Params);
      Params.ExStyle = Params.ExStyle | WS_EX_TRANSPARENT;
    }
    je l'ai donc mise en oeuvre et j'ai obtenu le résultat de la 3ème pièces jointes.

    Ce résultat me convenait jusqu'à ce que je souhaite mettre un tlabel par dessus mon composant.

    et là impossible de le mettre par dessus.

    j'ai donc chercher un peu partout sur le net, et j'ai trouvé que le fait de mettre le paramètre WS_EX_TRANSPARENT, signifer que mon composant était déssiné en dernier pour que le fond soit statique au moment du dessin de mon composant.

    Donc si je suis le raisonnement , comme mon composant et dessiné en dernier alors, je ne pourrai jamais mettre un composant au dessu du mien

    Donc j'aimerai dans un premier temps savoir si j'utilise la bonne méthode pour rendre mon composant transparent.

    et dans un second temps, si mon raisonnement est malheuresement correct en ce qui concerne la superposition des composants :/, et si je me trompe, si quelqu'un avait une solution a me proposé.

    Merci d'avance pour votre aide
    Images attachées Images attachées    

  2. #2
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Par défaut
    j'ai trouvé une solution pour afficher mon tlabel, comme mon composant "cellule" permet de contenir des controles (ceci est du au code suivant)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ControlStyle = ControlStyle   << csAcceptsControls;
    j'ai donc mis à l'intérieur mon tlabel et il me suffit de le rendre visible ou non

    en ce qui concerne la transparence du fond de ma "cellule", j'ai ajouté un complément au code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void __fastcall TCellule::CreateParams(TCreateParams &Params){
      TCustomControl::CreateParams(Params);
      Params.ExStyle = Params.ExStyle | WS_EX_TRANSPARENT;
    }
    j'ai ajouté ceci :

    .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        void __fastcall WMEraseBkgnd(TMessage &Msg);
     
    BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_ERASEBKGND, TMessage, WMEraseBkgnd)
    END_MESSAGE_MAP(TCustomControl)
    .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void __fastcall TCellule::WMEraseBkgnd(TMessage &Msg)
    {
      Msg.Result = false; 
    }
    j'ai du rajouter ceci, car lors de passage de déplacement de fenêtre en avant plan, la cellule dessiner parfois sont fond avec un fond gris.

    Donc maintenant la transparence et la superposition ne me pose plus de problèmes

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

Discussions similaires

  1. Composant TCustomControl avec fond transparent
    Par orelien dans le forum Composants VCL
    Réponses: 11
    Dernier message: 29/08/2013, 19h52
  2. comment faire un background transparent?
    Par guigui1005 dans le forum Composants
    Réponses: 5
    Dernier message: 17/05/2012, 21h45
  3. Comment rendre transparent le tour d un icone
    Par NeoRonin dans le forum Composants VCL
    Réponses: 7
    Dernier message: 03/03/2003, 01h40
  4. Réponses: 1
    Dernier message: 23/02/2003, 06h22
  5. ouverture d'une form en fondu transparent
    Par nicholz dans le forum Composants VCL
    Réponses: 9
    Dernier message: 08/01/2003, 11h06

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