Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

LECTEUR VIDEO (MULTIMEDIA) SANS OCX NI WMP - COMPLET


Information sur la source

Catégorie :Multimedia Niveau : Expert Date de création : 17/11/2002 Date de mise à jour : 16/12/2002 18:42:22 Vu / téléchargé: 14 264 / 2 571

Note :
9 / 10 - par 10 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (39)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Il y a déja 30 lecteurs multimédia sur vbfrance. Celui-ci se veux très simple et n'utilise pas d'ocx. Néanmoins il intègre toutes les fonctionnalités d'un windows media player : lecture / pause / stop / slideshow / mute / toujours visible / parcours de la vidéo / zoom & stretch / capture / vitesse de lecture / volume interne

(L'interface est simple pour vous éviter de lire des lignes de codes inutile)

il utilise mciSendStringA() pour gérer les fichiers multimédia (rien de neuf...)

En outre il récupère quelques infos sur la vidéo en cours tel que le code FOURCC du codec utilisé ainsi que la résolution (fichiers avi, mpg, asf et wmv).
 

Source

  • 'chargez le zip
  • '
  • 'mode d'emploi :
  • 'Cliquez sur "Changer de dossier"
  • 'Choississez un dossier contenant une ou plusieurs vidéo
  • 'Double-cliquez sur le nom du fichier que vous voulez lire
  • '
  • 'Lorsqu'il aura fini de lire le fichier, le programme sautera automatiquement au fichier suivant (en gros, c'est un slideshow de vidéo)
  • '
  • 'appuyer sur F10 lorsque la filelistbox a le focus pour afficher tout les fichiers multimédia du dossier ouvert.
  • '*******************
  • ' FRAGMENT DE CODE
  • '*******************
  • 'API nécessaire :
  • Private Declare Function mciSendStringA Lib "winmm.dll" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
  • 'récupère le nom 8.3 msdos (sans espaces)
  • Private Declare Function GetShortPathNameA Lib "kernel32" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long
  • 'Déclaration générale nécessaire :
  • Private AliasToUse As String
  • Private VidHeight As Long
  • Private VidWidth As Long
  • Private Duree As Long
  • Private Position As Long
  • '=======================================
  • 'ouvrir un fichier :
  • Sub OuvrirMM(NomFichierLong As String)
  • Dim BufferNom As String * 255
  • Dim BufferLen As Long
  • BufferLen = GetShortPathNameA(NomFichierLong, BufferNom, 255)
  • NomFichierCourt$ = Left$(BufferNom, BufferLen)
  • CmdStr = "open MPEGVideo!" & NomFichierCourt & " alias " & AliasToUse & " parent " & Picture1.hWnd & " Style " & CStr(&H40000000)
  • mciSendStringA CmdStr, 0&, 0&, 0&
  • End Sub
  • '=======================================
  • 'récuperer la durée :
  • Sub RetDureeMM()
  • Call mciSendStringA("set " & AliasToUse & " time format milliseconds", 0, 0, 0)
  • Dim TDur As String * 128
  • Call mciSendStringA("status " & AliasToUse & " length", TDur, 128, 0)
  • Duree = Val(TDur)
  • End Sub
  • '=======================================
  • 'commence la lecture depuis le début :
  • Sub JoueMM()
  • mciSendStringA "play " & AliasToUse & " from 0", 0, 0, 0
  • End Sub
  • '=======================================
  • 'commence la lecture depuis une position :
  • Sub ReJoueMM(NouvellePos As Long)
  • mciSendStringA "play " & AliasToUse & " from " & NouvellePos, 0, 0, 0
  • End Sub
  • '=======================================
  • 'stopper la lecture :
  • Sub StopMM()
  • mciSendStringA "stop " & AliasToUse, 0, 0, 0
  • End Sub
  • '=======================================
  • 'récupère la position de la lecture en cours :
  • Sub RetPositionMM()
  • Dim TPos As String * 32
  • mciSendStringA "status " & AliasToUse & " position notify", TPos, 32, &H2)
  • Position = Val(TPos)
  • End Sub
  • '=======================================
  • '"se déplaçer" dans le fichier :
  • Sub RePositionMM(NouvellePos As Long)
  • mciSendStringA "seek " & AliasToUse & " to " & NouvellePos, 0, 0, 0
  • End Sub
  • '=======================================
  • 'couper / remettre le son :
  • Sub CoupeSonMM(Oui As Boolean)
  • Select Case Oui
  • Case True
  • mciSendStringA "set " & AliasToUse & " audio all off", 0, 0, 0
  • Case Fasle
  • mciSendStringA "set " & AliasToUse & " audio all on", 0, 0, 0
  • End Select
  • End Sub
  • '=======================================
  • 'récuperer la hauteur et la largeur de la vidéo :
  • Sub RetTailleMM()
  • Dim MaxXY As String * 128
  • Dim MaxXY2 As String
  • Call mciSendStringA("where " & AliasToUse & " destination", MaxXY, 128, 0)
  • MaxXY2 = Left(TDur, InStr(1, MaxXY, Chr$(0)) - 1)
  • MaxXY2 = Trim(MaxXY2)
  • If Len(MaxXY2) > 1 Then
  • p1 = InStrRev(MaxXY2, " ")
  • VidHeight = Val(Mid(MaxXY2, p1 + 1))
  • p2 = InStrRev(MaxXY2, " ", p1 - 1)
  • VidWidth = Val(Mid(MaxXY2, p2 + 1, p1 - p2 - 1))
  • End If
  • End Sub
  • '=======================================
  • 'redimensionner la fenêtre (zoom, stretch)
  • Sub RedimensionneMM(NouvLarg As Long, NouvHaut As Long)
  • st$ = NouvLarg & " " & NouvHaut
  • mciSendStringA "put " & AliasToUse & " window at 0 0 " & st$, 0, 0, 0
  • mciSendStringA "put " & AliasToUse & " destination at 0 0 " & st$, 0, 0, 0
  • End Sub
  • '=======================================
  • 'regler la vitesse de lecture (1000 = vitesse 1x, 500 = 0.5x)
  • Sub VitesseMM(NouveauFacteur As Long)
  • mciSendStringA "set " & AliasToUse & " speed " & NouveauFacteur, 0, 0, 0
  • End Sub
  • '=======================================
  • 'regler le volume interne (et non de windows)
  • '(1000 = nominal, 500 = 2 fois moins fort)
  • Sub VolumeMM(NouveauFacteur As Long)
  • mciSendStringA "setaudio " & AliasToUse & " volume to " & NouveauFacteur, 0, 0, 0
  • End Sub
'chargez le zip
'
'mode d'emploi :
'Cliquez sur "Changer de dossier"
'Choississez un dossier contenant une ou plusieurs vidéo
'Double-cliquez sur le nom du fichier que vous voulez lire
'
'Lorsqu'il aura fini de lire le fichier, le programme sautera automatiquement au fichier suivant (en gros, c'est un slideshow de vidéo)
'
'appuyer sur F10 lorsque la filelistbox a le focus pour afficher tout les fichiers multimédia du dossier ouvert.      

'*******************
' FRAGMENT DE CODE
'*******************
'API nécessaire :

Private Declare Function mciSendStringA Lib "winmm.dll" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
'récupère le nom 8.3 msdos (sans espaces)
Private Declare Function GetShortPathNameA Lib "kernel32" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long

'Déclaration générale nécessaire :
Private AliasToUse As String

Private VidHeight As Long
Private VidWidth As Long

Private Duree As Long
Private Position As Long


'=======================================
'ouvrir un fichier :
Sub OuvrirMM(NomFichierLong As String)
Dim BufferNom As String * 255
Dim BufferLen As Long
BufferLen = GetShortPathNameA(NomFichierLong, BufferNom, 255)
NomFichierCourt$ = Left$(BufferNom, BufferLen)

CmdStr = "open MPEGVideo!" & NomFichierCourt & " alias " & AliasToUse & " parent " & Picture1.hWnd & " Style " & CStr(&H40000000)

mciSendStringA CmdStr, 0&, 0&, 0&
End Sub


'=======================================
'récuperer la durée :
Sub RetDureeMM()
Call mciSendStringA("set " & AliasToUse & " time format milliseconds", 0, 0, 0)
Dim TDur As String * 128
Call mciSendStringA("status " & AliasToUse & " length", TDur, 128, 0)
Duree = Val(TDur)
End Sub


'=======================================
'commence la lecture depuis le début :
Sub JoueMM()
mciSendStringA "play " & AliasToUse & " from 0", 0, 0, 0
End Sub

'=======================================
'commence la lecture depuis une position :
Sub ReJoueMM(NouvellePos As Long)
mciSendStringA "play " & AliasToUse & " from " & NouvellePos, 0, 0, 0
End Sub

'=======================================
'stopper la lecture :
Sub StopMM()
mciSendStringA "stop " & AliasToUse, 0, 0, 0
End Sub


'=======================================
'récupère la position de la lecture en cours :
Sub RetPositionMM()
Dim TPos As String * 32
mciSendStringA "status " & AliasToUse & " position notify", TPos, 32, &H2)
Position = Val(TPos)
End Sub

'=======================================
'"se déplaçer" dans le fichier :
Sub RePositionMM(NouvellePos As Long)
mciSendStringA "seek " & AliasToUse & " to " & NouvellePos, 0, 0, 0
End Sub


'=======================================
'couper / remettre le son :
Sub CoupeSonMM(Oui As Boolean)
Select Case Oui
Case True
mciSendStringA "set " & AliasToUse & " audio all off", 0, 0, 0
Case Fasle
mciSendStringA "set " & AliasToUse & " audio all on", 0, 0, 0
End Select
End Sub


'=======================================
'récuperer la hauteur et la largeur de la vidéo :
Sub RetTailleMM()
Dim MaxXY As String * 128
Dim MaxXY2 As String
Call mciSendStringA("where " & AliasToUse & " destination", MaxXY, 128, 0)

MaxXY2 = Left(TDur, InStr(1, MaxXY, Chr$(0)) - 1)
MaxXY2 = Trim(MaxXY2)
If Len(MaxXY2) > 1 Then
    p1 = InStrRev(MaxXY2, " ")
    VidHeight = Val(Mid(MaxXY2, p1 + 1))
    p2 = InStrRev(MaxXY2, " ", p1 - 1)
    VidWidth = Val(Mid(MaxXY2, p2 + 1, p1 - p2 - 1))
End If
End Sub

'=======================================
'redimensionner la fenêtre (zoom, stretch)
Sub RedimensionneMM(NouvLarg As Long, NouvHaut As Long)
st$ = NouvLarg & " " & NouvHaut
mciSendStringA "put " & AliasToUse & " window at 0 0 " & st$, 0, 0, 0
mciSendStringA "put " & AliasToUse & " destination at 0 0 " & st$, 0, 0, 0
End Sub

'=======================================
'regler la vitesse de lecture (1000 = vitesse 1x, 500 = 0.5x)
Sub VitesseMM(NouveauFacteur As Long)
mciSendStringA "set " & AliasToUse & " speed " & NouveauFacteur, 0, 0, 0
End Sub

'=======================================
'regler le volume interne (et non de windows)
'(1000 = nominal, 500 = 2 fois moins fort)
Sub VolumeMM(NouveauFacteur As Long)
mciSendStringA "setaudio " & AliasToUse & " volume to " & NouveauFacteur, 0, 0, 0
End Sub
 

Conclusion

MISE A JOUR :
- réglage du volume interne et non windows wave
- réglage de la vitesse de lecture.
- capture une image de la vidéo (ça ne marche pas tout le temps, pourtant la théorie est bonne)
- regarder le readme.txt dans le zip pour le détail des fonctionnalités.
- autodétermination du vrai format du fichier
- resize de la fenêtre vidéo! soit vous gardez les proportions, soit vous l'étirer sur toute la form. Attention, les fichiers types divx semble ne pas appréçier l'opération.
- progressbar 100% débogué
- une information détaillé sur le codec en cours
- la progressbar change de couleur au fur et a mesure de la progression (a vous de décider la couleur initiale et finale!)
- erreur division par zéro et autres lorsque le fichier vidéo est corrompu > fixé
BOGUES :
- aucun connu.

La vidéo du screenshot n'est pas dans le zip ;)        
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de Alain le 18/11/2002 08:51:53

Trés bon code, bien expliqué !

signaler à un administrateur
Commentaire de luko007 le 21/11/2002 19:00:55

cool c'est tout bon

signaler à un administrateur
Commentaire de cbjp85 le 03/03/2003 15:48:22

Merci a toi Proger d'avoir mis le code ds les commentaire car ayant vb.NET initiation g po acces aux sources en vb6 :'(
Et comme je cherchais un exemple depuis longtemps avec la fct mcisendstring... MERCI. Ton code est super :) Moi je mes 10

signaler à un administrateur
Commentaire de cbjp85 le 29/03/2003 13:28:46

Une tite kestion. Comment on cache la barre de titre de la fenetre de la video ?

signaler à un administrateur
Commentaire de Fatalis le 27/04/2003 18:35:20

"Il y a déja 30 lecteurs multimédia sur vbfrance. Celui-ci se veux très simple et n'utilise pas d'ocx."

Ton objet Media ne se trouverais pas dans msdxm.ocx ?
Allez... au plaisir

signaler à un administrateur
Commentaire de Proger le 27/04/2003 18:44:21

non, il n'y a pas d'objet autre que ceux de la dll msvbm60 et du systeme standard ole. tu pourras vérifier en regardant la ligne Reference= du fichier .vbp, ainsi que la ligne Object= (qui n'existe pas puisqu'il n'y a pas d'appel aux ocx).

Pour cbjp85, en faisant peut-etre Me.BorderStyle = 0 ?

signaler à un administrateur
Commentaire de titicar le 10/05/2003 11:49:49

Ton prog est tip-top! Depuis le temps que je cherchais à afficher une vidéo. Je vais peut-être enfin pouvoir me débarrasser de l'OCX du Windows Média Player!

signaler à un administrateur
Commentaire de jefftabasco le 23/05/2003 22:12:24

Cette source est claire et pratique.
Bravo.

signaler à un administrateur
Commentaire de Programmeur1987 le 01/07/2003 21:08:03

eu :S moi je nai pas d'image, pk est ce que c mon divx qui pourrais avoir un prob ?

signaler à un administrateur
Commentaire de Programmeur1987 le 01/07/2003 21:22:43

bon cette foi il fonctionne. mais il est a lenver :O

signaler à un administrateur
Commentaire de sylverweb le 18/07/2003 16:49:28

Super ton prog
Comment peut on lancer la lecture d'un divx avec ton prog directement de l'explorateur windows ou à partir d'un ligne de commande

signaler à un administrateur
Commentaire de vodKapom le 22/10/2003 17:01:59

Excellent, très simple, très bien commenté , un régal !
Par contre j'ai une question de newbie :

Pourquoi ton exe n'a pas de besoin technique avec VB6fr.dll
alors que moi, si je modifie ta source et je recompile, et le lance, il me demande la dll VB6fr ?? (Sur une autre bécane n'ayant pas VB bien sûr)
.... J'aimerai bien savoir ... je dois oublier un truc !??

signaler à un administrateur
Commentaire de Proger le 23/10/2003 08:03:09

Programmeur1987 : teste ta video avec windows media player. normalement ce code source se comporte pareil que wmp (puisqu'il dépend des mêmes dlls systèmes)
sylverweb : en gerant la variable command$ au sein de form_load ya moyen.
vodKapom : car je l'ai compilé avec la version u.s. de vb6. vb6fr.dll semble être le "language pack" de vb :) (ie car la version ital. de vb6 demande un vb6it.dll ...)

signaler à un administrateur
Commentaire de vodKapom le 23/10/2003 14:05:16

Ok merci Proger pour ton explication !
Je vais suivre tes développements de près.. ;-))

signaler à un administrateur
Commentaire de inuyasha51 le 29/10/2003 07:20:13

Proger, super ta source. Je suis épaté.

J'ai une question.
Dans ta fonction OpenMe, en ligne 6, tu affectes une valeur à une variable 'h' (h = &H40000000). Mais la definition de cette variable ne figure nul part !!!
'h' est utilisée il me semble seulement à la ligne en dessous, pour la definition du style.
Pourrais-tu eclairer ma lanterne STP ?
Merci d'avance.

signaler à un administrateur
Commentaire de Proger le 29/10/2003 08:50:59

mmh, en fait c'est pour indiquer que le style de la sortie vidéo se fait dans une fenêtre, au lieu d'être dans une form a part entière. Je passe par la variable h pour "convertir" la valeur hexa &h40000000 en valeur décimale lorsque vb fait la conversion de h en strings à la ligne du dessous.
Dans la msdn à propos de la commande "open" de mcisendstring (section windows multimedia) tu peux voir les autres possibilités.

signaler à un administrateur
Commentaire de inuyasha51 le 29/10/2003 08:59:53

Merci.
Mais ou est definit la variable 'h' ? Je croyais qu'il fallait toujours definir une variable avant de l'utiliser (genre dim h as ...) mais la, il ne semble pas y avoir de definition pour 'h' dans ton code. C'est ce qui m'intrigue, et la raison pour laquelle je me suis permit d'ajouter cette question à mon commentaire.
Est-ce que je me trompe ou est-ce 'h' n'a pas besoin d'être déclaré ??
Merci.

signaler à un administrateur
Commentaire de Proger le 29/10/2003 15:57:46

h n'est pas déclaré explicitement, aussi vb déclare implicitement cette variable de la façon suivante :
dim h as variant
Mais attention, ça n'est pas exact : j'ai mis en tout début de code (general declaration)
defdbl a-z
Cela signifie que vb déclare implicitement toutes les variables non déclaré explicitement en type double, donc h est en fait
dim h as double
En général, on dit qu'il faut toujours déclarer les variables qu'on utilise pour la bonne et simple raison que le type "variant" est très lent : si tu fais un addition de deux "variant", le cpu mettra 100 fois plus de temps que si c'est deux "long".
Pour répondre à ta question, h n'as donc pas à être déclaré, car vb est un langage simplifié qui déclare automatiquement ce qui n'est pas déclarer manuellement, qui plus est j'ai pris soin de définir que toutes les déclarations automatique soit de type double et non pas variant.

signaler à un administrateur
Commentaire de inuyasha51 le 29/10/2003 16:24:52

Super. Merci pour l'explication claire. J'ai comprit ;-D

signaler à un administrateur
Commentaire de titicar le 31/10/2003 19:33:53

Salut Proger, juste un p'tit msg perso.
Ton prog m'a nettement aidé à me passer de ce foutu Ocx (que tt le monde connait). Cela dit dans ton exemple, je n'ai pas trouvé de fonction pour passer en mode FullScreen. J'suis pas un pro dans les prog et en allant sur le site de Microsoft concernant l'Api que tu utilises pour la vidéo et concernant ce mode FullScreen, je me suis heurté à trop de problèmes.
Aussi, je me suis penché sur le DirectX qui propose cette fonction par une simple propriété.
Le revers de la médaille est que sous DirectX, je n'ai pas trouvé de fonction qui donne les dimensions-image d'une vidéo. Alors que ton program le fait avec ta fonction 'GetFileInfo' (en tout cas pour les vidéos que j'ai rencontré).
Donc un grand merci à toi.
De même, ta progresse-barre est pas mal du tout, et plus précise que celle de l'Ocx de VB!

signaler à un administrateur
Commentaire de maximeauxUS le 09/03/2005 16:02:43

Salut,

je trouve ton code tres interressant et je souhaiterais savoir si il y aurait un moyen d'aller plus loin en decoupant la video en plusieurs chapitres par exemple et en enregistrant ces chapitres...
cette decoupe serait manuelle bien sur, en donnant des temps de debut et de fin (a convertir en ms), et de là serait cree un nouveau fichier ne contenant que l'intrevalle donné sans perdre de qualite bien sur (une copie conforme avec uniquement un extrait)...

Au plaisir de vous lire ;)
Max

signaler à un administrateur
Commentaire de titicar le 10/03/2005 20:47:48

Max : A priori, ça parait pas évident sous VB. En tout cas, les différents code qu'on trouve ici son accés sur la lecture simple d'un fichier média. La notion de chapitres ou signets est facile à créer : les standarts sont de simple fichier texte, genre 'chf' dans BSPlayer. Il suffit de cliquer à un moment donné lors de la lecture pour que le programme mémorise le temps écoulé.

Pour ce qui est du découpage vidéo, je ne sais pas, si ce n'est qu'il y a des programmes à part (pas en VB) qui permettent cette fonction. Lesquels? Je m'en rappelle plus, faut que je recherche... De là à écrire ça en VB, ça parait pas évident...

Mais si quelqu'un a une solution, ou un début...

Sur ce, bon prog!

signaler à un administrateur
Commentaire de Warnings le 14/07/2005 15:45:39

J'ai modifié un peu le code pour faire un player qui lit de la musique en boucle en random.
Mais au bout d'un moment, le programme plante et je suis obligé de le relancer. Comme, j'utilise le player pour diffuser en streaming, c'est un peu embêtant :/

Il plante sur 'mciSendStringA "play " '. Est-ce que quelqu'un à une solution ?

Merci beaucoup pour votre aide ;)

