Gambas France BETA


Pas de compte ? Incription

click au clavier ?

Ce sujet est résolu.

123
AuteurMessages
Patrick#16 Posté le 27/2/2023 à 09:44:58
La solution est peut-être de gérer le clavier :
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
45
46
47
INHERITS Form

PUBLIC SUB _new()

DIM bt AS Button

ME.Arrangement = Arrange.Horizontal
ME.AutoResize = TRUE
FOR i AS INTEGER = 0 TO 9
bt = NEW Button(ME) AS "bt"
bt.h = 370
bt.w = 70
bt.Text = "but" & Str(i)
NEXT

END

PUBLIC SUB Form_KeyPress()

DIM ch AS STRING

ch = "but" & Key.Text
coul(ch, 10)

END

PUBLIC SUB Form_KeyRelease()

DIM ch AS STRING

ch = "but" & Key.Text
coul(ch, -10)

END

PRIVATE SUB coul(ch AS STRING, c AS INTEGER)

DIM bt AS Button

FOR EACH bt IN ME.Children
IF ch = bt.Text THEN
bt.Background -= c
BREAK
ENDIF
NEXT

END
valaquarus#17 Posté le 27/2/2023 à 09:48:52
-- Unus Ex Altera --ça, ça marche parce que tu affectes directement les coordonnées du bouton.
mais ça non :
1
2
3
4
5
6
7
8
9
10
IF cChiffres.Exist(vText) THEN
LAST.text = vText
LAST.Tag = "btn" & vText
v = Class[LAST.Tag].Instance
xm = v.ScreenX
ym = v.ScreenY
Mouse.Move(xm, ym)
SHELL "xdotool click 1"
' Chiffres_Click()
ENDIF

ou plus exactement gambas me dit que le bouton n'est pas un objet mais renvoie bien les bonnes coordonnées et cela click le bon bouton ????
Je dois mal récupérer le bouton. Si tu as une idée sur comment qu'on récupère le dit bouton.

Valaquarus
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
valaquarus#18 Posté le 27/2/2023 à 10:14:03
-- Unus Ex Altera --Bon j'ai fait un mixed de la proposition de spheris et de celle de Patrick :
1
2
3
4
5
6
7
8
9
10
11
12
13
IF cChiffres.Exist(vText) THEN
LAST.text = vText
LAST.Tag = "btn" & vText
FOR EACH bt IN ME.Children
IF LAST.Tag = bt.Name THEN
xm = bt.X + 5
ym = bt.Y + 5
ENDIF
NEXT
Mouse.Move(xm, ym)
SHELL "xdotool click 1"
' Chiffres_Click()
ENDIF

J'obtiens une belle image :

C'est grave, docteur?

Valaquarus

Même en modifiant bt.X par bt.screenX j'obtiens la même erreur???
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
spheris#19 Posté le 27/2/2023 à 10:26:02
Valaquarus,
pour simuler ton erreur, dans un simple projet ce code :

1
2
3
4
5
6
7
8
9
PUBLIC SUB Btn7_Click()
Mouse.Move(Button1.ScreenX + 5, Button1.ScreenY + 5)
WAIT 0.2
EXEC ["xdotool", "click", "1"]
END

PUBLIC SUB Button1_Click()
PRINT "hello"
END


ne fonctionne uniquement que si je mets un wait 0.2 entre mouse.mouve et exec.

De plus si j'essaye de mettre Button1.X et non Button1.ScreenX, la souris va se placer en haut à gauche de l'écran.
Chez moi ce code ci dessous fonctionne et me renvoi bien "hello" dans la console.
Peut être est-ce juste une erreur de timing?
valaquarus#20 Posté le 27/2/2023 à 10:33:09
-- Unus Ex Altera --J'ai rajoué wait 0.2 et changé X en ScreenX, j'ai la même erreur.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
FOR EACH btn IN ME.Children
IF btn.Text = vText THEN
xm = btn.ScreenX + 5
ym = btn.ScreenyY + 5
ENDIF
NEXT

IF cChiffres.Exist(vText) THEN
LAST.text = vText
Mouse.Move(xm, ym)
WAIT 0.2
SHELL "xdotool click 1"
' Chiffres_Click()
ENDIF


Valaquarus
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
spheris#21 Posté le 27/2/2023 à 10:37:53
Peux tu ajouter un
1
PRINT LAST.text
entre la ligne 8 et 9 et me dire ce que cela te renvoi?
valaquarus#22 Posté le 27/2/2023 à 11:06:06
-- Unus Ex Altera --
1
2
3
4
5
6
7
8
IF cChiffres.Exist(vText) THEN
PRINT LAST.text
LAST.text = vText
PRINT LAST.text
Mouse.Move(xm, ym)
SHELL "xdotool click 1"
Chiffres_Click()
ENDIF

Calculatrice Normale 1.1.48
9

