Page 1 sur 1

Test

Publié : mar. 30/nov./2004 19:05
par Chris
Qui peut tester ça sous Windows 98, Me, ou 2000.

Commandes :
PageUp pour monter le son
PageDown pour baisser le son
Right pour la balance à droite
Left pour la balance à gauche
Up pour avancer 250 frames. (Pas terminé, donc pas génial)
Down pour reculer 250 frames. (Pas terminé, donc pas génial)
Espace pour mettre en plein ecran/mettre à la taille du film
Entrée pour mettre en pause/remettre en lecture.

Code : Tout sélectionner

;/ Constantes Fenêtres
Enumeration
  #WinMain
EndEnumeration

;/ Initialisations
If ExamineDesktops()
  MainDesk = 0
EndIf
If InitMovie() = 0
  MessageRequester("Erreur", "Problème d'initialisation de DirectX",#MB_ICONERROR)
EndIf

;/ Variables
Global Volume, Balance, L_Film

Style_1 = #PB_Window_TitleBar|#PB_Window_ScreenCentered

Volume = 50 : Balance = 0
TailleFilm = 1

S_Width = DesktopWidth(MainDesk)
S_Height = DesktopHeight(MainDesk)
Film$ = OpenFileRequester("Choisir votre film", "", "Fichiers vidéo|*.wmv;*.avi;*.mpg;|All Files|*.*", 0)
If Film$
  LoadMovie(0,Film$)
  H_Film = MovieHeight()
  W_Film = MovieWidth()
  L_Film = MovieLength()
EndIf

;/ Procédures
Procedure ShowTaskBar(Bar.b) ; 0 cache la barre de taches, 1 la montre
  result = ShowWindow_(FindWindow_("Shell_TrayWnd", #Null), Bar)
EndProcedure

Procedure CallBack(Hnd,msg,wParam,lParam)
  Resultat = #PB_ProcessPureBasicEvents
  If msg = #WM_MOVE Or msg = #WM_PAINT Or msg = #WM_SIZE
    UpdateWindow_(Hnd)
  EndIf
  ProcedureReturn Resultat
EndProcedure

Procedure TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
  Static PosFilm, Pause, FlagSeek

  Select uMsg
    Case #WM_TIMER
      Select idEvent
        Case 1 ; timer à 300 ms : Pause et déplacements
          If GetAsyncKeyState_(#VK_RETURN) <> 0 ; Pause
            If Pause = 1 : Pause = 0 : Else : Pause = 1 : EndIf
            If Pause = 1 : PauseMovie() : Else : ResumeMovie() : EndIf
          EndIf

          If GetAsyncKeyState_(#VK_UP) <> 0 Or GetAsyncKeyState_(#VK_DOWN) <> 0
            If MovieStatus() > 0
              FlagSeek = 1
            EndIf
          Else
            FlagSeek = 0
          EndIf

          If FlagSeek = 1 And GetAsyncKeyState_(#VK_UP) <> 0 ; Avant 250 frames
            PosFilm = MovieStatus()
            If PosFilm < L_Film - 250
              MovieSeek(PosFilm + 250)
            Else
              MovieSeek(L_Film)
            EndIf
          EndIf
          If FlagSeek = 1 And GetAsyncKeyState_(#VK_DOWN) <> 0 ; Arriere 250 frames
            PosFilm = MovieStatus()
            If PosFilm > 250
              MovieSeek(PosFilm - 250)
            Else
              MovieSeek(0)
            EndIf
          EndIf

        Case 2 ; timer à 50 ms : Contrôle du volume et de la balance
          If GetAsyncKeyState_(#VK_PRIOR) <> 0 ; Volume +
            Volume +1 : If Volume >100 : Volume = 100 : EndIf
          EndIf
          If GetAsyncKeyState_(#VK_NEXT)<>0 ; Volume -
            Volume -1 : If Volume <0 : Volume = 0 : EndIf
          EndIf
          If GetAsyncKeyState_(#VK_RIGHT) <> 0 ; Balance --> droite
            Balance +1 : If Balance > 100 : Balance = 100 : EndIf
          EndIf
          If GetAsyncKeyState_(#VK_LEFT) <> 0 ; Balance --> gauche
            Balance -1 : If Balance < -100 : Balance = -100 : EndIf
          EndIf
      EndSelect
  EndSelect
EndProcedure

NomFilm$ = Left(GetFilePart(Film$), Len(GetFilePart(Film$))-Len(GetExtensionPart(Film$))-1)

  ;/ Début du programme
hMain = OpenWindow(#WinMain,0,0,W_Film,H_Film,Style_1,NomFilm$)
SetWindowCallback(@CallBack())

If hMain
  SetTimer_(hMain,1,500,@TimerProc())
  SetTimer_(hMain,2,50,@TimerProc())

  PlayMovie(0,WindowID(#WinMain))
EndIf
OldStyle = GetWindowLong_(hMain,#GWL_STYLE)

If Film$
  Repeat
    MovieAudio(Volume, Balance)
    Select WindowEvent()
      Case #WM_KEYDOWN
        Select EventwParam()
          Case #VK_ESCAPE ; Fermeture
            ShowTaskBar(1)
            FreeMovie(0)
            quit = #True

          Case #VK_SPACE ; Taille Vidéo
            ; TailleFilm = 1 : Fenêtre à la taille de la vidéo
            ; TailleFilm = 0 : Fenêtre àla taille de l'écran
            If TailleFilm = 0 : TailleFilm = 1 : Else : TailleFilm = 0 : EndIf
            If TailleFilm = 1 ; Taille de la vidéo
              ShowTaskBar(1)
              ShowCursor_(#True)
              SetWindowLong_(hMain,#GWL_STYLE,OldStyle)
              UpdateWindow_(hMain)

              MoveWindow(S_Width/2 - W_Film/2, S_Height/2 - H_Film/2)
              ResizeWindow(W_Film, H_Film)
              ResizeMovie(0,0,W_Film, H_Film)

            ElseIf TailleFilm = 0              ; Taille du bureau
              ShowTaskBar(0)
              ShowCursor_(#False)
              SetWindowLong_(hMain,#GWL_STYLE, GetWindowLong_(hMain,#GWL_STYLE)|#PB_Window_BorderLess & ~#WS_CAPTION)
              UpdateWindow_(hMain)

              MoveWindow(0, 0)
              ResizeWindow(S_Width, S_Height)
              ResizeMovie(0, 0, S_Width, S_Height)

            EndIf
          Case #PB_EventCloseWindow
            ShowTaskBar(1)
            ShowCursor_(#True)
            FreeMovie(0)
            quit = #True

        EndSelect
    EndSelect
  Until quit
  End
EndIf
C'est un début de programme pour lire les fichiers vidéo, si tout fonctionne correctement, je vais essayer de mettre l'affichage des fonctions en surimression sur l'écran.

Merci pour les reports

Publié : mar. 30/nov./2004 21:13
par Jacobus
:( Gasp! Ca plante bien sous Win Me

Chaque Step me renvoie sur :

Code : Tout sélectionner

LoadMovie(0,Film$) 
  H_Film = MovieHeight() 
  W_Film = MovieWidth() 
  L_Film = MovieLength() 
Puis termine sa course sur :

Code : Tout sélectionner

NomFilm$ = Left(GetFilePart(Film$), Len(GetFilePart(Film$))-Len(GetExtensionPart(Film$))-1) 
Le premier essai a ouvert la vidéo juste avant de générer une erreur du compilateur et crash..., puis le second essai n'a pas pu ouvrir la vidéo mais j'ai pu relever le step by step ci-dessus.

Si ça peut t'aider, ben tant mieux.
@+ Jacobus

Publié : mar. 30/nov./2004 22:20
par Chris
Est-ce qu'il existe un prog qui ne plante pas sous ME? :lol:

Tu as la 3.92 de Pure?

Publié : mar. 30/nov./2004 22:52
par Chris
J'ai essayé avec un fichier wmv, les touches Up et Down ne fonctionnent pas. Il n'y a pas le déplacement de 250 frames.

Je crois que je vais refaire ce prog en utilisant les commandes mci, là au moin, je suis sûr que ça va fonctionner! :?

Publié : mer. 01/déc./2004 8:18
par Jacobus
Est-ce qu'il existe un prog qui ne plante pas sous ME?

Sûrement mais lequel ?? :roll:

J'utilise effectivement PB3.92 et j'ai "testé" aussi avec un wmv.
Mais moi j'ai pas eu le temps de me servir des touches... :?

Publié : mer. 01/déc./2004 15:59
par Chris
Dans la callback, peux tu supprimer #WM_PAINT, et me dire si ça fonctionne?

Merci :)

Publié : mer. 01/déc./2004 18:59
par Jacobus
:) Effectivement, ça fonctionne beaucoup mieux en retirant #VM_PAINT
Le mode plein écran est correct, le retour au mode window également, pause et relance aussi.

Un bean's cependant à la fermeture:
- Soit tu appuies directement sur Escap après la lecture et la fermeture se fait bien.
- Soit tu fais un clic de souris sur ton écran (n'importe où) et ta fenêtre vidéo se met en bouton et là les blèmes commencent.
Premiere tentative pas de récupération de la fenêtre vidéo et plantage.
Deuxième essai (je sais :silly: mais je voulais vérifier)
Je suis parvenu à la récupérer par un clic droit sur le mulot, mais impossible de la fermer avec Escap. j'ai dû employer le moyen d'urgence, soit la combinaison ctrl+alt+suppr.

@+ Jacobus

Publié : mer. 01/déc./2004 19:13
par Le Soldat Inconnu
Ctrl + Alt + Suppr est pas un moyen d'urgence sur Windows, c'est presque une voie standard :lol:

Publié : mer. 01/déc./2004 19:21
par Jacobus
:D Je fais plus la différence sous Win Me...C'est toujours l'état d'urgence.

Publié : mer. 01/déc./2004 19:28
par Chris
Curieux ça, j'ai pas ce problème.

J'ai testé sur mon portable avec Windows ME, et ça fonctionne comme sur XP. (On dirait plus un diaporama qu'un film, mais bon...)
Quand je clique en dehors de la fenêtre, il y a deux possibilités.
- Si j'ai plusieurs fenêtres ouvertes, la fenêtre du film passe derrière les autres.
- Si je n'ai que la fenêtre du film, elle reste au milieu de l'écran, mais est désactivée, et ne reçoit plus les commandes des touches.

En aucun cas, elle ne se réduit dans la barre de tâches

Par contre, impossible d'ouvrir les wmv créés par XP. Sans doute un codec qui manque

Publié : mer. 01/déc./2004 21:03
par Jacobus
En aucun cas, elle ne se réduit dans la barre de tâches
Cela m'est arrivé en compilant ton code avec le débogueur activé et lorsque la vidéo que je visualisais était terminée. En cliquant dans la fenêtre de l'éditeur PB.

Je viens de refaire un essai et c'est tout bon :?
Si ça se trouve j'ai merdè tout à l'heure sans m'en rendre compte, mais cela me surprend, j'avais essayé deux fois !! et j'ai rien fait de plus.
:roll: Je referais un essai demain... on ne sait jamais, m'enverra p't-être la quickcam dans la tête si ça lui plaît pas... l'est suceptible l'animal.

@+ Jacobus

Publié : mer. 01/déc./2004 21:06
par Jacobus
Par contre, impossible d'ouvrir les wmv créés par XP. Sans doute un codec qui manque
il ya deux versions de Windows Movie Maker et celle d'XP est effectivement incompatible avec Me, c'est peut-être là qu'est le blême.

Publié : mer. 01/déc./2004 21:14
par Chris
C'est peut-être normal que ça plante si le film était terminé.
Je n'ai mis aucun test dans le code pour vérifier si le fichier est terminé ou non.
Ce n'est qu'un début de code, pour voir si ça fonctionne sur tous les systemes, tout au moins, si quelqu'un veut bien tester.
Apparemment, ce n'est pas le cas