signaler à un administrateur
Commentaire de titicar le 20/07/2005 19:04:27

Warnings : difficile de trouver ton erreur si tu ne mets pas ton code modifié. Cependant, ça ne devrait pas être bien compliqué : en effet, Proger a dejà tenu compte dans son programme de changement de fichier audio/vidéo lorsque le dernier en lecture arrive à sa fin. Proger à aussi donc tenu compte d'une liste de fichiers mémorisés.
A priori, tu n'as donc qu'a chercher dans le code source le moment où le programme cherche le prochain fichier à lire et de 'courcircuiter' cette procédure pour qu'elle ne cherche pas la prochain fichier de la liste, mais un autre fichier choisi 'aléatoirement'.

Conseil : lorque ton prog modifié plante sur 'mciSendStringA "play"', vérifie (au cas où) si ton fichier aléatoire existe bien, où si le numéro associé à la liste de fichier est bien compris entre 0 et File1.ListCount-1. Ceci  n'est qu'une suposition car ça dépend de la manière dont tu as modifié le programme.

Sur ce, bon prog!

signaler à un administrateur
Commentaire de Unreal le 17/12/2005 11:53:06

Salut
Bien ce prog, mais j'ai remarqué que, après avoir changé la fréquence du son, quand on reçoit une valeur position dans le son, il n'est plus bon... ça fait comme si le programme était "déréglé". Si vous trouvez un moyen de corriger ça, ça m'aiderait bcp :)
Sinon, merci pour ce petit bout de code  !

