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

Langage Delphi Discussion :

Comment obtenir l'effet grisé de l'écran "Arrêter/Redémarrer" ?


Sujet :

Langage Delphi

  1. #1
    Membre habitué Avatar de jambonstar
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 161
    Points
    161
    Par défaut Comment obtenir l'effet grisé de l'écran "Arrêter/Redémarrer" ?
    Bonjour,

    J'aimerai savoir comment reproduire l'effet produit par la fenetre Arreter/Redemarrer de Windows XP.
    Et je ne vais pas être chiant, je me fou un peu de l'éffet progressif.

    En fait, c'est pour mettre en valeur une sorte de boite de progression.

    C'est un peu 'too much', mais c'est tellement classe.

    PLUS FORT ENSEMBLE !Et plus joli aussi
    (\ _ /)
    (='.'=) Voici Lapinou.
    (")-(")
    Aidez le à conquérir le monde en le reproduisant.

    http://ashbasket.free.fr

  2. #2
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2006
    Messages : 39
    Points : 39
    Points
    39
    Par défaut
    Tu peux utiliser une fenêtre transparente sans bordure et jouer sur le taux de transparence et la couleur.
    voir http://www.vclcomponents.com/Delphi/...Form-info.html

  3. #3
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Ce n'est pas un effet de transparence mais un rendu en noir et blanc
    Ce qu'il faudrait faire, je pense, c'est capturer l'image de l'écran puis régler la palette de l'image pour tout passer en noir et blanc...
    Voila une piste
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  4. #4
    Membre habitué Avatar de jambonstar
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 161
    Points
    161
    Par défaut
    Re,

    Alors la piste d'édisson n'est pas mal du tout :
    Voilà ce que j'ai fait :

    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
    procedure TForm1.Button3Click(Sender: TObject);
    begin
      formFond := TForm.Create(nil);
      try
        formFond.BorderStyle := bsNone;
        formfond.Height := Screen.Height;
        formFond.Width := Screen.Width;
        formfond.Color := clBlack;
        formFond.AlphaBlend := True;
        formFond.AlphaBlendValue := 0;
        formFond.Show;
      except
      //
      end;
      Self.BringToFront;
      Timer1.Enabled := True;
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);  // Timer à 200ms
    begin
      if Assigned(formFond) then
      begin
        formFond.AlphaBlendValue := formFond.AlphaBlendValue + 5 ;
        if formFond.AlphaBlendValue >= 150 then
          Timer1.Enabled := False;
      end
      else
        Timer1.Enabled := False;
     
    end;
    Ca donne un super effet.

    Par contre, Pedro, si tu sait modifier une palette, je suis preneur également, je veux le mieux pour mes clients chéri

    Ah moins que se soit juste parce qu'il fait un temps pourri, que les bugs me gonfle et que je me change les idées...

    PLUS FORT ENSEMBLE !Et plus joli aussi
    (\ _ /)
    (='.'=) Voici Lapinou.
    (")-(")
    Aidez le à conquérir le monde en le reproduisant.

    http://ashbasket.free.fr

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,
    J'ai trouvé en fouillant un peu un moyen pour créer cet effet.
    J'ai fait une fiche avec 2 boutons : 1 pour créer la fenêtre de fond en noir et blanc et l'autre pour la détruire :

    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
    / Création de la fenêtre de fond en noir et blanc
    procedure TForm1.Button1Click(Sender: TObject);
    var aBitmap: TBitmap;
    begin
      formFond := TForm.Create(nil);
      try
        formFond.BorderStyle := bsNone;
        formfond.Height := Screen.Height;
        formFond.Width := Screen.Width;
        aBitmap := GetDesktopBitmap;
        try
          ConvertToGray(aBitmap);
          formFond.Show;
          formFond.Canvas.Draw(0,0,abitmap);
        finally
          aBitmap.Free;
        end;
      except
      //
      end;
      Self.BringToFront;
    end;
     
    // Destruction de la fenêtre :
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      FormFond.Hide;
      FormFond.Release;
    end;
     
    // Conversion d'un Bitmap pf24bit en noir et blanc :
    // (Merci à Earl F. Glynn : http://www.efg2.com/Lab/ImageProcessing/Scanline.htm)
    Procedure TForm1.ConvertToGray(var BitmapRgb : TBitmap);
    type
      PRGBTripleArray = ^TRGBTripleArray;
      TRGBTripleArray = array [Byte] of TRGBTriple;
    var
      Gray   :  INTEGER;
      i      :  INTEGER;
      j      :  INTEGER;
      rowRGB :  pRGBTripleArray;
      rowGray:  pRGBTripleArray;
    begin
      for j := BitmapRGB.Height-1 Downto 0 do
      begin
        rowRGB := BitmapRGB.Scanline[j];
        for i := BitmapRGB.Width-1 downto 0 do
        begin
          // Intensité = (R + G + B) div 3
          with rowRGB[i] do
          begin
            Gray := (rgbtRed + rgbtGreen + rgbtBlue) div 3;
            rgbtRed   := Gray;
            rgbtGreen := Gray;
            rgbtBlue  := Gray
          end;
        end;
      end;
    end;
     
    // Création d'un bitmap pf24bit contenant l'image du desktop
    function TForm1.GetDesktopBitmap : TBitmap;
    var DeskTopBitmap : TBitMap;
    begin
      DesktopBitmap := TBitmap.Create;
      DesktopBitmap.PixelFormat := pf24bit;
      with DesktopBitmap do begin
        Width := Screen.Width;
        Height := Screen.Height;
      end;
      BitBlt(DesktopBitmap.Canvas.Handle,
             0,0,Screen.Width,Screen.Height,
             GetDC(GetDesktopWindow),0,0,SrcCopy);
      result := DesktopBitmap;
    end;
    L'idéal maintenant serait de trouver une méthode pour rendre progressif l'effet noir et blanc ....
    Bonne journée
    Eb.

  6. #6
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    A priori, je passerais par le code HSL des couleurs
    Bidouilleuse Delphi

  7. #7
    Membre habitué Avatar de jambonstar
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 161
    Points
    161
    Par défaut
    eBastien, merci pour la fonction GetBitmapDesktop, je vais essayer tout ça..

    Ensuite pour le dégradé progressif, c'est effectivement un bonne idée waskol, d'utiliser les couleur HSV (ou TSL en french)
    Car faire désendre la Saturation à 0 et baisser un peu la luminosité en même temps permet d'obtenir la mise en noir et blanc progressive.

    Maintenant, il reste à trouver comment agir sur la palette des couleurs.

    J'ai trouvé un très joli cours sur le HSV chez EGF mais son code ne permet que de convertir qu'une couleur à la fois.


    PLUS FORT ENSEMBLE !Et plus joli aussi
    (\ _ /)
    (='.'=) Voici Lapinou.
    (")-(")
    Aidez le à conquérir le monde en le reproduisant.

    http://ashbasket.free.fr

  8. #8
    Membre habitué Avatar de jambonstar
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 161
    Points
    161
    Par défaut
    Pour l'effet progressif :

    Avant d'afficher formFond :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    formFond.AlphaBlendValue := 0;
    formFond.AlphaBlend := True;
    Pour l'effet progressif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i := 0 to 10 do
    begin
      formFond.AlphaBlendValue := round((255/10)*i);
    end;
    Mais le resultat, n'est pas assez sombre.

    PLUS FORT ENSEMBLE !Et plus joli aussi
    (\ _ /)
    (='.'=) Voici Lapinou.
    (")-(")
    Aidez le à conquérir le monde en le reproduisant.

    http://ashbasket.free.fr

  9. #9
    Membre habitué Avatar de jambonstar
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 161
    Points
    161
    Par défaut
    Pour foncer l'image en Niveau de gris,
    j'ai juste modifier la valeur Gray obtenue par la formule RxGxB div 3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            Gray := (rgbtRed + rgbtGreen + rgbtBlue) div 3;
            Gray := gray-80;
            if Gray <0 then Gray := 0;
    Je trouve le resultat excellent.
    Reste à en faire un composant simple..

    PLUS FORT ENSEMBLE !Et plus joli aussi
    (\ _ /)
    (='.'=) Voici Lapinou.
    (")-(")
    Aidez le à conquérir le monde en le reproduisant.

    http://ashbasket.free.fr

  10. #10
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Pour le dégradé progressif

    //Une fiche, 2 boutons (bouton 1 pour griser, bouton2 pour coloriser
    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
    134
    135
    136
    137
    138
    139
    140
    141
    142
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        { Déclarations privées }
        OriginalBitmap,BitmapToDraw: TBitmap;
        function GetDesktopBitmap : TBitmap;
        Procedure ConvertToGray(var Original,New : TBitmap;PercentGrayed:integer);
        procedure Grise;
        procedure Colorise;
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
      formFond:tform;
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      grise;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      colorise;
    end;
     
    Procedure TForm1.ConvertToGray(var Original,New : TBitmap;PercentGrayed:integer);
    type
      PRGBTripleArray = ^TRGBTripleArray;
      TRGBTripleArray = array [Byte] of TRGBTriple;
    var
      Gray   :  INTEGER;
      i      :  INTEGER;
      j      :  INTEGER;
      rowRGB :  pRGBTripleArray;
      rowGray:  pRGBTripleArray;
      k1,k2:double;
    begin
      k2:=PercentGrayed/100;
      k1:=1-k2;
      for j := Original.Height-1 Downto 0 do
      begin
        rowRGB := Original.Scanline[j];
        rowGray:= New.Scanline[j];
        for i := Original.Width-1 downto 0 do
        begin
          // Intensité = (R + G + B) div 3
          with rowRGB[i] do
          begin
            Gray := (rgbtRed + rgbtGreen + rgbtBlue) div 3;
            rowGray[i].rgbtRed   := round(k1*rgbtRed+k2*Gray);
            rowGray[i].rgbtGreen := round(k1*rgbtGreen+k2*Gray);
            rowGray[i].rgbtBlue  := round(k1*rgbtBlue+k2*Gray);
          end;
        end;
      end;
    end;
     
    // Création d'un bitmap pf24bit contenant l'image du desktop
    function TForm1.GetDesktopBitmap : TBitmap;
    var DeskTopBitmap : TBitMap;
    begin
      DesktopBitmap := TBitmap.Create;
      DesktopBitmap.PixelFormat := pf24bit;
      with DesktopBitmap do begin
        Width := Screen.Width;
        Height := Screen.Height;
      end;
      BitBlt(DesktopBitmap.Canvas.Handle,
             0,0,Screen.Width,Screen.Height,
             GetDC(GetDesktopWindow),0,0,SrcCopy);
      result := DesktopBitmap;
    end;
     
    procedure TForm1.Grise;
    var i:integer;
    begin
      formFond.Show;
      Self.BringToFront;
     
      for i:=10 downto 0 do
      begin
        ConvertToGray(OriginalBitmap,BitmapToDraw,i*10);
        formFond.Canvas.Draw(0,0,BitmapToDraw);
        Application.ProcessMessages;
        Sleep(200);
      end; 
    end;
     
    procedure TForm1.Colorise;
    var i:integer;
    begin
        //Si on veut aussi coloriser la fiche de l'application
       Self.BringToFront;
       for i:=0 to 10 do
       begin
         ConvertToGray(OriginalBitmap,BitmapToDraw,i*10);
         formFond.Canvas.Draw(0,0,BitmapToDraw);
         Application.ProcessMessages;
         Sleep(200);
       end;
       formFond.hide;
       Self.BringToFront;
    end;
     
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      formFond := TForm.Create(Application);
      formFond.BorderStyle := bsNone;
      formfond.Height := Screen.Height;
      formFond.Width := Screen.Width;
      //Si on veut aussi griser la fiche de l'application, placer ces 2 lignes dans le OnActivate, parce qu'ici, Form1 n'est pas encore affichée donc pas prise en photo
      OriginalBitmap := GetDesktopBitmap;
      BitmapToDraw:=GetDesktopBitmap;
    end;
     
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      OriginalBitmap.Free;
      BitmapToDraw.Free;
    end;
     
    end.
    Et voici une sortie d'application sympa
    (Juste une fiche, il s'agit de cliquer sur la croix de fermeture)
    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
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Déclarations privées }
        OriginalAvecFiche,OriginalSansFiche,OriginalAvecFicheGris,OriginalSansFicheGris,BitmapToDraw: TBitmap;
        function GetDesktopBitmap : TBitmap;
        Procedure ConvertToGray(var Original,New : TBitmap;PercentGrayed:integer);
        Procedure Transition(var Depart,Arrivee,Intermediaire : TBitmap;Percent:integer);
        procedure Grise;
        procedure Colorise;
        procedure Cache;
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
      formFond:tform;
    implementation
     
    {$R *.dfm}
     
    Procedure TForm1.ConvertToGray(var Original,New : TBitmap;PercentGrayed:integer);
    type
      PRGBTripleArray = ^TRGBTripleArray;
      TRGBTripleArray = array [Byte] of TRGBTriple;
    var
      Gray   :  INTEGER;
      i      :  INTEGER;
      j      :  INTEGER;
      rowRGB :  pRGBTripleArray;
      rowGray:  pRGBTripleArray;
      k1,k2:double;
    begin
      k2:=PercentGrayed/100;
      k1:=1-k2;
      for j := Original.Height-1 Downto 0 do
      begin
        rowRGB := Original.Scanline[j];
        rowGray:= New.Scanline[j];
        for i := Original.Width-1 downto 0 do
        begin
          // Intensité = (R + G + B) div 3
          with rowRGB[i] do
          begin
            Gray := (rgbtRed + rgbtGreen + rgbtBlue) div 3;
            rowGray[i].rgbtRed   := round(k1*rgbtRed+k2*Gray);
            rowGray[i].rgbtGreen := round(k1*rgbtGreen+k2*Gray);
            rowGray[i].rgbtBlue  := round(k1*rgbtBlue+k2*Gray);
          end;
        end;
      end;
    end;
     
    Procedure TForm1.Transition(var Depart,Arrivee,Intermediaire : TBitmap;Percent:integer);
    type
      PRGBTripleArray = ^TRGBTripleArray;
      TRGBTripleArray = array [Byte] of TRGBTriple;
    var
      i      :  INTEGER;
      j      :  INTEGER;
      rowRGB1,rowRGB2 :  pRGBTripleArray;
      rowGray:  pRGBTripleArray;
      k1,k2:double;
    begin
      k2:=Percent/100;
      k1:=1-k2;
      for j := Depart.Height-1 Downto 0 do
      begin
        rowRGB1 := Depart.Scanline[j];
        rowRGB2 := Arrivee.Scanline[j];
        rowGray:= Intermediaire.Scanline[j];
        for i := Depart.Width-1 downto 0 do
        begin
          // Intensité = (R + G + B) div 3
            rowGray[i].rgbtRed   := round(k1*rowRGB1[i].rgbtRed+k2*rowRGB2[i].rgbtRed);
            rowGray[i].rgbtGreen := round(k1*rowRGB1[i].rgbtGreen+k2*rowRGB2[i].rgbtGreen);
            rowGray[i].rgbtBlue  := round(k1*rowRGB1[i].rgbtBlue+k2*rowRGB2[i].rgbtBlue);
        end;
      end;
    end;
     
    // Création d'un bitmap pf24bit contenant l'image du desktop
    function TForm1.GetDesktopBitmap : TBitmap;
    var DeskTopBitmap : TBitMap;
    begin
      DesktopBitmap := TBitmap.Create;
      DesktopBitmap.PixelFormat := pf24bit;
      with DesktopBitmap do begin
        Width := Screen.Width;
        Height := Screen.Height;
      end;
      BitBlt(DesktopBitmap.Canvas.Handle,
             0,0,Screen.Width,Screen.Height,
             GetDC(GetDesktopWindow),0,0,SrcCopy);
      result := DesktopBitmap;
    end;
     
    procedure TForm1.Grise;
    var i:integer;
    begin
      formFond.Show;
      FormFond.Canvas.Draw(0,0,OriginalAvecFiche);
      for i:=0 to 10 do
      begin
        ConvertToGray(OriginalAvecFiche,BitmapToDraw,i*10);
        formFond.Canvas.Draw(0,0,BitmapToDraw);
        Application.ProcessMessages;
        Sleep(200);
      end;
    end;
     
    procedure TForm1.Colorise;
    var i:integer;
    begin
     
       for i:=10 downto 0 do
       begin
         ConvertToGray(OriginalSansFiche,BitmapToDraw,i*10);
         formFond.Canvas.Draw(0,0,BitmapToDraw);
         Application.ProcessMessages;
         Sleep(200);
       end;
    end;
     
    procedure TForm1.Cache;
    var i:integer;
    begin
       for i:=0 to 10 do
       begin
         Transition(OriginalAvecFicheGris,OriginalSansFicheGris,BitmapToDraw,i*10);
         formFond.Canvas.Draw(0,0,BitmapToDraw);
         Application.ProcessMessages;
         Sleep(200);
       end;
    end;
     
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      formFond := TForm.Create(Application);
      formFond.BorderStyle := bsNone;
      formfond.Height := Screen.Height;
      formFond.Width := Screen.Width;
      OriginalSansFiche := GetDesktopBitmap;
    end;
     
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
     
      OriginalSansFiche.Free;
     
    end;
     
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      OriginalAvecFiche := GetDesktopBitmap;
      BitmapToDraw:=GetDesktopBitmap;
      OriginalAvecFicheGris:=GetDesktopBitmap;
      OriginalSansFicheGris:=GetDesktopBitmap;
      try
      ConvertToGray(OriginalAvecFiche,OriginalAvecFicheGris,100);
      ConvertToGray(OriginalSansFiche,OriginalSansFicheGris,100);
      grise;
      cache;
      colorise;
      finally
      OriginalAvecFicheGris.Free;
      OriginalSansFicheGris.Free;
      OriginalAvecFiche.Free;
      BitmapToDraw.Free;
      end;
    end;
     
     
     
    end.

    [Code amélioré grace à ebastien ]
    Bidouilleuse Delphi

  11. #11
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Très fort Waskol ! Je suis impressionné !!
    L'effet est saisissant !
    Juste un truc, en le testant j'ai un petit saut au moment de l'affichage de la FormFond. Je me suis humblement permis d'ajouter une ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.Grise;
    var i:integer;
    begin
      formFond.Show;
      FormFond.Canvas.Draw(0,0,OriginalAvecFiche);
      for ...
      ....
      
    end;
    Ca evite juste le petit saut du début...
    Encore bravo !
    Eb.

  12. #12
    Membre habitué Avatar de jambonstar
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 161
    Points
    161
    Par défaut
    Super waskol !

    Par contre, et oui il fallait bien un bémol, j'ai essayé ton 2° code... et rien... pas de super truc génial... la fenetre se ferme, et au revoir.

    Enfin, sinon, c'est un effet des plus splendide tout ça.. Ca donne un effet bling-bling à l'application, j'aime beaucoup. Et puis ca permet de faire des fenetres de parametrages ou des boites de progressions non bloquantes sans pour autant permettre à l'utilisateur de faire autre chose.

    Merci encore à vous deux pour votre aide.

    PLUS FORT ENSEMBLE !Et plus joli aussi
    (\ _ /)
    (='.'=) Voici Lapinou.
    (")-(")
    Aidez le à conquérir le monde en le reproduisant.

    http://ashbasket.free.fr

  13. #13
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par jambonstar
    Super waskol !

    Par contre, et oui il fallait bien un bémol, j'ai essayé ton 2° code... et rien... pas de super truc génial... la fenetre se ferme, et au revoir.

    Enfin, sinon, c'est un effet des plus splendide tout ça.. Ca donne un effet bling-bling à l'application, j'aime beaucoup. Et puis ca permet de faire des fenetres de parametrages ou des boites de progressions non bloquantes sans pour autant permettre à l'utilisateur de faire autre chose.

    Merci encore à vous deux pour votre aide.
    Je t'assures que sur mon PC celà fonctionne nickel chrome, dans le doute j'ai réessayé avec le code que je vous ai fourni en pature

    Tu as bien reliés les évènement de ta fiche avec les méthodes qui vont bien au moins (OnClose/OnCreate/OnDestroy) ???
    Bidouilleuse Delphi

  14. #14
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par ebastien
    Très fort Waskol ! Je suis impressionné !!
    L'effet est saisissant !
    Juste un truc, en le testant j'ai un petit saut au moment de l'affichage de la FormFond. Je me suis humblement permis d'ajouter une ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.Grise;
    var i:integer;
    begin
      formFond.Show;
      FormFond.Canvas.Draw(0,0,OriginalAvecFiche);
      for ...
      ....
      
    end;
    Ca evite juste le petit saut du début...
    Encore bravo !
    Eb.
    Bien joué
    Bidouilleuse Delphi

  15. #15
    Membre habitué Avatar de jambonstar
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 161
    Points
    161
    Par défaut
    Tu as bien reliés les évènement de ta fiche avec les méthodes qui vont bien au moins (OnClose/OnCreate/OnDestroy) ???



    Désolé

    PLUS FORT ENSEMBLE !Et plus joli aussi
    (\ _ /)
    (='.'=) Voici Lapinou.
    (")-(")
    Aidez le à conquérir le monde en le reproduisant.

    http://ashbasket.free.fr

  16. #16
    Membre habitué Avatar de jambonstar
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 161
    Points
    161
    Par défaut
    Super sympa. En tout cas, je dois avoir une machine de dév pourrie, car l'effet est agréable uniquement si je retire les "sleep".

    D'ailleurs comment faire pour s'adapter aux differents PC...


    PLUS FORT ENSEMBLE !Et plus joli aussi
    (\ _ /)
    (='.'=) Voici Lapinou.
    (")-(")
    Aidez le à conquérir le monde en le reproduisant.

    http://ashbasket.free.fr

  17. #17
    Membre émérite
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Points : 2 529
    Points
    2 529
    Par défaut
    Pour info il y a peu j'avais déjà répondu à un topic sur comment griser une Form et j'avais proposer un fichier source qui permettait de faire (Soit griser, soit assombrir) :

    http://www.developpez.net/forums/sho...d.php?t=191085

  18. #18
    Membre habitué Avatar de jambonstar
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 161
    Points
    161
    Par défaut
    Très beau travail Thierry.
    Par contre ce code, me dérange un peu dans le fait que c'est uniquement fait pour du ShowModal.
    Dans mon application, c'est pour mettre en évidence un boite de progression. Et qui dit boite de progression, dit, traitement de fond.

    En tout cas ton code mérite le coup d'oeil. Merci.

    PLUS FORT ENSEMBLE !Et plus joli aussi
    (\ _ /)
    (='.'=) Voici Lapinou.
    (")-(")
    Aidez le à conquérir le monde en le reproduisant.

    http://ashbasket.free.fr

  19. #19
    Membre émérite
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Points : 2 529
    Points
    2 529
    Par défaut
    Citation Envoyé par jambonstar
    Très beau travail Thierry.
    Par contre ce code, me dérange un peu dans le fait que c'est uniquement fait pour du ShowModal.
    Dans mon application, c'est pour mettre en évidence un boite de progression. Et qui dit boite de progression, dit, traitement de fond.

    En tout cas ton code mérite le coup d'oeil. Merci.
    Merci. Oui en effet c'est prévu que pour le showmodal car c'était la demande initiale pouvoir griser les fenêtres qui n'étaient plus active de manière à faire ressortir celle qu'on a affiché avec le showmodal. Mais ceci dit le code peut s'adapter assez facilement. Et puis sinon le code de Waskol est très bien aussi, c'était juste pour amener un peu plus d'infos sur le sujet.

  20. #20
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par jambonstar
    Super sympa.
    Merci

    Citation Envoyé par jambonstar
    En tout cas, je dois avoir une machine de dév pourrie,
    Pour info, à mon bureau, j'ai un P4 2,2GHz avec une carte Graphique Intel intégrée.

    Citation Envoyé par jambonstar
    car l'effet est agréable uniquement si je retire les "sleep".
    ça le fait à tous le monde quand elles sont belles


    Citation Envoyé par jambonstar
    D'ailleurs comment faire pour s'adapter aux differents PC...
    Pour adapter automatiquement le délais du sleep, je pense qu'il faudrait détecter le type de processeur, et sa fréquence, ou même un calcul un peu compliqué assorti d'un "GetTickCount" pour mesurer la performance du PC... Et de là, avec un savant calcul, adapter ce temps de pause.

    Mais sinon tu peux aussi jouer sur le nombre d'étapes (j'en utilise 10 (ou plutot 11 mais on ne va pas chipoter)) pour passer d'une image à une autre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for i:=0 to 10 do
      begin
        ConvertToGray(OriginalAvecFiche,BitmapToDraw,i*10);
        formFond.Canvas.Draw(0,0,BitmapToDraw);
        Application.ProcessMessages;
        Sleep(200);
      end;
    Pour avoir un effet en 25 (26 en fait) images (et non plus 10 (oui, je sais, 11 ) ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for i:=0 to 25 do
      begin
        ConvertToGray(OriginalAvecFiche,BitmapToDraw,i*4); //4*25=100
        formFond.Canvas.Draw(0,0,BitmapToDraw);
        Application.ProcessMessages;
        Sleep(200);
      end;
    En augmentant, tu auras moins l'impression de saccade, mais celà mettra plus de temps à s'exécuter.

    Enfin sinon, je crois que c'est surtout une affaire de gout
    Bidouilleuse Delphi

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comment obtenir la résolution de l'écran
    Par debo41 dans le forum Flex
    Réponses: 5
    Dernier message: 17/11/2008, 16h12
  2. Comment obtenir un effet surligneur dans un TImage ?
    Par scara dans le forum Composants VCL
    Réponses: 13
    Dernier message: 26/12/2007, 19h21
  3. Réponses: 10
    Dernier message: 30/06/2006, 14h29
  4. Comment obtenir la liste des paramètres d'une SP ?
    Par Le Gritche dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/03/2003, 16h54
  5. [VB6][impression]Comment faire des effets sur les polices ?
    Par le.dod dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 08/11/2002, 10h31

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