Hey Leute
ich programmier grade einen Videoplayer und habe jetzt ein Problem:
wenn ich ein Video gestartet habe, dann kommt ein Slider als Fortschrittsbalken und dieser wird immer auf die aktuelle position im Video gesetzt, wenn ich aber jetzt auf eine Stelle auf den Slider klicke, dann wird das Video zwar auf die gewünschte Position gesetzt, aber es hackelt ein bisschen, das müsst ihr am besten sehen
Spoiler anzeigen
#AutoIt3Wrapper_UseX64=n
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <GuiListView.au3>
#include <WMP.au3>
OnAutoItExitRegister("_EXIT")
Global $wmp
Global $slider
Global $videogui
Global $videopfad = @UserProfileDir&"\Videos\"
Global $videos = _FileListToArrayEx($videopfad,"*.avi;*.wmv",1)
Global $Videosize = UBound($videos)
Dim $groessevideos[$Videosize]
Dim $Videolistitem[$Videosize]
$DLL=DllOpen("MediaInfo.dll")
$Handle=DllCall($DLL, "ptr", "MediaInfo_New")
If IsArray($videos) = 0 Then
MsgBox(0,"ERROR","In dem ausgewählten Verzeichnis befinden sich keine Video Dateien")
$pfad = FileSelectFolder("Video Dateien angeben","C:")
$videos = _FileListToArrayEx($videopfad,"*.avi;*.wmv",1)
EndIf
$Taschenrechner = GUICreate("Media Player",500,530,-1,-1,$WS_POPUP)
GUISetBkColor(0x000000)
$verschiebungscontrol=GUICtrlCreateLabel("",220,0,220,40,"",$GUI_WS_EX_PARENTDRAG)
$bClose = GUICtrlCreateButton("X",470,10,20,20)
$bMinimize = GUICtrlCreateButton("_",440,10,20,20)
$bMusic = GUICtrlCreateButton("Musicplayer",10,10,100,20)
$bRadio = GUICtrlCreateButton("Radio",120,10,100,20)
$bPfad = GUICtrlCreateButton("Video Ordner Auswählen",10,40,480,40)
$VideoList = GUICtrlCreateListView("VideoName |Größe",10,90,480,430)
GUISetState()
_getgroesse()
_listefuellen()
While 1
$msg = GUIGetMsg()
Switch $msg
Case $bClose
Exit
Case $bMinimize
GUISetState(@SW_MINIMIZE)
Case $bPfad
_videopfadaendern()
EndSwitch
For $j=1 To $Videosize-1
Switch $msg
Case $Videolistitem[$j]
_Filmspielen($j)
EndSwitch
Next
WEnd
Func _Filmspielen($Nummer)
$Open_Result=DllCall($DLL, "int", "MediaInfo_Open", "ptr", $Handle[0], "wstr", $videopfad&$videos[$Nummer])
DllCall($DLL, "wstr", "MediaInfo_Option", "ptr", 0, "wstr", "Inform", "wstr", "Video;%Width%")
$Inform=DllCall($DLL, "wstr", "MediaInfo_Inform", "ptr", $Handle[0], "int", 0)
$breite = $Inform[0]
DllCall($DLL, "wstr", "MediaInfo_Option", "ptr", 0, "wstr", "Inform", "wstr", "Video;%Height%")
$Inform=DllCall($DLL, "wstr", "MediaInfo_Inform", "ptr", $Handle[0], "int", 0)
$hoehe= $Inform[0]
GUISetState(@SW_HIDE,$Taschenrechner)
$videogui = GUICreate($videos[$Nummer],$breite,$hoehe+100)
Opt("GUIOnEventMode", 1)
GUISetOnEvent($GUI_EVENT_CLOSE, "quit")
$wmp = _wmpcreate(1, 0, 0, $breite, $hoehe)
_wmploadmedia($wmp,$videopfad&$videos[$Nummer])
$slider = GUICtrlCreateSlider(10,$hoehe+10,$breite-20,20)
GUICtrlSetOnEvent($slider,"setzePosition")
While _wmpvalue($wmp,"getduration") = 0
Sleep(1)
WEnd
GUICtrlSetLimit($slider,_wmpvalue($wmp,"getduration"),0)
GUISetState(@SW_SHOW,$videogui)
AdlibRegister("setzeBalken",100)
_wmpvalue( $wmp, "controls" )
EndFunc
Func setzeBalken()
GUICtrlSetData( $slider, _wmpvalue($wmp,"getposition"))
EndFunc
Func setzePosition()
_wmpvalue($wmp,"setposition",GUICtrlRead($slider))
EndFunc
Func quit()
AdlibUnRegister("setzeBalken")
GUIDelete($videogui)
GUISetState(@SW_SHOW,$Taschenrechner)
Opt("GUIOnEventMode", 0)
EndFunc
Func _listefuellen()
For $i=1 To $Videosize-1
$Videolistitem[$i] = GUICtrlCreateListViewItem($videos[$i]&"|"&$groessevideos[$i],$VideoList)
Next
EndFunc
Func _getgroesse()
For $i=1 To $Videosize-1
$groessevideos[$i] = FileGetSize($videopfad&$videos[$i])/1000000
$groessevideos[$i] = Round($groessevideos[$i],2)
$groessevideos[$i] = $groessevideos[$i]&"MB"
Next
EndFunc
Func _videopfadaendern()
_GUICtrlListView_DeleteAllItems($VideoList)
$pfadzwischen = FileSelectFolder("Musikordner auswählen","")
$pfad = $pfadzwischen&"\"
$videos = _FileListToArrayEx($videopfad,"*.avi;*.wmv",1)
$Videosize = UBound($videos)
_listefuellen()
EndFunc
Func _EXIT()
$Handle=DllCall($DLL, "none", "MediaInfo_Delete", "ptr", $Handle[0])
DllClose($dll)
EndFunc
Func _FileListToArrayEx($sPath, $sFilter = '*.*', $iFlag = 0, $sExclude = '')
If Not FileExists($sPath) Then Return SetError(1, 1, '')
If $sFilter = -1 Or $sFilter = Default Then $sFilter = '*.*'
If $iFlag = -1 Or $iFlag = Default Then $iFlag = 0
If $sExclude = -1 Or $sExclude = Default Then $sExclude = ''
Local $aBadChar[6] = ['\', '/', ':', '>', '<', '|']
For $iCC = 0 To 5
If StringInStr($sFilter, $aBadChar[$iCC]) Or _
StringInStr($sExclude, $aBadChar[$iCC]) Then Return SetError(2, 2, '')
Next
If StringStripWS($sFilter, = '' Then Return SetError(2, 2, '')
If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, '')
Local $oFSO = ObjCreate("Scripting.FileSystemObject"), $sTFolder
$sTFolder = $oFSO.GetSpecialFolder(2)
Local $hOutFile = @TempDir & $oFSO.GetTempName
If Not StringInStr($sFilter, ';') Then $sFilter &= ';'
Local $aSplit = StringSplit(StringStripWS($sFilter, 8), ';'), $sRead
For $iCC = 1 To $aSplit[0]
If StringStripWS($aSplit[$iCC], = '' Then ContinueLoop
If StringLeft($aSplit[$iCC], 1) = '.' And _
UBound(StringSplit($aSplit[$iCC], '.')) - 2 = 1 Then $aSplit[$iCC] = '*' & $aSplit[$iCC]
RunWait(@ComSpec & ' /c ' & 'dir "' & $sPath & '\' & $aSplit[$iCC] _
& '" /b /o-e /od > "' & $hOutFile & '"', '', @SW_HIDE)
$sRead &= FileRead($hOutFile)
If Not FileExists($hOutFile) Then Return SetError(4, 4, '')
FileDelete($hOutFile)
Next
If StringStripWS($sRead, = '' Then SetError(4, 4, '')
Local $aFSplit = StringSplit(StringTrimRight(StringStripCR($sRead), 1), @LF)
Local $sHold
For $iCC = 1 To $aFSplit[0]
If $sExclude And StringLeft($aFSplit[$iCC], _
StringLen(StringReplace($sExclude, '*', ''))) = StringReplace($sExclude, '*', '') Then ContinueLoop
Switch $iFlag
Case 0
$sHold &= $aFSplit[$iCC] & Chr(1)
Case 1
If StringInStr(FileGetAttrib($sPath & '\' & $aFSplit[$iCC]), 'd') Then ContinueLoop
$sHold &= $aFSplit[$iCC] & Chr(1)
Case 2
If Not StringInStr(FileGetAttrib($sPath & '\' & $aFSplit[$iCC]), 'd') Then ContinueLoop
$sHold &= $aFSplit[$iCC] & Chr(1)
EndSwitch
Next
If StringTrimRight($sHold, 1) Then Return StringSplit(StringTrimRight($sHold, 1), Chr(1))
Return SetError(4, 4, '')
EndFunc
Ich wollte fragen wie ich das verbessern kann.
ggf müsst ihr den Pfad in z.13 anpassen
Danke
DFPWare