Mise à jour du produit avec correction de quelques imperfections pouvant générer de la haine envers ce pauvre petit lecteur
qui avait tendance à pas faire ce que l'on voulait. Bref c'est réparé. vous pouvez donc télécharger à nouveau cette petite merveille
De plus, je vous livre ici la totalité soit; le code source; les icônes et l'exécutable. Vous pouvez maintenant vous faire le vôtre.
Code : Tout sélectionner
;JSPLAYER 1 - P.B.3.93 - 06/2005
;JSPLAYER 1.1 - Upgrade to P.B.4.30 - 05/2009
;Jacobus (d'après lecteur MP3 de Dominique B & AlphaSND)
;************************************************************************************************
;
;Librairies utilisées
; - PureColor de Gnozal
; - Droopy's lib
;Programme fonctionnel pour Windows Xp ou Vista
;-Constantes
Enumeration
#WINDOW_Player
#GADGET_USER = 1 ;Initialise la liste des gadgets pour l'usage de la callback
#GADGET_ChoixRep
#GADGET_Play
#GADGET_Pause
#GADGET_Stop
#GADGET_Volume
#GADGET_Recorder
#GADGET_ChampRep
#GADGET_ListMP3
#GADGET_ToPlay
#GADGET_Rest
#GADGET_TotalToPlay
#GADGET_TotalRest
#GADGET_PlayAll
#GADGET_Always
#GADGET_TextList
#GADGET_About
#GADGET_Help
#GADGET_Quit
#GADGET_Reduce
#GADGET_Website
#GADGET_SoundProgress
#GADGET_PercentSoundProgress
EndEnumeration
;- Create Directories
Global curdir.s, AppliDir$
curdir.s = Space(#MAX_PATH)
GetModuleFileName_(GetModuleHandle_(0), @curdir, #MAX_PATH)
AppliDir$ = GetPathPart(curdir)
;-variables
Global MciReponse.s, MessErreur.s, buffer.s, TimeLeft.i, TotalTime.i, NbSongs.i, SongPlaying.i
Global PauseActif.b, Rep.s
Global *HandleMemory.i
Global maxsize.i
maxsize = 100
;-Images
Global Image0,Image1,Image2,Image3,Image4,Image5,Image6,Image7,Image8,Image9;,Image10
Global Image11,Image12,Image13,Image14,Image15
Image0 = CatchImage(0, ?Image0)
Image1 = CatchImage(1, ?Image1)
Image2 = CatchImage(2, ?Image2)
Image3 = CatchImage(3, ?Image3)
Image4 = CatchImage(4, ?Image4)
Image5 = CatchImage(5, ?Image5)
Image6 = CatchImage(6, ?Image6)
Image7 = CatchImage(7, ?Image7)
Image8 = CatchImage(8, ?Image8)
Image9 = CatchImage(9, ?Image9)
; Image10 = CatchImage(10, ?Image10)
Image11 = CatchImage(11, ?Image11)
Image12 = CatchImage(12, ?Image12)
Image13 = CatchImage(13, ?Image13)
Image14 = CatchImage(14, ?Image14)
Image15 = CatchImage(15, ?Image15)
;For easy, place your pictures in one folder into the current directory
DataSection
Image0 : IncludeBinary "Data_img\Player01.ico"
Image1 : IncludeBinary "Data_img\Explore.ico"
Image2 : IncludeBinary "Data_img\Pause.ico"
Image3 : IncludeBinary "Data_img\btn_pause2.bmp"
Image4 : IncludeBinary "Data_img\Play.ico"
Image5 : IncludeBinary "Data_img\StopPlay.ico"
Image6 : IncludeBinary "Data_img\User.ico"
Image7 : IncludeBinary "Data_img\Web02.ico"
Image8 : IncludeBinary "Data_img\Egaliser.ico"
Image9 : IncludeBinary "Data_img\Record.ico"
; Image10 : IncludeBinary "Data_img\Waitsound.ico"
Image11 : IncludeBinary "Data_img\Help_b.ico"
Image12 : IncludeBinary "Data_img\Quitter_01.ico"
Image13 : IncludeBinary "Data_img\About.ico"
Image14 : IncludeBinary "Data_img\PlayNext.ico"
Image15 : IncludeBinary "Data_img\Down.ico"
EndDataSection
;-TOOLTIPS (Eddy)
;{ Utils
Enumeration
#TOOLTIPM_NO_ICON=0
#TOOLTIPM_INFO_ICON
#TOOLTIPM_WARNING_ICON
#TOOLTIPM_ERROR_ICON
EndEnumeration
Structure TooltipManagerParams
ID.l
IsBalloon.l
ColorText.l
ColorBack.l
Title.s
IconForTitle.l
MaxWidth.l
Manager.l
EndStructure
Global NewList TooltipManagers.TooltipManagerParams()
Procedure FindDefaultTooltipManager(Window, unused)
; ==========================================
; Find Default Purebasic TOOLTIP Handle
; ==========================================
Protected WindowClass.s=Space(255)
If GetClassName_(Window, @WindowClass, Len(WindowClass))
If LCase(WindowClass)=LCase("ToolTips_Class32")
If GetWindowThreadProcessId_(Window, 0)=GetCurrentThreadId_()
AddElement(TooltipManagers())
TooltipManagers()\Title=""
TooltipManagers()\IconForTitle=0
TooltipManagers()\IsBalloon=GetWindowLong_(Window, #GWL_STYLE)
TooltipManagers()\MaxWidth=SendMessage_(Window, #TTM_GETMAXTIPWIDTH, 0, 0)
TooltipManagers()\ColorText=SendMessage_(Window, #TTM_GETTIPTEXTCOLOR, 0, 0)
TooltipManagers()\ColorBack=SendMessage_(Window, #TTM_GETTIPBKCOLOR, 0, 0)
TooltipManagers()\ID=#PB_Ignore
TooltipManagers()\Manager=Window
ProcedureReturn 0
EndIf
EndIf
EndIf
ProcedureReturn 1
EndProcedure
;}
;{ TooltipManager Functions
ProcedureDLL.b UseTooltipManager(ID=#PB_Ignore) ;Use specific TooltipManager, returns true if success
ForEach TooltipManagers()
If TooltipManagers()\ID=ID
; ====================
; Modify Parameters
; ====================
Protected TooltipManager=TooltipManagers()\Manager
SetWindowLong_(TooltipManager, #GWL_STYLE, TooltipManagers()\IsBalloon)
SendMessage_(TooltipManager, #TTM_SETTIPTEXTCOLOR, TooltipManagers()\ColorText, 0)
SendMessage_(TooltipManager, #TTM_SETTIPBKCOLOR, TooltipManagers()\ColorBack, 0)
SendMessage_(TooltipManager, #TTM_SETTITLE, TooltipManagers()\IconForTitle, TooltipManagers()\Title)
SendMessage_(TooltipManager, #TTM_SETMAXTIPWIDTH, 0, TooltipManagers()\MaxWidth)
; SetWindowLong_(TooltipManager,#GWL_EXSTYLE,#WS_EX_TOPMOST) ;If StickWindow enabled
; SendMessage_(TooltipManager,#TTM_SETDELAYTIME,#TTDT_INITIAL,200)
; SendMessage_(TooltipManager,#TTM_SETDELAYTIME,#TTDT_AUTOPOP,10000)
; ====================
; Refresh Content
; ====================
SendMessage_(TooltipManager, #TTM_UPDATE, 0, 0)
ProcedureReturn #True
EndIf
Next
ProcedureReturn #False
EndProcedure
ProcedureDLL.l CreateTooltipManager(ID, IsBalloon=#False, ColorText=#PB_Ignore, ColorBack=#PB_Ignore, Title.s="", IconForTitle=#PB_Ignore, MaxWidth=#PB_Ignore) ;Create TooltipManager, returns non-zero if success
If ID=#PB_Ignore
ProcedureReturn 0
EndIf
CompilerIf #PB_Compiler_Version<430
Protected TooltipManagersCount=CountList(TooltipManagers())
CompilerElse
Protected TooltipManagersCount=ListSize(TooltipManagers())
CompilerEndIf
If TooltipManagersCount=0
; ==========================================
; Start Default Purebasic TOOLTIP
; ==========================================
Protected ButtonWithTip=ButtonGadget(#PB_Any, 10, 30, 250, 30, "New Button with Tooltip")
If ButtonWithTip And IsGadget(ButtonWithTip)
GadgetToolTip(ButtonWithTip, "New Tooltip")
FreeGadget(ButtonWithTip)
;find the default tooltip handle...
EnumWindows_(@FindDefaultTooltipManager(), #Null)
EndIf
EndIf
CompilerIf #PB_Compiler_Version<430
TooltipManagersCount=CountList(TooltipManagers())
CompilerElse
TooltipManagersCount=ListSize(TooltipManagers())
CompilerEndIf
If TooltipManagersCount And IsBalloon<>#PB_Ignore
; ==========================================
; Overwrite existing TooltipManager ID
; (If necessary)
; ==========================================
ForEach TooltipManagers()
If TooltipManagers()\ID=ID
DeleteElement(TooltipManagers())
Break
EndIf
Next
; ==========================================
; Register new TooltipManager ID
; (With Or without Default parameters)
; ==========================================
UseTooltipManager()
Protected DefaultIsBalloon=TooltipManagers()\IsBalloon
Protected DefaultColorText=TooltipManagers()\ColorText
Protected DefaultColorBack=TooltipManagers()\ColorBack
Protected DefaultMaxWidth=TooltipManagers()\MaxWidth
Protected DefaultManager=TooltipManagers()\Manager
AddElement(TooltipManagers())
TooltipManagers()\ID=ID
If IsBalloon=#False
TooltipManagers()\IsBalloon=DefaultIsBalloon
Else
TooltipManagers()\IsBalloon=#WS_POPUP | #TTS_NOPREFIX | #TTS_BALLOON | #TTS_ALWAYSTIP
EndIf
If ColorText=#PB_Ignore
TooltipManagers()\ColorText=DefaultColorText
Else
TooltipManagers()\ColorText=ColorText
EndIf
If ColorBack=#PB_Ignore
TooltipManagers()\ColorBack=DefaultColorBack
Else
TooltipManagers()\ColorBack=ColorBack
EndIf
If MaxWidth=#PB_Ignore
TooltipManagers()\MaxWidth=DefaultMaxWidth
Else
TooltipManagers()\MaxWidth=MaxWidth
EndIf
If IconForTitle=#PB_Ignore
TooltipManagers()\IconForTitle=#TOOLTIPM_INFO_ICON
Else
TooltipManagers()\IconForTitle=IconForTitle
EndIf
TooltipManagers()\Title=Left(Trim(Title), 255)
TooltipManagers()\Manager=DefaultManager
ProcedureReturn TooltipManagers()\Manager
EndIf
EndProcedure
;}
;Création des préférences utilisateur pour le dossier de musique favori chargé au démarrage
Procedure Pref_user()
Rep.s = PathRequester("Sélectionnez le répertoire où se trouvent les musiques que vous voulez écouter :", Rep)
CreateINI = CreatePreferences(AppliDir$+"JSPlayer.ini") ;crée le fichier ini dans le répertoire de l'application
If CreateINI <>0
WritePreferenceString("Répertoire",Rep)
ClosePreferences()
Else
MessageRequester("Erreur d'écriture","Le fichier de configuration n'a pu être créé",64)
EndIf
EndProcedure
;Traitement des instructions qui seront envoyées à l'API
Procedure.l Mci(Cde.s)
*HandleMemory = AllocateMemory(256)
If *HandleMemory
Retour.l = mciSendString_(Cde, *HandleMemory, 256, 0) ; Utilisation de l'API magique! C'est là que les instructions sont traitées.
MciReponse = PeekS(*HandleMemory)
ProcedureReturn Retour
EndIf
EndProcedure
; Transformation du temps de l'instruction MCI en une forme utilisable pour l'affichage et la lecture.
Procedure.s GetHourFormat(LengthInSeconds)
Minutes.l = LengthInSeconds / 60
Seconds.l = LengthInSeconds - Minutes*60
If Seconds < 10 ; Then seconds will be written as 01, 02, or 03 instead of 1, 2, or 3
Null$ = "0"
Else
Null$ = ""
EndIf
ProcedureReturn Str(Minutes)+":"+Null$+Str(Seconds)
EndProcedure
;Gestion de la lecture
Procedure PlayMCI(ToPlay.s)
If Mci("open " + Chr(34) + GetGadgetText(#GADGET_ChampRep) + ToPlay + Chr(34) + " alias Morceau") <> 0 ;Tente d'ouvrir le morceau sélectionné
MessageRequester("File Error", "Erreur à l'ouverture du fichier !"+Chr(13)+""+Chr(13)+"Si ce fichier est protégé il nécessite peut-être des droits de lecture spécifiques", #MB_ICONWARNING)
End
Else
Mci("set Morceau time format ms")
Mci("seek Morceau to end wait")
Mci("status Morceau position wait")
TotalTime = Val(MciReponse) ; Récupère la durée du morceau utile pour les indicateurs numériques et graphiques
maxsize = TotalTime/1000 ; actualise la valeur max de la progressbar en fonction du fichier à lire
SetGadgetText (#GADGET_TotalRest, GetHourFormat(TotalTime/1000)) ; converti et affiche le temps pour qu'il soit lisible.
Mci("seek Morceau to start")
Mci("play Morceau from 1 notify")
EndIf
EndProcedure
;Combien de chansons dans le répertoire ?
Procedure compter_titres(Dossier.s)
Dossier= Rep
If ExamineDirectory(n, Dossier, "*.*") : nb=0
Repeat
FileType = NextDirectoryEntry(n)
If FileType = 1
FileName$ = DirectoryEntryName(n)
If FileName$ <> "." And FileName$ <> ".."
Ext$ = LCase(Right(FileName$,4)); 4 chars in extension, with the point !
If Ext$ = ".wav" Or Ext$ = ".mp3" Or Ext$ = ".mid" Or Ext$ = ".wma" ; count only this extension files
nb + 1
EndIf
EndIf
EndIf
Until FileType = 0
FinishDirectory(n)
EndIf
ProcedureReturn nb ; le nombre de fichiers trouvés
EndProcedure
; Procédure de Recherche des préférences utilisateur pour les charger au démarrage si elles existent
Procedure ExaminePrefs()
If OpenPreferences(AppliDir$+"JSPlayer.ini")<>0
Rep.s = ReadPreferenceString ("Répertoire", "")
EndIf
ClosePreferences()
NbSongs = 0
If Rep
SetGadgetText(#GADGET_ChampRep, GetPathPart(Rep))
SetGadgetText(#GADGET_TextList," Contenu : " + Str(compter_titres(Rep))+" titres")
EndIf
ClearGadgetItems(#GADGET_ListMP3)
If ExamineDirectory(0, GetGadgetText(#GADGET_ChampRep), "*.*")
Repeat
FileType = NextDirectoryEntry(0)
If FileType
FileName$ = DirectoryEntryName(0)
If FileName$ <> "." And FileName$ <> ".."
Ext$ = LCase(Right(FileName$,4))
If Ext$ = ".wav" Or Ext$ = ".mp3" Or Ext$ = ".mid" Or Ext$ = ".wma"
AddGadgetItem(#GADGET_ListMP3, -1, FileName$)
NbSongs = NbSongs + 1
EndIf
EndIf
EndIf
Until FileType = 0
SetGadgetState(#GADGET_ListMP3, 0)
FinishDirectory(0)
Else
MessageRequester("Erreur","Impossible d'examiner ce répertoire: " + GetGadgetText(#GADGET_ChampRep),0)
EndIf
EndProcedure
;Callback qui va nous permettre de rendre la fenêtre transparente (en fait qui prend le fond d'écran comme arrière plan de fenêtre)
;Utile si vous souhaitez faire une plus grande fenêtre 'spéciale'
Procedure.l myCallback(hWnd.l,uMsg.l,wParam.l,lParam.l)
Select uMsg
Case #WM_ERASEBKGND
ProcedureReturn
Case #WM_PAINT
For i=1 To 23 ; Doit correspondre au nombre exact de gadgets !! (voir enumeration)
x = GadgetX(i)
y = GadgetY(i)
SetRect_(Rect.RECT,x,y,x+GadgetWidth(i),y+GadgetHeight(i))
ValidateRect_(hWnd,Rect)
RedrawWindow_(GadgetID(i),0,0,$407)
Next
PaintDesktop_(BeginPaint_(hWnd,ps.PAINTSTRUCT))
EndPaint_(hWnd,ps)
Case #WM_SIZING,#WM_MOVING
InvalidateRect_(hWnd,0,1)
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
;-OpenWindow
If OpenWindow(#WINDOW_Player, 0, 0, 470, 70,"Jacobus Player", #PB_Window_BorderLess | #PB_Window_ScreenCentered)
;Création d'un handle sur une zone de mémoire allouée.
*HandleMemory = GlobalAlloc_(#GMEM_FIXED, 256)
;Utilisation des Tooltips d'Eddy
CreateTooltipManager(0, #True)
CreateTooltipManager(1, #True, #PB_Ignore, #PB_Ignore, "", 0,150)
UseTooltipManager(1)
ButtonImageGadget(#GADGET_USER, 0, 0, 40 , 30,Image6)
GadgetToolTip(#GADGET_USER, "Présélectionnez un répertoire qui sera chargé automatiquement à chaque démarrage.")
ButtonImageGadget(#GADGET_ChoixRep, 40, 0, 40 , 30,Image1)
GadgetToolTip(#GADGET_ChoixRep, "Naviguez sur votre système pour y trouver un répertoire contenant des fichiers musicaux et le charger pour l'écoute .")
OptionGadget(#GADGET_PlayAll,82, 5, 12 , 13, "") ;tout lire
OptionGadget(#GADGET_Always, 95, 5, 12 , 13, "") ;Tout lire et recommencer (en boucle)
SetGadgetState(#GADGET_PlayAll, 1) ; sélection par défaut
GadgetToolTip(#GADGET_PlayAll, "Lire tout le répertoire, titre après titre. Arrêt de la lecture à la fin du répertoire.")
GadgetToolTip(#GADGET_Always, "Lecture des morceaux en boucle. Tout lire en continu (lit tout le répertoire et recommence)")
ButtonImageGadget(#GADGET_Play, 110, 0, 40 , 30,Image4)
GadgetToolTip(#GADGET_Play, "Lance la lecture du morceau de musique sélectionné")
ButtonImageGadget(#GADGET_Pause, 110, 0, 40 , 30,Image2,#PB_Button_Toggle)
GadgetToolTip(#GADGET_Pause, "Interrompt momentannément la lecture en cours du morceau de musique ")
SetGadgetAttribute(#GADGET_Pause, #PB_Button_PressedImage, Image14)
HideGadget(#GADGET_Pause,1)
ButtonImageGadget(#GADGET_Stop, 150, 0,40,30,Image5)
GadgetToolTip(#GADGET_Stop, "Arrête la lecture du morceau de musique et le ramène à son point de départ ")
ButtonImageGadget(#GADGET_Volume,190,0,40,30,Image8)
GadgetToolTip(#GADGET_Volume, "Régler le volume général")
ButtonImageGadget(#GADGET_Recorder,230,0,40,30,Image9)
GadgetToolTip(#GADGET_Recorder, "Ouvrir l'enregistreur")
ButtonImageGadget(#GADGET_Quit,270,0,40,30,Image12)
GadgetToolTip(#GADGET_Quit, "Quitter Jacobus Player")
ButtonImageGadget(#GADGET_About,310,0,40,30,Image13)
GadgetToolTip(#GADGET_About, "A propos de Jacobus Player")
ButtonImageGadget(#GADGET_Help,350,0,40,30,Image11)
GadgetToolTip(#GADGET_Help, "Ouvrir l'aide")
ButtonImageGadget(#GADGET_Reduce,390,0,40,30,Image15)
GadgetToolTip(#GADGET_Reduce, "Réduire dans la barre des tâches")
ButtonImageGadget(#GADGET_Website,430,0,40,30,Image7)
GadgetToolTip(#GADGET_Website, "Se connecter à freesoundeditor.com")
StringGadget(#GADGET_ChampRep, 0, 30, 275, 20, "")
PureCOLOR_SetGadgetColor(#GADGET_ChampRep, RGB($0,$FF,$FF), RGB($00,$00,$00))
SetGadgetText(#GADGET_ChampRep, "")
ComboBoxGadget(#GADGET_ListMP3,275,30,195,20)
PureCOLOR_SetGadgetColor(#GADGET_ListMP3, RGB($0,$FF,$FF), RGB($00,$00,$00))
TextGadget(#GADGET_TextList,0,50,105,18,"Contenu : Vide",#PB_Text_Border)
PureCOLOR_SetGadgetColor(#GADGET_TextList, RGB($0,$FF,$FF), RGB($00,$00,$00))
TextGadget(#GADGET_ToPlay, 105, 50, 40, 15, " Temps:")
PureCOLOR_SetGadgetColor(#GADGET_ToPlay, RGB($60,$60,$60), RGB($BF,$C0,$CC))
TextGadget(#GADGET_Rest, 145, 50, 35, 18, "",#PB_Text_Border|#PB_Text_Center)
PureCOLOR_SetGadgetColor(#GADGET_Rest, RGB($0,$FF,$FF), RGB($00,$00,$00))
TextGadget(#GADGET_TotalToPlay,180, 50, 40, 15, " Durée:")
PureCOLOR_SetGadgetColor(#GADGET_TotalToPlay, RGB($60,$60,$60), RGB($BF,$C0,$CC))
TextGadget(#GADGET_TotalRest, 220, 50, 35, 18, "",#PB_Text_Border|#PB_Text_Center)
PureCOLOR_SetGadgetColor(#GADGET_TotalRest, RGB($0,$FF,$FF), RGB($00,$00,$00))
ProgressBarGadget(#GADGET_SoundProgress,255,50,185,18,0,maxsize)
GadgetToolTip(#GADGET_SoundProgress, "Etat d'avancement de la lecture")
TextGadget(#GADGET_PercentSoundProgress,440,50,30,18,"",#PB_Text_Border|#PB_Text_Center)
PureCOLOR_SetGadgetColor(#GADGET_PercentSoundProgress, RGB($0,$FF,$FF), RGB($00,$00,$00))
SetGadgetText(#GADGET_TotalRest, "0:00.") ; Le '.' est nécessaire pour détecter la fin.
ExaminePrefs() ; Chargement des préférences si existantes
;Image d'arrière plan (le fond d'écran) par la callback.
;Si vous préférez une grande fenêtre elle affichera le thème du bureau.
SetWindowCallback(@myCallback(),#WINDOW_Player)
InvalidateRect_(WindowID(#WINDOW_Player),0,1)
;-PROGRAMME
;La boucle d'événements. Toutes les actions utilisateur sont traitées ici.
;Lorsqu'une action se produit, EventID n'est pas 0 et il nous suffit de voir ce qu'il se passe...
;
Repeat ; Boucle jusqu'à ce que l'utilisateur décide de fermer le programme.
Repeat ; Attente d'un évènement...
EventID = WindowEvent()
If EventID = 0 ; En veille lorsqu'il ne se passe rien.
Sleep_(20) ; 20 milliseconds
EndIf
; Pour voir ce qu'il se passe
Mci("status Morceau position")
TimeLeft = Val(MciReponse)
SetGadgetText (#GADGET_Rest, GetHourFormat(TimeLeft/1000))
Lecture.f = (TimeLeft/1000)/maxsize*100 ;calcul de la progression. Place le résultat dans un Float à cause des possibles virgules
SetGadgetState(#GADGET_SoundProgress,Lecture) ;affichage de la progression
SetGadgetText(#GADGET_PercentSoundProgress, Str(GetGadgetState(#GADGET_SoundProgress))+" %")
UpdateWindow_(GadgetID(#GADGET_PercentSoundProgress)) ; sensé rafraîchir l'affichage de la progressbar... pas indispensable avec WindowEvent()
; Si on est à la fin du morceau...
If GetGadgetText(#GADGET_Rest) = GetGadgetText(#GADGET_TotalRest)
Mci("close Morceau")
HideGadget(#GADGET_Play,0) ; Affiche le bouton 'Play'
HideGadget(#GADGET_Pause,1) ; Cache le bouton 'Pause'
SetGadgetState(#GADGET_Pause,0) ; Mode normal et non enfoncé.
GadgetToolTip(#GADGET_Pause, "Interrompre momentannément la lecture en cours du morceau de musique ")
; Quand l'option 'Tout lire' est sélectionnée.
If GetGadgetState(#GADGET_PlayAll) = 1
SongPlaying = GetGadgetState(#GADGET_ListMP3) + 1 ; le morceau suivant sera joué
; Si il y a une autre chanson à jouer, (un morceau à suivre) nous continuons.
If SongPlaying < NbSongs
SetGadgetState(#GADGET_ListMP3, SongPlaying )
CurrentMP3.s = GetGadgetText(#GADGET_ListMP3)
PlayMCI(CurrentMP3)
HideGadget(#GADGET_Play,1)
HideGadget(#GADGET_Pause,0)
SetGadgetState(#GADGET_Pause,0)
GadgetToolTip(#GADGET_Pause, "Interrompre momentannément la lecture en cours du morceau de musique ")
EndIf
If SongPlaying = NbSongs And GetGadgetState(#GADGET_Always)
SetGadgetState(#GADGET_ListMP3, 0)
CurrentMP3 = GetGadgetText(#GADGET_ListMP3)
PlayMCI(CurrentMP3)
HideGadget(#GADGET_Play,0)
HideGadget(#GADGET_Pause,1)
SetGadgetState(#GADGET_Pause,0)
GadgetToolTip(#GADGET_Pause, "Interrompre momentannément la lecture en cours du morceau de musique ")
EndIf
Else
;Sinon c'est l'option lecture en boucle qui est activée.
If GetGadgetState(#GADGET_Always) = 1
CurrentMP3 = GetGadgetText(#GADGET_ListMP3)
PlayMCI(CurrentMP3)
HideGadget(#GADGET_Play,0)
HideGadget(#GADGET_Pause,1)
SetGadgetState(#GADGET_Pause,0)
GadgetToolTip(#GADGET_Pause, "Interrompre momentannément la lecture en cours du morceau de musique ")
EndIf
EndIf
EndIf
Until EventID <> 0 ; Tant qu'il y a un évènement
;-Fonctions des gadgets (les boutons sont gérés par une action directe)
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
Case #GADGET_ChoixRep
NbSongs = 0
Rep = PathRequester("Sélectionnez le répertoire où se trouvent les musiques que vous voulez écouter :", Rep)
If Rep
SetGadgetText(#GADGET_ChampRep, GetPathPart(Rep))
SetGadgetText(#GADGET_TextList," Contenu : " + Str(compter_titres(Rep))+" titres")
EndIf
ClearGadgetItems(#GADGET_ListMP3)
; Recherche des MP3, WMA, WAV et MID s'il y en a.
If ExamineDirectory(0, GetGadgetText(#GADGET_ChampRep), "*.*")
Repeat
FileType = NextDirectoryEntry(0)
If FileType
FileName$ = DirectoryEntryName(0)
If FileName$ <> "." And FileName$ <> ".."
Ext$ = LCase(Right(FileName$,4)) ; exemple: 4 = . + w + a + v => 4 caracteres dans l'extension, ne pas oublier le point.
If Ext$ = ".wav" Or Ext$ = ".mp3" Or Ext$ = ".mid" Or Ext$ = ".wma"
AddGadgetItem(#GADGET_ListMP3, -1, FileName$)
NbSongs = NbSongs + 1
EndIf
EndIf
EndIf
Until FileType = 0
SetGadgetState(#GADGET_ListMP3, 0)
FinishDirectory(0)
Else
MessageRequester("Erreur","Impossible d'examiner ce répertoire: " + GetGadgetText(#GADGET_ChampRep),0)
EndIf
Case #GADGET_Play
SongPlaying = 0 ; Démarrage avec la première chanson de la liste (ComboBoxGadget) si pas de sélection.
CurrentMP3 = GetGadgetText(#GADGET_ListMP3) ; on sélectionne le morceau affiché dans la combobox
PlayMCI(CurrentMP3) ; démarre la lecture de ce morceau
HideGadget(#GADGET_Play,1) ; Cache le bouton 'play'
HideGadget(#GADGET_Pause,0) ; Affiche le bouton 'Pause' à la place
Case #GADGET_Pause
Etat = GetGadgetState(#GADGET_Pause) ; Etat = enfoncé ou normal
If Etat = 1 ; si enfoncé...
Mci("pause Morceau wait")
GadgetToolTip(#GADGET_Pause, "Reprendre la lecture du morceau de musique en cours")
ElseIf Etat = 0 ; si normal...
Mci("play Morceau from " + Str(TimeLeft))
GadgetToolTip(#GADGET_Pause, "Interrompre momentannément la lecture en cours du morceau de musique ")
EndIf
Case #GADGET_Stop
PauseActif = 0
Mci("close Morceau")
SetGadgetText(#GADGET_TotalRest, "0:00.") ; Le '.' est nécessaire pour détecter la fin.
HideGadget(#GADGET_Play,0)
HideGadget(#GADGET_Pause,1)
Case #GADGET_Volume
;Vista = c:\windows\system32\SndVol.exe
;XP = c:\windows\system32\sndvol32.exe
If OSVersion() <= #PB_OS_Windows_XP
If RunProgram(GetSystemDirectory()+"\sndvol32.exe");<>0
Else
MessageRequester("ERREUR", "Le gestionnaire de volume n'a pas été trouvé!",16)
EndIf
Else
If RunProgram(GetSystemDirectory()+"\SndVol.exe");<>0
Else
MessageRequester("ERREUR", "Le gestionnaire de volume n'a pas été trouvé!",16)
EndIf
EndIf
Case #GADGET_Recorder
;Vista = c:\windows\system32\SoundRecorder.exe
;XP = c:\windows\system32\sndrec32.exe
If OSVersion() <= #PB_OS_Windows_XP
If RunProgram(GetSystemDirectory()+"\sndrec32.exe");<>0
Else
MessageRequester("ERREUR", "Le gestionnaire de volume n'a pas été trouvé!",16)
EndIf
Else
If RunProgram(GetSystemDirectory()+"\SoundRecorder.exe");<>0
Else
MessageRequester("ERREUR", "Le gestionnaire de volume n'a pas été trouvé!",16)
EndIf
EndIf
Case #GADGET_About
info$ = FormatDate(" le %dd.%mm.%yyyy à %hh:%ii:%ss",#PB_Compiler_Date)
TextConcept$ = "Jacobus Player : Mp3 ; Wav ; Wma ; Midi"+Chr(13)
TextConcept$ = TextConcept$ + "D'après un lecteur Mp3 de DominiqueB & Fred Laboureur"+Chr(13)
TextConcept$ = TextConcept$ + "Skin et modifications par Jacobus"+Chr(13)
TextConcept$ = TextConcept$ + "----------------------------------------------------------------"+Chr(13)
TextConcept$ = TextConcept$ + "Version 1.0.06.05 - freeware"+Chr(13)
TextConcept$ = TextConcept$ + "PureBasic v 3.93"+Chr(13)
TextConcept$ = TextConcept$ + "Utilisation des librairies : "+Chr(13)
TextConcept$ = TextConcept$ + " - PureColor de Gnozal"+Chr(13)
TextConcept$ = TextConcept$ + " - SkinWin de Danilo"+Chr(13)
TextConcept$ = TextConcept$ + "Os de développement : Windows Me et XP home sp2 (2005)"+Chr(13)+""+Chr(13)
TextConcept$ = TextConcept$ + "----------------------------------------------------------------"+Chr(13)
TextConcept$ = TextConcept$ + "Nouvelle Version 1.1.05.09 - freeware"+Chr(13)
TextConcept$ = TextConcept$ + "PureBasic v 4.30"+Chr(13)
TextConcept$ = TextConcept$ + "Utilisation des librairies : "+Chr(13)
TextConcept$ = TextConcept$ + " - PureColor de Gnozal"+Chr(13)
TextConcept$ = TextConcept$ + " - Droopy's Lib"+Chr(13)
TextConcept$ = TextConcept$ + "Os de développement : Windows Vista Ultimate SP1 32 bits (2009)"+Chr(13)+""+Chr(13)
TextConcept$ = TextConcept$ + "----------------------------------------------------------------"+Chr(13)
TextConcept$ = TextConcept$ + "Remerciements à la communauté purebasicienne dans son ensemble."+Chr(13)
TextConcept$ = TextConcept$ + "Ce logiciel est utilisable et redistribuable gratuitement"+Chr(13)
MessageRequester("CONCEPTION ET DEVELOPPEMENT",TextConcept$+"Dernière compilation :"+info$,#MB_ICONINFORMATION)
Case #GADGET_Help : MessageRequester("Utilisation de ce lecteur","Un bouton permet de naviguer sur le système de l'utilisateur et de choisir un dossier contenant la musique à écouter. Il est possible de présélectionner un dossier contenant la musique préférée de l'utilisateur. Celui-ci sera alors automatiquement sélectionné au démarrage du programme."+Chr(13)+""+Chr(13)+"Le nombre de morceaux de musique contenu dans le dossier sélectionné est affiché en bas à gauche."+Chr(13)+""+Chr(13)+"Les titres sont listés dans une combobox permettant de choisir l'un ou l'autre."+Chr(13)+""+Chr(13)+"Deux options de lecture : "+Chr(13)+"- Tout lire. La case est cochée par défaut et la lecture commence au premier titre listé jusqu'au dernier, les uns après les autres. La lecture s'arrête à l'issue."+Chr(13)+"- Lecture continue. Si cette case est cochée, une fois que tous les titres contenus dans le dossier ont été lus, la lecture recommence depuis le premier titre, et ainsi de suite."+Chr(13)+""+Chr(13)+"Un bouton PLAY permet de lancer la lecture du titre sélectionné."+Chr(13)+"Un bouton PAUSE interrompt la lecture en cours qui reste en attente."+Chr(13)+"Un bouton RELANCE redémarre la lecture là où elle avait été interrompue par le bouton PAUSE."+Chr(13)+"STOP arrête la lecture en cours et remet le morceau de musique à son point de départ."+Chr(13)+""+Chr(13)+"Trois indicateurs numériques :"+Chr(13)+"- Temps : Indique le temps de lecture écoulé en minutes et secondes du morceau en cours."+Chr(13)+"- Durée : Indique la durée totale en minutes et secondes du morceau en cours."+Chr(13)+"- Pourcentage: Indique le pourcentage total du morceau en cours qui a été lu. La barre de progression reprend ce pourcentage en mode graphique."+Chr(13)+""+Chr(13)+"Si vous tentez de lire un morceau de musique protégé, le lecteur vous l'indique puis se ferme."+Chr(13)+""+Chr(13)+"Deux nouvelles options :"+Chr(13)+"- Le réglage du volume / player / général / Windows"+Chr(13)+"- L'accès direct à l'enregistreur Windows"+Chr(13)+""+Chr(13)+"@+ Jacobus",#MB_ICONINFORMATION)
Case #GADGET_Quit : Quit = 1
Case #GADGET_Reduce : ShowWindow_(WindowID(#WINDOW_Player), #SW_MINIMIZE)
Case #GADGET_USER : Pref_user() : ExaminePrefs()
Case #GADGET_Website : RunProgram("http://www.freesoundeditor.com")
EndSelect
Case #WM_LBUTTONDOWN : SendMessage_(WindowID(#WINDOW_Player), #WM_NCLBUTTONDOWN, #HTCAPTION, 0) ; capture la fenêtre avec la souris
;Clic bouton gauche maintenu enfoncé sur la barre du bas pour déplacer la fenêtre
Case #PB_Event_CloseWindow : Quit = 1
EndSelect
Until Quit = 1
PureCOLOR_ClearAllGadgetColors(); Free all gadgets colors
EndIf ; End OpenWindow
GlobalFree_(*HandleMemory) ; Ne pas oublier de libérer le buffer préalablement créé!
End
;Voilà, vous avez un lecteur audio fonctionnel.