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 :

Rendre TPageControl transparent


Sujet :

C++Builder

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Rendre TPageControl transparent
    Bonjour à tous!

    Je suis présentement à la recherche d'une solution pour mon problème... Je vous explique:

    J'ai réalisé une interface graphique avec PhotoShop et j'ai chargé le résultat dans Builder 5.

    Voici le résultat:



    Bref, je cherche à faire un logiciel style "page web" avec mon menu à gauche et le contenu au centre. Le contenu du centre sera plusieurs feuilles de TPageControl qui seront affichées selon ce que l'utilisateur a choisi dans le menu. Aucun problème jusqu'ici!

    Voila le problème : J'aimerais que le fond de TPageControl et de touts les TabSheets soient transparents afin qu'on puisse voir le dégradé de mon interface. Je suis certain que c'est possible car j'ai réussis a trouvé une composante qui le supportait, cependant, elle plantait lors de la création de feuilles.

    À noté qu'ici je n'utilise pas les Tabs mais bien les feuilles.

    Merci beaucoup!

  2. #2
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonsoir,

    Une idée en passant, non testée pour l'instant :
    Ne peut on pas imaginer dessiner la partie du dessin cachée par l'objet TPageControl avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PageControl1->Canvas->Draw(...) ;
    Il faudra alors aussi gérer le dessin des Tabs dans le OnDrawTab du TPageControl (propriété OwnerDraw a false).

    En espérant t'aider,
    @ +
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    L'idée est bonne, mais selon mes tests a moi elle ne fonctionne pas. Mais juste pour être certain voici ce que j'ai fait (Je ne suis pas très habile avec les fonctions de dessin)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void __fastcall TfrmMain::FormCreate(TObject *Sender)
    {
       Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
     
       pBitmap->LoadFromFile("C:\\Documents and Settings\\Sylvain\\Desktop\\pActive\\Image\\main2bmp.bmp");
     
       PageControl->Canvas->Draw(0,0,pBitmap);
    }
    Je l'aie aussi essayé dans OnDrawTab sans succès.

    J'ai peut-être pas la bonne manière (ça ne me surprendrais pas)

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Personne à des petits conseils à me donner?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 190
    Points : 179
    Points
    179
    Par défaut
    Bonsoir,
    Définit ta propre classe TPageControl héritant de TPageControl et surcharge la méthode CreateParams de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void __fastcall CreateParams(TCreateParams &Params){
      TPageControl::CreateParams(Params);
      Params.ExStyle = Params.ExStyle | WS_EX_TRANSPARENT;;
    }
    Cela devrait marcher.

    Cordialement,
    Benjamin

  6. #6
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut
    Je ne suis pas non plus un expert en graphisme, mais pour remplacer l'image de fond d'un composant, je crois qu'il faut remplacer sa méthode "Paint()". Ceci ce fait généralement avec une propriété "OnPaint()". Malheureusement, celle-ci n'est pas exposée dans le composant "TPageControl" (ni dans les TTabSheet d'ailleurs).

    Tu pourrais donc faire une composante qui hériterait de "TPageControl" et dans laquelle tu remplaces la fonction Paint() par une méthode qui ne dessine rien, ou alors l'image de ton dégradé. Mais je pense que tu devras aussi le faire avec pour un descendant de "TTabSheet" puisque les pages sont aussi opaque...

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    J'ai fait l'essai suivant, en créant deux nouvelles classes dérivées de TPageControl et TTabSheet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class jTabSheet : public TTabSheet
    {
    public :
        __fastcall jTabSheet(TComponent *AOwner, AnsiString N);
        __fastcall ~jTabSheet();
        void __fastcall CreateParams(TCreateParams &Params);
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class jPageControl : public TPageControl
    {
    public :
        __fastcall jPageControl(TComponent *Owner);
        __fastcall ~jPageControl();
        void __fastcall CreateParams(TCreateParams &Params);
    };
    Voici pour le .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
    __fastcall jTabSheet::jTabSheet(TComponent *AOwner, AnsiString N)
        : TTabSheet(AOwner)
    {
    Caption = N;
    if(AOwner->InheritsFrom(__classid(TPageControl))) PageControl = (TPageControl*)AOwner;
    Brush->Style = bsClear;//sans quoi chaque changement de page donne un plan grisé
    }
    __fastcall jTabSheet::~jTabSheet()
    {
    }
    void __fastcall jTabSheet::CreateParams(TCreateParams &Params)
    {
    TTabSheet::CreateParams(Params);
    Params.ExStyle = Params.ExStyle | WS_EX_TRANSPARENT;
    }
    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
    __fastcall jPageControl::jPageControl(TComponent *AOwner)
        : TPageControl(AOwner)
    {
    if(AOwner->InheritsFrom(__classid(TWinControl))) Parent = (TWinControl*)AOwner;
    SetBounds(20,20,220,220);
    BringToFront();
    new jTabSheet(this, "First"); //pour le test
    new jTabSheet(this, "Second"); //idem
    Brush->Style = bsClear; //sans quoi chaque changement de page donne un plan grisé
    }
    __fastcall jPageControl::~jPageControl()
    {
    }
    void __fastcall jPageControl::CreateParams(TCreateParams &Params)
    {
    TPageControl::CreateParams(Params);
    Params.ExStyle = Params.ExStyle | WS_EX_TRANSPARENT;
    }
    A l'usage, dans l'unité de Form1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    jPageControl *PageControl;
     
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    PageControl = new jPageControl(this);
    }
    Compte tenu de ma version BCB, j'ai fait ce que j'ai pu ici.
    Je n'ai pas été plus loin !

    A plus !

Discussions similaires

  1. Rendre JTables transparent
    Par snay13 dans le forum Composants
    Réponses: 7
    Dernier message: 19/08/2010, 12h33
  2. Rendre UserControl transparent
    Par Seth77 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/07/2008, 19h39
  3. Rendre le fond transparent dans une picturebox
    Par fun31 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/01/2005, 18h17
  4. Rendre une page d'un TPageControl invisible
    Par DevelOpeR13 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 10/06/2003, 11h26
  5. Comment rendre transparent le tour d un icone
    Par NeoRonin dans le forum Composants VCL
    Réponses: 7
    Dernier message: 03/03/2003, 01h40

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