S'adapter à n'importe quel résolution d'écran

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Misa10
Niveau 4
Niveau 4
Messages : 52
Enregistré le : sam. 14 avr. 2018 12:50
Status : Hors ligne

S'adapter à n'importe quel résolution d'écran

#1

Message par Misa10 »

Bonjour ,

À mon avis vous êtes énormément à rechercher une solution pour adapter vos script sur n'importe quel résolution ?

Je recherche une solution aussi .

Alors actuellement pour ce que j'ai dev .

Les infos pour l'exemple :

Mon pc : 1920x1080

Résolution de test : 1400x1050


X/Y du mouse click d'un bouton en 1920x1080 : 579 et 599

Donc ce que j'ai fait j'ai fait des calculs j'ai fait 1920 / 1400 et 1080 / 1050 ce qui nous permet d'obtenir un coef de pourcentage . Par la suite avec ce chiffre je fait 578 / le coef et 599 / le coef .

Logiquement ça devrait marcher sauf que ça ne marche pas .

Les calculs :


1920 /1400 = 1,37....

579 / 1,37... = 422


Quand avec je prend la position de la mouse de la position en 1400x1050 j'obtiens 333 . Pourquoi ce ne correspond pas ? Je ne sais pas .


Deuxième solution obligé l'utilisateur à être en 1920 x 1080 j'ai vu qu'une UDF américaine traîné pour modifier la résolution de l'écran sauf que tout le monde peux être en 1920 x1080 ? Une personne avec un petit écran va voir correctement où il aura l'écran coupé ?

Voilà si des gens ont déjà test , une solution ou autre je prends avec plaisir merci d'avance .
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: S'adapter à n'importe quel résolution d'écran

#2

Message par TommyDDR »

Bonjour, pouvez-vous êtes plus explicite concernant votre demande (avec un script qui met en évidence le problème rencontré) ?

Edit : Sans plus d'informations, voilà une solution proposée qui s'adapte aux résolutions (grâce à GUICtrlSetResizing) :
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <TreeViewConstants.au3>
#include <WinAPITheme.au3>
#include <WindowsConstants.au3>

Opt("GUIOnEventMode", 1)
Opt("MustDeclareVars", 1)

Global $gui
Global $tView
Global $lView


Global $taille[2] = [800, 600]
Global $border = 5
Global $tailleTView = [150, $taille[1] - 2 * $border]
Global $tailleLView = [$taille[0] - 3 * $border - $tailleTView[0], $tailleTView[1]]

$gui = GUICreate("", $taille[0], $taille[1], Default, Default, $WS_OVERLAPPEDWINDOW)
GUISetOnEvent($GUI_EVENT_CLOSE, "quit", $gui)
$tView = GUICtrlCreateTreeView($border, $border, $tailleTView[0], $tailleTView[1], BitOR($TVS_HASBUTTONS, $TVS_LINESATROOT, $TVS_HASLINES, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
confTView()
$lView = GUICtrlCreateListView("", $border * 2 + $tailleTView[0], $border, $tailleLView[0], $tailleLView[1])
confLView()
GUICtrlSetResizing($tView, BitOR($GUI_DOCKLEFT, $GUI_DOCKTOP, $GUI_DOCKBOTTOM, $GUI_DOCKWIDTH))
GUICtrlSetResizing($lView, BitOR($GUI_DOCKLEFT, $GUI_DOCKTOP, $GUI_DOCKBOTTOM, $GUI_DOCKRIGHT))
GUISetState(@SW_SHOW, $gui)

While(True)
   Sleep(10)
WEnd

Func confTView()
   _WinAPI_SetWindowTheme(GUICtrlGetHandle($tView), 'Explorer')
   _GUICtrlListView_SetExtendedListViewStyle($tView, BitOR($lVS_EX_DOUBLEBUFFER, $lVS_EX_FULLROWSELECT, $lVS_EX_SUBITEMIMAGES, $LVS_EX_HEADERDRAGDROP))
   Local $grp1 = GUICtrlCreateTreeViewItem("Groupe 1", $tView)
   Local $grp2 = GUICtrlCreateTreeViewItem("Groupe 2", $tView)
   Local $grp3 = GUICtrlCreateTreeViewItem("Groupe 3", $tView)
   GUICtrlCreateTreeViewItem("Item 1", $grp1)
   GUICtrlCreateTreeViewItem("Item 2", $grp1)
   GUICtrlCreateTreeViewItem("Item 3", $grp1)
   GUICtrlCreateTreeViewItem("Item 4", $grp2)
   GUICtrlCreateTreeViewItem("Item 5", $grp2)
   GUICtrlCreateTreeViewItem("Item 6", $grp3)
   GUICtrlCreateTreeViewItem("Item 7", $grp3)
   GUICtrlCreateTreeViewItem("Item 8", $grp3)
   GUICtrlSetState($grp1, $GUI_EXPAND)
   GUICtrlSetState($grp2, $GUI_EXPAND)
   GUICtrlSetState($grp3, $GUI_EXPAND)
EndFunc

Func confLView()
   _WinAPI_SetWindowTheme(GUICtrlGetHandle($lView), 'Explorer')
   _GUICtrlListView_BeginUpdate($lView)
   _GUICtrlListView_AddColumn($lView, "Nom", 100)
   _GUICtrlListView_AddColumn($lView, "val 1", 150)
   _GUICtrlListView_AddColumn($lView, "val 2", 150)
   For $i = 0 To 100
      Local $index = _GUICtrlListView_AddItem($lView, "Item " & $i)
      _GUICtrlListView_AddSubItem($lView, $index, $i * 10, 1)
      _GUICtrlListView_AddSubItem($lView, $index, $i * 100, 2)
   Next
   _GUICtrlListView_EndUpdate($lView)
EndFunc

Func quit()
   Exit
EndFunc
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Misa10
Niveau 4
Niveau 4
Messages : 52
Enregistré le : sam. 14 avr. 2018 12:50
Status : Hors ligne

Re: S'adapter à n'importe quel résolution d'écran

#3

Message par Misa10 »

TommyDDR a écrit : ven. 07 mai 2021 23:52 Bonjour, pouvez-vous êtes plus explicite concernant votre demande (avec un script qui met en évidence le problème rencontré) ?

Edit : Sans plus d'informations, voilà une solution proposée qui s'adapte aux résolutions (grâce à GUICtrlSetResizing) :
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <TreeViewConstants.au3>
#include <WinAPITheme.au3>
#include <WindowsConstants.au3>

Opt("GUIOnEventMode", 1)
Opt("MustDeclareVars", 1)

Global $gui
Global $tView
Global $lView


Global $taille[2] = [800, 600]
Global $border = 5
Global $tailleTView = [150, $taille[1] - 2 * $border]
Global $tailleLView = [$taille[0] - 3 * $border - $tailleTView[0], $tailleTView[1]]

$gui = GUICreate("", $taille[0], $taille[1], Default, Default, $WS_OVERLAPPEDWINDOW)
GUISetOnEvent($GUI_EVENT_CLOSE, "quit", $gui)
$tView = GUICtrlCreateTreeView($border, $border, $tailleTView[0], $tailleTView[1], BitOR($TVS_HASBUTTONS, $TVS_LINESATROOT, $TVS_HASLINES, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
confTView()
$lView = GUICtrlCreateListView("", $border * 2 + $tailleTView[0], $border, $tailleLView[0], $tailleLView[1])
confLView()
GUICtrlSetResizing($tView, BitOR($GUI_DOCKLEFT, $GUI_DOCKTOP, $GUI_DOCKBOTTOM, $GUI_DOCKWIDTH))
GUICtrlSetResizing($lView, BitOR($GUI_DOCKLEFT, $GUI_DOCKTOP, $GUI_DOCKBOTTOM, $GUI_DOCKRIGHT))
GUISetState(@SW_SHOW, $gui)

While(True)
   Sleep(10)
WEnd

Func confTView()
   _WinAPI_SetWindowTheme(GUICtrlGetHandle($tView), 'Explorer')
   _GUICtrlListView_SetExtendedListViewStyle($tView, BitOR($lVS_EX_DOUBLEBUFFER, $lVS_EX_FULLROWSELECT, $lVS_EX_SUBITEMIMAGES, $LVS_EX_HEADERDRAGDROP))
   Local $grp1 = GUICtrlCreateTreeViewItem("Groupe 1", $tView)
   Local $grp2 = GUICtrlCreateTreeViewItem("Groupe 2", $tView)
   Local $grp3 = GUICtrlCreateTreeViewItem("Groupe 3", $tView)
   GUICtrlCreateTreeViewItem("Item 1", $grp1)
   GUICtrlCreateTreeViewItem("Item 2", $grp1)
   GUICtrlCreateTreeViewItem("Item 3", $grp1)
   GUICtrlCreateTreeViewItem("Item 4", $grp2)
   GUICtrlCreateTreeViewItem("Item 5", $grp2)
   GUICtrlCreateTreeViewItem("Item 6", $grp3)
   GUICtrlCreateTreeViewItem("Item 7", $grp3)
   GUICtrlCreateTreeViewItem("Item 8", $grp3)
   GUICtrlSetState($grp1, $GUI_EXPAND)
   GUICtrlSetState($grp2, $GUI_EXPAND)
   GUICtrlSetState($grp3, $GUI_EXPAND)
EndFunc

Func confLView()
   _WinAPI_SetWindowTheme(GUICtrlGetHandle($lView), 'Explorer')
   _GUICtrlListView_BeginUpdate($lView)
   _GUICtrlListView_AddColumn($lView, "Nom", 100)
   _GUICtrlListView_AddColumn($lView, "val 1", 150)
   _GUICtrlListView_AddColumn($lView, "val 2", 150)
   For $i = 0 To 100
      Local $index = _GUICtrlListView_AddItem($lView, "Item " & $i)
      _GUICtrlListView_AddSubItem($lView, $index, $i * 10, 1)
      _GUICtrlListView_AddSubItem($lView, $index, $i * 100, 2)
   Next
   _GUICtrlListView_EndUpdate($lView)
EndFunc

Func quit()
   Exit
EndFunc


Désolé pour l'instant je suis pas sur mon pc donc impossible de vous donnez un bout de code dès que je peux je le fait mais ce n'est pas pour une gui c'est pour des données fixe ( X,Y) type variable mouse click .... Fin vraiment tout et n'importe quoi qui utilise un X,Y pour une position . Imaginons que je décide qu'il y'a un mouse click en 500,600 sur une autre résolution de pc autre que la mienne le mouse click ne de retrouvera pas au même endroit car la largeur et longueur a changer d'où l'histoire du coef qui logiquement mathématiquement permettrai de " convertir " le x,y du mouse click pour n'importe quelle résolution d'écran .
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: S'adapter à n'importe quel résolution d'écran

#4

Message par TommyDDR »

Ok, je comprends mieux.
Vous vous êtes juste inversé pour les coef :
Si vous cliquez en 550 en 1920 et que la cible est 1400, il faut faire 550 / 1920 * 1400
C'est logique, imaginez que vous vouliez cliquer en 1920 (donc en 1400 sur la 2nd résolution)
1920 / 1920 * 1400 = 1 * 1400 = 1400
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Misa10
Niveau 4
Niveau 4
Messages : 52
Enregistré le : sam. 14 avr. 2018 12:50
Status : Hors ligne

Re: S'adapter à n'importe quel résolution d'écran

#5

Message par Misa10 »

TommyDDR a écrit : sam. 08 mai 2021 10:24 Ok, je comprends mieux.
Vous vous êtes juste inversé pour les coef :
Si vous cliquez en 550 en 1920 et que la cible est 1400, il faut faire 550 / 1920 * 1400
C'est logique, imaginez que vous vouliez cliquer en 1920 (donc en 1400 sur la 2nd résolution)
1920 / 1920 * 1400 = 1 * 1400 = 1400

Merci de votre aide . Du coup j'ai fait votre formule de calcul en reprenant les chiffre du premier post donc 579 et 1920 et 1400

579/1920 * 1400 = 422

Du coup au final je me retrouve avec exactement le même résultat que sur ma formule de calcul . Ce que je comprends pas c'est pourquoi ça ne marche pas . J'ai essayé sauf qu'au final l'objet cible de trouve en 333 et non en 422 comme le dit le résultat . J'ai bien revérifier en 1920 l'objet de trouve bien en 579 .
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: S'adapter à n'importe quel résolution d'écran

#6

Message par TommyDDR »

Il faudrait une impression écran e 1920 et une en 1400 pour pouvoir comparer
Pour moi, ce n'est pas un bête ratio et il y a surement des parties qui se recalculent différemment.
Sans impressions écrans, nous ne pourrons pas aller plus loin dans l'analyse.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Misa10
Niveau 4
Niveau 4
Messages : 52
Enregistré le : sam. 14 avr. 2018 12:50
Status : Hors ligne

Re: S'adapter à n'importe quel résolution d'écran

#7

Message par Misa10 »

Alors voila un exemple concret 3 screen un qui montre la position avec un points rouge d'ou j'ai pris les données à chaque fois . Vous pouvez voir le X,Y dans le autoit X,Y.
IMG1.jpg
IMG2.jpg
IMG3.jpg
IMG3.jpg (3.38 Kio) Vu 2713 fois

On peux voir qu'en 1920 on trouve 527 et en 1400 on trouve 511

mais si on se base sur les calculs

1920/1400 = 1,3714...

527/1,3714 = 384

Donc ça ne correspond pas . la question c'est d'ou viens le problème.
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: S'adapter à n'importe quel résolution d'écran

#8

Message par TommyDDR »

Si on observe bien les impressions écrans, on voit que ce n'est en effet pas simplement un ratio, les tailles d’icônes changent très légèrement ainsi que l'espacement entre les icônes, mais vous perdez surtout une grosse partie de vide à droite, c'est là que part la plupart de la différence de résolution.
La question est surtout : pourquoi pouvoir cliquer sur un fichier sur le bureau et pas faire un :

ShellExecute(@DesktopDir & "\Sufokia.zip")
(.zip, .rar, .7z suivant la réelle extension du fichier, comme vous ne les affichez pas, je ne peux pas savoir exactement)

Quel est le but de cliquer sur cet icône ?
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Misa10
Niveau 4
Niveau 4
Messages : 52
Enregistré le : sam. 14 avr. 2018 12:50
Status : Hors ligne

Re: S'adapter à n'importe quel résolution d'écran

#9

Message par Misa10 »

TommyDDR a écrit : dim. 09 mai 2021 09:53 Si on observe bien les impressions écrans, on voit que ce n'est en effet pas simplement un ratio, les tailles d’icônes changent très légèrement ainsi que l'espacement entre les icônes, mais vous perdez surtout une grosse partie de vide à droite, c'est là que part la plupart de la différence de résolution.
La question est surtout : pourquoi pouvoir cliquer sur un fichier sur le bureau et pas faire un :

ShellExecute(@DesktopDir & "\Sufokia.zip")
(.zip, .rar, .7z suivant la réelle extension du fichier, comme vous ne les affichez pas, je ne peux pas savoir exactement)

Quel est le but de cliquer sur cet icône ?

Le but étant par exemple d'utiliser de la recherche d'images ou de pixel et que la zone prédéfini s'adapte aux changements de résolution ou que par exemple un mouse click sur une application s'adapte aux changements de résolution aussi par exemple . L'histoire du bureau c'etait simplement un exemple pour démontrer d'où venait le problème . Donc impossible de savoir si coup comment la résolution change l'écran vu que ce n'est pas un %?
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: S'adapter à n'importe quel résolution d'écran

#10

Message par TommyDDR »

La question encore une fois est : Quel est le but de cliquer sur une icône sur le bureau ?
Vous avez surement autre autre finalité que de simplement cliquer une fois sur une icône du bureau.
Le but n'est-il pas de double cliquer dessus et donc de lancer le fichier voulu ?

Essayez de répondre avec un "début de cahier des charges".
C'est à dire : qu'est ce que vous avez en entrée, et qu'est ce que vous voulez en sortie.

Exemple : Je veux voir les propriétés du fichier Sufokia.zip se situant sur mon bureau
-> Entrée : nom du fichier
-> sortie : paramètres du fichier

("Faire un mouseclick sur une icône" n'est pas une finalité, "lancer l'application" en est une.)

Pour être clair : Il y a de fortes chances que vous vouliez faire une action d'une manière beaucoup plus compliqué que ce qui est possible de faire.

C'est pourquoi vous devez indiquer la finalité exact de ce clic sur une application
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: S'adapter à n'importe quel résolution d'écran

#11

Message par TommyDDR »

Sufokia étant le nom d'un serveur dofus, la présence d'une image dofus sur le bureau et d'un flash décompiler me laissent un doute sur vos intentions.

Sans compter votre mois d'absence sur ce sujet, je laisse un warning ici pour la suite de cette discussion.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: S'adapter à n'importe quel résolution d'écran

#12

Message par mikell »

Image ............... Image
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Répondre