Gambas France BETA


Pas de compte ? Incription

Dessiner une ligne dans drawArea avec la souris

123
AuteurMessages
PapyBasic#31 Posté le 29/9/2010 à 20:54:00
"Parfois l'obstination est une voie !"Bonsoir LaPenduleDArgent,
Merci, je teste immédiatement !
A plus , cordialement Papy :D
PapyBasic#32 Posté le 29/9/2010 à 21:24:00
"Parfois l'obstination est une voie !"Bonsoir, une journée n'est pas perdu quand on réussi quelque chose de nouveau, quand on apprend une chose nouvelle, ou que l'on est capable de s'émerveiller d'un sourire d'enfant !
Ok pour décompresser à partir du bureau.
Merci à Prokopy pour l'exemple.
Mais je suis un casse noisettes notoire, mais DrawingArea1.Clear ne fonctionne plus ! Ou pas, quand n boucles sont parcourues.
Là je ne comprend pas, mais bon, à chaque jour suffit sa peine !

Merci à tous pour votre aide, bonne nuit à demain Papy :sleep:
lapenduledargent#33 Posté le 9/10/2011 à 18:11:45
Bonsoir,

J'essaie ce code en gambas3, tiré de la page 1 de ce post :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
PUBLIC SUB DrawingArea1_MouseDown()
IF Mouse.Button = 1 THEN
IF Clik = 0 THEN
X1p = Mouse.X
Y1p = Mouse.Y
Clik = 1
ELSE IF clik = 1 THEN
INC NLignes
Lignex1[NLignes] = X1p
Ligney1[NLignes] = Y1p
Lignex2[NLignes] = Mouse.X
Ligney2[NLignes] = Mouse.y
Draw.Line(X1p, Y1p, Mouse.X, Mouse.y)
X1p = Mouse.X 'on met le point de départ à la fin de la ligne précédente
Y1p = Mouse.Y
ENDIF
ELSE IF Mouse.Button = 2 THEN
Clik = 0
ENDIF
END


J'ai fait une DrawingArea1, j'ai déclaré les variables et coller uniquement ce code.
En Gb2, ça fonctionne mais plus en 3 :?: :?: :?:
Pour essayer, j'ai supprimé Draw.Begin(DrawingArea1) et Draw.end

J'ai un message d'erreur "No current device"

Une petite idée, j'essaie depuis le début d'après-midi :cherry:

Bonne soirée

Pierre
gambix#34 Posté le 9/10/2011 à 19:02:13
Faire simple !alors en gambas3 tu as deux solutions :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
PUBLIC SUB DrawingArea1_MouseDown()
IF Mouse.Button = 1 THEN
IF Clik = 0 THEN
X1p = Mouse.X
Y1p = Mouse.Y
Clik = 1
ELSE IF clik = 1 THEN
INC NLignes
Lignex1[NLignes] = X1p
Ligney1[NLignes] = Y1p
Lignex2[NLignes] = Mouse.X
Ligney2[NLignes] = Mouse.y
draw.begin(LAST)
Draw.Line(X1p, Y1p, Mouse.X, Mouse.y)
draw.end
X1p = Mouse.X 'on met le point de départ à la fin de la ligne précédente
Y1p = Mouse.Y
ENDIF
ELSE IF Mouse.Button = 2 THEN
Clik = 0
ENDIF
END


Ou bien :


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
PRIVATE bMouseD AS BOOLEAN
PRIVATE $aPoints AS NEW CPoint[]

PUBLIC SUB DrawingArea_MouseDown()

'on enregistre le faite que la sourie est down
bMouseD =TRUE
'On rafraichit le dessin
DrawingArea.Refresh
END

PUBLIC SUB DrawingArea_MouseUp()

DIM hPoint AS NEW CPoint(mouse.x, mouse.y)
'On enregistre le faite que le bouton n'est plus pressé
MouseD = FALSE
'on enregistre le point
$aPoint.add(hPoint)

'On rafraichit le dessin
DrawingArea.Refresh
END

PUBLIC SUB Drawing_Area1_Draw()
DIM hPoint AS CPoint
DIM hPrevPoint AS CPOint
'On redessine touteles lignes
FOR EACH hPoint IN $aPoints
IF NOT hPrevPoint THEN
hPrevPoint = hPoint
ELSE
Draw.line(hprevPoint.x, hPrevPoint.y, hPoint.x, hPoint.Y)
hPrevPoint = hPoint
ENDIF
NEXT
IF NOT hPrvPoint THEN
hPrevPoint = NEW CPOint(0, 0)
IF MouseD THEN
Draw.Line(hPrevPoint.x, hprevPoint.y, mouse.x, mouse.y)
ENDIF
END

PUBLIC SUB DrawingArea1_MouseMove()
DrawingArea1.Refresh
END



A ajouter une classe :

1
2
3
4
5
6
7
8
9
'Gambas Class

PUBLIC x AS INTEGER
PUBLIC y AS INTEGER

PUBLIC SUB _New(OPTIONAL iX AS INTEGER, OPTIONAL iy AS INTEGER)
IF iX THEN X = ix
IF iY THEN Y = iY
END




Le deuxième code est la véritable botte secrette de gb :), C'est avec cette technique que l'on créé le plus puissant composant graphiques de gambas. La on s'aperçoit que gambas n'est pas vb..; loin de la et que les codes sont très différent dans l'approche.

Gambas se base énormément sur les évènement... et sur les processus de rafraichissement.
Moins de texte dans une signature c'est agrandir son espace.
lapenduledargent#35 Posté le 9/10/2011 à 19:38:44
Gambix, merci pour ton aide, mais je viens d'essayer le premier code mais j'ai une erreur à draw.begin(Last)

Pierre
gambix#36 Posté le 9/10/2011 à 20:26:42
Faire simple !oui remplace plutot par Draw.begin(DrawingArea1)

et dans le deuxième exemple la propriété cached est a false
Moins de texte dans une signature c'est agrandir son espace.
lapenduledargent#37 Posté le 10/10/2011 à 06:03:32
Bonjour Gambix,

J'avais essayé d'utiliser draw.begin(DrawingArea1) mais ça me déclenche un arrêt du programme #11 :?: :?:

Ca fonctionne chez toi ? Je suis en Gambas 2.99.4

Bonne journée

Pierre
gambix#38 Posté le 10/10/2011 à 15:13:56
Faire simple !ça devrait fonctionner ça ... :/

envoit moi ça :

gambas point fr arobase gmail point com
Moins de texte dans une signature c'est agrandir son espace.
lapenduledargent#39 Posté le 10/10/2011 à 19:27:27
Bonsoir Gambix,

et dans le deuxième exemple la propriété cached est a false


Comme tu me l'as expliqué en MP, je dois mettre également cached à false.

Je vais pouvoir enfin explorer les possibilités de Draw...A bientôt :)

Encore merci Gambix et bonne soirée

Pierre


123