Gambas France BETA


Pas de compte ? Incription

Positionner le pointeur

1
AuteurMessages
Foromus#1 Posté le 30/4/2023 à 08:44:42
Bonjour à tous,

Le besoin actuel consiste à utiliser une combinaison de touches (genre Ctrl + ! par exemple), pour positionner le curseur au centre de l'écran (ou ailleurs...).
J'utilise cette fonction dans plusieurs de mes projets, et ça fonctionne, j'ai donc pensé que c'était facile.
Mais je voudrais que ce logiciel soit sans Form, et lancé à l'ouverture de la session, mais où il y a problème, c'est que j'ai bien tenté de créer un projet sans Form, mais dans la FMain, la fonction Key.xxx n'est pas reconnue.
Par ailleurs, si je sais bien utiliser le Key.code = F12 par exemple, je ne sais pas faire Key.code = Ctrl + !.
Du coup, je me suis dit que j'avais visé nettement au-dessus de mes moyens et que je devrais peut-être demander un peu d'assistance !..
Merci à vous !

Pour info : Difficile de me connecter ce matin sur le site, et ça semble patiner lamentablement...
vuott#2 Posté le 30/4/2023 à 11:23:37
Ne cedere ineluctabili possimusJe suppose que votre programme est doté d'une interface en ligne de commande.

Après avoir activé les composants "gb.form" et "gb.gui.qt" (ou "gb.qt5"), je mettrais en place dans le Module "Main.module" ce code qui minimise et affiche le "formulaire" créé.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
PRIVATE fr AS Form


PUBLIC SUB Main()

WITH fr = NEW Form AS "Form"
.Resize(1, 1)
.Move(-5, -5)
.Show()
END WITH

' Ici le code restant.....

END

PUBLIC SUB Form_KeyRelease()

IF Key.Code = Key["!"] AND Key.Control THEN PRINT "Vous avez appuyé sur CTRL+!"

END
« Vita non suavis esse potest, nec Mors amara. »
spheris#3 Posté le 1/5/2023 à 20:57:11
Crée un projet graphique, et ajoute au lancement de ton application :

1
2
3
PUBLIC SUB _new()
ME.Hide()
END


Ta fenêtre ainsi cachée te permettra d'utiliser les routines de la souris à ton grès.
;)

EDITION : Après tests, cette solution ne fonctionne pas!
Normal car si la form est cachée, l'évènement keypress ne peut fonctionner car on ne peut cliquer sur quelque chose qui n'existe pas.
vuott#4 Posté le 2/5/2023 à 16:07:44
Ne cedere ineluctabili possimus
Crée un projet graphique, et ajoute au lancement de ton application :

1
2
3
PUBLIC SUB _new()
ME.Hide()
END


Ta fenêtre ainsi cachée te permettra d'utiliser les routines de la souris à ton grès.


Uhmmmm...... :| non, ce n'est pas le cas.

La ligne "Me.Hide()" dans la méthode cachée "_new()" entraîne la fermeture immédiate du "formulaire" et donc du programme.

Ce que j'ai décrit ci-dessus se produit effectivement, même si j'insère le code suivant:
1
2
3
4
5
6
7
8
9
PUBLIC SUB _new()
ME.Hide()
END

PUBLIC SUB Form_KeyRelease()

IF Key.Code = Key["!"] AND Key.Control THEN PRINT "Vous avez appuyé sur CTRL+!"

END


D'une manière générale, la règle est que, pour que les événements "_KeyPress()" et "_KeyRelease()" soient déclenchés, il est nécessaire que, le contrôle auquel ils se réfèrent, ait le "Focus" au moins au moment où ils doivent être déclenchés.
« Vita non suavis esse potest, nec Mors amara. »
spheris#5 Posté le 2/5/2023 à 20:44:19
Oui tu as raison. sans le focus sur le widget, impossible de faire l'évènement Keypress.
Merci Vuott pour l'information.
Pardon Foromus, je n'ai pas trouvé réponse à ta question.
vuott#6 Posté le 2/5/2023 à 22:09:53
Ne cedere ineluctabili possimus
Merci Vuott pour l'information.

Ne t'inquiète pas, spheris, il ne s'est rien passé de grave.
Je vous salue avec beaucoup d'estime et de sympathie. :bounce:
« Vita non suavis esse potest, nec Mors amara. »
Foromus#7 Posté le 12/5/2023 à 17:45:42
Bonjour à tous,

Finalement, je laisse tomber...
Merci pour les renseignements.
spheris#8 Posté le 14/5/2023 à 08:53:25
Foromus,
N'abandonne pas si vite.
Je te propose cette solution qui fonctionne :

Crée un projet graphique et écris le code suivant :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
PUBLIC SUB Form_KeyPress()
IF Key.Control THEN
IF Key.Text = "!" THEN Mouse.Move(Screen.Width / 2, Screen.Height / 2)
ENDIF
END


PUBLIC SUB Form_Open()
ME.x = 0
ME.y = 0
ME.Width = 1
ME.Height = 1
ME.Border = 0
END


Tu l'auras compris dans l'évèmenent keypress tu récupères les touches et positionne ta souris.
Dans l'évènement Form_open, l'astuce est de réduire la fenêtre au minimum, de désactiver les bordures et de a cacher dans un coin de l'écran.
Ainsi, elle n'est pas visible.

Dans le cas où tu cherches à faire la même chose dans un projet non graphique, en d'autre terme que la souris ne soit pas géré par la ligne de commande, je pense que cela n'est pas possible, mais je peux me tromper. (car on voit bien que vuott te propose d'activer les composants graphiques pour gérer la souris dans son post plus haut)

;)
Foromus#9 Posté le 15/5/2023 à 17:58:46
Bonjour à tous,

Merci spheris. Ce n'est pas vraiment du découragement, à vrai dire, je commence à m'habituer à cette souris, c'est la première fois que je vois une mise en veille de ce périphérique, et comme, en +, j'utilise des rechargeables, autant dire que je n'ai pas dépense de piles !
Ça a aussi des avantages : Quand l'écran est en veille, un coup de poing sur la table ne le réveille pas, faut utiliser le clavier. Pas mal cette bestiole, avec les touches latérales "suivant / précédent", tout ça, plug en play sous xubuntu, que demander de plus, et à un prix tout à fait abordable !
Bon, pour revenir au sujet, je vais le faire, pour voir, bien sûr, il faut lancer au départ, je ne sais pas si ça va marcher, pas certain que toutes les bibliothèques de Gambas soient déjà là...
Bon, je vais essayer dans les prochains jours !
Merci spheris !
1