Verarbeitung zweier Fenster klappt nicht..
Verfasst: 28.08.2005 22:45
Hallo ich habe 2 Fenster einmal den Player und einmal die einstellungen. ich starte das einstellungen fenster über createthread(). Wenn ich das Einstellungs Fenster wieder zu mache kann ich aber meine Buttons nichtmehr nutzen bzw die sind nimma initialisiert wie mir der Debugger an der Resizer stelle sagt....:
PlayerProcedure
EinstellungsProcedure
Aufrufen tue ich das einfach nur mit MP3-Player(), der aufruf der eintellungen sin im Player definiert... ist das der fehler?? wenn ja weiß ich aber nicth wie ichs anders machen soll... Hier noch die WindowCallback Funktion die ich auch noch nutze falls da vellei ein problem ist...:
die ist zum verschieben der einträge in der ImageList
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