Impression d'écran directement dans un jpg

Soyez le premier à donner votre avis sur cette source.

Vue 7 207 fois - Téléchargée 562 fois

Description

C'est en réponse à une question du Forum.

Ce source permet de réaliser des copies d'écran sous forme de fichier .JPG

Source / Exemple :


unit Unit1;

//
// Programme d'impression d'écran et de sauvegarde automatique en .JPG
//
// Par Nono40     bruno_g40@hotmail.com
//
// 25/08/2002 :  Publication sur www.DelpfiFR.com
//

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Edit1: TEdit;
    Label1: TLabel;
    procedure Timer1Timer(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

Uses JPeg,ClipBrd;
{$R *.dfm}

Var UneFois:Boolean=False; // Permet de détecter le premier appui de la touche
    AFaire :Boolean=False; // Retarde l'enregistrement du .JPG

procedure TForm1.Timer1Timer(Sender: TObject);
var BitMap     :TBitMap;
    Image      :TJpegImage;
    NomFichier :String;
    i          :Integer;
begin

  // On doit enregistrer le presse-papier car PrintScreen à été appuyée
  If AFaire And ClipBoard.HasFormat(cf_BitMap)
  Then Begin
    BitMap:=TBitMap.Create;
    Image :=TJpegImage.Create;
    Try
      // Chargement dans un BitMap du presse papier ( au format BMP )
      BitMap.LoadFromClipboardFormat(cf_BitMap,ClipBoard.GetAsHandle(cf_Bitmap),0);
      Image.CompressionQuality:=80;
      // Conversion du BMP et JPG moins gros
      Image.Assign(BitMap);
      // Recherche d'un nom de fichier non utilisé
      I:=1;
      Repeat
        NomFichier:=Edit1.Text+'\IMAGE'+IntToStr(i)+'.JPG';
        Inc(i);
      Until Not FileExists(NomFichier);
      // Enregistrement de l'image
      Try
        Image.SaveToFile(NomFichier);
      Except
      End;
    Finally
      BitMap.Free;
      Image .Free;
    End;
  End;
  AFaire:=False;

  // Test de la touche d'impression de l'écran
  If ((GetAsyncKeyState(VK_SNAPSHOT) and 32768) <> 0)
  Then Begin
    If Not UneFois
    Then Begin
      // Si la touche est appuyée on enregistre le presse-papier sur le prochain OnTimer
      UneFois:=True;
      AFaire:=True;
    End;
  End
  Else Begin
    UneFois:=False;
  End;
end;

end.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.