[R] Limiter la zone de déplacement du GUI

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

[R] Limiter la zone de déplacement du GUI

#1

Message par pierrotm777 »

Bonjour,

Je cherche une solution pour limiter le déplacement d'une GUI sur l'écran à une zone en x et y .

Merci de votre aide par avance
Modifié en dernier par pierrotm777 le lun. 23 mai 2011 16:31, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11796
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Limiter la zone de déplacement du GUI

#2

Message par Tlem »

Il me semble bien que la question à déjà été posée.
En cherchant un peut ...

Sinon pour faire simple :
Utilisez GUIRegisterMsg pour surveiller la position de la GUI et bloquer les valeurs de position de la GUI par GUICtrlSetPos.

Ces deux fonctions ont leur réponse à l'utilisation dans la documentation et dans le forum. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Limiter la zone de déplacement du GUI

#3

Message par pierrotm777 »

Merci Tlem,
J'ai bien cherché mais rien trouvé .

Je vais regarder cela de plus prés
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Limiter la zone de déplacement du GUI

#4

Message par pierrotm777 »

En fait ,je déplace mas fenêtre avec la souris grace à la fonction suivante:
► Afficher le texte
J'ai donc tenté de modifier la fonction ainsi mais là la fenêtre ne bouge plus !
► Afficher le texte
Quant à GUICtrlSetPos, il permet de déplacer un contrôle mais ce que je souhaite c'est pouvoir limiter le déplacement de cette gui par la souris
Modifié en dernier par pierrotm777 le dim. 22 mai 2011 09:35, modifié 1 fois.
Avatar du membre
Yarillo
Niveau 5
Niveau 5
Messages : 109
Enregistré le : mer. 11 mai 2011 22:22
Status : Hors ligne

Re: [..] Limiter la zone de déplacement du GUI

#5

Message par Yarillo »

Ce que voulait dire Tlem par l'utilisation du GUICtrlSetPos, c'est de remettre la fenêtre à sa précédente position si l'utilisateur décide de la déplacer un peu trop loin.
Ca n'empêche pas de la déplacer complètement, elle risque de faire des sortes de mini téléportations (Hop je te déplace d'un côté et pouf, elle revient en place, en boucle jusqu'à ce que l'utilisateur abandonne).

Il est aussi possible de désactiver complètement la bordure de la fenêtre mais c'est sale comme façon de faire.
http://autoitscript.fr/forum/viewtopic.php?f=4&t=7519

Tu peux aussi utiliser la fonction "_MouseTrap" pour empêcher l'utilisateur de bouger sa souris quand il l'a en clique gauche enfoncé sur le haut d'une Form qui est trop éloignée.
Modifié en dernier par Yarillo le dim. 22 mai 2011 09:38, modifié 3 fois.
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Limiter la zone de déplacement du GUI

#6

Message par pierrotm777 »

Bon , je m'étais un peu trompé dans mon test , j'ai donc modifié celui-ci mais j'arrive à déplacer malgré tout la fenêtre
au-delà de mes coordonnées xy, par contre , si la fenêtre a été déplacée au-delà des coordonnées limites elle ne peut
plus être déplacée.
► Afficher le texte
Je ne vois pas comment me servir ici de la fonction GUICtrlSetPos()
Modifié en dernier par pierrotm777 le dim. 22 mai 2011 09:35, modifié 2 fois.
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Limiter la zone de déplacement du GUI

#7

Message par pierrotm777 »

Yarillo, merci de votre aide, ma gui est déjà de ce type (.png).
Je voudrais vraiment ne pas pouvoir dépasser les valeurs xy, comme un effet butoir sur ces coordonnée et cela en temps réel !
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Limiter la zone de déplacement du GUI

#8

Message par pierrotm777 »

En fait le script sur lequel je travaille est dédié à un pc avec écran tactile, certes, le click de souris simule l'appuie sur l'écran mais ici _MouseTrap ne
me semble pas utilisable !
Avatar du membre
Yarillo
Niveau 5
Niveau 5
Messages : 109
Enregistré le : mer. 11 mai 2011 22:22
Status : Hors ligne

Re: [..] Limiter la zone de déplacement du GUI

#9

Message par Yarillo »

GUICtrlSetPos ( $Form1, 200, 80) déplacera la fenêtre au handle "$Form1" en X: 200 Y: 80

Pour votre problème de "buttage" je pense que je suis arrivé au bout de mon imagination, je laisse les bleus, verts, jaunes et rouges s'en occuper.

EDIT : Je n'ai jamais utilisé d'écran tactile et je n'ai jamais développé pour ce genre de choses, je suis dépassé sur ce plan, je vais tenter de me renseigner mais ça sera surement résolu par un autre avant.
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Limiter la zone de déplacement du GUI

#10

Message par pierrotm777 »

