Gambas France BETA


Pas de compte ? Incription

Un curseur "cross hair" full screen

1
AuteurMessages
Yves07#1 Posté le 17/2/2013 à 15:19:22
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
PRIVATE PMouseX AS INTEGER
PRIVATE PMouseY AS INTEGER

PUBLIC SUB CustomCursor(C AS Control)
'' Call this from the MouseMove event of the control "C"
Draw.Begin(C)
Draw.LineWidth = 1
Draw.Invert = 1 'Make an XOR with watever is already drawn . . .
Draw.Foreground = Color.RGB(127, 127, 127) 'Grey, change as needed.
IF PMouseX OR PMouseY THEN
'. . . so that drawing twice the same thing esrases itself
Draw.Line(0, PMouseY, C.Width, PMouseY) 'Horizontal line
Draw.Line(PMouseX, 0, PMouseX, C.Height) 'Vertical one
ENDIF
PMouseX = Mouse.X 'Save and redraw
PMouseY = Mouse.Y
Draw.Line(0, PMouseY, C.Width, PMouseY) 'Horizontal
Draw.Line(PMouseX, 0, PMouseX, C.Height) 'Vertical
Draw.End
END

PUBLIC SUB ResetCC()
'' Call this if something else already erase the custom cursor
PMouseX = 0
PMouseY = 0
END


Yves.
Foromus#2 Posté le 22/2/2013 à 08:40:24
Bonjour,

Finalement, je dis que c'est bien.

Mais, au su de mes connaissances en anglais, j'en déduis qu'il s'agit probablement là d'une application sérieuse qui permet de couper les cheveux en quatre, non ?...
Et en "mode plein écran", c'est encore mieux...
Tous mes compliments.
gambix#3 Posté le 25/2/2013 à 17:58:24
Faire simple !????????????????????????????

A par a rien ça sert a quoi ...

EN plus le seul composant sur lequel on peu dessiné est un drawing area, ensuite on ne dessinne jamais sur un event mousemove, mais mousemove peux appeler un drawingarea.refresh, ou bien faire appel a un trigger pour alléger le temps processeur et le nombre d'appel


Moins de texte dans une signature c'est agrandir son espace.
Yves07#4 Posté le 25/2/2013 à 20:13:26
????????????????????????????

A par a rien ça sert a quoi ...

A avoir un curseur (pointeur) différent style "viseur" jusqu'au bord du drawing area !

EN plus le seul composant sur lequel on peu dessiné est un drawing area, ensuite on ne dessinne jamais sur un event mousemove, mais mousemove peux appeler un drawingarea.refresh, ou bien faire appel a un trigger pour alléger le temps processeur et le nombre d'appel


Es tu sûr que ce soit plus "léger" ?
Ou ne dessiner que tous les N events ?
Comment dessiner une ligne dont une extrémité serait fixe et l'autre qui suivrait le curseur dans tous ses déplacements un peu comme un élastique ?

gambix#5 Posté le 25/2/2013 à 21:25:00
Faire simple !
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
' Gambas class file

PRIVATE $iMX AS INTEGER
PRIVATE $iMY AS INTEGER

PUBLIC SUB DrawingArea1_Draw()

Draw.LineWidth = 2
Draw.Foreground = Color.Red
Draw.Line(Draw.Width / 2, 0, $iMX, $iMY)

END

PUBLIC SUB DrawingArea1_MouseMove()

$iMX = Mouse.X
$iMY = Mouse.Y
DrawingArea1.Refresh

END



C'est comme ceci qu'on a créé par exemple, l'iconview, le gridview, le mapview... etc :D

La vraie puissance de gambas apparaît quand on commence a coder a la sauce Gambas.
Moins de texte dans une signature c'est agrandir son espace.
Yves07#6 Posté le 26/2/2013 à 07:53:34
. . .
La vraie puissance de gambas apparaît quand on commence a coder a la sauce Gambas.


Je n'en doute pas, au début on fait des grumeaux :roll:
Je résume pour voir si j'ai compris:

- L'évènement xx_MouseMove ne fait que récupèrer la position du pointer puis invoque xx.refresh
- C'est ce qui provoque l'évènement xx_Draw dans lequel on trace une ligne depuis le milieu en haut de xx jusqu'au pointer.

Q? - Draw.begin() et Draw.end() sont ils implicites ?

Le plus simple est que je teste, bien sûr !

A+

Yves.
gambix#7 Posté le 26/2/2013 à 08:19:29
Faire simple !
- L'évènement xx_MouseMove ne fait que récupèrer la position du pointer puis invoque xx.refresh
- C'est ce qui provoque l'évènement xx_Draw dans lequel on trace une ligne depuis le milieu en haut de xx jusqu'au pointer.


Oui c'est bien cela


Q? - Draw.begin() et Draw.end() sont ils implicites ?


Tout a fait.

Tu pourrais aussi dessiner ta ligne en vectoriel antialiasé avec :

1
2
3
4
Paint.LineWidth = 2
Paint.Brush = Paint.Color(Color.Red)
Paint.Line(paint.width / 2, 0, $iMX, $iMY)
Paint.Stroke
Moins de texte dans une signature c'est agrandir son espace.
Yves07#8 Posté le 28/2/2013 à 08:19:57
. . .

Tu pourrais aussi dessiner ta ligne en vectoriel antialiasé avec :

1
2
3
4
Paint.LineWidth = 2
Paint.Brush = Paint.Color(Color.Red)
Paint.Line(paint.width / 2, 0, $iMX, $iMY)
Paint.Stroke



Merci,
Ca avance, ça avance . . .

Curieux que tu me parles de "Paint" quand je viens de découvrir que "Draw.Invert" semble ne plus fonctionner sous 3.4.0
Bug connu ou ??
J'y retourne !

Yves.
Yves07#9 Posté le 28/2/2013 à 17:47:52
Effectivement, "Paint" est beaucoup plus beau, bien lisse !
Mais le mode Xor ne fait pas ce que j'espérais. Ou est l'erreur ?
1