Page 1 sur 1

Position de la souris et résolution d'ecran

Publié : dim. 18/mars/2018 18:27
par micam
Bonjour,
J'aimerai positionner une fenetre à l'extrème droite de "X" et au milieu de "Y" de l'écran.
Quand je fais :
ExamineDesktops()
Global Largeur_Ecran = DesktopWidth(0) le résultat est : 1920
Global Hauteur_Ecran = DesktopHeight(0) le résultat est : 1080

Si je fais position de la souris :
Global Position_X = DesktopMouseX() le résultat MAXI est : 1536
Global Position_Y = DesktopMouseY() le résultat MAXI est : 863

Je peux me débrouiller en faisant un calcul, mais si je change d'ordi, je suis marron...
Quelqu'un à une réponse ?
Merci.

Re: Position de la souris et résolution d'ecran

Publié : dim. 18/mars/2018 18:42
par falsam
Un minimum de code ça aurait été bien :wink:

D'aprés ce que j'ai compris de ta demande

Code : Tout sélectionner

;Plan de l'application
Declare Start()
Declare Exit()

ExamineDesktops()
Start()

Procedure Start()
  Protected DWidth = DesktopWidth(0)
  Protected DHeight = DesktopHeight(0)
  Protected WWidth = 400 ;Largeur de la fenetre
  Protected WHeight = 500; Hauteur de la fenetre
  
  Protected x = DWidth - WWidth ;Fenetre à l'extréme droite de X
  Protected y = (DHeight - WHeight)/2 ;Fenetre au milieu de Y

  OpenWindow(0, x, y, WWidth, WHeight, "Test", #PB_Window_SystemMenu)
    
  ;Triggers
  BindEvent(#PB_Event_CloseWindow, @Exit())
  
  Repeat : WaitWindowEvent() : ForEver
EndProcedure

Procedure Exit()  
  End
EndProcedure

Re: Position de la souris et résolution d'ecran

Publié : dim. 18/mars/2018 20:48
par Ollivier
Micam a écrit :Global Position_X = DesktopMouseX() le résultat MAXI est : 1536
Je suis perplexe avec ça.

http://www.purebasic.com/documentation/ ... ousex.html

Code : Tout sélectionner

;***********************************************************************************************************************************************************************
If OpenWindow (0, 0, 0, 300, 30, "Desktop mouse monitor", #PB_Window_SystemMenu | #PB_Window_ScreenCentered )
   TextGadget (0, 10, 6, 200, 20, "")
   Repeat
      Event = WindowEvent ()
      If Event = 0 ; No events are in queue anymore, so halt the process for a few milliseconds for multitasking
         SetGadgetText (0, "Desktop mouse position: "+ Str (DesktopMouseX ())+","+ Str ( DesktopMouseY()))
         Delay (20)
      EndIf
   Until Event = #PB_Event_CloseWindow
EndIf
Avec le code de la doc, t'as toujours des anomalies pour les max?

Re: Position de la souris et résolution d'ecran

Publié : dim. 18/mars/2018 21:35
par djes
micam a écrit :Je peux me débrouiller en faisant un calcul, mais si je change d'ordi, je suis marron...
Quelqu'un à une réponse ?
Merci.
En plus des remarques des autres, sur cette question précise, je peux te répondre que les fonctions que tu utilises servent justement à ce que ça fonctionne partout. Elles retourneront les valeurs correspondant aux ordinateurs sur lesquels tu les fais tourner. Il ne faut jamais utiliser de valeur codée "en dur" dans ton code, mais toujours utiliser les fonctions, et éventuellement des calculs pour retrouver d'autres valeurs -relativement- à celles-là, comme le fait falsam avec x et y, ou par exemple LargeurFenetre = DesktopWidth(0) - DesktopWidth(0) / 8.

Re: Position de la souris et résolution d'ecran

Publié : lun. 19/mars/2018 0:07
par PAPIPP
Bonjour à tous

et avec la position de la souris en valeurs absolues.

Code : Tout sélectionner

Declare Start()
Declare Exit()

ExamineDesktops()
Start()

Procedure Start()
   DWidth = DesktopWidth(0)
   DHeight = DesktopHeight(0)
   WWidth = 400 ;Largeur de la fenetre
   WHeight = 500; Hauteur de la fenetre

   x = DWidth - WWidth ;Fenetre à l'extréme droite de X
   y = (DHeight - WHeight)/2 ;Fenetre au milieu de Y

  OpenWindow(0, x, y, WWidth, WHeight, "Test", #PB_Window_SystemMenu)
   TextGadget (0, 10, 6, 200, 20, "")
   TextGadget (1, 10, 26, 200, 20, "")
   TextGadget (2, 10, 46, 200, 20, "")
  ;Triggers
  BindEvent(#PB_Event_CloseWindow, @Exit())

  Repeat
    posx=DesktopMouseX ()
    posy=DesktopMousey ()
    if windowevent()=0
      if WindowMouseX (0) >-1
        mes$="Position souris: "+ Str (DesktopMouseX ())+","+ Str (DesktopMouseY ())
      Else
        mes$="Souris hors fenêtre : 0,0"
      endif   
        SetGadgetText (0, mes$)
      endif
       SetGadgetText (1, "Position absolue de la souris : "+str(posx)+","+str(posy))
       SetGadgetText (2, "Position relative de la souris : "+str(WindowMouseX (0))+","+str(WindowMousey (0)))
      delay(5)
  ForEver
EndProcedure

Procedure Exit()
  End
EndProcedure
A+

Re: Position de la souris et résolution d'ecran

Publié : lun. 19/mars/2018 9:00
par PAPIPP
Bonjour à tous

Ci dessus petite modification pour avoir la position de la souris dans tout l'écran.

A=

Re: Position de la souris et résolution d'ecran

Publié : lun. 19/mars/2018 15:55
par micam
Bonjour à tous.
Falsam, tu as raison. "Un minimum de code ça aurait été bien" Mea culpa. Avec mon code cela aurait été peut être plus compréhensible.
J'ai testé vos codes. Chez moi je n'ai pas le résultat attendu.
Je vous mets des captures d'écran pour essayer de comprendre où ça ne va pas.
Image
Image
Merci de votre aide.

Re: Position de la souris et résolution d'ecran

Publié : lun. 19/mars/2018 16:13
par falsam
Ca me semble normal car meme si tu es en 1920 x 1080, tu as un zoom d'affichage à 125 % au lieu de 100%

Re: Position de la souris et résolution d'ecran

Publié : lun. 19/mars/2018 16:17
par micam
Bien vu.
Trop fort.
J'allais finir par m'arracher les cheveux de ne pas comprendre.
Merci infiniment Falsam.

Re: Position de la souris et résolution d'ecran

Publié : lun. 19/mars/2018 16:24
par micam
On peut anticiper ce problème sur un ordi que l'on ne connait pas ?

Re: Position de la souris et résolution d'ecran

Publié : lun. 19/mars/2018 16:32
par falsam
Oui. Il y a une solution qui tient compte du paramètre d'affichage utilisateur qui consiste à obtenir les véritables dimensions d'un objets manipulés sous Windows.

Pour cela on va utiliser l'API GetSystemMetrics (Ne fonctionne pas avec la version de démonstration de PureBasic)

Remplace

Code : Tout sélectionner

Protected DWidth = DesktopWidth(0)
Protected DHeight = DesktopHeight(0)
par

Code : Tout sélectionner

Protected DWidth = GetSystemMetrics_(#SM_CXSCREEN)
Protected DHeight = GetSystemMetrics_(#SM_CYSCREEN)
que tu sois à 100% ou 125% ou +++ la fenêtre se placera bien comme tu le souhaites au lancement de ton application.

Re: Position de la souris et résolution d'ecran

Publié : lun. 19/mars/2018 16:36
par micam
Ça fonctionne super bien.
Merci encore.