L'écran tactile n'est juste q'un détail car pour mes tests j'utilise tout de même la souris
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11796
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Limiter la zone de déplacement du GUI

#11

Message par Tlem »

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>

Global $iX_Min = 100, $iX_Max = @DesktopWidth - 600, $iY_Min = 100, $iY_Max = @DesktopHeight - 600

$hGUI = GUICreate("Test", 500, 500)

GUISetState()

GUIRegisterMsg($WM_WINDOWPOSCHANGING, "WM_WINDOWPOSCHANGING")

While 1

    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch

WEnd

Func WM_WINDOWPOSCHANGING($hWnd, $Msg, $wParam, $lParam)

    Local $stWinPos = DllStructCreate("uint;uint;int;int;int;int;uint", $lParam)

    Local $iLeft = DllStructGetData($stWinPos, 3)
    Local $iTop = DllStructGetData($stWinPos, 4)
    Local $iWidth = DllStructGetData($stWinPos, 5)
    Local $iHeight = DllStructGetData($stWinPos, 6)

    If $iLeft < $iX_Min Then DllStructSetData($stWinPos, 3, $iX_Min)
    If $iTop < $iY_Min Then DllStructSetData($stWinPos, 4, $iY_Min)
    If $iLeft > $iX_Max Then DllStructSetData($stWinPos, 3, $iX_Max)
    If $iTop > $iY_Max Then DllStructSetData($stWinPos, 4, $iY_Max)

EndFunc
Source : http://www.autoitscript.com/forum/topic ... _p__795293
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Limiter la zone de déplacement du GUI

#12

Message par pierrotm777 »

Merci Tlem, c'est effectivement une bonne solution mais qui fonctionne sur en repositionnement
de la fenêtre si les coordonnées sont dépassées.
Y aurait-il un moyen de bloquer dés que l'on arrive sur les coordonnées ?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11796
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Limiter la zone de déplacement du GUI

#13

Message par Tlem »

Gné ! :shock:

Je comprend pas ce que vous cherchez à faire. La question est claire, mais ce que vous avez à l'esprit ne semble pas correspondre. Donc encore une fois, il va y avoir de multiples échanges de messages pour arriver à un résultat. :cry:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Limiter la zone de déplacement du GUI

#14

Message par pierrotm777 »

Je viens de tester pour autre chose la fonction GUICtrlSetPos ( $Form1, 200, 80).
Sur la fenêtre, elle ne fonctionne pas.
J'ai donc utilisé la fonction WinMove($Form1,"", 200, 80).
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Limiter la zone de déplacement du GUI

#15

Message par pierrotm777 »

Bon, je vais tenter de mieux m'expliquer.
Je souhaite pouvoir déplacer à la souris une fenêtre en x et y mais avec une limite comme votre exemple le propose, mais sans jamais dépasser ces limites !
Dans votre exemple les limites sont dépassables tant que l'on tient la fenêtre avec la souris, puis la fenêtre se positionne à la valeur min ou max en x ou y la plus proche !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11796
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Limiter la zone de déplacement du GUI

#16

Message par Tlem »

:shock: Heuuu, ben non. La fenêtre est cloisonnée dans un espace déterminé et ne sort d'aucune façon de cet espace. En tout cas, c'est comme cela que ça fonctionne sur mon PC.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Yarillo
Niveau 5
Niveau 5
Messages : 109
Enregistré le : mer. 11 mai 2011 22:22
Status : Hors ligne

Re: [..] Limiter la zone de déplacement du GUI

#17

Message par Yarillo »

Effectivement, ça fonctionne de mon côté aussi, essaye plutôt.
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Limiter la zone de déplacement du GUI

#18

Message par pierrotm777 »

Ca me convient tout de même, je clos donc le sujet !

Merci à tous pour votre aide :wink:
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Limiter la zone de déplacement du GUI

#19

Message par pierrotm777 »

Euuh , désolé, je suis de retour sur ce sujet.
En avançant dans mon script je viens de constater que si je crée plusieurs Gui filles qui normalement doivent suivre ma Gui principale grâce à l'option $WS_EX_MDICHILD, lorsque je bouge la gui principale vers la gauche, les gui filles suivent alors que si je déplace la Gui principale vers la droite, les gui filles se placent tout à coup l'une sur l'autre à l'origine de la Gui principale.
Alors que si je commente la ligne , GUIRegisterMsg($WM_WINDOWPOSCHANGING, "WM_WINDOWPOSCHANGING") , je n'ai plus bien sure les limites en x et y mais je n'ai plus ce problème de superposition des gui filles !

Je vous joins mon exemple !

Merci de votre aide
Fichiers joints
gui&children.zip
(22.29 Kio) Téléchargé 137 fois
Modifié en dernier par pierrotm777 le mar. 24 mai 2011 18:33, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11796
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Limiter la zone de déplacement du GUI

#20

Message par Tlem »

Je n'ai pas de réponse.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre