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 :

Composant dessiner arrière-plan transparent


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2003
    Messages : 43
    Points : 57
    Points
    57
    Par défaut Composant dessiner arrière-plan transparent
    Bonjour à tous,

    Je voudrais savoir comment empêcher un contrôle de dessiner son arrière plan. Ainsi il affichera ce qu'il y a "derrière lui" ?

    Je pense qu'il faut surcharger Paint() mais que faire dedans ?

    Merci d'avance.

    Seb

  2. #2
    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!

    Si ton composant ne possède pas de propriété "transparent", il faudra dessiner toi-même l'arrière plan. C'est assez délicat dans la mesure où tu devras d'abord afficher l'arrière-plan à l'écran pour pouvoir le capturer pour ensuite afficher ton composant et redessiner l'arrière plan...

    J'espère avoir répondu à ta question cette fois-ci!
    à+
    De retour parmis vous après 10 ans!!

  3. #3
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Salut,

    Je pense qu'en surchargeant la procedure CreateParams de ton composant, le problème sera résolu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TMonCompo.CreateParams(var Params: TCreateParams);
    begin
      with Params do
        ExStyle := ExStyle and not WS_EX_TRANSPARENT;
    end;
    a+
    CV :
    - LinkedIn
    - Viadeo

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2003
    Messages : 43
    Points : 57
    Points
    57
    Par défaut
    Je vais tester tout ça !

    Mais par exemple, Tpanel n'a pas de propriété Transparent, et la jvcl en a rajouté une, et ça marche bien, et eux ne redesinne pas l'arrière plan à chaque, j'ai pas bien compris comment ils faisaient !

  5. #5
    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
    Si c'est le même genre de "transparent" que pour une form, c'est facile, le control n'existe plus!!

    Regarde ce topic, peut-être qu'il t'aidera :
    http://www.developpez.net/forums/viewtopic.php?t=110715

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

  6. #6
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    salut
    pourqoi pas utiliser tout simplement la propriété visible du contole a cacher
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2003
    Messages : 43
    Points : 57
    Points
    57
    Par défaut
    Bon, alors, en surchargeant CreateParams, ça ne change rien.

    Et en mettant visible à false, le controle ne recoit plus les evènements OnClick, etc... et les controles enfants sont invisible aussi, alors qu'il sont sensé être vu...

  8. #8
    Membre confirmé
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Points : 600
    Points
    600
    Par défaut
    Essaye en interceptant le message WM_ERASEBKGND, un exemple avec un TScrollBox, tous les controles à l'intérieur sont visibles mais pas le scrollBox
    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
     
    Type
      TConteneur = class(TScrollBox)
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
        constructor Create(AOwner: TComponent);override;
        procedure CreateParams(var Params: TCreateParams);override;
        procedure WMEraseBkgnd(var Msg: TWMEraseBkgnd); message WM_ERASEBKGND;
      end;
     
    procedure TConteneur.CreateParams(var Params: TCreateParams);
    begin
      inherited CreateParams(Params);
      Params.ExStyle := params.ExStyle  or WS_EX_TRANSPARENT;
    end;
     
    procedure TConteneur.WMEraseBkgnd(var Msg: TWMEraseBkgnd);
    begin
      SetBkMode( msg.DC, TRANSPARENT );
      msg.result := 1;
    end;
    ----------------------------------------------------
    Avant de poster, pensez à utiliser les différents outils à votre disposition:
    Google, la FAQ et le moteur de recherche.

  9. #9
    dem
    dem est déconnecté
    Membre habitué

    Inscrit en
    Juillet 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Juillet 2003
    Messages : 110
    Points : 137
    Points
    137
    Par défaut
    Citation Envoyé par lil_jam63
    Essaye en interceptant le message WM_ERASEBKGND, un exemple avec un TScrollBox, tous les controles à l'intérieur sont visibles mais pas le scrollBox

    Le problème, c'est que cela ne rend pas le contrôle transparent mais efface la zone qu'il occupe y compris les contrôles positionnés en dessous.

    J'ai bien essayé de comprendre comment fonctionnait la propriété Transparent de certains composants de la VCL, mais....

    Qq a une solution ?

  10. #10
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Salut, en fait j'ai essayé ce procédé, car j'ai un problème similaire.

    En mode édition sous Delphi, ça efface effectivement toutes les images en dessous.

    Par contre une fois compilé, sur mon programme cela fonctionne correctement.

    (mon CustomControl est un cercle du coup, il était dans un carré et je ne voulais pas voir les coins)

    j'ai des labels (indépendants) qui ce baladent dans ces "coins" (hors du cercle mais dans le carré contenant le cercle) et on les vois très bien après compilation.

    Sais pas si j'ai été clair avec mes histoires de carré et coin mais en gros, ça fonctionne ici (Delphi 6)

    Évidement je répond tardivement (extrêmement) pour les éventuels lecteurs.

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

Discussions similaires

  1. Texte avec arrière plan transparent
    Par papyxy dans le forum VBScript
    Réponses: 2
    Dernier message: 23/05/2013, 17h07
  2. Widget avec arrière-plan transparent
    Par Invité dans le forum Qt
    Réponses: 9
    Dernier message: 11/04/2011, 15h19
  3. Réponses: 3
    Dernier message: 27/11/2008, 16h50
  4. Arrière plan transparent
    Par Invité dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 07/06/2006, 12h43

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