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

Composants VCL Delphi Discussion :

Screenshot


Sujet :

Composants VCL Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 21
    Points : 8
    Points
    8
    Par défaut Screenshot
    Voilà, j'ai fait un ptit programme qui fait un screenshot du panel que j'ai dans ma form (je remercie ce site, j'ai trouvé comment faire) mais j'ai un probleme, le screenshot ne correspond pas tout a fait au panel, il est décalé vers le haut de la taille de la barre de titre de la form. C'est comme si elle n'etait pas compté dans la taille de la form ??? Et je ne voudrais pas mettre une valeur fixe, tout le monde n'a pas la meme config de windows... Si qqun sait comment faire, merci de me l'expliquer ...

    a tout hasard voici mon code :
    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
     
    DtCanvas: TCanvas; 
    Bitmap: TBitmap; 
    Src, Dst: TRect; 
    JPEG: TJPEGImage; 
    begin 
      DtCanvas := TCanvas.Create; 
      DtCanvas.Handle := GetDC(0); 
      Bitmap := TBitmap.Create;
      Bitmap.Height := panel1.Height;
      Bitmap.Width := panel1.Width;
      Src := Rect(form1.Left + panel1.Left , form1.Top + panel1.Top , form1.Left + panel1.Left + panel1.Width , form1.top+ panel1.top + panel1.height);
      Dst := Rect(0, 0, panel1.Width , panel1.height);
      Bitmap.Canvas.CopyRect(Dst, DtCanvas, Src);
      ReleaseDC(0, DtCanvas.Handle);
      DtCanvas.Free;
      JPEG := TJPEGImage.Create; 
      JPEG.Assign(Bitmap);
      JPEG.SaveToFile('BOB.jpg');
      JPEG.Free;

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2002
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2002
    Messages : 38
    Points : 61
    Points
    61
    Par défaut
    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Src := Rect(form1.ClientLeft + panel1.Left , form1.ClientTop + panel1.Top , form1.ClientLeft + panel1.Left + panel1.Width , form1.ClientTop + panel1.top + panel1.height);
    J'espère que les propriétés ClientLeft et ClientTop exicte bien . J'ai pas delphi sous la main.

    -Magic-

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 50
    Points : 61
    Points
    61
    Par défaut
    salut,

    attention, le top de ton panel est pris a partir de la zone disponible de la form c est a dire juste en dessous de la barre de titre de la fenetre.

    petite precision, le 0,0 de ref pour ton panel est le coin sup gauche sous la barre de titre.

  4. #4
    Futur Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Thierry G.
    salut,

    attention, le top de ton panel est pris a partir de la zone disponible de la form c est a dire juste en dessous de la barre de titre de la fenetre.

    petite precision, le 0,0 de ref pour ton panel est le coin sup gauche sous la barre de titre.
    oui et c'est bien là le probleme... comment on connait la taille de la barre de titre ? parce que la il va trop haut

    (remarque : clientleft et clienttop n'existent pas, c clientwidth et clientheight)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 50
    Points : 61
    Points
    61
    Par défaut
    tu peux connaitre la hauteur de la barre de titre avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    form.Height - form.clientheight
    a plus ou moins peut etre la bordure de ta form je pense.

  6. #6
    Futur Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    cool c'est ca. maintenant faut que je trouve comment on récupère la taille des bords... mon borderwidth == 0 mais g qd meme des bords avec mon theme windows, comment on les récupère ??

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    faut utiliser l'API GetSystemMetrics pour la taille des bordures, ou un truc dans le genre (pas le SDK ss la main)

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2002
    Messages : 69
    Points : 77
    Points
    77
    Par défaut
    Un screenshot en JPEG c'est un peu crado :o
    En PNG ça serait mieux, mais bon faut utiliser une librairie supplémentaire pour ça : http://pngdelphi.sourceforge.net/

  9. #9
    Futur Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    merci bien, j'ai enfin le screenshot de ce que je voulais...

    les calculs sont quelques peu goré mais bon (d'ailleurs le * 4, m'etonne un peu) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Src := Rect(form1.Left + panel1.Left + form1.width - form1.clientwidth - GetSystemMetrics(SM_CXBORDER) * 3,
                form1.Top + panel1.Top + form1.Height - form1.clientheight - GetSystemMetrics(SM_CYBORDER) * 3,
                form1.Left + panel1.Left + panel1.Width + form1.width
                - form1.clientwidth - GetSystemMetrics(SM_CXBORDER) * 4,
                form1.top + panel1.top + panel1.height + form1.Height
                - form1.clientheight - GetSystemMetrics(SM_CYBORDER) * 4);

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

Discussions similaires

  1. Screenshot d'une page Web ?
    Par ParMesSoins dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 18/01/2008, 10h13
  2. screenshot en C
    Par momow dans le forum Windows
    Réponses: 3
    Dernier message: 14/02/2004, 03h56
  3. screenshot dans une résolution > a celle affichée
    Par cemoi dans le forum DirectX
    Réponses: 8
    Dernier message: 29/12/2003, 18h16
  4. prise rapide de screenshot
    Par cemoi dans le forum DirectX
    Réponses: 12
    Dernier message: 24/11/2003, 14h12
  5. screenshot
    Par Heimdall dans le forum Windows
    Réponses: 9
    Dernier message: 08/08/2003, 11h33

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