signaler à un administrateur
Commentaire de Nestor le 13/09/2006 19:28:05

Superbe ton code source.
ca mérite un 10

Par contre je voudrais savoir si il serait possible de faire une modif et je vois pas vraiment comment faire.
En fait je voudrais lire une vidéo qui se trouve sur un FTP et donc l'afficher sur ton code source sans passer par WMP.

Merci de ton aide.

signaler à un administrateur
Commentaire de MarcoHH le 28/05/2007 12:18:45

Bravo et merci pour ce code simple, efficace et bien commenté. 10    

signaler à un administrateur
Commentaire de Paulo670 le 21/06/2007 13:15:35

Bonjour; Trés bien ton code, je ne suis pas un pro de vb6 alors je vous demande un petit coup de main... comment faire pour lire une video en boucle sans acrocs(sans blancs ni de noirs).
Merci d'avance

signaler à un administrateur
Commentaire de titicar le 22/06/2007 02:17:08

Paulo670 : Je ne me rappelle plus si le code contient une fonction de lecture en boucle, mais c'est pas bien compliqué à écrire. Par contre, je ne vois pas ce que tu veux dire par 'sans acrocs (sans blancs, ni de noirs)'. As-tu déjà eu des problèmes?

signaler à un administrateur
Commentaire de Paulo670 le 22/06/2007 06:41:51

