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 :

Faire un full printscreen avec Windows 10 et résolution 1920 * 1080 Echelle 125%


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut Faire un full printscreen avec Windows 10 et résolution 1920 * 1080 Echelle 125%
    Bonjour à toutes et à tous,

    Faire un PrintScreen il existe plusieurs codes mais j'ai remarqué lorsque par défaut Windows 10 indique la dimension de l'écran 1920 * 1080 et mise à l'échelle et disposition à 125%, le bitmap obtenu est tronqué dans le bas et à droite de l'écran vu de face.

    Si je teste mon code avec une dimension de l'écran 1920 * 1080 et mise à l'échelle et disposition = 100%, le bitmap obtenu est entier.

    Si il y avait une solution, merci d'avance.

    Voici le code parmi tant d'autres :

    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
     
    var
    DesktopHWnd: HWnd;
    DesktopDC: HDc;
    begin
    Application.Minimize;
    Sleep(3000);//en ms
    DesktopHWnd := GetDesktopWindow;
    DesktopDC   := GetDC(DesktopHWnd);
    image1.picture.Bitmap.Width:=Screen.Width ;
    image1.picture.Bitmap.Height:=Screen.Height ;
    BitBlt(image1.picture.Bitmap.Canvas.Handle,0,0,Screen.Width,Screen.Height,
    GetDC(GetDesktopWindow),0,0,SrcCopy);
    ReleaseDC(DesktopHWnd, DesktopDC);
    Application.Restore;
    Mainform.windowstate := Wsmaximized;
    Bonne journée ensoleillée,

    @+,

    cincap

  2. #2
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Bonjour,

    je n'ai pas testé, mais si tu augmentes les dimensions du bitmap de 25 % ?

    A+
    Charly

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut
    @ Charly910, Bonjour et merci de ta réponse.

    J'avais certainement mis l'échelle de 1.25 au mauvais endroit car cela ne fonctionne pas.

    J'ai testé des codes "PrintScreen Full Ecran" mais même problème.

    Entre la pelouse et le break je vais continuer à chercher.

    @+,

    cincap

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Tu ne vas jamais t'en sortir si tu ne te décides pas une fois à ajouter un manifeste pour supporter le High DPI.

    De plus ici tu as un handle leak.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BitBlt(image1.picture.Bitmap.Canvas.Handle,0,0,Screen.Width,Screen.Height, GetDC(GetDesktopWindow),0,0,SrcCopy);

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut
    @Andnotor, Bonjour j'espère que tu vas bien et merci de ta suggestion.

    Je viens de tester et il manque toujours une partie du bas et une partie de droite.

    En fait je ne vois pas la différence avec cette modification.

    J'ai aussi testé d'autres codes sans succès.

    Tu ne vas jamais t'en sortir si tu ne te décides pas une fois à ajouter un manifeste pour supporter le High DPI.
    Je n'ai jamais utilisé ce manifeste ni comment le programmer !

    Rappelles toi avec "l'échelle 125%" j'avais déjà eu le problème pour calculer la résolution de l'écran.

    @+,

    cincap

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Citation Envoyé par cincap Voir le message
    En fait je ne vois pas la différence avec cette modification.
    Je te montrais simplement où était la fuite. Un GetDC entraîne obligatoirement un ReleaseDC.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      DesktopDC := GetDC(0);
      image1.picture.Bitmap.Width:=Screen.Width ;
      image1.picture.Bitmap.Height:=Screen.Height ;
      BitBlt(image1.picture.Bitmap.Canvas.Handle,0,0,Screen.Width,Screen.Height,DesktopDC,0,0,SrcCopy);
      ReleaseDC(0, DesktopDC);
    Citation Envoyé par cincap Voir le message
    Je n'ai jamais utilisé ce manifeste ni comment le programmer !
    Voici un manifeste généré pour un projet vide Delphi 10.3. Sauve ces lignes dans un fichier, par exemple project1_manifest.xml.
    Code xml : 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
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
      <asmv3:application>
        <asmv3:windowsSettings>
          <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/pm</dpiAware>
          <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
        </asmv3:windowsSettings>
      </asmv3:application>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            publicKeyToken="6595b64144ccf1df"
            language="*"
            processorArchitecture="*"/>
        </dependentAssembly>
      </dependency>
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
          <requestedPrivileges>
            <requestedExecutionLevel
              level="asInvoker"
              uiAccess="false"
            />
          </requestedPrivileges>
        </security>
      </trustInfo>
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    	<application> 
    		<!--The ID below indicates app support for Windows Vista -->
    		<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
    		<!--The ID below indicates app support for Windows 7 -->
    		<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
    		<!--The ID below indicates app support for Windows 8 -->
    		<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
    		<!--The ID below indicates app support for Windows 8.1 -->
    		<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
    		<!--The ID below indicates app support for Windows 10 -->
    		<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>			
    	</application> 
    </compatibility>
    </assembly>

    Crée un fichier de ressources à l'aide du bloc-notes (ex. project1_manifest.rc) contenant cette ligne 1 24 "project1_manifest.xml".

    Compile-le par ligne de commande brcc32 "Chemin\project1_manifest.rc", tu obtiens un fichier project1_manifest.res. Intègre-le à la source de ton projet {$R 'project1_manifest.res'}.

  7. #7
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Bonjour Cincap,

    regarde aussi ici dans la FAQ

    cela reprend ce que t'explique AndNotOr


    A+
    Charly

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut
    Bonjour à toutes et à tous,

    @ Andnotor et @ Charly 910 merci pour vos suggestions.

    Entre temps j'avais testé de le mettre dans le clipboard et ensuite le récupérer dans le Timage et la le print était en entier mais deux manipulations.

    Voici mon fichier Manifest qui fonctionne très bien :

    Code XML : 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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
     
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
     
      <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
          <application> 
                <!-- Windows 10 --> 
                <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
     
                <!-- Windows 8.1 -->
                <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
     
                <!-- Windows 8 -->
                <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
     
                <!-- Windows 7 -->
                <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
     
                <!-- Windows Vista -->
                <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
          </application> 
      </compatibility>
     
      <assemblyIdentity
        type="win32"
        name="MyApplication"
        version="1.0.0.0" 
        processorArchitecture="*"/>
     
      <dependency>
        <dependentAssembly>
          <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            publicKeyToken="6595b64144ccf1df"
            language="*"
            processorArchitecture="*"/>
        </dependentAssembly>
      </dependency>
     
      <asmv3:application>
        <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
          <dpiAware>true/PM</dpiAware>
        </asmv3:windowsSettings>
      </asmv3:application>
     
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
          <requestedPrivileges>
            <requestedExecutionLevel
              level="asInvoker"
              uiAccess="false"/>
            </requestedPrivileges>
           </security>
      </trustInfo>
     
    </assembly>

    Et voici le code de base :

    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
    procedure TMainform.FormCreate(Sender: TObject);
    var
    DesktopHWnd: HWnd;
    DesktopDC: HDc;
     n1 : Extended;
     n2 : extended;
    begin
    //Scale := ();
    Application.Minimize;
    Sleep(3000);//en ms
    DesktopHWnd := GetDesktopWindow;
    DesktopDC   := GetDC(DesktopHWnd);
    image1.picture.Bitmap.Width:=Screen.Width ;
    image1.picture.Bitmap.Height:=Screen.Height;
    //BitBlt(image1.picture.Bitmap.Canvas.Handle,0,0,Screen.Width,Screen.Height,
    //GetDC(GetDesktopWindow),0,0,SrcCopy);
    
    BitBlt(image1.picture.Bitmap.Canvas.Handle,0,0,Screen.Width,Screen.Height, GetDC(GetDesktopWindow),0,0,SrcCopy);
    //Self.scaleBy(125,100);
    ReleaseDC(DesktopHWnd, GetDesktopWindow); //ReleaseDC(DesktopHWnd, DesktopDC);
    Application.Restore;
    Mainform.windowstate := Wsmaximized; 
    end;
    Pour compiler le fichier manifest, j'ai copié "brcc32.exe" dans mon répertoire et je déplace mon fichier "Manifestw10.rc" sur son icône et j'obtiens "Manifestw10.res".

    Par conséquent le maître Andnotor avait vu juste.

    Merci à tous,

    @+,

    cincap

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    ... mais tu n'as pas corrigé la fuite

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

Discussions similaires

  1. Faire effacer le log de Windows Events Log avec un fichier batch
    Par bs.box dans le forum Vos contributions
    Réponses: 1
    Dernier message: 03/08/2017, 16h46
  2. Faire un full Join Avec Talend
    Par kasdo dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 25/09/2015, 09h50
  3. Faire marcher Gnome sous Cygwin avec Windows XP
    Par Invité dans le forum Windows XP
    Réponses: 0
    Dernier message: 31/12/2010, 18h22
  4. Faire une archive avec Windows
    Par Piranha8620 dans le forum Windows
    Réponses: 2
    Dernier message: 14/08/2009, 06h24
  5. [UBUNTU] Faire cohabiter ce système avec Windows
    Par JavaAcro dans le forum Ubuntu
    Réponses: 4
    Dernier message: 17/12/2006, 00h18

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