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

Delphi Discussion :

[ DEBUTANT ] : Voile effet transparent


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2020
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : décembre 2020
    Messages : 27
    Points : 17
    Points
    17
    Par défaut [ DEBUTANT ] : Voile effet transparent
    Bonjour à tous,

    Je voudrais faire une effet voile un peut transparent.
    Je m'explique.

    Nom : voile.PNG
Affichages : 99
Taille : 24,2 Ko

    Comme le montre la photo, je possède un menu. (Désolé c'est le seul exemple que j'ai trouvé)


    Lorsque je clic sur le menu, les autres parties possèdent un voile transparent permettant de bloquer leur fonctionnalités.
    Comment puis-je faire ce voile ?

    Merci à tous

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    12 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 12 640
    Points : 34 116
    Points
    34 116
    Billets dans le blog
    49
    Par défaut
    Version de Delphi ?
    Type de programme VCL ou FMX ?

    FMX, j'écrirais d'utiliser un panel avec un opacité de 0.7 voir moins aligné alcontent, en premier plan et de le rendre visible à l'ouverture du menu et invisible à sa fermeture
    VCL, plus ou moins le même principe mais la transparence ...
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  3. #3
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : novembre 2006
    Messages : 587
    Points : 3 157
    Points
    3 157
    Billets dans le blog
    2
    Par défaut
    Bonsoir,

    Il y a déjà des composants pour faire cela mais ils sont différents en fonction du framework utilisé (VCL ou FMX).

    Sous FMX, c'est le composant TMultiView (il y a un exemple dans les démos fournies avec Delphi nommé MultiViewDemo), avec la VCL c'est le TSplitView (il y a également une démo fournie). Dans les deux cas, ces composants permettent d'avoir un menu coulissant sur le côté (droite ou gauche). Par contre, l'utilisation de ces composants est différente :

    - sous FMX le composant peut être associé directement à un bouton (pour réaliser un menu hamburger par exemple) et il gère déjà le "voile transparent" sur le reste de l'interface.
    - sous la VCL, il faudra gérer l'ouverture/fermeture du menu via un clic sur un bouton par exemple et dans les événements OnClosing et OnOpening gérer l'accès aux éléments (propriété enabled des composants). Pour la transparence, je ne sais pas, ça demanderait un peu réflexion, mais déjà le fait de jouer sur la propriété enabled des composants doit se remarquer (les composants apparaissant grisés ou non).
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    5 094
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : septembre 2008
    Messages : 5 094
    Points : 11 136
    Points
    11 136
    Par défaut
    VCL
    Jusqu'à Seven la transparence n'était possible que sur les fenêtres de premier niveau (les fiches) mais depuis Windows 8 elle est également supportée par les fenêtres enfants (tous les composants dérivant de TWinControl).

    Pour un panel, ça donnerait ceci pour une opacité de 60% :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SetWindowLongPtr(Panel1.Handle, GWL_EXSTYLE, GetWindowLongPtr(Panel1.Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
    SetLayeredWindowAttributes(Panel1.Handle, 0, 155, LWA_ALPHA);
    On peut ajouter cela à un assistant de classe et pendant qu'on y est traiter la transparence par couleur :
    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
    type
      TWinControlHelper = class helper for TWinControl
        procedure SetOpacity(aOpacity :byte; aTransparentColor :TColor = clNone);
      end;
     
    uses System.Math;
     
    procedure TWinControlHelper.SetOpacity(aOpacity: byte; aTransparentColor :TColor);
    begin
      var ExStyle := GetWindowLongPtr(Handle, GWL_EXSTYLE);
      var Flags   := IfThen(aOpacity < High(aOpacity), LWA_ALPHA) or
                     IfThen(aTransparentColor <> clNone, LWA_COLORKEY);
     
      if Flags <> 0 then
      begin
        SetWindowLongPtr(Handle, GWL_EXSTYLE, ExStyle or WS_EX_LAYERED);
        SetLayeredWindowAttributes(Handle, aTransparentColor, aOpacity, Flags);
      end
      else SetWindowLongPtr(Handle, GWL_EXSTYLE, ExStyle and not WS_EX_LAYERED)
    end;
    Et ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Panel1.SetOpacity(150, clBlack);
    Edit1.SetOpacity(100);
    StringGrid1.SetOpacity(200);
    A noter que SetOpacity(0) serait identique à Visible := FALSE et que appeler cette méthode sur la fiche reviendrait à jouer avec les propriétés AlphaBlend/AlphaBlendValue.

Discussions similaires

  1. [Debutant]Transparence sur un Label ou GroupBox
    Par ghan77 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 15/12/2005, 16h53
  2. [debutant]effet sur le curseur
    Par charaf dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 15/11/2005, 21h24
  3. faire un effet de transparence sur un bloc div ?
    Par piff62 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 08/03/2005, 00h04
  4. [DX9] [Debutant] Problème de transparence :(
    Par SekYo dans le forum DirectX
    Réponses: 5
    Dernier message: 10/09/2004, 14h19
  5. [ debutant ] effet ecriture a la main
    Par jaimepasteevy dans le forum Flash
    Réponses: 4
    Dernier message: 15/06/2004, 17h15

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