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 TCustomControl avec fond transparent


Sujet :

Composants VCL Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Composant TCustomControl avec fond transparent
    Bonjour,

    J'aimerais créer un composant graphique sur lequel je puise dessiner (canvas) et qui puisse être focalisable. A priori je devrait utiliser la classe de base TCustomControl qui possède ces propriétés.

    Au moment du dessin, j'ai besoin de dessiner avec un fond transparent (comme sur les composants TShape). Or, avec la classe TCustomControl j'obtient toujours un fond opaque.

    Y a t'il un moyen de négliger le dessin de ce fond opaque (couleur grise ar défaut, comme les TPanel) pour ne laisser qu'une surface de dessin transparente ?

    Merci

    Orélien

  2. #2
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    en faisant un fillrect avec la property Brush.style = bsClear il me semble.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Composant TCustomControl avec fond transparent
    Non, ça ne fonctionne pas.
    A quel moment dois-je définir cette propriété ?

    Le composant se dessine toujours avec un fond opaque de la couleur de son parent. Je ne vois pas comment faire.

    Merci
    Orelien

  4. #4
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Faut surcharger la methode paint de ton composant et dessinier dans cette methode.
    Eventuelement eviter de faire un appel a Inherited, sinon on effectue le traitement de base.

    Sinon tu as les regions mais dans le cadre de decoupages non polygonale, c'ets plutot hard .....
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci de ta réponse.
    J'ai déjà tenté de surcharger la méthode Paint mais en vain.

    Aurais tu un exemple partant d'un composant TCustomControl par exemple ?
    Je dois faire une erreur quelque part mais je ne sais pas où.

    Merci
    Orelien

  6. #6
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    ok ... je tacherais de regarder ca demain des que j'ai 2 minutes
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  7. #7
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Supprimer csOpaque de la propriété ensemble ControlStyle. A faire normalement dans le constructeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    constructor TTonCompo.Create(AOwner: TComponent);
    begin
      inherited;
      ControlStyle := ControlStyle - [csOpaque];
    end;
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Avec la propriété "ControlStyle" cela ne fonctionne pas non plus .

    Si quelqu'un a un exemple... J'ai besoin que ce composant conserve sa transparence de fond lors de son déplacement également.

    Merci

    Orelien

  9. #9
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Salut,

    override WMEraseBkgnd du TCustomControl

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TMonComp.WMEraseBkgnd(var Message: TWmEraseBkgnd);
    begin
      message.Result := 0;
    end;
    devrais fonctionner.
    Bonne chance.
    Akim Merabet

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Bonsoir,

    Quelqu'un aurait-il un exemple ? Je ne vois pas ou je bloque, la transparence ne se fait pas et encore moins lorsque je déplace le composant à l'éxécution.

    Merci
    Orelien

  11. #11
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    normalement tout se passe dans la methode paint surchargée .... c'est la cette methode qui est responsable du dessin du composant.
    Je vais essayer deux ou trois trucs et si ca marche je t'enverrais le code.

    [EDIT]
    J'ai fait les tests et j'en suis arrive a la concusion suivante : Ca marche mais en fait la transparence joue uniquement sur le fond du parent, autrement dit si le composant est sur un TImage, la transparence reporte la couleur de la form "au travers du TImage".

    J'approfondi ....

    [EDIT 2]
    Bon ca y est je suis arrive a quelque chose de correct.
    En fait il faut deriver de TGraphicControl et non de TCustomControl.
    Apres faudra chercher dans les sources de ces classes pour voir ce qui change ....

    Sinon pour palier a un certain scintillement lors du deplacement, il faudra placer la property "doubleBuffered" du parent a true.

    Voila pour l'instant ... en esperant que ca debloquera un peu le smilblick

    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
     
    type
      TMonCompo = class(TGRaphicControl)
      Protected
        Procedure Paint; Override;
      Public
        Constructor Create(AOwner : Tcomponent); Override;
      End;
     
     
    Constructor TMonCOmpo.Create(AOwner : TComponent);
    Begin
    Inherited Create(AOwner);
    Self.ControlStyle := Self.ControlStyle - [csOpaque];
    End;
     
    Procedure TMonCompo.Paint;
    Begin
    Inherited Paint;
    Self.Canvas.Brush.Style := bsClear;
    Self.Canvas.FillRect(Self.Canvas.ClipRect);
     
    Self.Canvas.Brush.Style := bsSolid;
    Self.Canvas.FillRect(Rect(50, 50, 150, 150));
     
    End;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    Self.DoubleBuffered := True;
    Self.MC := TMonCompo.Create(Self);
    Self.MC.Parent := Self;
    Self.MC.SetBounds(100, 100, 200, 200);
    End;
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Nikel ca faisait un mois que je cherchais !! et je tombe sur ce post oggi !! cool !! je n arrivais pas a choper la transparence avec mon TCUSTOMCONTROL !! et avec le TGRAPHICOCNTROL nikel !! Merki !! quelqu un sait il d ou ca vient j'aimerai comprendre !

Discussions similaires

  1. .ico rond avec fond transparent
    Par simoryl dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 28/09/2006, 18h11
  2. Applet avec fond transparent
    Par yotta dans le forum Applets
    Réponses: 1
    Dernier message: 18/09/2006, 15h16
  3. [FLASH MX2004] Les images avec fond transparent
    Par Garra dans le forum Flash
    Réponses: 5
    Dernier message: 24/03/2006, 18h19
  4. Scène avec fond transparent
    Par jcs2 dans le forum OpenGL
    Réponses: 3
    Dernier message: 01/03/2006, 10h19
  5. Image avec fond transparent
    Par Virgile59 dans le forum Access
    Réponses: 3
    Dernier message: 16/09/2005, 11h48

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