Page 1 sur 1

[R] Empecher deplacement GUI

Posté : mer. 18 janv. 2012 15:50
par DimVar
Glop,


Peut on empêcher les déplacement d'une GUI et comment ? Ou peut on replacer une gui (si le user la déplace) ?
(dommage que le terme "gui", qui fait 3 caractères, soit ignoré lors d'une recherche sur le forum)


Merci à vous.

Re: [..] Empecher deplacement GUI

Posté : mer. 18 janv. 2012 19:31
par lesolutionneur
Salut, je ne crois pas que l'on puisse empêcher un déplacement de la fenêtre (je crois que ça sera toujours possible en autoit), par contre, tu peux faire un événement qui s'execute quand la fenêtre bouge qui la remet au bon endroit, ou tout simplement une boucle qui vérifie regulierement la position de la fenêtre (et pourquoi pas un adlib register ?)

Re: [..] Empecher deplacement GUI

Posté : mer. 18 janv. 2012 20:17
par silvere
La GUI de ton programme ou d'un autre ?

Re: [..] Empecher deplacement GUI

Posté : mer. 18 janv. 2012 21:57
par lesolutionneur
Je pense de son programme mais c'est vrai qu'il ne l'a pas spécifié...

Re: [..] Empecher deplacement GUI

Posté : mer. 18 janv. 2012 22:30
par mikell

Code : Tout sélectionner

#include <GUIConstantsEx.au3>

$gui = GUICreate("My GUI",200,200)
GUISetState()
$pos = WinGetPos($gui)

While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    If $msg =$GUI_EVENT_PRIMARYUP Then WinMove($gui, "", $pos[0], $pos[1])
WEnd

Re: [..] Empecher deplacement GUI

Posté : mer. 18 janv. 2012 22:53
par Tlem
Ne fonctionne pas si on passe par 'Déplacer' du menu contextuel de l'icône de la barre des taches + flèche clavier (ou souris dans un deuxième temps).

Qui à être sauvage, autant faire ceci :

Code : Tout sélectionner

#include <GUIConstantsEx.au3>

$gui = GUICreate("My GUI",200,200)
GUISetState()
$pos = WinGetPos($gui)

While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    
    Sleep(50)
    WinMove($gui, "", $pos[0], $pos[1])
WEnd
L'idéal étant de passer par une CallBack, mais là, ça fait beaucoup plus de ligne de code. ;)
Tout dépend du code général. Si le code est light, alors la bidouille ci-dessus convient, sinon on peut aussi faire ceci :

Code : Tout sélectionner

#include <GUIConstantsEx.au3>

$gui = GUICreate("My GUI",200,200)
GUISetState()
$pos1 = WinGetPos($gui)

While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop

    $pos2 = WinGetPos($gui)
    If $pos1[0] <> $pos2[0] or $pos1[1] <> $pos2[1] Then WinMove($gui, "", $pos1[0], $pos1[1])
WEnd
Mais je préfère la CallBack. :mrgreen:

Re: [..] Empecher deplacement GUI

Posté : mer. 18 janv. 2012 23:04
par mikell
Bon ben comme ça alors :mrgreen:

Code : Tout sélectionner

#include <GUIConstantsEx.au3>

$gui = GUICreate("My GUI",200,200,-1, -1, -1, -1, WinGetHandle("[CLASS:Progman]"))
GUISetState()
$pos = WinGetPos($gui)

While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    If $msg =$GUI_EVENT_PRIMARYUP Then WinMove($gui, "", $pos[0], $pos[1])
WEnd

Re: [..] Empecher deplacement GUI

Posté : jeu. 19 janv. 2012 01:25
par Tlem
Je ne vois pas la différence en dehors de l'ajout d'options dans GUICreate. :shock:
Le comportement reste le même :

1 - Je lance la GUI
2 - Dans la barre des taches je fait un clic droit sur le programme en cours
3 - Je sélectionne "Déplacer"
4 - Je joue avec les flèches du clavier pour déplacer la fenêtre.
5 - La GUI bouge aussi avec la souris mais sans cliquer :mrgreen:

Re: [..] Empecher deplacement GUI

Posté : jeu. 19 janv. 2012 09:41
par DimVar
Merci à vous deux. Je clos.

Re: [..] Empecher deplacement GUI

Posté : jeu. 19 janv. 2012 13:13
par mikell
Tlem a écrit :2 - Dans la barre des taches je fait un clic droit sur le programme en cours
Hum sur mon XP faire de la gui une fille de Progman a comme conséquence qu'elle ne s'affiche plus dans la barre des tâches, mais apparemment ce n'est pas le cas ailleurs :?

Re: [R] Empecher deplacement GUI

Posté : jeu. 19 janv. 2012 15:11
par ZDS
Bonjour,

Je sais que le sujet a été résolu, mais je propose une alternative : Au lieu de remettre la fenetre à sa place quand elle bouge, pourquoi ne pas l'empécher de bouger? ça éviterait les scintillements désagréables ^^
► Afficher le texteBlocage fenêtre
A bientôt.

PS: Je me demande si c'est le genre de code que Tlem a appelé "callback" (mais je ne pense pas, j'appellerai ça plutôt "registerMsg"). Dans ce cas, puisqu'il n'a pas posté de code, en voici un exemple.
PS2: Lesolutionneur, 90% du temps où ce n'est pas possible, au final ça l'est :)
PS3: Le code au milieu est volontaire, pour montrer qu'il est toujours possible en interne de bouger la fenêtre, mais les commandes telles que montrées plus haut (souris, clavier, barre de tâches, etc...) sont inactives.

Re: [R] Empecher deplacement GUI

Posté : jeu. 19 janv. 2012 15:47
par mikell
:shock: Super
J'ai trouvé 0xF010 = SC_MOVE mais que signifie exactement cette valeur 0xFFF0 qui sert dans tous les tests ?

Re: [R] Empecher deplacement GUI

Posté : jeu. 19 janv. 2012 16:00
par ZDS
Le FFF0 n'est qu'un masque, permettant de dire qu'on ne garde que la partie significative du wParam, soit les 2 derniers octets, mais que les 4 derniers bits ne sont pas utiles.

Ne me demande pas ce qu'il y a au dessus de FFFF, ni ce qui utilise le dernier nombre, je n'en sais rien du tout ^^ Ce que j'ai remarqué par contre, c'est qu'en mettant sur quasiment tout et n'importe quel composant de mon script, une fonction de ce type (avec un ConsoleWrite dedans), tu récupères pas mal d'infos sur les événements que gère la fenêtre. Par exemple, F060 correspond à une fermeture, F010 à un déplacement, F020 à une réduction, F120 à une restauration, etc...

Disons que le mieux pour utiliser ce genre de truc, c'est la pratique (et les plantages qui vont avec ^^).

Re: [R] Empecher deplacement GUI

Posté : ven. 20 janv. 2012 00:37
par Tlem
ZDS a écrit :PS: Je me demande si c'est le genre de code que Tlem a appelé "callback" (mais je ne pense pas, j'appellerai ça plutôt "registerMsg").
C'est exactement ce que j'appelle une CallBack.

Extrait de ce lien : http://www.autoitscript.fr/forum/viewto ... 732#p53732
Tlem a écrit :Humm, effectivement, pour la recherche, il fallait utiliser CallBack et GUIRegisterMsg
Le seul truc, c'est que je l'imaginais un tout petit peut plus complexe car je n'avais pas fait de recherches. ;)

Re: [R] Empecher deplacement GUI

Posté : lun. 23 janv. 2012 09:55
par DimVar
Merci pour ce complément d'info.