Page 1 sur 1

[R] Affichage GUI sur écrans partagés

Posté : mer. 09 sept. 2015 16:02
par Hugues
Bonjour,

Je ne sais pas si le titre est clair, mais voilà ce que je voudrais réaliser ^^.

J'ai un PC avec 2 écrans (en mode étendu). La taille de ces écrans peut-être différente.

Je voudrais afficher sur chaque écran, le même GUI mais avec des valeurs inputs différentes.

Je pense partir sur un fichier *.ini pour gérer les valeurs à afficher

[SCREEN1]
Valeur1=toto
Valeur2=tata
[SCREEN2]
Valeur1=blabla
Valeur2=blublu

, et pour le GUI, écran 1 -> Func _GUIScreen1() et écran 2 -> Func _GUIScreen2().

Déjà avant de commencer, suis-je dans la bonne direction?

Merci par avance.

Re: [..]Affichage GUI sur écrans partagés

Posté : mer. 09 sept. 2015 16:17
par TT22
Ça dépend, si tes deux GUIs peuvent fonctionner de manière indépendante le plus simple serait de faire deux scripts :wink:
Par contre si elles doivent interagir le mieux serait de les traiter tour à tour en faisant des GUISwitch().

Re: [..]Affichage GUI sur écrans partagés

Posté : mer. 09 sept. 2015 16:35
par Hugues
Les 2 gui seraient indépendantes, mais ayant un design identique ^^.

Re: [..]Affichage GUI sur écrans partagés

Posté : mer. 09 sept. 2015 16:38
par TT22
Alors je pense que le plus simple serait de faire deux scripts, un par GUI :wink:

Re: [..]Affichage GUI sur écrans partagés

Posté : mer. 09 sept. 2015 16:50
par Hugues
Ok, je vais me diriger vers cette solution.

Par contre, il faut que je fasse un script principal qui:

-Détermine si j'ai 1 ou 2 écran(s), avec _WinAPI_GetSystemMetrics(80)

Si 1 -> GUI1 (script1) sur écran 1
Si 2 -> GUI1 (script1) sur écran 1 & GUI2 (script2) sur écran 2.

Re: [..]Affichage GUI sur écrans partagés

Posté : mer. 09 sept. 2015 17:04
par TT22
Oui, ça devrait fonctionner !

Re: [..] Affichage GUI sur écrans partagés

Posté : jeu. 10 sept. 2015 10:38
par Hugues
Bon, un problème se pose déjà...

J'arrive à compter le nombre d'écran, mais je ne trouve pas de fonction pour faire,

Tu affiches mon GUI 1 sur l'écran 1 et/ou mon GUI 2 sur l'écran 2...

J'ai trouvé plein de fonction pour récupérer les tailles et les identifications...

Merci par avance.

Re: [..] Affichage GUI sur écrans partagés

Posté : jeu. 10 sept. 2015 11:04
par TT22
Désolé mais n'ayant qu'un écran à disposition je ne pourrais pas t'aider sur ce problème :?

Re: [..] Affichage GUI sur écrans partagés

Posté : jeu. 10 sept. 2015 14:14
par Hugues
:cry: :cry:

Re: [..] Affichage GUI sur écrans partagés

Posté : ven. 11 sept. 2015 15:10
par Hugues
Bon j'ai un peu avancé ^^,

Mon problème est comment "forcé" un GUI à s'afficher sur l'ecran 1 ou 2...
► Afficher le texte

Re: [..] Affichage GUI sur écrans partagés

Posté : ven. 11 sept. 2015 19:28
par jguinch
Bin faut simplement déplacer la fenêtre aux coordonnées x et y qui correspondent au coin supérieur gauche du deuxième écran

Re: [..] Affichage GUI sur écrans partagés

Posté : lun. 14 sept. 2015 14:43
par Hugues
Oui, mais comment fait-on car le coin haut gauche de mon deuxième écran devrait avoir 0 pour coordonnée?

Re: [..] Affichage GUI sur écrans partagés

Posté : lun. 14 sept. 2015 15:19
par Hugues
Dans mon programme j'utilise cette fonction (qui doit-être de toi de mémoire ^^)

Code : Tout sélectionner

[spoiler=]
Func _ScreenAdaptation()
    $WorkAera = _GetWorkArea()
    Local $aGuiPos = WinGetPos($MainGUI)
    If $aGuiPos[0] <> $WorkAera[0] Or $aGuiPos[1] <> $WorkAera[1] Or $aGuiPos[2] <> $WorkAera[4] Or $aGuiPos[3] <> $WorkAera[5] Then WinMove($MainGUI, "", $WorkAera[0], $WorkAera[1], $WorkAera[4], $WorkAera[5])
    
    Return $WorkAera
EndFunc   ;==>_ScreenAdaptation

Func _GetWorkArea()
    Global $Area[6]
    Local $StartRect = DllStructCreate("int[4]")
    Local $PStartRect = DllStructGetPtr($StartRect)
    DllCall("user32.dll", "int", "SystemParametersInfo", "int", 48, "int", 0, "ptr", $PStartRect, "int", 0)
    $Area[0] = DllStructGetData($StartRect, 1, 1)
    $Area[1] = DllStructGetData($StartRect, 1, 2)
    $Area[2] = DllStructGetData($StartRect, 1, 3)
    $Area[3] = DllStructGetData($StartRect, 1, 4)
    $Area[4] = $Area[2] - $Area[0]
    $Area[5] = $Area[3] - $Area[1]
    Return $Area
EndFunc   ;==>_GetWorkArea
[/spoiler]
Elle me permet d'ajuster mon GUI à la fenêtre. Je pense qu'il faut agir au niveau du WinMove(), mais le problème c'est que ça ne "reformate" par le GUI à l'écran étendu...

Re: [..] Affichage GUI sur écrans partagés

Posté : lun. 14 sept. 2015 15:22
par jguinch
Les coordonnées de l'écran principal sont x=0 et y=0.
Les coordonnées des autres écrans dépendent de la résolution utilisée et de la disposition de ceux-ci.
Si tu as deux écrans en 1280x1024, que l'écran de gauche est l'écran principal et qu'ils sont alignés, les coordonnées de l'écran secondaire seront x=1280:y=0.
Si l'écran principal est celui de droite, tu auras x=-1280.

Regarde avec ça si ça te va :
► Afficher le texte

Re: [..] Affichage GUI sur écrans partagés

Posté : lun. 14 sept. 2015 15:28
par Hugues
Ça me retourne 0, 0 comme coordonnées. Et non mes écrans peuvent être de tailles différentes justement... Je peux avoir en écran principal un écran PC classique de n'importe quelle résolution et en secondaire un écran LCD 42"...

Re: [..] Affichage GUI sur écrans partagés

Posté : lun. 14 sept. 2015 16:13
par jguinch
désolé, je suis parti sur la mauvais fonction.
Essaye plutôt _WinAPI_EnumDisplayMonitors (voir l'exemple)

Re: [..] Affichage GUI sur écrans partagés

Posté : lun. 14 sept. 2015 22:23
par TommyDDR

Code : Tout sélectionner

Func _MonitorsGetPosAndSize($mode = 0)
    Local $monitors = _WinAPI_EnumDisplayMonitors()
    Local $ret[$monitors[0][0]][4]
    For $i = 0 To $monitors[0][0]-1
        Local $monInfo = _WinAPI_GetMonitorInfo($monitors[$i+1][0])
        $ret[$i][0] = DllStructGetData($monInfo[$mode], "left")
        $ret[$i][1] = DllStructGetData($monInfo[$mode], "top")
        $ret[$i][2] = DllStructGetData($monInfo[$mode], "right")-DllStructGetData($monInfo[0], "left")
        $ret[$i][3] = DllStructGetData($monInfo[$mode], "bottom")-DllStructGetData($monInfo[0], "top")
    Next
    Return $ret
EndFunc

Re: [..] Affichage GUI sur écrans partagés

Posté : mar. 15 sept. 2015 09:51
par Hugues
Sujet résolu,

Un GRAND MERCI à vous tous!!!