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

API, COM et SDKs Delphi Discussion :

Prise de ScreenShot : probleme


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Par défaut Prise de ScreenShot : probleme
    Voila la petite fonction que j'ai faite : qui prend un screen et l'envoie sur un FTP :
    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 Tform1.Takeshot(const qualite : integer);
    var DCDesk: HDC; // hDC of Desktop
      bmp: TBitmap;
      Image :TJpegImage;
     
    begin
    //Set Quality
     
      {Create a bitmap}
      bmp := TBitmap.Create;
      Image :=TJpegImage.Create;
      {Set a bitmap sizes}
      bmp.Height := Screen.Height;
      bmp.Width := Screen.Width;
     
      {Get a desktop DC handle - handle of a display device context}
      DCDesk := GetWindowDC(GetDesktopWindow);
     
      {Copy to any canvas, here canvas of an image}
      BitBlt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,
             DCDesk, 0, 0, SRCCOPY);
      //Conversion & Qualite
      Image.CompressionQuality:=qualite;
      Image.Assign(bmp);
      {Save the bitmap}
      DeleteFile('C:/screen.jpg');
      Image.SaveToFile({GetTemp+}'C:/screen.jpg');
     
      {Release desktop DC handle}
      ReleaseDC(GetDesktopWindow, DCDesk);
     
      {Release a bitmap}
      bmp.Free;
      Image.Free;
     
      //now, upload de l'image
       //Connection
        IdFTP1.host := 'ftp.membres.lycos.fr';
        IdFTP1.UserName := 'AAAA';
        IdFTP1.Password := 'AAAA';
        IdFTP1.Connect;
        //send
        idFTP1.delete('Wtrj/screen.jpg');
        idFTP1.Put(GetTemp+'screen.jpg','/Wtrj/screen.jpg',true);
        //Deconnection
        if IdFTP1.Connected then IdFTP1.Disconnect;
     
    end;
    Mais voila, probleme cette idiot me balance toujour le meme screenshot, et ce depuis 3 jour que j'essaie de trouver le probleme .
    J'ai mit du code pour supprimmer le fichier local, le fichier distant avant d'envoyer le nouveau mais rien a faire, mais appres redemarrage du programme, il me renvoie le meme screen, j'en ai donc deduit , que le screen est conservé en memoire (je pense dans DCDesk, pourtant c'est redefinie dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DCDesk := GetWindowDC(GetDesktopWindow);
    comment liberer la memoire associé?

    Merci!

    Edit : En repassant 2 mois plus tard, je voie mon poste, et dans la source, j'ai laissé mon mot de passe en clair... Ze Boulay...

  2. #2
    Inactif
    Inscrit en
    Août 2005
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 78
    Par défaut
    je pense qu'il faut mettre

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Par défaut
    nan, ca marche pas avec DCDesk .
    C'est quand meme bizzard.
    Personne connais un moyen de liberer la memoire

  4. #4
    DMO
    DMO est déconnecté
    Membre chevronné
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Par défaut
    Bonsoir,

    Si je ne m'abuse, il semble qu'au lieu de créer puis de libérer ton "DesktopWindow", tu le crée 2 fois, pour ne tuer que le 2e. Je pense que c'est là tout le problème.
    il faudrait retenir le résultat du 1er GetDesktopWindow, pour pouvoir le libérer ensuite, sans rappeler une seconde fois GetDesktopWindow.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    tonDesktopHandle: THandle;
    tonDesktopDeviceContext: HDC;
    {...}
    tonDesktopHandle := GetDesktopWindow;
    tonDesktopDeviceContext := GetWindowDC(tonGetDesktopWindow); 
    {...tu fais ce que tu as à faire...}
    ReleaseDC(tonDesktopHandle, tonDesktopDeviceContext);
    Essaye un peu voir si c'est mieux comme ça

Discussions similaires

  1. Probleme prise en compte user ubuntu 9
    Par Arn°oO dans le forum Administration
    Réponses: 6
    Dernier message: 09/10/2009, 08h21
  2. Réponses: 2
    Dernier message: 24/01/2007, 14h00
  3. probleme prise en compte modification avec tomcat4.1
    Par faroun dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 03/05/2006, 20h41
  4. Réponses: 10
    Dernier message: 28/12/2005, 21h52
  5. prise rapide de screenshot
    Par cemoi dans le forum DirectX
    Réponses: 12
    Dernier message: 24/11/2003, 14h12

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