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 :

transparence partielle d'une couleur de tform


Sujet :

Delphi

  1. #1
    Membre éclairé

    Inscrit en
    Novembre 2002
    Messages
    813
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 813
    Par défaut transparence partielle d'une couleur de tform
    Bonjour

    Je cherche a avoir une couleur d'une form semi-transparente.
    La propriété "transparence" de la form en fonction d'une couleur ne me convient pas, car dans ce cas la couleur sélectionnée est complétement transparente et non semi-transparente.
    Et la propriété "Alphablend" permet une semi-transparence mais sur l’intégralité de la fenêtre.

    Mon souhait: Une fenêtre sans bordure qui s'ouvre en plein écran avec un panel en son centre, qui lui ne rempli pas tout l'écran. Lorsque cette fiche est affichée, uniquement ce qui est autour du panel est affiché dans un gris transparent pour laisser voir ce qui est dessous.

    Je ne sais pas si cela est possible avec delphi, si vous avez des idées ?

    bonne soirée.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 982
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 982
    Par défaut
    On dirait un simulacre un UAC Prompt :

    Nom : uac-credential-prompt.png
Affichages : 235
Taille : 309,5 Ko
    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
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 569
    Billets dans le blog
    65
    Par défaut
    Bonjour,
    en utilisant FMX c'est tout à fait possible, avec VCL qui n'aime pas trop les couches Alpha j'avoue ne pas avoir idée.
    Note : Il serait bon de toujours indiqué la version de Delphi utilisée pour ce genre de demande.

  4. #4
    Membre éclairé

    Inscrit en
    Novembre 2002
    Messages
    813
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 813
    Par défaut
    Bonjour à vous deux,

    Oui ShaiLeTroll, c'est ce que j'aurai aimé faire comme aperçu.
    Et oui aussi pour SergioMaster, j'aurai pu indiquer ma version qui bien en VCL (n'étant que sous la VCL je n'y pense pas toujours à l'indiquer).

    bonne journée.

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 910
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Serait-il possible d'afficher une fiche 1/2 transparente qui remplit l'écran et d'y définir une région correspondant à la zone centrale, dans laquelle afficher une fiche opaque ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 982
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 982
    Par défaut
    Sinon, on peut superposer deux fiches
    Une qui fait fait le fond et une autre qui fait le Popup

    J'ai essayé de mettre un fiche dans une fiche, la fiche enfant ne peut pas aller contre la fiche parent
    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

  7. #7
    Membre éclairé

    Inscrit en
    Novembre 2002
    Messages
    813
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 813
    Par défaut
    Bonjour,

    L'idée de "Tourlourou" , m'a fait aboutir à la solution de "ShaiLeTroll'.

    J'utilise une fiche plein écran, sans bordure, non modale et avec la transparence voulue. Je l'intercale sous la fiche que je souhaite afficher au 1er plan et en évidence.
    Cela fonctionne bien, c'est fluide sur mon pc de bureau. Mais cette appli doit tourner sur un pc moins performant (petit pc embarqué) , je verrai le résultat final le moment venu.

    merci a vous.

  8. #8
    Membre expérimenté
    Homme Profil pro
    ‫‬
    Inscrit en
    Septembre 2024
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : ‫‬

    Informations forums :
    Inscription : Septembre 2024
    Messages : 143
    Par défaut
    On peut utiliser SetColorAdjustment pour contrôler la luminosité, contraste couleurs d'une canvas pour obtenir le même effet visuel.

    unit1.pas
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    unit Unit1;
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, ComCtrls, StdCtrls;
     
    type
     
      TForm1 = class(TForm)
        AjustPanel: TPanel;
        Label1: TLabel;
        Label4: TLabel;
        Label3: TLabel;
        Label2: TLabel;
        ContrBar: TTrackBar;
        LumBar: TTrackBar;
        ColorBar: TTrackBar;
        GammaBar: TTrackBar;
        BReset: TButton;
        DbgLab: TLabel;
        procedure FormCreate(Sender: TObject);
        procedure BResetClick(Sender: TObject);
        procedure FormPaint(Sender: TObject);
        procedure ContrBarChange(Sender: TObject);
        procedure FormResize(Sender: TObject);
        procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
      private
        FBitmap: TBitmap;
        procedure UpdateView();
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      Rc: TRect;
      C: TCanvas;
    begin
      FBitmap  := TBitmap.Create;
      GetWindowRect(GetDesktopWindow, Rc) ;
      FBitmap.Width := Rc.Right - Rc.Left;
      FBitmap.Height := Rc.Bottom - Rc.Top;
      C := TCanvas.Create;
      C.Handle := GetDc(0);
      FBitmap.Canvas.CopyRect(Rc, C, Rc);
      C.Free;
    end;
     
    procedure TForm1.UpdateView;
    var
      Aj: TColorAdjustment;
    begin
        SetStretchBltMode(Canvas.Handle, HALFTONE);
        GetColorAdjustment(Canvas.Handle, Aj);
     
        Aj.caContrast     := ContrBar.Position;
        Aj.caBrightness   := LumBar.Position;
        Aj.caColorfulness := ColorBar.Position * 10;
        Aj.caRedGamma     := GammaBar.Position * 100;
        Aj.caGreenGamma   := Aj.caRedGamma;
        Aj.caBlueGamma    := Aj.caRedGamma;
     
        SetColorAdjustment(Canvas.Handle,Aj);
        with Canvas do
          CopyRect(BoundsRect, FBitmap.Canvas, BoundsRect);
     
    end;
     
    procedure TForm1.BResetClick(Sender: TObject);
    begin
       ContrBar.Position:= 0;
       LumBar.Position:= 0;
       ColorBar.Position:= 0;
       GammaBar.Position:= 100;
    end;
     
    procedure TForm1.FormPaint(Sender: TObject);
    begin
       UpdateView();
    end;
     
    procedure TForm1.ContrBarChange(Sender: TObject);
    begin
       UpdateView();
       DbgLab.Caption := Format('lum:%d const:%d color:%d gam:%d',[
          LumBar.Position,
          ContrBar.Position,
          ColorBar.Position,
          GammaBar.Position
         ])
    end;
     
    procedure TForm1.FormResize(Sender: TObject);
    begin
      AjustPanel.SetBounds(
          (Width - AjustPanel.Width) div 2,
          (Height - AjustPanel.Height) div 2,
           AjustPanel.Width,
           AjustPanel.Height
      );
    end;
     
    procedure TForm1.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
    begin
      if Msg.CharCode = VK_ESCAPE then
      begin
         ModalResult := mrCancel;
         Close;
      end;
    end;
     
    end.
    unit1.dfm
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    object Form1: TForm1
      Left = 213
      Top = 161
      BorderStyle = bsNone
      Caption = 'Form1'
      ClientHeight = 290
      ClientWidth = 528
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Verdana'
      Font.Style = []
      OldCreateOrder = False
      WindowState = wsMaximized
      OnCreate = FormCreate
      OnPaint = FormPaint
      OnResize = FormResize
      OnShortCut = FormShortCut
      PixelsPerInch = 96
      TextHeight = 13
      object AjustPanel: TPanel
        Left = 112
        Top = 80
        Width = 321
        Height = 137
        TabOrder = 0
        object Label1: TLabel
          Left = 16
          Top = 21
          Width = 56
          Height = 13
          Caption = 'Contraste'
        end
        object Label4: TLabel
          Left = 16
          Top = 92
          Width = 45
          Height = 13
          Caption = 'Gamma'
        end
        object Label3: TLabel
          Left = 16
          Top = 70
          Width = 45
          Height = 13
          Caption = 'Couleur'
        end
        object Label2: TLabel
          Left = 16
          Top = 45
          Width = 46
          Height = 13
          Caption = 'Lumi'#232're'
        end
        object DbgLab: TLabel
          Left = 16
          Top = 112
          Width = 61
          Height = 18
          Caption = 'DbgLab'
          Font.Charset = DEFAULT_CHARSET
          Font.Color = clWindowText
          Font.Height = -16
          Font.Name = 'Verdana'
          Font.Style = []
          ParentFont = False
        end
        object ContrBar: TTrackBar
          Left = 72
          Top = 15
          Width = 150
          Height = 20
          Max = 100
          Min = -100
          TabOrder = 0
          ThumbLength = 10
          TickMarks = tmTopLeft
          TickStyle = tsManual
          OnChange = ContrBarChange
        end
        object LumBar: TTrackBar
          Left = 72
          Top = 39
          Width = 150
          Height = 20
          Max = 100
          Min = -100
          Position = -50
          TabOrder = 1
          ThumbLength = 10
          TickMarks = tmTopLeft
          TickStyle = tsManual
          OnChange = ContrBarChange
        end
        object ColorBar: TTrackBar
          Left = 72
          Top = 63
          Width = 150
          Height = 20
          Min = -10
          Position = -10
          TabOrder = 2
          ThumbLength = 10
          TickMarks = tmTopLeft
          TickStyle = tsManual
          OnChange = ContrBarChange
        end
        object GammaBar: TTrackBar
          Left = 72
          Top = 87
          Width = 150
          Height = 20
          Max = 650
          Min = 25
          Position = 100
          TabOrder = 3
          ThumbLength = 10
          TickMarks = tmTopLeft
          TickStyle = tsManual
          OnChange = ContrBarChange
        end
        object BReset: TButton
          Left = 230
          Top = 24
          Width = 75
          Height = 81
          Caption = 'Reset'
          TabOrder = 4
          OnClick = BResetClick
        end
      end
    end

  9. #9
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 982
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 982
    Par défaut
    Avec ParentBackground à False sur le AjustPanel et un Timer pour récupérer le Bureau régulièrement (si nécessaire, rien que pour l'horloge)

    Le dessin sera peut-être plus consommateur de CPU que deux fenêtres superposées mais faudrait être limité à un PC de l'an 2000 pour que cela soit un problème
    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

  10. #10
    Membre expérimenté
    Homme Profil pro
    ‫‬
    Inscrit en
    Septembre 2024
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : ‫‬

    Informations forums :
    Inscription : Septembre 2024
    Messages : 143
    Par défaut
    Pas forcement qu'il s'agit d'un vieux pc, mais un "petit pc embarqué" il est possible qu'il soit un Rasberry Pi avec un autre système d'exploitation comme petitcoucou31 avait posé pleins de questions sur ce petit ordinateur

  11. #11
    Membre éclairé

    Inscrit en
    Novembre 2002
    Messages
    813
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 813
    Par défaut
    bonjour

    Il s'agit bien un PC Win32. Petit format et équipé d'un petit processeur genre N4200, Célérom ... . on a besoin de peu de ressource donc c'est le genre de carte que nous embarquons dans nos petits systèmes portables. Je pense que c'est l'Ihm qui consomme de plus de ressource !.
    En fonction du nombre de composants implantés sur la fiche, cela peut paraitre lent.
    Dans cette petite application j'ai peu de fiche, et comme elles sont toutes crées à la volée, la mise en place d'une seconde fiche semi-transparente en dessous à été plutôt rapide.
    J'ai souhaité cet aspect juste pour son coté design... si cela fait le contraire que souhaité, j'agirai à ce moment la.

    Dans un autre sujet, oui le "bricole" aussi en ce moment sur un Raspberry, en "Lazarus" car je suis sous Linux. J’expérimente un peu et l'intérêt du Raspberry dans ce cas est le nombre de GPIO existantes et la taille de la carte.
    mais c'est pas simple de trouver les bonnes bibliothèque Lazarus qui fonctionnent avec la version que tu utilises, et quand on connait pas trop Linux...

    Merci pour vos commentaires.

    Bonne fêtes.

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

Discussions similaires

  1. transparence d'une couleur
    Par merand dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 14/11/2007, 00h18
  2. "Merger" deux images avec une couleur de transparence
    Par MaelstroeM dans le forum VB.NET
    Réponses: 7
    Dernier message: 14/09/2007, 09h34
  3. Transparence d'une couleur dans une CDialog
    Par CrazyDev dans le forum MFC
    Réponses: 2
    Dernier message: 09/11/2006, 17h30
  4. Réponses: 7
    Dernier message: 04/06/2006, 12h24
  5. Réponses: 1
    Dernier message: 23/02/2003, 06h22

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