Il y a encore pas mal de bugs, certaines commandes s'emmêlent un peu les pinceaux, et ça plante, (pas trop fort), par moment.
J'ai surtout fait ça pour voir comment on utilisait les commandes MCI.
Le code contient trois fichiers, le titre du fichier se trouve au début de chaque code.
Code : Tout sélectionner
; Nom du fichier : Video2.pb
;
; But : Lecture de fichiers video et audio avec les commandes MCI
; Librairies utilisées : aucune
; Auteur : Chris (http://purebasic.hmt-forum.com/index.php)
;
; Certaines procédures MCI_ proviennent du fichier "MCI-Commands.pbi", qui
; se trouve dans le dossier "Includes" de jaPBe
;===========================================================================================
;
;- Raccourcis clavier
; PageUp : Augmenter le Volume
; PageDown : Diminuer le Volume
; Enter : Lancer la vidéo
; Pause : Mettre en pause
; Space : Mode Plein Ecran/Fenêtre
; Home : Remettre la video au début
; Delete : Ejecter la video
IncludeFile "MCI_Procs.pb"
IncludeFile "VideoProcs2.pb"
;/
S_Width = GetSystemMetrics_(#SM_CXSCREEN)
S_Height = GetSystemMetrics_(#SM_CYSCREEN)
Open_Win_Command()
Repeat;{
Select WindowEvent()
Case 0
Delay(20)
Case #WM_KEYDOWN;{
Select EventwParam()
Case #VK_SPACE
If MCI_GetStatus(0) = #MCI_Playing
SetActiveWindow_(hCommand)
keybd_event_(#VK_SPACE,0,0,0)
keybd_event_(#VK_SPACE,0,#KEYEVENTF_KEYUP,0)
Delay(10)
EndIf
Case #VK_DELETE
EjectFilm(0)
Case #VK_RETURN
If IsPlay = 0 And MCI_GetStatus(0) = #MCI_Stopped
MCI_Play(0) : IsPlay = 1
ElseIf IsPlay = 1 And MCI_GetStatus(0) = #MCI_Playing
StopFilm(0,1) : IsPlay = 0
EndIf
Case #VK_PAUSE
PauseFilm(0)
Case #VK_HOME
MCI_SeekToStart(0)
If IsPlay = 1
MCI_Play(0)
EndIf
EndSelect;}
Case #PB_EventMenu;{
Select EventMenuID()
Case #Btn_FullScreen
If MCI_GetStatus(0) = #MCI_Playing
FullScreen(0)
EndIf
EndSelect;}
Case #PB_EventGadget;{
Select EventGadgetID()
Case #Btn_Close
Quit = #True
Case #Btn_Load
Film$ = OpenFileRequester("Ouvrir une vidéo","Fichiers vidéo","Fichiers vidéo|*.wmv;*.avi;*.mpg|Tout type|*.*",0)
If Film$
If LoadFilm(Film$,0)
hDis = Info\Handle :W_Film = Info\Largeur : H_Film = Info\Hauteur
T_10 = SetTimer_(hCommand, #T_10, 100, @TimerProc())
EndIf
EndIf
Case #Btn_Play
MCI_Play(0) : IsPlay = 1
Case #Btn_Pause
PauseFilm(0)
Case #Btn_Stop
StopFilm(0,1) : IsPlay = 0
Case #Btn_FullScreen
FullScreen(0)
Case #Btn_Eject
EjectFilm(0)
Case #Trk_Bar_Seek
SeekFilm()
EndSelect;}
EndSelect
Delay(1)
Until Quit;}
End
Code : Tout sélectionner
; Nom du fichier : VideoProcs2.pb
;
; But : Lecture de fichiers video et audio avec les commandes MCI
; Librairies utilisées : aucune
; Auteur : Chris (http://purebasic.hmt-forum.com/index.php)
;
; Certaines procédures MCI_ proviennent du fichier "MCI-Commands.pbi", qui
; se trouve dans le dossier "Includes" de jaPBe
;=================================================================================================
;
IncludeFile "VideoProcs2.pb.declare"
;{- Constantes
;/Constantes Window
Enumeration
#Win_Command
#Win_Display
EndEnumeration
;/ Constantes gadgets
Enumeration
#Btn_FullScreen
#Btn_Play
#Btn_Pause
#Btn_Stop
#Btn_Load
#Str_Title
#Trk_Bar_Seek
#ProgressBar_Length
#Trk_Bar_Volume
#Btn_Eject
#Btn_Close
EndEnumeration
;/ StatusBar
Enumeration
#Status
EndEnumeration
;/ Timers
Enumeration 1
#T_10
#T_300
EndEnumeration
#PBM_SETRANGE32 = #WM_USER + 6
#PBM_GETRANGE = #WM_USER + 7
#PBM_SETBARCOLOR = #WM_USER + 9
;}
;{- Structures
Structure FILM_INFO
Handle.l
Titre.s
Largeur.l
Hauteur.l
EndStructure
Global Info.FILM_INFO
;}
;{- Variables
;/ Variables globales
Global S_Width.w, S_Height.w, hCommand.l, hProg.l, hSeek.l, hVol.l, MoveTrackBar.b
Global KeySpace.b, IsPlay, Full, Etat, hDis, IsLoaded, MsgError$
Global DureeDefaut$, EcouleDefaut$, OldStyle
;/ Autres variables
DureeDefaut$ = "Durée : 00:00:00"
EcouleDefaut$ = "Ecoulé : 00:00:00"
;}
;{- Procedures
Procedure Open_Win_Command() ; Fenêtre de commandes
If OpenWindow(#Win_Command, 265, 10, 480, 120, #PB_Window_TitleBar , "")
hCommand = WindowID(#Win_Command)
If CreateStatusBar(#Status,hCommand)
AddStatusBarField(235)
AddStatusBarField(240)
EndIf
If CreateGadgetList(hCommand)
ButtonGadget(#Btn_FullScreen, 5, 75, 65, 20, "Plein ecran")
ButtonGadget(#Btn_Play, 75, 75, 100, 20, "Lecture")
ButtonGadget(#Btn_Pause, 175, 75, 100, 20, "Pause")
ButtonGadget(#Btn_Stop, 275, 75, 100, 20, "Stop")
ButtonGadget(#Btn_Load, 415, 5, 55, 20, "Charger")
StringGadget(#Str_Title, 5, 5, 370, 20, "", #PB_String_ReadOnly)
hSeek = TrackBarGadget(#Trk_Bar_Seek, 0, 45, 380, 20, 0, 10)
hProg =ProgressBarGadget(#ProgressBar_Length, 5, 30, 370, 10, 0, 10)
hVol = TrackBarGadget(#Trk_Bar_Volume, 390, 0, 20, 95, 0, 1000, #PB_TrackBar_Vertical)
ButtonGadget(#Btn_Eject, 415, 30, 55, 20, "Ejecter")
ButtonGadget(#Btn_Close, 415, 75, 55, 20, "Quitter")
EndIf
AddKeyboardShortcut(#Win_Command, #PB_Shortcut_Space, #Btn_FullScreen)
EndIf
StatusBarText(#Status, 0, DureeDefaut$)
StatusBarText(#Status, 1, EcouleDefaut$)
EndProcedure
Procedure TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
Select uMsg
Case #WM_TIMER
Select idEvent
Case #T_10
StatusBarText(#Status, 0, "Durée : " + MCI_TimeString(MCI_GetLength(0)))
StatusBarText(#Status, 1, "Ecoulé : " + MCI_TimeString(MCI_GetPosition(0)))
MCI_SetVolume(0,GetGadgetState(#Trk_Bar_Volume))
SetGadgetState(#Trk_Bar_Seek,MCI_GetPosition(0))
SetGadgetState(#ProgressBar_Length, MCI_GetPosition(0))
If GetAsyncKeyState_(#VK_PRIOR)
SetGadgetState(#Trk_Bar_Volume, GetGadgetState(#Trk_Bar_Volume)+50)
EndIf
If GetAsyncKeyState_(#VK_NEXT)
SetGadgetState(#Trk_Bar_Volume, GetGadgetState(#Trk_Bar_Volume)-50)
EndIf
EndSelect
EndSelect
EndProcedure
Procedure ShowTaskBar(Bar.b) ; 0 cache la barre de taches, 1 la montre
Result = ShowWindow_(FindWindow_("Shell_TrayWnd", #Null), Bar)
ProcedureReturn Result
EndProcedure
Procedure LoadFilm(Movie$, IdFilm)
If MCI_Load(0,Movie$)
IsLoaded = 1
MCI_SetTimeMSFormat(IdFilm)
t$ = MCI_GetRect(IdFilm)
Info\Handle = MCI_GetHandle(IdFilm)
Info\Largeur = Val(StringField(t$,1," "))
Info\Hauteur = Val(StringField(t$,2," "))
Info\Titre = Left(GetFilePart(Movie$), Len(GetFilePart(Movie$))-Len(GetExtensionPart(Movie$))-1)
MCI_SetCaption(IdFilm, Info\Titre)
MoveWindow_(Info\Handle, S_Width/2-Info\Largeur/2, S_Height/2-Info\Hauteur/2,Info\Largeur, Info\Hauteur,#True)
SendMessage_(hProg,#PBM_SETRANGE32,0,MCI_GetLength(IdFilm))
SendMessage_(hSeek, #TBM_SETRANGEMAX,#True,MCI_GetLength(IdFilm))
SetGadgetState(#Trk_Bar_Volume,MCI_GetVolume(IdFilm))
SetGadgetText(#Str_Title,Info\Titre)
ProcedureReturn #True
Else
IsLoaded = 0
MessageRequester("Erreur de chargement","Chargement du fichier impossible")
ProcedureReturn #False
EndIf
EndProcedure
Procedure PauseFilm(IdFilm)
If MCI_GetStatus(IdFilm) = #MCI_Paused
SetGadgetText(#Btn_Pause, "Pause")
MCI_Resume(IdFilm)
ElseIf MCI_GetStatus(IdFilm) = #MCI_Playing
SetGadgetText(#Btn_Pause, "Reprise")
MCI_Pause(IdFilm)
EndIf
EndProcedure
Procedure EjectFilm(IdFilm)
If MCI_Free(IdFilm) = 0
KillTimer_(hCommand,#T_10)
KillTimer_(hCommand,#T_300)
SetGadgetText(#Str_Title,"")
SetGadgetState(#Trk_Bar_Volume,0)
SetGadgetState(#ProgressBar_Length,0)
SetGadgetState(#Trk_Bar_Seek,0)
IsLoaded = 0
StatusBarText(#Status, 0, DureeDefaut$)
StatusBarText(#Status, 1, EcouleDefaut$)
EndIf
EndProcedure
Procedure StopFilm(IdFilm, FlagStop)
If FlagStop = 1
MCI_SeekToStart(IdFilm)
MCI_Stop(IdFilm)
ElseIf FlagStop = 0
MCI_Stop(IdFilm)
EndIf
EndProcedure
Procedure SeekFilm()
If IsPlay = 0
MCI_ShowWindow(0)
EndIf
If GetAsyncKeyState_(#VK_LBUTTON)
NoPlay = 1
If IsPlay = 1 And MCI_GetStatus(IdFilm) <> #MCI_Stopped
MCI_Stop(0)
EndIf
MCI_Seek(0, GetGadgetState(#Trk_Bar_Seek))
Else
NoPlay = 0
EndIf
If IsPlay = 1 And NoPlay = 0
MCI_Play(0)
EndIf
EndProcedure
Procedure FullScreen(IdFilm)
If Full = 0
;HideWindow(hCommand,1)
MCI_Full(IdFilm)
Full = 1
ElseIf Full = 1
MCI_Restore(IdFilm)
;HideWindow(hCommand,0)
Full = 0
EndIf
EndProcedure
;}
Code : Tout sélectionner
; Nom du fichier : MCI_Procs.pb
;
; But : Lecture de fichiers video et audio avec les commandes MCI
; Librairies utilisées : aucune
; Auteur : Chris (http://purebasic.hmt-forum.com/index.php)
;
; Certaines procédures MCI_ proviennent du fichier "MCI-Commands.pbi", qui
; se trouve dans le dossier "Includes" de jaPBe
;=================================================================================================
;
;Info: MCI-Commands (to play mp3s, and so on)
Enumeration 0
#MCI_Unknown
#MCI_Stopped
#MCI_Playing
#MCI_Paused
EndEnumeration
Enumeration
#Forward
#Backward
EndEnumeration
; Commandes d'état de la vidéo
Procedure MCI_GetStatus(Nb) ; Renvoie l'état de la vidéo: En pause, en lecture, ou stoppée
Result=#MCI_Unknown
a$=Space(#MAX_PATH)
i=mciSendString_("status MCI_"+Str(Nb)+" mode",@a$,#MAX_PATH,0)
If i=0
Select a$
Case "stopped":Result=#MCI_Stopped
Case "playing":Result=#MCI_Playing
Case "paused":Result=#MCI_Paused
EndSelect
EndIf
ProcedureReturn Result
EndProcedure
Procedure MCI_GetSpeed(Nb) ; Renvoie la vitesse de lecture
a$=Space(#MAX_PATH)
i=mciSendString_("status MCI_"+Str(Nb)+" Speed",@a$,#MAX_PATH,0)
ProcedureReturn Val(a$)
EndProcedure
Procedure MCI_GetLength(Nb) ; Renvoie la longueur de la vidéo
a$=Space(#MAX_PATH)
i=mciSendString_("status MCI_"+Str(Nb)+" length",@a$,#MAX_PATH,0)
ProcedureReturn Val(a$)
EndProcedure
Procedure MCI_GetPosition(Nb) ; Renvoie la position du film
a$=Space(#MAX_PATH)
i=mciSendString_("status MCI_"+Str(Nb)+" position",@a$,#MAX_PATH,0)
ProcedureReturn Val(a$)
EndProcedure
Procedure MCI_GetVolume(Nb) ; Renvoie le volume
a$=Space(#MAX_PATH)
i=mciSendString_("status MCI_"+Str(Nb)+" volume",@a$,#MAX_PATH,0)
ProcedureReturn Val(a$)
EndProcedure
Procedure.s MCI_GetRect(Nb) ; Renvoie la taille du film
a$=Space(#MAX_PATH)
i=mciSendString_("where MCI_"+Str(Nb)+" source",@a$,#MAX_PATH,0)
ProcedureReturn StringField(a$,3," ")+" "+StringField(a$,4," ")
EndProcedure
Procedure MCI_GetHandle(Nb) ; Renvoie le handle de la fenêtre d'affichage
a$=Space(#MAX_PATH)
i=mciSendString_("status MCI_"+Str(Nb)+" window handle",@a$,#MAX_PATH,0)
ProcedureReturn Val(a$)
EndProcedure
; Commandes de contrôle de la vidéo
Procedure MCI_Load(Nb,file.s)
i=mciSendString_("OPEN "+Chr(34)+file+Chr(34)+" Type MPEGVIDEO ALIAS MCI_"+Str(Nb),0,0,0)
If i=0
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure MCI_Play(Nb)
i=mciSendString_("play MCI_"+Str(Nb),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_PlayStart(Nb)
i=mciSendString_("play MCI_"+Str(Nb)+" from "+Str(0),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_PlayPart(Nb,start,endPos)
i=mciSendString_("play MCI_"+Str(Nb)+" from "+Str(start)+" to "+Str(endPos),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_Pause(Nb)
i=mciSendString_("pause MCI_"+Str(Nb),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_Resume(Nb)
i=mciSendString_("resume MCI_"+Str(Nb),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_Stop(Nb)
i=mciSendString_("stop MCI_"+Str(Nb),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_Free(Nb)
i=mciSendString_("close MCI_"+Str(Nb),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_SetVolume(Nb,volume)
i=mciSendString_("SetAudio MCI_"+Str(Nb)+" volume to "+Str(volume),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_SetSpeed(Nb,Tempo)
i=mciSendString_("set MCI_"+Str(Nb)+" Speed "+Str(Tempo),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_SetTimeMSFormat(Nb)
i=mciSendString_("set MCI_"+Str(Nb)+" time format milliseconds",0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_SetCaption(Nb, Caption$)
i=mciSendString_("Window MCI_"+Str(Nb)+" text "+Chr(34)+Caption$+Chr(34),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_Seek(Nb,pos)
i=mciSendString_("Seek MCI_"+Str(Nb)+" to "+Str(pos),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_SeekToStart(Nb)
i=mciSendString_("Seek MCI_"+Str(Nb)+" to start",0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_SeekToEnd(Nb)
i=mciSendString_("Seek MCI_"+Str(Nb)+" to end",0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_SeekTo(Nb, pos)
i=mciSendString_("play MCI_"+Str(Nb)+" from "+Str(pos),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_Parent(Nb, Hnd)
i=mciSendString_("Window MCI_"+Str(Nb)+" handle "+Str(Hnd),0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_Full(Nb)
i=mciSendString_("play MCI_"+Str(Nb)+" fullscreen ",0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_Restore(Nb)
i=mciSendString_("play MCI_"+Str(Nb)+" window ",0,0,0)
ProcedureReturn i
EndProcedure
Procedure MCI_Step(Nb,NumFrames,Dir)
If Dir = #Forward ; en avant
i=mciSendString_("step MCI_"+Str(Nb)+" by "+Str(NumFrames),0,0,0)
ElseIf Dir = #Backward ; en arrière
i=mciSendString_("step MCI_"+Str(Nb)+" by "+Str(NumFrames)+" reverse",0,0,0)
EndIf
ProcedureReturn i
EndProcedure
Procedure.s MCI_TimeString(time)
time/1000
sek=time%60:time/60
min=time%60:time/60
ProcedureReturn RSet(Str(time),2,"0")+":"+RSet(Str(min),2,"0")+":"+RSet(Str(sek),2,"0")
EndProcedure
Procedure MCI_ShowWindow(Nb)
i=mciSendString_("Window MCI_"+Str(Nb)+" state show ",0,0,0)
ProcedureReturn i
EndProcedure