Seite 1 von 1

Verarbeitung zweier Fenster klappt nicht..

Verfasst: 28.08.2005 22:45
von Blackskyliner
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

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

EinstellungsProcedure

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 
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...:

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
die ist zum verschieben der einträge in der ImageList

Verfasst: 28.08.2005 23:37
von Blackskyliner
Habs raus beim Quit von fenster 2 einfach:

Code: Alles auswählen

UseGadgetList(WindowID(#Window_Player)) 
UseWindow(#Window_Player) 
CloseWindow(#Window_Config) 
EnableWindow_(WindowID(#Window_Player), #True) 
ActivateWindow()