Scrolling fluide et ScrollAreaGadget >pb de rafraichissem
Publié : lun. 13/sept./2004 23:22
Bon, si je reprends le meme exemple que dans le passé (que voulez vous c'est comme cela
):
…une OpenWindowedScreen est crée dans un ContainerGadget lui meme contenu dans un ScrollAreaGadget.
Quand on manipule les barres de scroll, la zone ContainerGadget n’est rafraichie qu’en fin de manipulation produisant un affichage disgracieux mêlant saccades et scintillements.
Comment éviter cela pour obtenir un scrolling fluide ?
A la lumière de la série de messages suivante :
http://purebasic.hmt-forum.com/viewtopic.php?t=1462
l’idée etait de forcer le rafraichissement durant la manipulation en y glissant un RedrawWindow et autres UpdateWindow, mais rien de concluant en est sortie.(Rq: Pour ceux qui suivent : on sait déjà que rien n’est possible a ce sujet sur les messages #SB_PAGEDOWN et #SB_PAGEUP)
Quelqu’un a t’il une idée ?
... j’ai bien peur que la conclusion reste la meme: disposer de plus de souplesse sur ScrollAreaGadget.

Code : Tout sélectionner
InitSprite()
Procedure WindowCallback(WindowID, Message, wParam, lParam)
Result = #PB_ProcessPureBasicEvents;Result= DefWindowProc_(WindowID, Message, wParam, lParam)
;Debug Str(message)+" / "+Str(#WM_VSCROLL)
Select Message
Case #WM_VSCROLL; Gestion de la barre verticale
Debug "#WM_VSCROLL"
Debug WindowID
EndSelect
ProcedureReturn Result
EndProcedure
If OpenWindow(0,0,0,400,300,#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget,"Window")
SetWindowCallback(@WindowCallback())
If CreateGadgetList(WindowID(0))
ScrollAreaGadget (1,10,10,200,200,500,400,10)
hCont = ContainerGadget(2,10,10,500,400,#PB_Container_Double)
CloseGadgetList()
If OpenWindowedScreen( hCont, 0, 0, 500, 400, 0, 0, 0 ) = 0
MessageRequester( "Erreur" , "Impossible d'ouvrir l'écran " , 0 )
End
EndIf
EndIf
If CreateSprite(1000,24,24)
StartDrawing(SpriteOutput(1000))
Box(0,0,24,24,RGB($0,$0,$FF))
StopDrawing()
EndIf
Dep = 8
Repeat
ClearScreen(0,155,255)
DisplaySprite(1000, x, 100)
x + Dep
If x >=300 Or x <=0 : Dep = -Dep : EndIf
FlipBuffers()
Until WindowEvent()=#PB_Event_CloseWindow
EndIf
Quand on manipule les barres de scroll, la zone ContainerGadget n’est rafraichie qu’en fin de manipulation produisant un affichage disgracieux mêlant saccades et scintillements.
Comment éviter cela pour obtenir un scrolling fluide ?
A la lumière de la série de messages suivante :
http://purebasic.hmt-forum.com/viewtopic.php?t=1462
l’idée etait de forcer le rafraichissement durant la manipulation en y glissant un RedrawWindow et autres UpdateWindow, mais rien de concluant en est sortie.(Rq: Pour ceux qui suivent : on sait déjà que rien n’est possible a ce sujet sur les messages #SB_PAGEDOWN et #SB_PAGEUP)
Quelqu’un a t’il une idée ?
... j’ai bien peur que la conclusion reste la meme: disposer de plus de souplesse sur ScrollAreaGadget.