Page 1 sur 1

Splash screen avec thread

Publié : mar. 29/oct./2013 4:45
par flaith
Bonjour,

voici un simple programme affichant un splash screen avec une animation pendant le chargement
Les images et le programme sont dans le zip: SPLASH

Code : Tout sélectionner

Enumeration
  ;-## SPLASH SCREEN ##
  #SPLASH_WIN
  #SPLASH_IMG
  #SPLASH_GADGET_IMG
  #SPLASH_WAIT_FRAME_1
  #SPLASH_WAIT_FRAME_2
  #SPLASH_WAIT_FRAME_3
  #SPLASH_WAIT_FRAME_4
  #SPLASH_WAIT_FRAME_5
  #SPLASH_WAIT_FRAME_6
  #SPLASH_WAIT_FRAME_7
  #SPLASH_WAIT_FRAME_8  
EndEnumeration

DataSection
  SPLASH_IMAGE_LOADING:          : IncludeBinary "Images/Loading_40hrs_2.png"
  SPLASH_WAIT_FRAME_1:           : IncludeBinary "Images/Wait_Frame_1.png"
  SPLASH_WAIT_FRAME_2:           : IncludeBinary "Images/Wait_Frame_2.png"
  SPLASH_WAIT_FRAME_3:           : IncludeBinary "Images/Wait_Frame_3.png"
  SPLASH_WAIT_FRAME_4:           : IncludeBinary "Images/Wait_Frame_4.png"
  SPLASH_WAIT_FRAME_5:           : IncludeBinary "Images/Wait_Frame_5.png"
  SPLASH_WAIT_FRAME_6:           : IncludeBinary "Images/Wait_Frame_6.png"
  SPLASH_WAIT_FRAME_7:           : IncludeBinary "Images/Wait_Frame_7.png"
  SPLASH_WAIT_FRAME_8:           : IncludeBinary "Images/Wait_Frame_8.png"
EndDataSection

Global.i SPLASH_WAIT = #False
Global.i Dim Wait_IMG(8)
Global.i WAIT_IMG_LOADING

Procedure ShowSplashScreen(*Value)
  Protected.i _Frame = 0

  ;Plantage sous x64 si les images sont chargées dans la procedure OpenSplashScreen()
  ;Chargement des images dans le thread, merci G-Rom ;-)

  WAIT_IMG_LOADING = CatchImage(#PB_Any, ?SPLASH_IMAGE_LOADING)
  Wait_IMG(0) = CatchImage(#PB_Any, ?SPLASH_WAIT_FRAME_1)
  Wait_IMG(1) = CatchImage(#PB_Any, ?SPLASH_WAIT_FRAME_2)
  Wait_IMG(2) = CatchImage(#PB_Any, ?SPLASH_WAIT_FRAME_3)
  Wait_IMG(3) = CatchImage(#PB_Any, ?SPLASH_WAIT_FRAME_4)
  Wait_IMG(4) = CatchImage(#PB_Any, ?SPLASH_WAIT_FRAME_5)
  Wait_IMG(5) = CatchImage(#PB_Any, ?SPLASH_WAIT_FRAME_6)
  Wait_IMG(6) = CatchImage(#PB_Any, ?SPLASH_WAIT_FRAME_7)
  Wait_IMG(7) = CatchImage(#PB_Any, ?SPLASH_WAIT_FRAME_8)  

  Repeat
    If StartDrawing(CanvasOutput(#SPLASH_GADGET_IMG))
      Box(0, 0, 300, 150, $FFFFFF)
      DrawAlphaImage(ImageID(WAIT_IMG_LOADING), 0, 0)
      DrawAlphaImage(ImageID(Wait_IMG(_Frame)), 300-50-25, 150-50-10)
      StopDrawing()
    EndIf

    Delay(*Value)
    _Frame + 1
    If _Frame > 7 : _Frame = 0 : EndIf
    If SPLASH_WAIT = #True : Break : EndIf
  ForEver

  Delay(250)
EndProcedure

Procedure OpenSplashScreen()
  If OpenWindow(#SPLASH_WIN, 0, 0, 300, 150, "DAC40: Loading...", #PB_Window_ScreenCentered | #PB_Window_BorderLess | #WS_POPUP)
    CanvasGadget(#SPLASH_GADGET_IMG, 0, 0, 300, 150)

    CreateThread(@ShowSplashScreen(), 100)
    Repeat
      While Random(20) = 10
        SPLASH_WAIT = #True
      Wend
      Delay(1000)
    Until SPLASH_WAIT
  EndIf
EndProcedure

UsePNGImageDecoder()
OpenSplashScreen()

Re: Splash screen avec thread

Publié : mar. 29/oct./2013 9:35
par Ar-S
Sympa ce petit exemple merci flaith

Re: Splash screen avec thread

Publié : mar. 29/oct./2013 11:29
par flaith
Merci Ar-S :mrgreen:

Re: Splash screen avec thread

Publié : mar. 29/oct./2013 13:20
par falsam
Joli Flaith. Merci pour ce partage :)

Re: Splash screen avec thread

Publié : mar. 29/oct./2013 14:02
par Kwai chang caine
Super beau avec ses couleurs pastels, on dirait un panneau d'attente de site moderne (Style flash ou JAVA) 8O
Comme quoi...notre bon PB et son mode procedural est pas si "ringue" que ça :D

Merci pour le partage 8)

Re: Splash screen avec thread

Publié : mar. 29/oct./2013 17:12
par G-Rom
plantage sous seven x64.
Il faut chargé les images dans le threads.
Sympa sinon ;)

Re: Splash screen avec thread

Publié : mer. 30/oct./2013 3:12
par flaith
Merci à vous tous :D
Code modifié, merci G-Rom :wink:

Re: Splash screen avec thread

Publié : mer. 30/oct./2013 8:16
par flaith
Sinon, pour les couleurs, ce sont celles utilisées par la société, donc pas trop le choix :mrgreen: