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 :

[Win10] Copie écran et mise à l'échelle 125%


Sujet :

Delphi

  1. #1
    Membre régulier
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    228
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 228
    Points : 113
    Points
    113
    Par défaut [Win10] Copie écran et mise à l'échelle 125%
    Bonjour,

    Je copie une partie de mon écran (composant PaVisu) dans un bitmap en passant par cette fonction sous Rio:
    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
    function GetBitmap: TBitmap;
    var WinCanvas: TCanvas;
    begin
      Try
        Result    := TBitmap.Create ;
     
        WinCanvas := TCanvas.Create ;//créer le canvas pour la copie
        WinCanvas.Handle:= GetWindowDC(0);//Trouve le handle de la fenêtre mère
        Result.SetSize(Pavisu.Width+1, PaVisu.height+1) ;//Taille Bitmap
        BitBlt(Result.Canvas.Handle,
               0,
               0,
               Result.Width,
               Result.Height,
               WinCanvas.Handle,
               Round(PaVisu.ClientOrigin.x),
               Round(PaVisu.ClientOrigin.y),
               SRCCOPY);
      Finally
        WinCanvas.Free;
      end ;
    end;
    Tout fonctionne bien sur différentes versions de Windows mais sous Win10 et avec un paramètre de "Mise à l'échelle et disposition" à 125%, le bitmap de sortie est incorrect: il y a un décalage de la zone extraite.

    J'ai remarqué un sujet presque semblable ici mais ne résout à priori pas mon problème. Selon le param de mise à l'échelle, je dois affecter un coefficient à mes ClientOrigin mais je ne vois pas comment le faire dans mon code

    Mes paramètres sous Win10:
    En réglage 100%, j'ai une taille d'écran de 1920x1080 avec pixels/inch=96
    En réglage 125%, j'ai une taille d'écran de 1536x864 avec pixels/inch=96

    Je retrouve bien 1.25 entre 1920/1536 et 1080/864 mais à quel moment je dois affecter ce coefficient (ou un autre si 150%) dans mon code, je ne sais pas.

    Merci pour vos conseils

    LefjuCabro

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Tu fais une copie d'écran du Bureau directement ?
    Si tu ne voulais faire que la fenêtre de ton programme, un PaintTo devrait suffir
    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

  3. #3
    Membre régulier
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    228
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 228
    Points : 113
    Points
    113
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Tu fais une copie d'écran du Bureau directement ?
    Si tu ne voulais faire que la fenêtre de ton programme, un PaintTo devrait suffir
    Merci pour ta réponse Shai.

    Je veux faire une copie d'un TPanel dans un TBitmap.

    J'avais testé la méthode PaintTo mais elle ne convenait pas dans mon cas: le Tpanel contient des visu GLScene (= openGL) et celles-ci n'apparaissent pas avec PainTo.

Discussions similaires

  1. Réponses: 7
    Dernier message: 13/06/2016, 13h08
  2. [HTML] Impression en format paysage et mise à l'échelle
    Par Bernardtapis dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 03/03/2008, 07h45
  3. Mise à l'échelle d'écran
    Par Stevens.Georges dans le forum Langage
    Réponses: 1
    Dernier message: 04/12/2007, 13h13
  4. Réponses: 2
    Dernier message: 19/09/2007, 14h17
  5. [VBA][Excel] Copie écran
    Par KOFJCH dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 12/12/2005, 15h01

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