Deutsch
Forum

Ende einer AVI-Datei abfangen

 
Der untenstehende Code läuft, aber ich möchte nach Beenden des Abspielens den "Play"-Button aktivieren. Leider bekomme ich das ohne Waitinput nicht hin. Es soll aber kein Waitinput vorkommen ?
KompilierenMarkierenSeparieren
PROC ABSPIEL_BEFEHL

    mcisend$("CLOSE MOVIE")
    PARAMETERS avi_datei$
    Enablewindow play%,0
    Enablewindow stop%,1
    mcisend$("OPEN "+shortname$(avi_datei$)+" TYPE AVIVIDEO ALIAS MOVIE")
    mcisend$("WINDOW MOVIE HANDLE "+str$(win&))
    mcisend$("PUT MOVIE DESTINATION AT 8 5 260 210")
    mcisend$("PLAY MOVIE")
    Nach Beenden der AVI-Datei soll jetzt hier der Button
    play% aktiv und der Button stop% deaktiv geschaltet werden.
    Klappt aber nicht :(   - da PLAY MOVIE nicht wartet - WaitInput will ich nicht
    EnableWindow stop%,0
    EnableWindow play%,1

ENDPROC

########################################################
declare avi_datei$,win&
DECLARE play_EE%,play%,stop%,back%,tipp%
play_EE%=0
WINDOW (%MaxX+10),0-0,0
WindowStyle 84
win&=CREATE("WINDOW",%HWND,"",50,50,280,250)
play%=CREATE("BUTTON",win&,">",5,220,20,20)
tipp%=CREATE("TOOLTIP",win&,play%,"Abspielen wiederholen...")
stop%=CREATE("BUTTON",win&,"II",50,220,20,20)
tipp%=CREATE("TOOLTIP",win&,stop%,"Abspielen stoppen...")
back%=CREATE("BUTTON",win&,"ESC Abbrechen",148,220,120,20)
tipp%=CREATE("TOOLTIP",win&,back%,"Anzeige schließen")
--------------------------------------------------
avi_datei$=loadfile$("AVI - Datei auswählen...","*.avi")
avi_datei$="geburtstag.avi" Testdatei auf meiner Festplatte
--------------------------------------------------
ABSPIEL_BEFEHL avi_datei$

WHILENOT play_EE%

    WAITINPUT

    IF CLICKED(stop%)

        mcisend$("CLOSE MOVIE")
        EnableWindow stop%,0
        EnableWindow play%,1

    ENDIF

    CASE CLICKED(play%):ABSPIEL_BEFEHL avi_datei$

    IF IsKey(27) | CLICKED(back%)

        mcisend$("CLOSE MOVIE")
        DesTroyWindow(win&)
        play_EE%=1
        END vorläufiges Ende - normal Rücksprung zum Hauptfenster

    ENDIF

ENDWHILE

END

Wer hat einen Tipp für mich ? - Danke im Voraus
 
04.08.2008  
 




Thomas
Freier
@Horst, warum willst du ihn deaktivieren? Überlasse dem Betrachter, ob er den Film noch einmal startet.
In der Ablage fand ich noch:
KompilierenMarkierenSeparieren
Def w32_CreateMenu(0) !"USER32","CreateMenu"
Def w32_AppendMenu(4) !"USER32","AppendMenuA"
Def SetMenu(2) !"USER32","SetMenu"
Def DrawMenuBar(1) !"USER32","DrawMenuBar"
Def MenuItemEx(1) If(Equ(%umessage,$0111),Equ(LoWord(&uwparam),&(1)),0)
Def DestroyMenu(1) !"USER32","DestroyMenu"
Def @Movewindow(6) !"USER32", "MoveWindow"
Declare hmenu&,hmenu2&,txt$,format%
hmenu&=w32_CreateMenu()
txt$="Beenden"
w32_AppendMenu(hmenu&,0,3000,Addr(txt$))
txt$="Start"
w32_AppendMenu(hmenu&,16,3001,Addr(txt$))
txt$="Stop"
w32_AppendMenu(hmenu&,16,3002,Addr(txt$))
txt$="100%"
w32_AppendMenu(hmenu&,16,3003,Addr(txt$))
txt$="200%"
w32_AppendMenu(hmenu&,16,3004,Addr(txt$))
txt$="Neu"
w32_AppendMenu(hmenu&,16,3005,Addr(txt$))
declare Label_m&, dat$, Funct%,Stop%
WINDOWSTYLE 512
WINDOW 1,1-600,400
SETTRUECOLOR 1
dat$ = ShortName$(LoadFile$("Film laden...","AVI-Film (*.avi)|*.avi"))
case (dat$ = "") : end
Label_m&=create("Window",%hwnd,"",100,50, 340,304)
SetMenu(Label_m&,hmenu&)
DrawMenuBar(Label_m&)
UserMessages $0111
MCISend$("open " + dat$ + " type avivideo alias film")
MCISend$("window film handle " + str$(Label_m&))
MCISend$("put film destination at 8 5 320 240")
MCISend$("play film")
Format%=0
Stop%=0
SetFocus(%hWnd)
EnableMenu 3001, 1

While 1

    WaitInput

    If MenuItemEx(3000)

        Break

    ElseIf MenuItemEx(3001)

        case Format%=0: @Movewindow(Label_m&,100,50, 340,304,1)
        case Format%=1: @Movewindow(Label_m&,100,50, 660,544,1)
        MCISend$("close film")
        MCISend$("open " + dat$ + " type avivideo alias film")
        MCISend$("window film handle " + str$(Label_m&))
        case Format%=0: MCISend$("put film destination at 8 5 320 240")
        case Format%=1: MCISend$("put film destination at 8 5 640 480")
        MCISend$("play film")

    ElseIf MenuItemEx(3002)

        IF stop%=0

            MCISend$("Stop film")
            stop%=1

        Else

            MCISend$("play film")
            stop%=0

        EndIf

    ElseIf MenuItemEx(3003)

        Format%=0
        @Movewindow(Label_m&,100,50, 340,304,1)
        MCISend$("window film handle " + str$(Label_m&))
        MCISend$("put film destination at 8 5 320 240")
        MCISend$("play film")

    ElseIf MenuItemEx(3004)

        Format%=1
        @Movewindow(Label_m&,100,50, 660,544,1)
        MCISend$("window film handle " + str$(Label_m&))
        MCISend$("put film destination at 8 5 640 480")
        MCISend$("play film")

    ElseIf MenuItemEx(3005)

        Stop%=0
        MCISend$("close film")
        dat$ = ShortName$(LoadFile$("Film laden...","AVI-Film (*.avi)|*.avi"))
        case (dat$ = "") : end
        MCISend$("open " + dat$ + " type avivideo alias film")
        MCISend$("window film handle " + str$(Label_m&))
        case Format%=0: MCISend$("put film destination at 8 5 320 240")
        case Format%=1: MCISend$("put film destination at 8 5 640 480")
        MCISend$("play film")

    EndIf

Wend

DestroyMenu(hmenu&)
DestroyWindow(Label_m&)
MCISend$("close film")
end
 
Gruß Thomas
Windows XP SP2, XProfan X2
04.08.2008  
 




Dieter
Zornow
Hallo Horst

so gehts
KompilierenMarkierenSeparieren
PROC ABSPIEL_BEFEHL

    mcisend$("CLOSE MOVIE")
    PARAMETERS avi_datei$
    Declare stop$
    Enablewindow play%,0
    Enablewindow stop%,1
    mcisend$("OPEN "+shortname$(avi_datei$)+" TYPE AVIVIDEO ALIAS MOVIE")
    mcisend$("WINDOW MOVIE HANDLE "+str$(win&))
    mcisend$("PUT MOVIE DESTINATION AT 8 5 260 210")
    mcisend$("PLAY MOVIE")

    whilenot stop$ = "stopped"

        stop$=MCISend$("STATUS MOVIE MODE")zeigt den Zustand (stopped, playing, paused, not ready)

    endwhile

    enablewindow play%,1
    enablewindow stop%,0
    Nach Beenden der AVI-Datei soll jetzt hier der Button
    play% aktiv und der Button stop% deaktiv geschaltet werden.
    Klappt aber nicht :(   - da PLAY MOVIE nicht wartet - WaitInput will ich nicht
    EnableWindow stop%,0
    EnableWindow play%,1

ENDPROC

########################################################
declare avi_datei$,win&
DECLARE play_EE%,play%,stop%,back%,tipp%
play_EE%=0
WINDOW (%MaxX+10),0-0,0
WindowStyle 84
win&=CREATE("WINDOW",%HWND,"",50,50,280,250)
play%=CREATE("BUTTON",win&,">",5,220,20,20)
tipp%=CREATE("TOOLTIP",win&,play%,"Abspielen wiederholen...")
stop%=CREATE("BUTTON",win&,"II",50,220,20,20)
tipp%=CREATE("TOOLTIP",win&,stop%,"Abspielen stoppen...")
back%=CREATE("BUTTON",win&,"ESC Abbrechen",148,220,120,20)
tipp%=CREATE("TOOLTIP",win&,back%,"Anzeige schließen")
--------------------------------------------------
avi_datei$=loadfile$("AVI - Datei auswählen...","*.avi")
avi_datei$="geburtstag.avi" Testdatei auf meiner Festplatte
--------------------------------------------------
ABSPIEL_BEFEHL avi_datei$

WHILENOT play_EE%

    IF Getfocus(stop%)

        mcisend$("CLOSE MOVIE")
        EnableWindow stop%,0
        EnableWindow play%,1

    ENDIF

    CASE getfocus(play%):ABSPIEL_BEFEHL avi_datei$

    IF IsKey(27) | getfocus(back%)

        mcisend$("CLOSE MOVIE")
        DesTroyWindow(win&)
        play_EE%=1
        ENDvorläufiges Ende - normal Rücksprung zum Hauptfenster

    ENDIF

ENDWHILE

END

Du kannst einfach den Status abfragen, ohne Waitinput verzichte auf Clicked, das geht schief.

Gruß

Dieter
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
04.08.2008  
 



@Thomas
Ich will den "play%"-Button nicht deaktivieren sondern nach Abspielen der AVI-Datei aktivieren - der Button wird ja beim Start des Filmes grau - EnableWindow play%,0 - Ich möchte jetzt, wenn die AVI-Datei am Ende ist, dass der Button wieder aktiv dargestellt wird. - EnableWindow play%,1 - Schreib ich das in die Procedur, wird sofort aktiviert. Der MCIPLAY-Befehl macht keine Pause sondern "rutscht" sofort durch. Es ist ja nicht besonders wichtig, aber ich finde es halt optisch besser, wenn der Button erst nach Spielende aktiv wird. - Dein Vorschlag ist zwar sehr schön aber für meine Zwecke brauche ich den Windowstil 84 und der ist mit der Menuzeile in Deinem Code nicht möglich.
 
04.08.2008  
 




Jac
de
Lad
@Thomas: Lieber noch ein "Sleep x" in die Schleife rein, sonst rennt sich das Prog kaputt.
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
04.08.2008  
 




E.T.
Hallo Horst,

hier mal schnell ein Beispiel, wie ich das gelöst habe (ist zwar auf die schnelle nur für MP3, aber das Prinzip sollte funzen):
KompilierenMarkierenSeparieren
,

Proc EB_Play_MP3

    declare Play_Ende%, 1$, 3$, 4$, 5$
    Clear Play_Ende%

    WhileNot Play_Ende%

        @MCISend$("OPEN "+@Chr$(34)+HelpStr$+@Chr$(34)+" TYPE MPEGVIDEO ALIAS MP3_play")
        @MCISend$("set MP3_play time format ms")
        @MCISend$("set MP3_play video off")
        SetFocus(%HWnd)
        SetText Sound_PlayBtn&, "WIEDERGABE
        S T O P P E N"
        EnableWindow Titel_Box&,0
        EnableWindow Sound_Btn1&,0
        EnableWindow Sound_Btn2&,0
        EnableWindow Sound_ErBtn& ,0
        @MCISend$("PLAY MP3_play")
        4$ = MP3_length()
        1$ = PosMP3()
        3$ = MP3_position()
        5$ = @str$( @Val(4$) - @Val(3$) )

        WhileNot @GetFocus(Sound_PlayBtn&) OR (@Val(5$)=0)

            sleep 100
            1$ = PosMP3()
            3$ = MP3_position()
            5$ = @str$( @Val(4$) - @Val(3$) )
            SetText Play_Time1&, 1$
            SetText Play_Time2&, 3$
            SetText Play_Ret1&, PosRet(5$)
            SetText Play_Ret2&, 5$

        EndWhile

        @MCISend$("STOP MP3_play")
        @MCISend$("CLOSE MP3_play")
        SetText Sound_PlayBtn&, "Sound-Datei
        abspielen"
        EnableWindow Titel_Box&,1
        EnableWindow Sound_Btn1&,1
        EnableWindow Sound_Btn2&,1
        EnableWindow Sound_ErBtn& ,1
        Play_Ende% = 1

    EndWhile

    EB_Sound_Laden

EndProc


Hab das schnell mal aus einem meiner Progs rausgenommen:
Ich benenne zwar meinen Start-Button wärend des Abspielens in Stopp-Button um, habe aber auch ein paar andere Sachen deaktiviert und dann wieder aktiviert.
Das funktioniert bei mir so eigentlich reibungslos.

Ich frage einfach in der mittleren WhileNot / Endwhile - Schleife den Button zum stoppen und die Rest-Spielzeit ab.

Hoffe, das hilft erstmal ein wenig weiter...

Mario
 
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
04.08.2008  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

764 Betrachtungen

Unbenanntvor 0 min.
H.Hackl20.11.2013

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie