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 :

[TPageControl] Comment le personnaliser ?


Sujet :

Composants VCL Delphi

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut [TPageControl] Comment le personnaliser ?
    Salut à tous,

    je cherche à personnaliser un TPageControl :

    je voudrais qu'il soit transparent mais je ne sais pas comment faire.
    J'ai penser partir d'un TPageControl et écrire un nouveau composant en surchargeant la méthode Paint...mais idem je bloque je ne sais pas comment faire.

    Quelqu'un peut il me donner une piste ?

    Merci d'avance pour votre aide !
    Neilos

  2. #2
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut
    tu peux éventuellement t'inspirer des sources (si tu les as ) des TSpeedButton qui peuvent être transparents (propriété flat) par contre si c'est une opacité variable, là, je ne sais pas...
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    Oui j'avais pensé faire quelque chose comme cela mais le problème c'est que TSpeedButton descend d'un TGraphicControl alors que TPageControl descend d'un (TCustomTabControl qui descend d'un) TWinControl.

    Je veux bien faire le dessin moi même (j'ai déjà un peu essayé mais sans succès) mais je rencontre les problèmes suivants :

    - il faut stocker la liste des TTabSheet...ça encore c'est faisable
    - mais surtout il faut dessiner les composants du TTabSheet actif et là je sais pas du tout comment faire. Surtout que ceux-ci doivent aussi réagir aux actions de l'utilisateur....
    Neilos

  4. #4
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    OK
    regarde ce que ça donne si tu surcharges Paint sans rien, même pas inherited...
    Sinon va voir aussi du coté de la fonction CreateParams... Il y plein de trucs intéressants la-dedans

    Bonne chance
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    OK je vais voir du côté de la fonction CreateParams et je te tiens au courant.

    Merci pour ton aide, j'ai déjà pas mal chercher et là j'allais craquer lol !
    Neilos

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    Salut,

    dans les styles étendus de Windows il y a bien un :

    Citation Envoyé par MSDN
    WS_EX_TRANSPARENT Specifies that a window created with this style is to be transparent. That is, any windows that are beneath the window are not obscured by the window. A window created with this style receives WM_PAINT messages only after all sibling windows beneath it have been updated.
    qu'il faudrait mettre dans le membre ExStyle d'un TCreateParams.

    Par contre je ne comprend pas trop le rôle de la fonction CreateParams...ni à quel moment je devrais l'appeler lors de l'écriture de mon composant (car il faut l'écrire, la fonction n'est pas accessible si on prend un TPageControl.
    Neilos

  7. #7
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    C'est simple
    tu surcharges la procedure CreateParams et dans celle-ci, tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Component.WindowStyle:=WindowComponent.Style+[WS_EX_TRANSPARENT]
    inherited;
    A vérifier...
    Et normalement ça devrait marcher
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  8. #8
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Salut!

    J'ai déjà eu l'occasion de trouver sur le forum une fonction qui permet d'attribuer un Canvas à un control qui n'en a pas... Je ne sais pas si cela peut t'aider ou si tu as trouvé une solution depuis, donc demande-moi si ça t'intéresse...

    à+
    De retour parmis vous après 10 ans!!

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    Alors en appliquant la méthode avec la fonction CreateParams :

    ça marche le contrôle est transparent, mais il a encore des bords 3D que je voudrais éviter.

    Par contre à partir du moment où on ajoute une page c'est foutu : la transparence disparait et ne revient pas...je pense qu'il faut encore faire la même modification sur les TTabSheet utilisés par le TPageControl transparent baptisé pour l'occasion TTransparentPageControl....je vais voir ce que je peux faire.

    Si je n'y arrive pas comme ça ta méthode m'interesserais Sub0 et peut être même si j'y arrive, par simple curiosité !

    EDIT : en fait la transparence ne se met pas à jour. Par exemple après un changement de page ou bien un déplacement du fond la transparence n'est plus là. Je me demande : la fonction CreateParams est bien appelée lors de la création de l'objet ? Ou bien à chaque Paint ?....
    Neilos

  10. #10
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Je ne sais pas si cela correspond à ce que tu recherches...

    http://sub0.developpez.com/delphi/TranspPageControl.zip

    Pour supprimer la bordure, j'ai mis le PageControl dans un Panel légèrement plus petit...

    à+
    De retour parmis vous après 10 ans!!

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    C'est une solution merci beaucoup ! Je n'avais pas pensé à l'astuce du TPanel !!!!

    Je vais étudier cela de plus prêt pour voir si ça va bien dans mon projet !

    Merci infiniment
    Neilos

  12. #12
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    Tout fonctionne impecablement, je n'ai pas besoin de la transparence de la fiche, par contre ton astuce du TPanel m'a montré à quel point je me compliquait la vie pour rien !!!

    Merci beaucoup !
    Neilos

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/02/2007, 19h38
  2. Erreur 3167, comment la personnaliser ???
    Par snoopy69 dans le forum Access
    Réponses: 10
    Dernier message: 16/05/2006, 13h11
  3. [TPageControl] Comment afficher un onglet spécifique ?
    Par lassmust dans le forum Composants VCL
    Réponses: 4
    Dernier message: 16/11/2005, 14h00
  4. Comment geler le repaint d'un TPageControl ?
    Par qi130 dans le forum Composants VCL
    Réponses: 19
    Dernier message: 20/12/2004, 22h30
  5. [MFC] Comment personnaliser sa police de caractères ?
    Par Guybrush113 dans le forum MFC
    Réponses: 11
    Dernier message: 26/05/2004, 07h29

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