Gambas France BETA


Pas de compte ? Incription

Dessiner une ligne dans drawArea avec la souris

123
AuteurMessages
manu#1 Posté le 12/3/2010 à 17:52:00
Avec Gambas ca roule !Donc le but c'est de tracer une ligne droite dans une drawarea à la manière de paint ou autre. Je clique sur un point de l'écran, je maintiens cliqué quand je déplace ma souris : la ligne se dessine au fur et a mesure que je déplace la souris. Quand je relâche mon bouton de souris la ligne se fige.

Bon vous aller me dire fastoche... draw.line(X debut, y debut, x Fin, Y fin)

Bon ça c'est le principe général

Voila ce que j'ai fait :

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
' Gambas class file
PRIVATE iPosMouseDebX AS INTEGER
PRIVATE iPosMouseDebY AS INTEGER
PRIVATE iPosMouseFinX AS INTEGER
PRIVATE iPosMouseFinY AS INTEGER

PUBLIC SUB _new()

END


PUBLIC SUB Form_Open()

END


PUBLIC SUB DrawingArea1_MouseDown()

iPosMouseDebX = Mouse.x
iPosMouseDebY = Mouse.y
Draw.Begin(DrawingArea1)
Draw.Foreground = ColorButton1.Value

END


PUBLIC SUB DrawingArea1_MouseMove()
iPosMouseFinX = Mouse.XiPosMouseFin
Y = Mouse.Y
END


PUBLIC SUB DrawingArea1_MouseUp()

Draw.Line(iPosMouseDebX, iPosMouseDebY, iPosMouseFinX, iPosMouseFinY)Draw.End

END


Bon ça, ça me donne presque le bon résultat sauf que je travaille à l'aveugle car quand je déplace ma souris, ma ligne ne se dessine pas. Normal, puisque elle se dessine dans l'Event _MouseUp.

Si je mets Draw.Line dans l'Event_MouseMove, c'est une succession de ligne qui se dessinent à partir de la position de départ, C'est très jolie mais c'est pas l'effet souhaité :).

Avez vous une idée ?

Merci d'avance
Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
jeanyvon#2 Posté le 12/3/2010 à 21:23:00
Gambas? Ma! Et gustoBonsoir,
Je ne sais pas si on peut le faire.
On a pas d'objet line et je ne sais pas si on peut le créer. Et en plus on travail sur plusieurs calques un avec le trait provisoire (mouse.move) et l'autre pour le tracer définitif.
Si j'ai bien compris tu veux tracer une ligne droite?
A
+
JY
Vieillir? On peut retarder mais pas y échapper!
manu#3 Posté le 12/3/2010 à 21:28:00
Avec Gambas ca roule !Oui, ou un carré ou une ellipse... le problème est le même. En tous cas pas des points ;)
Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
spheris#4 Posté le 12/3/2010 à 22:48:00
j'ai modifié ta fonction et cela donne :

PUBLIC SUB DrawingArea1_MouseMove()
iPosMouseFinX = Mouse.X
iPosMouseFinY = Mouse.Y
Draw.Line(iPosMouseDebX, iPosMouseDebY, iPosMouseFinX, iPosMouseFinY)
DrawingArea1.Refresh
END

c'est pas génial mais ca marche...
;)
manu#5 Posté le 12/3/2010 à 22:55:00
Avec Gambas ca roule !Ça fait plein de lignes ça.... !!! C'est pas ça ce que je veux faire...
Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
spheris#6 Posté le 12/3/2010 à 23:01:00
pas sur mon PC si tu as drawingarea1.refresh
manu#7 Posté le 12/3/2010 à 23:07:00
Avec Gambas ca roule !Bizarre, ca fait plein de lignes chez moi !
Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
Bernard#8 Posté le 14/3/2010 à 23:25:00
Bonsoir Manu

est-ce que cela peux t'aider dans l'immediat?