Merci TITICAR pour ton intervention.En effet à la fin de la video je relance la meme video et a ce moment il y a un court instant(quelques milli-secondes)un ecran noir.Si tu peux m'aider a palier ce disgracieux fonctionnement ce serait genial.

signaler à un administrateur
Commentaire de Proger le 22/06/2007 10:26:05

Tu détecte la fin de lecture du fichier avec un timer qui appelle mciSendStringA "status ... position notify" souvent,
Puis tu utilises mciSendStringA "seek ... to 0" ou mciSendStringA "play ... from 0".
L'écran noir devrai etre très bref, meme imperceptible.

signaler à un administrateur
Commentaire de Paulo670 le 23/06/2007 09:26:15

Merci Proger ca fonctionne grace a tes indication juste encore une petite question: comment mettre la video au second plan ? je voudrai faire un habillage de l'ecran video avec des imagebox et non des picturebox.Et encore merci a toi.

signaler à un administrateur
Commentaire de Proger le 23/06/2007 11:56:52

La commande qui colle la vidéo dans la picturebox est celle-ci :
mciSendStringA "open MPEGVideo! ... parent " & Picture1.hwnd ...
Il te faut donc un objet qui ai un hwnd. les Imagebox ne le fournissent pas, donc pour la vidéo, tu dois vraiment utiliser une picturebox. Va dans les propriété de la picturebox pour enlever les bordures et autres... comme ca elle sera "invisible" à l'instar d'une imagebox.

