Page 1 sur 1

[Resolu] Canvas et transition sur un MouseOver

Publié : sam. 23/févr./2013 15:55
par Ar-S
Bonjour,

Je suis en train de me faire une menubar en canvas, en gros j'ai un canvas de 160 x 40

3 images de 40x40 pour mes boutons
3 images bis de 40x40 pour changer les boutons lorsque la souris les survole.

J'affiche donc mon canvas et mes 3 images et lorsque je passe ma souris dessus j'ai bien la nouvelle image qui apparait.

Je dessine la nouvelle image ainsi

Code : Tout sélectionner

DrawAlphaImage(ImageID(#IMG_NB2),position,0,255)
J'aimerai que cette nouvelle image apparaisse progressivement en jouant sur la transparence.
J'ai donc modifié la ligne ci dessus comme ceci.

Code : Tout sélectionner

For i = 0 To 254
     DrawAlphaImage(ImageID(#IMG_NB2),position,0,i)
Next
Mais aucune transition ne s'effectue, ça passe de l'image 1 à 2 d'un coup (ou alors ça va trop vite pour être perçu).

Il me semble qu'un code permettait cela mais je ne le retrouve pas.
Si quelqu'un à une solution pas trop tordue je suis preneur. :P

Re: Canvas et transition sur un MouseOver

Publié : sam. 23/févr./2013 16:12
par wood51
Peut être avec un timer ... ?

Re: Canvas et transition sur un MouseOver

Publié : sam. 23/févr./2013 16:40
par Ar-S
C'est le mot que je ne voulais pas vraiment voir apparaitre 8)
J'aurai du préciser.
y'aurait il une autre ruse

Re: Canvas et transition sur un MouseOver

Publié : sam. 23/févr./2013 16:54
par Backup
lorsque tu fais :

Code : Tout sélectionner

 For i = 0 To 254
     DrawAlphaImage(ImageID(#IMG_NB2),position,0,i)
Next 
il te faut Actualiser ton Gadget dans la boucle , pour pouvoir voir l'effet :)

Re: Canvas et transition sur un MouseOver

Publié : sam. 23/févr./2013 17:06
par Ar-S
Mon gadget est forcement actif vu que le traitement se fait pendant le

Code : Tout sélectionner

StartDrawing(CanvasOutput(#CANVAS_TOOLBAR))  : (....)  : stopdrawing()
lors d'un mousemouve sur le #CANVAS_TOOLBAR.

Ne penses tu pas ?

Re: Canvas et transition sur un MouseOver

Publié : sam. 23/févr./2013 17:41
par graph100
non, dobro a raison.

Mais la raison principale est que tu ne traite pas le problème de la bonne façon.
Dans ce que tu fais actuellement, tu bloques tout ton code le temps de faire apparaitre ton image...
Donc, même si tu ajoutes un delay(), ça ne résoudra pas ton soucis.

Il me semble qu'une façon de faire est d'utiliser ElapsedMilliseconds(), et un timer pour actualiser ton dessin.
Si tu ne mets de pas de timer, ton dessin s'actualisera chaque fois qu'un évènement sera renvoyé par waitwindowevent(), et le problème c'est que si tu bouge la souris, il y a un évènement à chaque boucle, et au contraire, si tu ne fais plus rien, aucun évènement ne sera la pour actualiser le dessin.

Le timer va donc générer artificiellement un évènement régulier pour l'actualisation de ton gadget.

Re: Canvas et transition sur un MouseOver

Publié : sam. 23/févr./2013 17:55
par graph100
un petit exemple, il faut bien sur adapter le code pour qu'il rapidement ajoutable avec tes menubar.

Un truc intéressant, le numéro d'un timer peut être négatif ! Mais pas grand monde doit les utiliser ;)

Code : Tout sélectionner

OpenWindow(0, 0, 0, 400, 500, "", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)


CanvasGadget(0, 10, 10, 380, 480)


CreateImage(1, 50, 50)
StartDrawing(ImageOutput(1))
	Box(0, 0, 50, 50, #Red)
StopDrawing()

CreateImage(2, 50, 50)
StartDrawing(ImageOutput(2))
	Box(0, 0, 50, 50, #Blue)
StopDrawing()



AddWindowTimer(0, 1, 50)
Temps_debut = ElapsedMilliseconds()
Duree_animation = 500 ; ms

Image_base = 1


Repeat
	event = WaitWindowEvent()
	
	If event = #PB_Event_Timer
		i.d = 255 * (ElapsedMilliseconds()-Temps_debut) / Duree_animation
		
		StartDrawing(CanvasOutput(0))
			
			If Image_base = 1
				If i >= 255 : i = 255 : Image_base = 2 : Temps_debut = ElapsedMilliseconds() : EndIf
				DrawImage(ImageID(1), 100, 100)
				
				DrawAlphaImage(ImageID(2), 100, 100, i)
			Else
				If i >= 255 : i = 255 : Image_base = 1 : Temps_debut = ElapsedMilliseconds() : EndIf
				
				DrawImage(ImageID(2), 100, 100)
				DrawAlphaImage(ImageID(1), 100, 100, i)
			EndIf
			
		StopDrawing()
	EndIf
	
Until event = #PB_Event_CloseWindow

End

Re: Canvas et transition sur un MouseOver

Publié : sam. 23/févr./2013 17:59
par Ar-S
Merci graph100 pour cet exemple.
Je ne vais cependant pas gérer la transition au survol, trop superflux pour que j'y consacre du temps (surtout trop d'autres choses à faire).

J'avais peur que le timer soit indispensable, vous avez confirmé ma crainte.

Merci de m'avoir répondu en tout cas.