Première ligne, le Me.Text
deuxième ligne, le chiffre tapé.

L'erreur vient de ce que les buttons sont enchâssés dans des panels et je ne sais pas comment les récupérer. (Voir l'erreur : type mismatch)

Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
spheris#23 Posté le 27/2/2023 à 11:13:01
Peux tu aussi me donner le résultat de Print xM et Print ym après la ligne 4?


Excuse moi de dire ça,
mais la solution de la bordure cachée ne fait pas t elle moins 'Usine à gaz' que xdotool?
N'est-ce pas plus simple à coder?
Qu'en penses-tu?
valaquarus#24 Posté le 27/2/2023 à 11:40:36
-- Unus Ex Altera --Je n'aime pas l'idée de xdotool mais ce n'est pas le souci car j'aime bien ton idée ou celle de Patrick qui est équivalente. Le problème vient de ça :
1
2
FOR EACH btn IN ME.Children
FOR EACH btn IN ME.Controls

L'un ou l'autre renvoi dans les cordes car les btn sont dans des panels différents et je ne comprends pas pourquoi il va chercher autre chose que des boutons.
Valaquarus
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
valaquarus#25 Posté le 27/2/2023 à 11:50:27
-- Unus Ex Altera --D'ailleurs j'ai bien la même erreur :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
PRIVATE SUB couleur(ch AS STRING, c AS INTEGER)

DIM btn AS Button

FOR EACH btn IN ME.Children
IF ch = btn.Text THEN
btn.Background -= c
BREAK
ENDIF
NEXT

END

PUBLIC SUB Form_KeyPress()
IF cChiffres.Exist(vText) THEN
LAST.text = vText
couleur(vText, 10)
Chiffres_Click()
ENDIF
END
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
valaquarus#26 Posté le 27/2/2023 à 12:06:02
-- Unus Ex Altera --J'ai donc changé ainsi mais toujours la même erreur et c'est normal :
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
PRIVATE SUB couleur(ch AS STRING, c AS INTEGER)

DIM btn AS Button

FOR EACH btn IN ME.Children
IF ch = btn.Text THEN
btn.Background -= c
BREAK
ENDIF
NEXT

END

PUBLIC SUB Form_KeyRelease()

DIM ch AS STRING

ch = "btn" & Key.Text
couleur(ch, -10)

END

PUBLIC SUB Form_KeyPress()
IF cChiffres.Exist(vText) THEN
LAST.text = vText
couleur(vText, 10)
Chiffres_Click()
ENDIF


C'est ceci qui pose souci : In Me.Children qui me renvoi des panel au lieu des buttons.
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
valaquarus#27 Posté le 27/2/2023 à 12:56:34
-- Unus Ex Altera --Alors Patrick tu as une idée sur le fait qu'il me sorte tout sauf un bouton?
FOR EACH btn IN ME.Children
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
Patrick#28 Posté le 27/2/2023 à 13:02:01
Me.Children est une collection de tous les objets contenus dans me, il faut transformer le code :
1
2
3
4
5
6
7
8
DIM btn AS OBJECT 'ou variant

FOR EACH btn IN ME.Children
IF Object.Is(bt, "Button") AND IF ch = btn.Text THEN
btn.Background -= c
BREAK
ENDIF
NEXT
valaquarus#29 Posté le 27/2/2023 à 14:00:06
-- Unus Ex Altera --C'est bon pour l'erreur précédente, c'est réglé, mais cela ne fait rien d'apparent :
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
PRIVATE SUB couleur(ch AS STRING, c AS INTEGER)

DIM btn AS Control

FOR EACH btn IN ME.Children
IF Object.Is(btn, "Button") AND IF ch = btn.Text THEN
btn.Background -= c
BREAK
ENDIF
NEXT

END

PUBLIC SUB Form_KeyRelease()

DIM ch AS STRING

ch = Key.Text
couleur(ch, -10)

END

PUBLIC SUB Form_KeyPress()

IF cChiffres.Exist(vText) THEN
LAST.text = vText
couleur(vText, 10)
Chiffres_Click()
ENDIF

END


Valaquarus
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
valaquarus#30 Posté le 27/2/2023 à 14:21:27
-- Unus Ex Altera --En fait on ne rentre jamais dans le test c'est pourquoi il n'y a pas d'erreur :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
PRIVATE SUB couleur(ch AS STRING, c AS INTEGER)

DIM btn AS OBJECT

FOR EACH btn IN ME.Children
' If Object.Is(btn, "Button") Then 'And If btn.Text = ch Then
IF btn IS Button THEN'And If btn.Text = ch Then
btn.text = ch
btn.Background -= c
btn.Border = NOT btn.Border
PRINT "coucou"
' Break
ENDIF

NEXT

END

le rpint "coucou" le vérifie car pas de coucou à l'horizon.

Valaquarus
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
123