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 :

petit problème avec GetDC


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Par défaut petit problème avec GetDC
    bonjour à toutes et à tous.
    J'ai une petite question au sujet du GetDC.

    Je cherche à faire une sorte 'Screen shot' de la zone client d'un Tform.
    Je récupère le DC avec GetDC puis avec un StretchBlt je copie la zone dans un Tbitmap que je sauve ensuite avec SaveToFile.
    Jusqu'à là tout roule impec.

    Sauf que le DC contient en fait la partie visible de la fenêtre si bien que si j'ai une autre fenêtre qui cache un peu celle que je veux, cette dernière est aussi 'photographiée'.
    En gros c'est la zone d'écran qui est prise en compte et pas le contenu réel de la fenêtre.

    Y a-t-il un moyen de n'obtenir que la zone client de la Tform et pas tout ce qui 'overlap' sur elle? (excusez cet anglicisme)

    merci pour vos réponses.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Par défaut
    Je me réponds à moi même car j'ai finalement trouvé la solution, bien cachée sur le net...
    J'ai du coup réalisé une petite procédure que marche pour tous les WinControls.

    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
     
    //-------------------------------------------------------------
    procedure ScreenShot(Ctrl:TWinControl;BackColor:TColor;destBitmap : TBitmap) ;
    var BitMapTmp: TBitMap;
    begin
     
       BitMapTmp := TBitMap.Create;
       try
       BitMapTmp.Width := Ctrl.width;
       BitMapTmp.Height := Ctrl.Height;
       BitMapTmp.clear(BackColor);
       Ctrl.Perform(WM_PRINT,BitMapTmp.Canvas.Handle, PRF_CLIENT or PRF_OWNED  or PRF_CHILDREN);
        SetStretchBltMode(destBitmap.Canvas.Handle,HALFTONE	);
        StretchBlt(destBitmap.Canvas.Handle, 0, 0,destBitmap.Width ,destBitmap.Height,BitMapTmp.Canvas.Handle, 0, 0, Ctrl.width, Ctrl.height, SRCCOPY);
       finally
        BitMapTmp.Free;
       end;
    end;

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

Discussions similaires

  1. Petits problèmes avec une CListCtrl
    Par vanitom dans le forum MFC
    Réponses: 2
    Dernier message: 17/11/2005, 11h45
  2. Un petit problème avec pop
    Par Paulinho dans le forum C++
    Réponses: 4
    Dernier message: 13/11/2005, 20h57
  3. Petit problème avec Line Input
    Par GrosQuicK dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/09/2005, 12h47
  4. (Petit ?) problème avec une page contenant du Flash
    Par ologram dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 01/09/2005, 18h45
  5. Petit problème avec SDL
    Par Nyarlathotep dans le forum C
    Réponses: 10
    Dernier message: 01/07/2005, 09h10

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