Forum | | | | | 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 |
| | | | |
| | Thomas Freier | @Horst, warum willst du ihn deaktivieren? Überlasse dem Betrachter, ob er den Film noch einmal startet. In der Ablage fand ich noch: KompilierenMarkierenSeparierenDef 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
|
| | | | |
| | 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. |
| | | | |
| | 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 ▲ |
| |
|
AntwortenThemenoptionen | 777 Betrachtungen |
ThemeninformationenDieses Thema hat 5 Teilnehmer: |