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 :

screenshot complet en delphi 7


Sujet :

Delphi

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Par défaut screenshot complet en delphi 7
    Salut les amis,

    J'aurais besoin de réaliser un screenshot de tout l'écran pour le mettre dans un TImage... j'y arrive en utilisant getDC(0) sauf que systématiquement, il me prend la fenêtre active en me coupant la barre des taches de windows, or moi je veux la copie de TOUT l'écran !!!

    Qui à une méthode qui fonctionne?

    Sous Windows 7, la barre des taches de windows est prise en compte par la copie mais c'est pire, je n'ai que le "drapeau" qui sert de bouton "démarrer", les autres icones, l'heure, etc sont vierge ...

  2. #2
    Membre Expert
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Par défaut
    Via codyx

    • Langage : Delphi 5
      Date ajout : 23/07/2008
      Posté par cirec


    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
    {je vous propose ici une alternetive au code de Ni69}
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      { fait la copie d'écran}
      keybd_event(VK_SNAPSHOT , 0, 0, 0);
      keybd_event(VK_SNAPSHOT , 0, KEYEVENTF_KEYUP, 0);
      {Traite les messages}
       Application.ProcessMessages;
      {Teste le format du presse papier}
       if ClipBoard.HasFormat(cf_Bitmap) then
      begin
      {et si le format existe on l'affiche dans un TImage}
        Image1.Picture.Bitmap.Assign(ClipBoard);
      {et on vide le presse papier pour la capture suivante
       ce qui permet d'être certain d'avoir la bonne capture}
         ClipBoard.Clear;
      end;
    end;
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  3. #3
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 912
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 912
    Par défaut
    Je n'aime pas trop l'idée de passer par le presse-papiers ou alors, il faudrait le sauvegarder avant et le restaurer après.

    @akorx
    Montre-nous ton code. Quel est le DC de destination ? Y a-t-il du multitâche ?

  4. #4
    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
    essaye sur GetDC(GetDesktopWindow())
    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

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 535
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 535
    Par défaut
    Bonjour à toutes et à tous,

    @ akorx, pour ma part, je n'utilise pas le presse papier mais il existe des tas de solution.

    Testé sous Seven 64bits, ex :

    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
     
      procedure FormContextPopup(Sender: TObject; MousePos: TPoint;
          var Handled: Boolean);
     
      private
        { Déclarations privées }
     
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure PrintScreen(Bild: TBitMap);
    var
      c: TCanvas;
      r: TRect;
    begin
      c := TCanvas.Create;
      c.Handle := GetWindowDC(GetDesktopWindow);
      try
        r := Rect(0, 0, Screen.Width, Screen.Height);
        Bild.Width := Screen.Width;
        Bild.Height := Screen.Height;
        Bild.Canvas.CopyRect(r, c, r);
      finally
        ReleaseDC(0, c.Handle);
        c.Free;
      end;
    end;
     
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     
      PrintScreen(Image1.Picture.BitMap);
     
    end;
     
    procedure TForm1.FormContextPopup(Sender: TObject; MousePos: TPoint;
      var Handled: Boolean);
    begin
    Handled := false;
    end;
    @+,

    Cincap

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Par défaut
    Dites donc les gars, quelle rapidité ! un grand merci pour vos réponses, c'est tout à fait ce que j'attendais !!!

    La solution de cincap me convient parfaitement et c'est donc celle que je vais retenir, ce qui ne veut pas dire que les autres ne fonctionnent pas hein !

    En tout cas encore merci pour la qualité et la rapidité de vos réponses !!!

    Kenavo

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

Discussions similaires

  1. [PHP 5.4] Comment faire un screenshot complet d'un utilisateur
    Par zoubila44 dans le forum Langage
    Réponses: 9
    Dernier message: 21/04/2015, 15h44
  2. Turbo Delphi Explorer - Diagramme de classe Complet
    Par Argonz dans le forum Delphi
    Réponses: 3
    Dernier message: 03/11/2006, 18h25
  3. Flux RSS complet avec contenu de la section Delphi ?
    Par trident_job dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 4
    Dernier message: 02/01/2006, 14h48

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