PlayerProcedure
Code: Alles auswählen
Procedure MP3Player()
If OpenWindow(#Window_Player, 270, 233, 360, 225, #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered | #PB_Window_WindowCentered | #PB_Window_MaximizeGadget, "MP3-Player")
SetWindowCallback(@WindowCallback())
;SetWindowCallback(@WCB())
w = WindowWidth()
h = WindowHeight()
;{- Gadgets Erstellen
If CreateGadgetList(WindowID(#Window_Player))
ButtonGadget(#LOAD, 0, 180, 60, 25, "Laden")
BalloonTip(WindowID(), #LOAD, "Musikstück laden", "", #TOOLTIP_NO_ICON)
;ListViewGadget(#Playlist, 0, 0, 360, 165)
ListIconGadget(#Playlist, 5, 5, 290, 290, "MP3-Player 2.0 Beta", w-4,#PB_ListIcon_AlwaysShowSelection)
BalloonTip(WindowID(), #Playlist, "PlayList", "", #TOOLTIP_NO_ICON)
ButtonGadget(#PLAY, 60, 180, 60, 25, "Abspielen")
BalloonTip(WindowID(), #PLAY, "Musikstück abspielen", "", #TOOLTIP_NO_ICON)
ButtonGadget(#PAUSE, 120, 180, 60, 25, "Anhalten")
BalloonTip(WindowID(), #PAUSE, "Musikstück anhalten", "", #TOOLTIP_NO_ICON)
ButtonGadget(#RESUME, 180, 180, 60, 25, "Fortsetzen")
BalloonTip(WindowID(), #RESUME, "Musikstück fortsetzen", "", #TOOLTIP_NO_ICON)
ButtonGadget(#STOP, 240, 180, 60, 25, "Stop")
BalloonTip(WindowID(), #STOP, "Musikstück stoppen", "", #TOOLTIP_NO_ICON)
ButtonGadget(#QUIT, 300, 180, 60, 25, "Beenden")
BalloonTip(WindowID(), #QUIT, "Player Beenden", "", #TOOLTIP_NO_ICON)
TextGadget(#TIME_Total, 55, 165, 45, 15, "00:00:00")
BalloonTip(WindowID(), #TIME_Total, "Zeit Total", "", #TOOLTIP_NO_ICON)
TextGadget(#Slash, 45, 165, 10, 15, "/")
BalloonTip(WindowID(), #Slash, "Slash ? O.o :D ;)", "", #TOOLTIP_NO_ICON)
TextGadget(#TIME_Current, 0, 165, 45, 15, "00:00:00")
BalloonTip(WindowID(), #TIME_Current, "Verstrichene Zeit", "", #TOOLTIP_NO_ICON)
TrackBarGadget(#Volume, 264, 18, 100, 14, 0, 1000)
BalloonTip(WindowID(), #Volume, "Lautstärke", "", #TOOLTIP_NO_ICON)
ChangeListIconGadgetDisplay(#Playlist, 2)
EndIf
;}
;{- Gadgets Disablen
DisableGadget(#PLAY,0)
DisableGadget(#RESUME,1)
DisableGadget(#STOP,1)
DisableGadget(#PAUSE,1)
DisableGadget(#LOAD,0)
;}
;{- Menü Erstellen
If CreateMenu(0, WindowID())
MenuTitle("Datei")
MenuItem( 1, "&Laden...")
MenuBar()
MenuItem( 3, "Lade Playlist")
MenuItem( 2, "Speichere Playlist")
MenuBar()
MenuItem( 4, "&Beenden")
MenuTitle("Optionen")
MenuItem(7, "Einstellungen")
MenuTitle("?")
MenuItem(5, "Info")
MenuItem(6, "Credits")
EndIf
;}
SetAudioZVolume(#AUDIO_ID,1000)
SetGadgetState(#Volume,1000)
;{- Hauptschleife
Repeat
EventID.l = WindowEvent()
w = WindowWidth()
h = WindowHeight()
If w < 360 Or h < 225
ResizeWindow(360,225)
EndIf
;{- Window|ButtonResize
If EventID = #PB_Event_SizeWindow
ResizeGadget(#Playlist, 0, 0, WindowWidth(), WindowHeight() - 60)
For i=#LOAD To #QUIT
If IsGadget(i)
ResizeGadget(i, -1, WindowHeight() - 45, -1, -1)
EndIf
Next
For i=#TIME_Total To #TIME_Current
If IsGadget(i)
ResizeGadget(i, -1, WindowHeight() - 60, -1, -1)
EndIf
Next
EndIf
;}
;{- TastenVerarbeitung - CloseWindow
If EventID = #PB_Event_CloseWindow
Quit.l = 1
EndIf
If EventID = #WM_KEYDOWN
If EventwParam() = #VK_ESCAPE
Quit.l = 1
EndIf
EndIf
If GetAsyncKeyState_(179)=-32767 Or GetAsyncKeyState_(#VK_PAUSE)=-32767
If Presskey.l = 0
Presskey.l = 1
Else
Presskey.l = 0
EndIf
If Play = 1 And Presskey.l = 0
DisableGadget(#PLAY,1)
DisableGadget(#RESUME,0)
DisableGadget(#STOP,1)
DisableGadget(#PAUSE,1)
DisableGadget(#LOAD,0)
DisableMenuItem(1,0)
DisableMenuItem(2,0)
DisableMenuItem(3,0)
Play.l = 0
PauseAudioZ(#AUDIO_ID)
ElseIf Play = 0 And Presskey.l = 1
DisableGadget(#PLAY,1)
DisableGadget(#RESUME,1)
DisableGadget(#STOP,0)
DisableGadget(#PAUSE,0)
DisableGadget(#LOAD,1)
DisableMenuItem(1,1)
DisableMenuItem(2,1)
DisableMenuItem(3,1)
If Stop = 1
If IsAudioZPlaying(#AUDIO_ID)
MessageRequester("Fehler","Es wird zuzeit noch ein Lied gespielt.")
Else
OpenAudioZ(#AUDIO_ID,GetGadgetItemText(#Playlist,GetGadgetState(#Playlist),0))
PlayAudioZ(#AUDIO_ID)
Total = GetAudioZLength(#AUDIO_ID)
SetGadgetText(#TIME_Total, PositionAudioZTime(Total))
EndIf
Play.l = 1
Stop=0
Else
Play.l = 1
ResumeAudioZ(#AUDIO_ID)
EndIf
EndIf
EndIf
;}
;{- CPU-Last sparen
If IsAudioZPlaying(#AUDIO_ID) = #False
Delay(10)
EndIf
If IsAudioZPlaying(#AUDIO_ID)
SetGadgetText(#TIME_Current, PositionAudioZTime(Current))
Delay(10)
EndIf
;}
;{- Liedwechsel
Current = GetAudioZState(#AUDIO_ID)
If Current>=Total And Play = 1
StopAudioZ(#AUDIO_ID)
FreeAudioZ(#AUDIO_ID)
If CountGadgetItems(#Playlist)=GetGadgetState(#Playlist)+1
SetGadgetState(#Playlist,0)
Else
SetGadgetState(#Playlist,GetGadgetState(#Playlist)+1)
EndIf
OpenAudioZ(#AUDIO_ID,GetGadgetItemText(#Playlist,GetGadgetState(#Playlist),0))
PlayAudioZ(#AUDIO_ID)
Total.l = GetAudioZLength(#AUDIO_ID)
SetGadgetText(#TIME_Total, PositionAudioZTime(Total))
Play.l = 1
EndIf
If(Lied <> GetGadgetItemText(#Playlist,GetGadgetState(#Playlist),0))
Lied = GetGadgetItemText(#Playlist,GetGadgetState(#Playlist),0)
EndIf
If GetGadgetState(#Playlist) = -1
SetGadgetState(#Playlist,0)
EndIf
;}
;{- Gadgets Verarbeiten
If EventID = #PB_Event_Gadget
Select EventGadgetID()
Case #LOAD
;{ Requester öffnen und Items adden
File$ = OpenFileRequester("Lied auswählen", "c:\","MpegLayer3 (*.mp3)|*.mp3",0,#PB_Requester_MultiSelection)
While File$
ListID.l = CountGadgetItems(#Playlist)
If File$ <> ""
AddGadgetItem(#Playlist,ListID,File$,0)
EndIf
File$ = NextSelectedFileName()
Wend
;}
Case #QUIT
;{ Quit auf 1 setzen
Quit.l = 1
;}
Case #PLAY
;{ Gadgets Enablen und Disablen
DisableGadget(#PLAY,1)
DisableGadget(#RESUME,1)
DisableGadget(#STOP,0)
DisableGadget(#PAUSE,0)
DisableGadget(#LOAD,1)
DisableMenuItem(1,1)
DisableMenuItem(2,1)
DisableMenuItem(3,1)
;}
;{ Lied öffnen und Abspielen
If IsAudioZPlaying(#AUDIO_ID)
MessageRequester("Fehler","Es wird zuzeit noch ein Lied gespielt.")
Else
OpenAudioZ(#AUDIO_ID,GetGadgetItemText(#Playlist,GetGadgetState(#Playlist),0))
PlayAudioZ(#AUDIO_ID)
Total = GetAudioZLength(#AUDIO_ID)
SetGadgetText(#TIME_Total, PositionAudioZTime(Total))
EndIf
Play.l = 1
Presskey.l = 1
;}
Case #STOP
;{ Gadgets Enablen und Disablen
DisableGadget(#PLAY,0)
DisableGadget(#RESUME,1)
DisableGadget(#STOP,1)
DisableGadget(#PAUSE,1)
DisableGadget(#LOAD,0)
DisableMenuItem(1,0)
DisableMenuItem(2,0)
DisableMenuItem(3,0)
;}
;{ Stoppen und Ressourcen Freigeben
Play.l = 0
Stop = 1
Presskey.l = 0
StopAudioZ(#AUDIO_ID)
FreeAudioZ(#AUDIO_ID)
;}
Case #RESUME
;{ Gadgets Enablen und Disablen
DisableGadget(#PLAY,1)
DisableGadget(#RESUME,1)
DisableGadget(#STOP,0)
DisableGadget(#PAUSE,0)
DisableGadget(#LOAD,1)
DisableMenuItem(1,1)
DisableMenuItem(2,1)
DisableMenuItem(3,1)
;}
;{ Fortsetzen
Play.l = 1
Presskey.l = 1
ResumeAudioZ(#AUDIO_ID)
;}
Case #Volume
SetAudioZVolume(#AUDIO_ID,GetGadgetState(#Volume))
Case #PAUSE
;{ Gadgets Enablen und Disablen
DisableGadget(#PLAY,1)
DisableGadget(#RESUME,0)
DisableGadget(#STOP,1)
DisableGadget(#PAUSE,1)
DisableGadget(#LOAD,0)
DisableMenuItem(1,0)
DisableMenuItem(2,0)
DisableMenuItem(3,0)
;}
;{ Pausieren
Play.l = 0
PauseAudioZ(#AUDIO_ID)
Presskey.l = 0
;}
Case #Playlist
;{ Eintrag in Playlist schreiben
If #PB_EventType_LeftDoubleClick=EventType()
RemoveGadgetItem(#Playlist,GetGadgetState(#Playlist))
EndIf
;}
EndSelect
EndIf
;}
;{- Menü verarbeiten
If EventID = #PB_EventMenu
Select EventMenuID()
Case 1
File$ = OpenFileRequester("Lied auswählen", "c:\","MpegLayer3 (*.mp3)|*.mp3",0,#PB_Requester_MultiSelection)
While File$
ListID.l = CountGadgetItems(#Playlist)
If File$ <> ""
AddGadgetItem(#Playlist,ListID,File$,0)
EndIf
File$ = NextSelectedFileName()
Wend
Case 2
SavePlaylist()
Case 3
LoadPlaylist()
Case 4
Quit=1
Case 5
MessageRequester("Info", "Copyright by Blackskyliner",#PB_MessageRequester_Ok)
Case 6
string$ = ""
;string$ = "Webserver Based of Atomic Web Server by AlphaSND"+Chr(10)+Chr(13)
;string$ = string$+"(c) 2001 - Fantaisie Software"+Chr(10)+Chr(13)+Chr(10)+Chr(13)
string$ = string$+"MP3-Player by Blackskyliner"+Chr(10)+Chr(13)
string$ = string$+"Contact: blackskyliner@gmx.de"+Chr(10)+Chr(13)
string$ = string$+"(c) 2005 - BlackScripts"+Chr(10)+Chr(13)+Chr(10)+Chr(13)
string$ = string$+"Special Thanks to PureBasic Team for PureBasic"+Chr(10)+Chr(13)+Chr(10)+Chr(13)
string$ = string$+"Last but not least thanks to Jens Markwart for BetaTesting"+Chr(10)+Chr(13)
MessageRequester("Credits", string$,#PB_MessageRequester_Ok)
Case 7
Einstellungen.l = CreateThread(@Einstellungen(),#Window_Config)
EndSelect
EndIf
;}
Until Quit=1
;}
EndIf
;}
EndProcedure
Code: Alles auswählen
Procedure Einstellungen(win.l)
If OpenWindow(win, 400, 300, 375, 200, #PB_Window_WindowCentered, "Einstellungen")
;UseWindow(win)
;HideWindow(#Window_Player,1)
If CreateGadgetList(WindowID(win))
TextGadget(#RootDir_Label, 5, 5, 100, 20, "Musik - Verzeichniss:")
StringGadget(#RootDir, 105, 5, 230, 20, "", #PB_String_ReadOnly)
ButtonGadget(#RootDir_Select, 335, 5, 40, 20, "Select")
OptionGadget(#Endless_Yes, 110, 40, 40, 15, "Ja")
OptionGadget(#Endless_No, 110, 55, 40, 15, "Nein")
TextGadget(#EndlessPlay_Label, 30, 45, 75, 20, "Endlos-Schleife:")
StringGadget(#WEB_PW, 80, 175, 80, 20, "", #PB_String_Password)
TextGadget(#Web_PW_Label, 5, 175, 75, 20, "Passwort-Web: ")
TextGadget(#WEB_Port_Label, 20, 155, 60, 20, "Web - Port: ")
StringGadget(#WEB_PORT, 80, 155, 80, 20, "")
Frame3DGadget(#WEB_3DFrame, 0, 140, 170, 60, "Webinterface")
TextGadget(#WEB_CommingSoon, 40, 165, 85, 15, "Comming Soon...")
ButtonGadget(#Option_OK, 335, 180, 40, 20, "OK")
HideGadget(#WEB_PW,1)
HideGadget(#WEB_Port_Label,1)
HideGadget(#Web_PW_Label,1)
HideGadget(#WEB_PORT,1)
EndIf
Repeat
If WindowEvent() = #PB_Event_Gadget
Debug EventGadgetID()
Select EventGadgetID()
Case #Option_OK
;HideWindow(#Window_Player,0)
UseWindow(#Window_Player)
;KillThread(Einstellungen)
CloseWindow(win)
EndSelect
Else
Sleep_(1)
EndIf
Until OptionQuit=1
EndIf
EndProcedure
Code: Alles auswählen
Procedure WindowCallback(Window, message, wParam, lParam)
Window = #Window_Player
Result = #PB_ProcessPureBasicEvents
If message = #WM_NOTIFY
*nmhdr.NMHDR = lParam
If *nmhdr\hwndFrom = GadgetID(#Playlist); Or *nmhdr\hwndFrom = GadgetID(#ListIcon2)
If *nmhdr\code = #LVN_BEGINDRAG
;If *nmhdr\hwndFrom = GadgetID(#ListIcon1)
SourceGadget = #Playlist
; Else
; SourceGadget = #ListIcon2
; EndIf
*nmv.NMLISTVIEW = lParam
SourceItem = *nmv\iItem
DragImageList = SendMessage_(GadgetID(SourceGadget), #LVM_CREATEDRAGIMAGE, SourceItem, @UpperLeft.POINT)
If DragImageList
If ImageList_BeginDrag_(DragImageList , 0, 0, 0)
ImageList_DragShowNolock_(#True)
SetCapture_(GetParent_(GadgetID(SourceGadget)))
ShowCursor_(#False)
IsDraging = #True
EndIf
EndIf
EndIf
EndIf
ElseIf message = #WM_MOUSEMOVE And IsDraging
ImageList_DragMove_(WindowMouseX()+WindowX(), WindowMouseY()+WindowY())
ImageList_DragShowNolock_(#False)
MouseX = lParam & $FFFF
MouseY = lParam >> 16
If TargetGadget <> -1
pitem.LV_ITEM
pitem\Mask = #LVIF_STATE
pitem\iItem = TargetItem
pitem\State = 0
pitem\stateMask = #LVIS_DROPHILITED
SendMessage_(GadgetID(TargetGadget), #LVM_SETITEM, 0, @pitem)
RedrawWindow_(GadgetID(TargetGadget), 0, 0, #RDW_UPDATENOW)
EndIf
TargetGadgetID = ChildWindowFromPoint_(Window, MouseX, MouseY)
If TargetGadgetID = GadgetID(#Playlist)
TargetGadget = #Playlist
;ElseIf TargetGadgetID = GadgetID(#ListIcon2)
; TargetGadget = #ListIcon2
Else
TargetGadget = -1
EndIf
If TargetGadget <> -1
hittestinfo.LV_HITTESTINFO
hittestinfo\pt\x = MouseX - GadgetX(TargetGadget)
hittestinfo\pt\y = MouseY - GadgetY(TargetGadget)
TargetItem = SendMessage_(GadgetID(TargetGadget), #LVM_HITTEST, 0, @hittestinfo)
pitem.LV_ITEM
pitem\Mask = #LVIF_STATE
pitem\iItem = TargetItem
pitem\State = #LVIS_DROPHILITED
pitem\stateMask = #LVIS_DROPHILITED
SendMessage_(GadgetID(TargetGadget), #LVM_SETITEM, 0, @pitem)
RedrawWindow_(GadgetID(TargetGadget), 0, 0, #RDW_UPDATENOW) ; again a redraw
EndIf
ImageList_DragShowNolock_(#True)
ElseIf message = #WM_LBUTTONUP And IsDraging
ReleaseCapture_()
ImageList_EndDrag_()
ImageList_Destroy_(DragImageList)
ShowCursor_(#True)
IsDraging = #False
If TargetGadget <> -1
pitem.LV_ITEM
pitem\Mask = #LVIF_STATE
pitem\iItem = TargetItem
pitem\State = 0
pitem\stateMask = #LVIS_DROPHILITED
SendMessage_(GadgetID(TargetGadget), #LVM_SETITEM, 0, @pitem)
RedrawWindow_(GadgetID(TargetGadget), 0, 0, #RDW_UPDATENOW)
EndIf
If TargetGadget <> -1
ItemText$ = GetGadgetItemText(SourceGadget, SourceItem, 0)
RemoveGadgetItem(SourceGadget, SourceItem)
AddGadgetItem(TargetGadget, TargetItem, ItemText$)
EndIf
EndIf
ProcedureReturn Result
EndProcedure