' Gambas class file
PUBLIC Lignex1 AS Float[100]
PUBLIC Ligney1 AS Float[100]
PUBLIC Lignex2 AS Float[100]
PUBLIC Ligney2 AS Float[100]
PUBLIC NLignes AS Integer
PUBLIC Clik AS Integer
PUBLIC X1p AS Float
PUBLIC Y1p AS Float

PUBLIC SUB Form_Open()
END

PUBLIC SUB DrawingArea1_MouseMove()
IF clik = 1 THEN
Retrace
Draw.Begin(DrawingArea1)
Draw.ForeColor = Color.Blue
Draw.LineStyle = 1
Draw.LineWidth = 1
Draw.Line(X1p, Y1p, Mouse.X, Mouse.y)
Draw.End
ENDIF
END

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
Retrace
INC NLignes
Lignex1[NLignes] = X1p
Ligney1[NLignes] = Y1p
Lignex2[NLignes] = Mouse.X
Ligney2[NLignes] = Mouse.y
Draw.Begin(DrawingArea1)
Draw.ForeColor = Color.Black
Draw.LineStyle = 1
Draw.LineWidth = 1
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
Retrace
ENDIF
END

PUBLIC SUB Retrace()
DIM i AS Integer
DrawingArea1.Clear
FOR i = 1 TO NLignes
Draw.Begin(DrawingArea1)
Draw.Line(Lignex1, Ligney1, Lignex2, Ligney2)
Draw.End
NEXT
END
Bernard#9 Posté le 14/3/2010 à 23:44:00
J'ai oublié un petit détail qui à son importance,
mettre le DrawingArea en mode Tracking=True
jeanyvon#10 Posté le 15/3/2010 à 07:46:00
Gambas? Ma! Et gustoSalut,
Je ne sais pas si ça peut aider Manu mais moi ça m'éblouit :cheers: :cheers: :cheers:
Bien sur, propriété cached à true et on trace jusqu'à 100 lignes. Ce n'est pas autocad mais c'est le début et pour moi quels progrès je vais faire avec ce code
Merci Bernard! Surtout bien venu!
A+
JY
Vieillir? On peut retarder mais pas y échapper!
manu#11 Posté le 15/3/2010 à 08:15:00
Avec Gambas ca roule !Ok Merci Bernard,

Effectivement ça n'était pas ma question mais ta proposition de code m'a permis, en s'en inspirant, un, de régler mon problème, et deux, de donner une fonction supplémentaire à mon application :)

Merci encore
Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
Bernard#12 Posté le 15/3/2010 à 19:07:00
De rien,

on est ici pour s'entraider, et je suis très heureux d'avoir pu le faire.
Merci de votre accueil.
à plus
Bernard
gambix#13 Posté le 15/3/2010 à 21:19:00
Faire simple !PUBLIC SUB DrawingArea1_MouseMove()
iPosMouseFinX = Mouse.X
iPosMouseFinY = Mouse.Y
draw.line ( iPosMouseDebX, iPosMouseDebY,iPosMouseFinX , iPosMouseFinY)
iPosMouseFinX=iPosMouseDebX
iPosMouseFinY=iPosMouseDebY
END

et voila ... la ça doit marcher
Moins de texte dans une signature c'est agrandir son espace.
gambix#14 Posté le 15/3/2010 à 21:20:00
Faire simple !et TRACKING a TRUE bien sur
Moins de texte dans une signature c'est agrandir son espace.
thegambasdeur#15 Posté le 16/4/2010 à 20:12:00
ou


1
PUBLIC SUB DrawingArea1_MouseUp()iPosMouseFinX = Mouse.XiPosMouseFinY = Mouse.Ydraw.line ( iPosMouseDebX, iPosMouseDebY,iPosMouseFinX , iPosMouseFinY)iPosMouseFinX=iPosMouseDebXiPosMouseFinY=iPosMouseDebYEND


cela marche aussi
123