Bonjour,
Je copie une partie de mon écran (composant PaVisu) dans un bitmap en passant par cette fonction sous Rio:
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.
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;
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
Partager