Autor | Thema: Avi-Videos im Hauptfenster | | Datum:07.02.02 15:17 
| |
Wie ist es möglich das Avi-Video im Hauptfenster darzustellen?
Mit den mci befehl wie es hier schon mehrfach beschrieben wurde wird das video in einem eigenes Fenster Wiedergegeben.
|
| | Datum:10.02.02 05:23 
| |
Hallo rico!
Hier ein Beispiel-Quellcode als Antwort auf Deine Frage:
Cls
Declare A$,B$
WindowTitle "AVI-Video"
Let A$=@LOADFILE$("FILM-DATEI","*.AVI")
While @NEQ$(A$,"")
Let A$=@ADD$(@ADD$("OPEN ",A$)," TYPE AVIVIDEO ALIAS FILM")
Let B$=@MCISend$(A$)
Case %MCIError: Print "Fehler: ";B$
Let B$=@MCISend$("put FILM destination at 10 10 200 100") 'Hier die Position u. Größe
Let A$=Add$("WINDOW FILM handle ",Str$(%HWnd))
Let B$=@MCISend$(A$)
Let B$=@MCISend$("PLAY FILM")
Waitinput
Let B$=@MCISend$("CLOSE FILM")
Let A$=@LOADFILE$("FILM-DATEI","*.AVI")
Wend
End
Bei Mpeg-Videos geht das scheinbar nicht ganz so einfach. (ich hatte da meine Schwierigkeiten bei der Positionierung mit 'Put') Eine Lösung habe ich dennoch. (ein Tutorial von 'sonic' hat's mir gezeigt :-)
Hier der zugeschnittene Beispiel-Quellcode:
PROC MMFehler
Parameters Fehler$
@MessageBox(Fehler$,"MCI Fehler:",16)
@MCISend$("CLOSE CLIP")
END
ENDPROC
windowtitle "mpg-wideo"
Window 0,0-%MaxX,%MaxY
Declare B$,F$,I%
LET f$="teste.mpg" 'Ort/Name des mpeg-videos
LET f$=@ADD$(@ADD$("OPEN ",f$)," TYPE MPEGVIDEO ALIAS CLIP style popup parent ")
LET f$=@ADD$(f$,@STR$(%hwnd))
LET B$=@MCISend$(f$)
Case %MCIError:MMFehler B$
Let B$=@MCISend$("PLAY CLIP NOTIFY")
Case %MCIError:MMFehler B$
Let B$=@MCISend$("pause CLIP")
Case %MCIError:MMFehler B$
Let i%=@GetActiveWindow()
SetWindowPos i%=50,50-800,600;0 'Positon/Größe des Films
Let b$=@mcisend$("resume CLIP")
Case %MCIError:MMFehler B$
While @Equ$(@MCISend$("status CLIP mode"),"playing")
Endwhile
B$=@MCISend$("CLOSE CLIP")
Case %MCIError:MMFehler B$
waitinput
END
Hat aber den Nachteil, daß im Gegensatz zum Avi-Beispiel der Video immer noch im eigenen Fenster abgespielt wird. Eben nur ohne Rahmen und mit frei bestimmbarer Position und Größe. Es sieht dann aber so aus, als wenn es Teil Deines Programms ist. (ist also nicht so günstig, wenn das Hauptfenster verschiebar ist.. ;-)
Ich ziehe die Mpeg-Lösung aber vor, wegen der erschlagenen Dateigröße von Avi-Videos. (hat ja nicht jeder DivX installiert der meine Programme bekommt. Aber da gibt es sicherlich auch Lösungen..)
Wenn es aber nur darum geht eine kleine Avi-Animation darzustellen, ist die Größe natürlich nicht ganz so gravierend.
Nun denn, ich hoffe es hilft Dir.
Mischa
|
| | Datum:10.02.02 11:59 
(rgh-soft@t-online.de) | |
Ein kleiner Tip noch. Damit es auch mit langen Dateinamen klappt, sollte dieser in Anführungszeichen gesetzt werden. Also:
<...>
A$ = LoadFile$(...
A$ = Chr$(34) + A$ + Chr$(34)
<...>
Gruß
Roland
|
| | Datum:11.02.02 13:58 
| |
Die bisherigen tips haben mir schon etwas geholfen, auch wenn man den tip von Roland anwendet habe ich auch festgestelt das man nicht alle avi-dateien abpielen.
gibt es eine beschränkung auf die länge der Avi-dateien oder gibt es zeichen die nicht in dem Dateinamen enthalten sein dürfen?
|
| | Datum:14.02.02 04:00 
| |
Da scheint es ein Problem mit den "Ersatzzeichen" zu geben,
die da wären: \t \a \n \z.
Bei direkten Datei-Operationen kann man das Problem beheben, indem man den String in Anführungszeichen setzt, wie Roland ja schon erwähnte.
Ich denke aber, daß bei Videos ja nur ein "String" an die MCI-Schnittstelle gesendet wird und die eigentliche Datei-Operation nicht von Profan aus läuft.
Zumindest hatte ich da auch meine Probleme.
Behoben habe ich es mit einer kleinen Funktion.
Beispiel-Quellcode:
DEF @Datei(1) Add$(Add$(Chr$(34),@$(1)),Chr$(34))
DEF @kompatibel(1) Left$(@Translate$(@Translate$(@Translate$(@Translate$(@$(1),\
"\t","\\t"),"\a","\\a"),"\n","\\n"),"\z","\\z"),\
Sub(Len(@Translate$(@Translate$(@Translate$(@Translate$(@$(1),\
"\t","\\t"),"\a","\\a"),"\n","\\n"),"\z","\\z")),\
@IF(Equ$(Right$(@$(1),1),"\z"),0,2)))
Declare A$
cls
A$="c:\test\arbeit\namen\zahlen.mpg" 'ein Beispiel mit allen "Ersatzzeichen"
Print A$ 'So gehts nicht
A$=Datei(A$) 'diese Funktion setzt den String in "."
Print A$ '...geht aber trotzdem nicht!
A$=kompatibel(A$) 'diese Funktion ersetzt alle Ersatzzeichen mit \\*
Print A$ 'jetzt geht es!!
waitinput
End
Diese Lösung funktioniert zwar, aber möglicherweise gibt es ja noch eine etwas weniger umständliche Methode!?
Mischa
|
| | Datum: 14.02.02 04:16 
| |
Nachtrag:
Wenn man bei den Pfadangaben von vornherein statt einem Backslash zwei verwendet, also C:\\test\\zombie.avi sollte es auch keine Schwierigkeiten geben! :-)
(siehe Profan-Hilfe)
|
|
|