Test

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Test

Message 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
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message 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
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Est-ce qu'il existe un prog qui ne plante pas sous ME? :lol:

Tu as la 3.92 de Pure?
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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! :?
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message 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... :?
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Dans la callback, peux tu supprimer #WM_PAINT, et me dire si ça fonctionne?

Merci :)
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message 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
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Ctrl + Alt + Suppr est pas un moyen d'urgence sur Windows, c'est presque une voie standard :lol:
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

:D Je fais plus la différence sous Win Me...C'est toujours l'état d'urgence.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message 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
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message 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.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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
Répondre