signaler à un administrateur
Commentaire de Paulo670 le 23/06/2007 15:15:25

Je me suis mal exprime,la video reste bien dans une picturebox et je voudrai placer des imagebox qui mordent sur la picturebox dans laquelle s'affiche la video. Les imagebox doivent restees au premier plan et la video au second plan.A tu une solution?

signaler à un administrateur
Commentaire de Proger le 23/06/2007 17:25:59

Ok. Alors c'est impossible avec juste les API de cet exemple... en effet, mcisendstring crée une surface primaire ddraw pour y mettre les pixels de la vidéo directement, c'est "plus bas niveau" que ce que VB peut faire, donc les objets vb resterons au second plan. Je n'ai pas de solutions à te proposer.

signaler à un administrateur
Commentaire de MarcoHH le 23/06/2007 18:41:50

Salut,

Et en mettant une form transparente avec un attribut "toujours dessus", au dessus, et suivant la position de ta form de base ? Bon, c'est un chouia tiré par les cheveux, mais si y a plus que ça et/ou si ça peut aider…

Proger: Et ben, y en a qui suivent bien les questions sur leurs codes, bientôt 5 ans de présence pour ce source ! Respects.

signaler à un administrateur
Commentaire de Paulo670 le 23/06/2007 19:23:32

Encore merci à Proger et toi Marcohh ton idée est bonne.Comme dit je ne suis un as de la programmation,comment faire pour obtenir un fond transparent sur form?

signaler à un administrateur
Commentaire de MarcoHH le 23/06/2007 19:52:27

Ben en tapant "transparent" dans le chercheur de VBfrance !
Moi je me sert de celui là, tres simple:

http://www.vbfrance.com/codes/AFFICHER-INFOS-SUR-BUREAU-MOYEN-FORM-TRANSPARENTE_36361.aspx

Mais bon, y en à des tonnes ...

Bye

signaler à un administrateur
Commentaire de Paulo670 le 24/06/2007 08:41:15

Maintenant tout est ok merci a tous.
Ciao

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et