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 :

comment rendre un composant transparent


Sujet :

Composants VCL Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut comment rendre un composant transparent
    bonjour,

    je voudrais savoir s'il y a un moyen pour rendre un composant transparent

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Lequel ?
    Des composants, il y en a plein !
    un TGraphicControl, hérite le et retravaille la méthode Paint pour gérer la transparence
    un TWinControl, certains seront plus facile à retravailler que d'autres, voir les Style VCL et le Style Hook

    Quel type de transparence ?
    Transparence totale, on voit ce qu'il y a derrière, le TPanel ou TGroupBox en ParentBackground à true est une parfaitement illustration
    Si tu ajoutes un Panel par dessus un TImage et qu'il partage le même parent, tu verras l'image à travers le panel

    Transparence avec un degré d'opacité ?
    Le TForm le gère avec AlphaBlend et AlphaBlendValue, tu peux d'ailleurs, ensuite dessiner via des TShape et des panels imbriqués des trous dans la TForm
    Et selon la valeur dans AlphaBlendValue, tu aurais un effet translucide plus ou moins élevée !

    Enfin, voir les Régions Windows : Comment personnaliser la forme de sa fiche ?



    En FMX : FMX.Controls.TControl.Opacity
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    et pour Tdbgrid?

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    bonjour,

    et si on connaissait la version de DELPHI déjà ! ce que l'on peut faire avec XEn et FMX n'est pas la même chose que ce que l'on peut faire avec D7 .
    Ensuite cette notion de transparence ?! c'est flou (sans jeu de mots) c'est dans quel but ? avoir un fond dans la grille , avoir une vrai transparence c.a.d voir une fiche sous-jacente ?

    pour information un DBGrid est un Stringgrid amélioré , pour atteindre les déclarations privées , un "Hack" d'une dbgrid est faisable , j'en ai fait une démonstration il y a peu ici
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    et si on connaissait la version de DELPHI déjà ! ce que l'on peut faire avec XEn et FMX n'est pas la même chose que ce que l'on peut faire avec D7 .
    je suis sur delphi 2009
    Ensuite cette notion de transparence ?! c'est flou (sans jeu de mots) c'est dans quel but ? avoir un fond dans la grille , avoir une vrai transparence c.a.d voir une fiche sous-jacente ?
    j'ai une fiche "form1" avec une image qui remplit toute la surface de le fiche
    et je voudrais que le dbgrid ne cache pas l'image derrière

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    j'ai une fiche "form1" avec une image qui remplit toute la surface de le fiche et je voudrais que le dbgrid ne cache pas l'image derrière
    C'est bien joli la transparence, mais il faut choisir si on veut avoir une bonne visibilité sur le contenu du dbgrid ou sur l'image de derrière : trop de transparence rend les infos illisibles.

    Mais bon ça ne résout pas ton problème.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Re-bonjour,

    Avec un coup d'oeil dans Google j'ai trouvé ici : http://delphiunair.blogspot.fr/2007/...nt-dbgrid.html
    - un bout de code qui permet de rendre un dbgrid transparent,
    - et une image qui montre bien que le texte du dbgrid est presque illisible à cause de la transparence.

    Mais à chacun ses goûts.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    @Gilbert , c'est pas tout a fait ce qui est voulu , mais je suis d'accord c'est carrément illisible !

    @checkal si c'est le résultat voulu , smdbgrid le fait déjà chercher smcomponents , ainsi que la TMSGrid je crois
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    je vous remercie beaucoup pour l'exemple.

    mais pour répondre à vos intégorations
    et une image qui montre bien que le texte du dbgrid est presque illisible à cause de la transparence.

    c'est pas tout a fait ce qui est voulu , mais je suis d'accord c'est carrément illisible !
    j'utilise une fiche avec un Timage qui contient pas vraiment une photo mais bien des couleurs en dégradé et c'est pas du tout illisible.

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    chekkal : je vous remercie beaucoup pour l'exemple.
    ... De rien, mais avant de remercier faudrait tester si l'exemple marche correctement car j'ai posté le lien sans tester le code.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    Bien pensé @gilbert, je crois que j'ai crée victoire un peu trop tôt.

    en effet, j'ai testé le code et il marche pas, déjà je sais pas à quoi sert le "panel1", je crois que l'erreur que j'ai faite que je n'ai pas crée le Tpanel

  12. #12
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    Chekkal : je crois que j'ai crée victoire un peu trop tôt.
    en effet, j'ai testé le code et il marche pas.
    ... Dans ce cas enlèves le tag 'Resolu'.

    déjà je sais pas à quoi sert le "panel1", je crois que l'erreur que j'ai faite que je n'ai pas crée le Tpanel
    Je crois la même chose car la procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer) se termine par DBGrid1.refresh;
    ... ce qui laisse penser que le résultat n'apparaît qu'après avoir cliqué sur ce Panel1.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  13. #13
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    Vérification faite, la transparence marche sans utiliser la procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
    Par contre il est nécessaire d'utiliser panel1 car la procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState) utilise la position du panel1 dans BitBlt(..)
    En plus la procedure TForm1.DBGrid1DrawDataCell peut être modifiée pour obtenir de la transparence avec une StringGrid : voir le Zip.

    Pour la DBGrid, la transparence apparaît au click sur le bouton, et je me suis simplifié la vie en l'appliquant aux 2 premières lignes.

    Au fait, j'en profite pour une petite question : Quel est l'avantage d'utiliser DBGrid plutôt que StringGrid ???

    A+.
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

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

Discussions similaires

  1. Comment Rendre les contrôles transparents ?
    Par justgreat dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 21/12/2010, 02h25
  2. [C#]Comment rendre un label transparent ?
    Par Kcirtap dans le forum Windows Forms
    Réponses: 20
    Dernier message: 05/08/2009, 16h35
  3. Comment rendre un TcxImage transparent ?
    Par jeffray03 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 05/09/2008, 14h22
  4. Comment rendre un menu transparent?
    Par casho dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 22/09/2006, 15h27
  5. [SWING][GlassPane] comment rendre un fond transparent ?
    Par PoPeio dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 11/04/2006, 01h55

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