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 :

Mettre le composant TPanel transparent


Sujet :

C++Builder

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 14
    Points : 8
    Points
    8
    Par défaut Mettre le composant TPanel transparent
    Bonjour !!
    Est-ce possible de mettre le composant TPanel transparent ou lui donner une opacité (comme la valeur AlphaBlend d'un TForm).
    Merci

  2. #2
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Salut, j'imagine que tu utilises un projet VCL et non FireMonkey?

    Pour la VCL regarde le code du composant TJvCustomArrangePanel qui est utilisé en héritage de TJvPanel pour le projet JVCL. Il possède une propriété Transparent. Je pense qu'une partie de la magie se passe dans la méthode TJvCustomArrangePanel.Paint.

    Donc, soit tu utilises le composant TJvPanel ou que tu te fabrique ton propre composant en te basant sur le code de celui qui existe.
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Crayon Voir le message
    Salut, j'imagine que tu utilises un projet VCL et non FireMonkey?

    Pour la VCL regarde le code du composant TJvCustomArrangePanel qui est utilisé en héritage de TJvPanel pour le projet JVCL. Il possède une propriété Transparent. Je pense qu'une partie de la magie se passe dans la méthode TJvCustomArrangePanel.Paint.

    Donc, soit tu utilises le composant TJvPanel ou que tu te fabrique ton propre composant en te basant sur le code de celui qui existe.
    Salut Crayon !!
    Merci pour les liens, C'est bon j'ai réglé le problème de transparence, et voici ma première solution (car ceci marche seulement si le parent est un TForm) :
    1 - Créer une nouveau composant qui hérite de TCustomPanel et le installer dans un package souhaité.
    2 - Dans le header (.h):
    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
     
    #ifndef TTransparentPanelH
    #define TTransparentPanelH
    //---------------------------------------------------------------------------
    #include <System.SysUtils.hpp>
    #include <System.Classes.hpp>
    #include <Vcl.Controls.hpp>
    #include <Vcl.ExtCtrls.hpp>
    //---------------------------------------------------------------------------
    class PACKAGE TTransparentPanel : public TCustomPanel
    {
    private:
    protected:
    	void __fastcall CreateParams(Controls::TCreateParams &Params);
    public:
    	__fastcall TTransparentPanel(TComponent* Owner);
    __published:
    };
    //---------------------------------------------------------------------------
    #endif
    Bien sure vous pouvez ajouter d'autres propriétés.
    3 - Dans le fichier source (.cpp) :
    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
    39
    40
     
    //---------------------------------------------------------------------------
    //UIElements : c'est le nom de package
    #include <vcl.h>
     
    #pragma hdrstop
     
    #include "TTransparentPanel.h"
    #pragma package(smart_init)
    //---------------------------------------------------------------------------
    // ValidCtrCheck est utilisée pour garantir que les composants créés n'ont pas
    // de fonctions virtuelles pures.
    //
     
    static inline void ValidCtrCheck(TTransparentPanel *)
    {
    	new TTransparentPanel(NULL);
    }
    //---------------------------------------------------------------------------
    __fastcall TTransparentPanel::TTransparentPanel(TComponent* Owner)
    	: TCustomPanel(Owner)
    {
        BevelOuter = bvNone;
    }
    //---------------------------------------------------------------------------
    namespace Ttransparentpanel
    {
    	void __fastcall PACKAGE Register()
    	{
    		TComponentClass classes[1] = {__classid(TTransparentPanel)};
    		RegisterComponents(L"UIElements", classes, 0);
    	}
    }
    //---------------------------------------------------------------------------
    void __fastcall TTransparentPanel::CreateParams(Controls::TCreateParams &Params)
    {
       TCustomPanel::CreateParams(Params);
       Params.ExStyle = Params.ExStyle | WS_EX_TRANSPARENT;
       ControlStyle = ControlStyle << csOpaque;
    }
    Plus précisément mes besoins sont :
    1 - Créer un composant (TPanel si possible) transparent (pour l'opacité je peux utiliser une image transparente) qui peut être placé en dessus de chaque composant dans la fenêtrer.
    2 - Et qui peut être un container de d'autres éléments aussi.
    Mon premier besoin à pour but de mettre les autres éléments de la fenêtre inaccessible sans les cacher (éviter de jouer sur la propriété Enabled).
    Et mon deuxième besoin à pour but de créer des calques container.

    Merci une autre fois Crayon !!

Discussions similaires

  1. Composant graphic "transparent" aux événements sou
    Par jmborbe dans le forum Composants VCL
    Réponses: 5
    Dernier message: 04/11/2005, 17h17
  2. [Composant] Panel transparent paramétré
    Par Pedro dans le forum Composants VCL
    Réponses: 2
    Dernier message: 08/10/2005, 18h43
  3. [JTable] Mettre un composant Swing dans une cellule
    Par NeptuS dans le forum Composants
    Réponses: 4
    Dernier message: 09/09/2005, 12h18
  4. [Conception] Mettre un Composant incliquable
    Par Manopower dans le forum Composants VCL
    Réponses: 2
    Dernier message: 23/08/2005, 14h04
  5. [Composant] La transparence
    Par Nuts07 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 22/05/2003, 14h51

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