A+
Guimauve
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; PureBasic Screensaver template -
; Nom de l'écran de veille : Diaporamma
; Programmation : Version 1.0
; Programmé par : Guimauve
; Date : 28 décembre 2004
; Codé avec PureBasic V3.92
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Écran de veille qui affiche les images bmp et jpeg d'un répertoire sélectionné comme un
; diaporamma.
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Déclaration des procédures
Declare ChargementImages(Repertoire$)
Declare CreateINI(Fichier$, Repertoire$, delais.l)
Declare SpinLong(No.l, mini.l, maxi.l, increment.l)
Declare OnlyOneSCRStop()
Declare OnlyOneSCRStart(Name$)
Declare InitScreenSaver(ScreenSaverName$, ScrWidth.w, ScrHeight.w, ScrDepth.w)
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Constantes, Variables, Structure, Création des Tableaux, etc.
Enumeration
#Scr_Win_Param
#Txt_version
#String_Repertoire
#Txt_delais
#String_delais
#TrackBar_Delais
#Btn_Parcourir
#Btn_ok
#Btn_cancel
EndEnumeration
ScreenSaverName$ = "Diaporamma"
ScreenSaverVersion$ = "Version 1.0"
ScreenW = GetSystemMetrics_(#SM_CXSCREEN)
ScreenH = GetSystemMetrics_(#SM_CYSCREEN)
ScreenD = 32
UseJPEGImageDecoder()
NewList ListeImages.s()
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Programme principale
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
OnlyOneSCRStart(ScreenSaverName$)
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; On regarde quel paramètre à été donné au programme
FirstParam$ = ProgramParameter()
command$ = LCase(Left(ReplaceString(FirstParam$, "-", "/"), 2))
ParentWindow.l = Val(StringField(FirstParam$, 2, ":")) | Val(ProgramParameter())
; Le fichier ini n'existe pas, créer celui par défaut
If FileSize(ScreenSaverName$ + ".ini") = -1
CreateINI(ScreenSaverName$ + ".ini", "", 250)
EndIf
OpenPreferences(ScreenSaverName$ + ".ini")
Repertoire_a_Charger$ = ReadPreferenceString("Répertoire d'images", "")
delais.l = ReadPreferenceLong("Délais entre les images", 250)
ClosePreferences()
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; L'écran de veille, le scr est lancé avec /s comme paramètre
Select command$
Case "/s"
InitScreenSaver(ScreenSaverName$, ScreenW, ScreenH, ScreenD)
GetCursorPos_(SourisOrigine.POINT)
ShowCursor_(0)
ChargementImages(Repertoire_a_Charger$)
sprite_no.l = 0
Repeat
FlipBuffers()
ClearScreen(0, 0, 0)
; <><><><><><><><><><><><><><><><><><><><><><><><><><><>
; Mettre ici le code de ce que l'on veut voir à l'écran
; Code
; <><><><><><><><><><><><><><><><><><><><><><><><><><><>
largeur.w = SpriteWidth(sprite_no)
hauteur.w = SpriteHeight(sprite_no)
If largeur <> ScreenW
x = (ScreenW - largeur) / 2
Else
x = 0
EndIf
If hauteur <> ScreenH
y = (ScreenH - hauteur) / 2
Else
y = 0
EndIf
DisplaySprite(sprite_no, x, y)
; StartDrawing(ScreenOutput())
; Locate(5, 5)
; FrontColor(100, 15, 175)
; DrawingMode(1)
; DrawText("Image no : " + Str(sprite_no + 1) )
; StopDrawing()
If frame = delais
sprite_no = SpinLong(sprite_no, 0, CountList(ListeImages()) - 1, 1)
frame = 0
EndIf
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; On vérifie si l'utilisateur touche au clavier ou à la souris
GetCursorPos_(Souris.POINT)
ExamineKeyboard()
Frame + 1
Until KeyboardPushed(#PB_Key_All) > 0 Or Souris\x <> SourisOrigine\x Or Souris\y <> SourisOrigine\y ; WindowEvent() = #PB_Event_CloseWindow Or
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Fenètre de paramétrage de l'écran de veille
Case "/c"
If OpenWindow(#Scr_Win_Param, 0, 0, 300, 225, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, ScreenSaverName$) <> 0
If CreateGadgetList(WindowID(#Scr_Win_Param)) <> 0
StringGadget(#String_Repertoire, 5, 5, 290, 20, Repertoire_a_Charger$)
ButtonGadget(#Btn_Parcourir, 5, 30, 290, 25, "Choisir un répertoire d'images")
TextGadget(#Txt_delais, 5, 60, 145, 20, "Délais entre les images :", #PB_Text_Center)
StringGadget(#String_delais, 150, 60, 145, 20, Str(delais), #PB_String_ReadOnly)
TrackBarGadget(#TrackBar_Delais, 5, 85, 290, 20, 25, 1000)
TextGadget(#Txt_version, 10, 200, 150, 20, ScreenSaverVersion$)
ButtonGadget(#Btn_ok, 130, 195, 75, 25, "Ok")
ButtonGadget(#Btn_cancel, 215, 195, 75, 25, "Cancel")
EndIf
SetGadgetState(#TrackBar_Delais, delais)
Repeat
EventID.l = WaitWindowEvent()
If EventID = #PB_EventGadget
Select EventGadgetID()
Case #TrackBar_Delais
SetGadgetText(#String_delais, Str(GetGadgetState(#TrackBar_Delais)))
Case #Btn_Parcourir
Nouveaurepertoire$ = PathRequester("Choisir un répertoire d'images", Repertoire_a_Charger$)
If Nouveaurepertoire$ <> Repertoire_a_Charger$
Repertoire_a_Charger$ = Nouveaurepertoire$
SetGadgetText(#String_Repertoire,Repertoire_a_Charger$)
EndIf
Case #Btn_ok
CreateINI(ScreenSaverName$ + ".ini", Repertoire_a_Charger$, Val(GetGadgetText(#String_delais)))
EventID = #PB_EventCloseWindow
Case #Btn_cancel
EventID = #PB_EventCloseWindow
EndSelect
EndIf
Until EventID = #PB_EventCloseWindow
EndIf
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code pour l'affichage de l'aperçu
Case "/p"
End
EndSelect
OnlyOneSCRStop()
End
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; <<<<<<<<<<<<<<<<<<<<<<<<<<<< Procédures Secondaires >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure ChargementImages(Repertoire$)
If ExamineDirectory(0, Repertoire$, "*.bmp") <> 0
While NextDirectoryEntry() <> 0
Nom_de_fichier$ = DirectoryEntryName()
If Left(Nom_de_fichier$, 1) <> "."
AddElement(ListeImages())
ListeImages() = Nom_de_fichier$
EndIf
Wend
EndIf
If ExamineDirectory(0, Repertoire$, "*.jpg") <> 0
While NextDirectoryEntry() <> 0
Nom_de_fichier$ = DirectoryEntryName()
If Left(Nom_de_fichier$, 1) <> "."
AddElement(ListeImages())
ListeImages() = Nom_de_fichier$
EndIf
Wend
EndIf
ForEach ListeImages()
LoadSprite(index, Repertoire$ + "\" + ListeImages())
index + 1
Next
EndProcedure
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure CreateINI(Fichier$, Repertoire$, delais.l)
CreatePreferences(Fichier$)
WritePreferenceString("Répertoire d'images", Repertoire$)
WritePreferenceLong("Délais entre les images", delais)
ClosePreferences()
EndProcedure
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure.l SpinLong(No.l, mini.l, maxi.l, increment.l)
No + increment
If No > maxi
No = mini
EndIf
If No < mini
No = Maxi
EndIf
ProcedureReturn No
EndProcedure
Procedure OnlyOneSCRStart(Name$)
Shared OnlyOneStartMutex.l
OnlyOneStartMutex = CreateMutex_(0, 1, Name$)
OnlyOneStartError.l = GetLastError_()
If OnlyOneStartMutex <> 0 And OnlyOneStartError = 0
ProcedureReturn 1
Else
CloseHandle_(OnlyOneStartMutex)
End
EndIf
EndProcedure
Procedure OnlyOneSCRStop()
CloseHandle_(OnlyOneStartMutex)
EndProcedure
Procedure InitScreenSaver(ScreenSaverName$, ScrWidth.w, ScrHeight.w, ScrDepth.w)
; Initialisation des sprites et du clavier.
If InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester("Error", "Can't open DirectX 7 Or later", 0)
End
EndIf
; Ouverture du screen
If OpenScreen(ScrWidth, ScrHeight, ScrDepth, ScreenSaverName$) = 0
MessageRequester("Error", "Can't open a screen !", 0)
End
EndIf
EndProcedure