Gambas France BETA


Pas de compte ? Incription

Placer ma souris...

Ce sujet est résolu.

1
AuteurMessages
Foromus#1 Posté le 26/9/2012 à 16:46:08
Bonjour,

Ravi de constater que le site fonctionne à nouveau !

Voilà, j'aimerais que le pointeur de ma souris se positionne Ici, ou Là, suivant l'endroit du moment.
Je pense qu'il y a une propriété au contrôle mouse, du genre Mouse.movie(10.20), ou quelque chose du genre.
Ce qui m'ennuie, ce sont les coordonnées, justement. Je m'explique :
On attend un click sur le bouton Fermer, je voudrais donc que le curseur aille sur ce bouton, et autant que possible, au milieu. Seulement voilà, quel est la position de ce bouton sur la feuille ? Parce que mon bouton Fermer, il est sur une frame4, déjà sur une frame3, elle-même sur une frame 2, et comme toutes les positions X et Y sont relatives, on ne sait plus où on en est... L'idéal serait d'avoir des règles, comme dans Writer ou QCalc... D'autant que la position de ma frame2 est calculée au départ de l'application, donc, pas forcément la même suivant le type de machine et surtout selon la taille de l'écran...
Bon, je pourrais toujours y aller par tâtonnements, mais avouez que ça fait "petit joueur"...

Si quelqu'un a une idée...
Merci de votre attention.
Reivillo#2 Posté le 26/9/2012 à 17:52:12
C' est ici, et nul part ailleurs. « Et pis c'est tout ! »Bonsoir Foromus.

Tu ne veux pas utiliser
FrameX.close, je suppose.

Si tes boutons sont à Gauche,
tu peux peut-être, Bricoler ceci:
1
Mouse.Move(FrameX.X + 20, FrameX.Y + 16)


Reivillo.
Version LinuxMint 13 (1.6.1-1+maya-mate(32-bit)) LTS Noyau 3.14.33-031433-generic (27-02-2015)
LinuxMint 13 Mate Fr ICI, LinuxMint 17 Mate Fr .
Programmation Gambas3 Installé depuis la Console Terminal avec successivement: Les 3 Lignes sudo en Gras ci-dessous...
sudo add-apt-repository ppa:gambas-team/gambas3
sudo apt-get update
sudo apt-get install gambas3 -y
Gambas3.8.4-57.47 (Mise à Jour Auto via mintupdate le 28-01-2016)
Pour la Doc, c'est vers là: Documentation Gambas3 FR
Foromus#3 Posté le 26/9/2012 à 18:54:00
Bonsoir Reivillo,

En fait, j'ai mis "Fermer" comme j'aurais mis "Ouvrir" ou "Commencer" ou n'importe quoi.
Si je comprends bien, je vais faire :

Mouse.Move(Frame3.X + Frame2X + BoutonFermer.x + (BoutonFermer.widht / 2),Frame3.Y+Frame2Y+BoutonFermer.Y + (BoutonFermer.height / 2))

Bon, ça, j'y avais bien pensé, mais recopier tout le baratin pour une quarantaine ou une cinquantaine de contrôles, ça risque d'être long... D'autant que je n'ai pas forcément en mémoire toutes les marches de chaque contrôle... Je vais devoir acheter des vitamines !

A vrai dire, je cherchais plutôt une solution plus simple...
Baf, si elle n'existe pas, tant pis...
Prokopy#4 Posté le 26/9/2012 à 19:48:22
Kinder PinguiSalut Foromus,

Tous les contrôles Gambas ont une propriété ScreenX et ScreenY, qui valent respectivement les coordonnées absolues X et Y de ton contrôle (par rapport au coin en haut à gauche de ton écran). Il te suffit donc de faire :

1
2
3
4
'Placer la souris sur le coin en haut à gauche de mon contrôle
Mouse.Move(monControle.ScreenX, monControle.ScreenY)
'Placer la souris au centre de mon contrôle
Mouse.Move(monControle.ScreenX + monControle.W / 2, monControle.ScreenY + monControle.H / 2)
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
Foromus#5 Posté le 26/9/2012 à 20:21:44
Bonjour Prokopy,

Ah que voilà qqchose qui pourrait m'intéresser... Et de surcroît, je suis content d'apprendre l'existence de ces deux propriétés, ScreenX et Y. Intuitivement, je "sentais" bien qu'il devait y avoir qqchose, mais n'en avais aucune idée !

Je vais tester dans les prochaines heures...
(en espérant une réponse pour l'autre question...)

Merci beaucoup, je ferme !
gambix#6 Posté le 3/10/2012 à 12:22:00
Faire simple !Bien Foromus ... A moi de te faire un cadeau.

Enfin il est pour tous celui-la. Bon le problème est que j'aurait bien voulu surcharger la class control mais actuellment on ne peux pas le faire du moment qu'un autre composant en hérite... j'espère que ce dilemme va vite se résorber.

Cette fonction m'a été inspirée pas un super machin chose vendue sur une page complete du catalogue win..ev. Ils sont vachement fort pour vendre du vent... On devrait s'en inspirer pour la promo de Gambas. Bon, mais tout de même ils ont de petite idée pas bête pour certaines chose alors...

Voici le code pour manipuler la sourie : A mettre dans une classe nommée CMouse

' Gambas module file

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
CREATE STATIC
PRIVATE $hTimer AS NEW Timer AS "Timer"
PRIVATE $iX AS INTEGER
PRIVATE $iY AS INTEGER
PRIVATE $iCtrlCenterX AS INTEGER
PRIVATE $iCtrlCenterY AS INTEGER

PUBLIC SUB MoveTo(hControl AS Control)

$hTimer.Stop
$hTimer.Delay = 50
$iCtrlCenterX = hControl.ScreenX + (hControl.Width / 2)
$iCtrlCenterY = hControl.ScreenY + (hControl.Height / 2)

$iX = Mouse.ScreenX
$iY = Mouse.ScreenY

$hTimer.Start

END

PUBLIC SUB Timer_Timer()

'Controle de reprise en main
'Si la sourie s'écarte de plus de 10 px du chemin initial le mouvement est stoppé
IF Abs(Mouse.Screenx - $iX) > 10 OR Abs(Mouse.ScreenY - $iY) > 10 THEN
$hTimer.Stop
RETURN
ENDIF

'Fin de course
IF Abs($iCtrlCenterX - $iX) < 5 AND Abs($iCtrlCenterY - $iY) < 5 THEN
$hTimer.Stop
Mouse.Move($iCtrlCenterX, $iCtrlCenterY)
RETURN
ENDIF

'La vitesse de mouvement est décrémentée
$iX += ($iCtrlCenterX - $iX) / 2
$iY += ($iCtrlCenterY - $iY) / 2

Mouse.Move($iX, $iY)

END


Pour l'utiliser c'est TRRREEES compliqué il faut faire :

1
CMouse.MoveTo(MonControl)


Voila...
Moins de texte dans une signature c'est agrandir son espace.
1