Panel Personnalisé avec splitter

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Panel Personnalisé avec splitter

Message par Shadow »

Salut, voilà si ça peut servir à d'autres 8)

Code : Tout sélectionner

; Code créer par Mr Dieppedalle David le 06/03/2017.

;{ Enumeration

Enumeration
  
  #Fenetre
  #ContainerFenetre
  
  #BoutonAfficherTree1
  #BoutonAfficherTree2
  
  #SplitterFenetre
  
  #Tree1
  #Tree2
  
  #TexteInfoEditeur
  #Editeur
  
EndEnumeration

;}

; Prcocedure permettant d'activer ou de desactiver le theme XP.
Procedure SetActiveXP(Gadget.l, Value.b)
  If Value=#True
    SetWindowTheme_(GadgetID(Gadget), @" ", @" ")
  Else
    SetWindowTheme_(GadgetID(Gadget), 0, 0)
  EndIf
EndProcedure

; Procedure pour savoir si la souris est sur un gadget.
Procedure.l IsMouseOverGadget(Gadget) 
  GetWindowRect_(GadgetID(Gadget),GadgetRect.RECT) 
  GetCursorPos_(mouse.POINT) 
  If mouse\x>=GadgetRect\Left And mouse\x<=GadgetRect\right And mouse\y>=GadgetRect\Top And mouse\y<=GadgetRect\bottom 
    ProcedureReturn #True 
  Else 
    ProcedureReturn #False 
  EndIf 
EndProcedure 

EnableExplicit

Procedure OuvrirFenetre(TitreEditeur$, TexteInfoEditeur$ = "")
  
  Define OngletTreeAfficher.i = 1
  Define SliderCapturer.b = #False
  
  OpenWindow(#Fenetre, 0, 0, 600, 400, TitreEditeur$, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
  WindowBounds(#Fenetre, 500, 400, #PB_Ignore, #PB_Ignore)
  
  ContainerGadget(#ContainerFenetre, 0, 0, 600, 400, #PB_Container_Flat)
  
  ButtonGadget(#BoutonAfficherTree1, 2, 2, 60, 22, "Onglet 1")
  ButtonGadget(#BoutonAfficherTree2, 61, 2, 65, 22, "Onglet 2")
  
  SetWindowLong_(GadgetID(#BoutonAfficherTree1), #GWL_STYLE, #BS_FLAT | GetWindowLong_(GadgetID(#BoutonAfficherTree1), #GWL_STYLE))
  SetWindowLong_(GadgetID(#BoutonAfficherTree2), #GWL_STYLE, #BS_FLAT | GetWindowLong_(GadgetID(#BoutonAfficherTree2), #GWL_STYLE))
  
  SetActiveXP(#BoutonAfficherTree1, #True)
  SetActiveXP(#BoutonAfficherTree2, #True)
  
  TreeGadget(#Tree1, 0, 0, 0, 0, #PB_Tree_AlwaysShowSelection)
  
  AddGadgetItem(#Tree1, -1, "Onglet 1 Element n°1")
  AddGadgetItem(#Tree1, -1, "Onglet 1 Element n°2")
  AddGadgetItem(#Tree1, -1, "Onglet 1 Element n°3")
  
  TreeGadget(#Tree2, 0, 0, 0, 0, #PB_Tree_AlwaysShowSelection)
  
  AddGadgetItem(#Tree2, -1, "Onglet 2 Element n°1")
  AddGadgetItem(#Tree2, -1, "Onglet 2 Element n°2")
  AddGadgetItem(#Tree2, -1, "Onglet 2 Element n°3")
  
  HideGadget(#Tree2, #True)
  
  EditorGadget(#Editeur, 0, 0, 0, 0)
  SplitterGadget(#SplitterFenetre, 2, 23, 594, 347, #Tree1, #Editeur, #PB_Splitter_Vertical | #PB_Splitter_Separator)
  
  TextGadget(#TexteInfoEditeur, 0, 0, 0, 15, TexteInfoEditeur$, #PB_Text_Center)
  
  CloseGadgetList()
  
  SetGadgetAttribute(#SplitterFenetre, #PB_Splitter_FirstMinimumSize, 200)
  SetGadgetAttribute(#SplitterFenetre, #PB_Splitter_SecondMinimumSize, WindowWidth(#Fenetre) - 300)
  
  SetGadgetState(#SplitterFenetre, 0)
  
  ResizeGadget(#TexteInfoEditeur, GadgetX(#Tree1) + GadgetWidth(#Tree1) + 10, 5, GadgetWidth(#Editeur), 15)
  
  Repeat
    
    Select WaitWindowEvent(1)
        
      Case #PB_Event_SizeWindow
        
        SetGadgetAttribute(#SplitterFenetre, #PB_Splitter_SecondMinimumSize, WindowWidth(#Fenetre) - 300)
        
        ResizeGadget(#ContainerFenetre, 0, 0, WindowWidth(#Fenetre), WindowHeight(#Fenetre))
        ResizeGadget(#SplitterFenetre, 2, 2, WindowWidth(#Fenetre) - 6, WindowHeight(#Fenetre) - 53)
        
        If OngletTreeAfficher.i = 1
          ResizeGadget(#TexteInfoEditeur, GadgetX(#Tree1) + GadgetWidth(#Tree1) + 10, 6, GadgetWidth(#Editeur), 15)
          
        ElseIf OngletTreeAfficher.i = 2
          ResizeGadget(#TexteInfoEditeur, GadgetX(#Tree2) + GadgetWidth(#Tree2) + 10, 6, GadgetWidth(#Editeur), 15)
          
        EndIf
        
      Case #PB_Event_Menu
        Select EventMenu()
        EndSelect
        
      Case #PB_Event_Gadget
        
        Select EventGadget()
            
          Case #BoutonAfficherTree1
            
            If OngletTreeAfficher.i <> 1
              
              OngletTreeAfficher.i = 1
              
              HideGadget(#Tree1, #False)
              HideGadget(#Tree2, #True)
              
              SetGadgetAttribute(#SplitterFenetre, #PB_Splitter_FirstGadget, #Tree1)
              
            EndIf
            
          Case #BoutonAfficherTree2
            
            If OngletTreeAfficher.i <> 2
              
              OngletTreeAfficher.i = 2
              
              HideGadget(#Tree1, #True)
              HideGadget(#Tree2, #False)
              
              SetGadgetAttribute(#SplitterFenetre, #PB_Splitter_FirstGadget, #Tree2)
              
            EndIf
            
          Case #SplitterFenetre
            
            SetGadgetAttribute(#SplitterFenetre, #PB_Splitter_SecondMinimumSize, WindowWidth(#Fenetre) - 300)
            ResizeGadget(#SplitterFenetre, 2, 23, WindowWidth(#Fenetre) - 6, WindowHeight(#Fenetre) - 53)
            
        EndSelect
        
      Case 513 ; Bouton gauche appuiler avec la souris sur la fenêtre.
        
        If WindowMouseX(#Fenetre) >= GetGadgetState(#SplitterFenetre) - 3 And WindowMouseX(#Fenetre) <= GetGadgetState(#SplitterFenetre) + 9
          SliderCapturer.b = #True
        Else
          SliderCapturer.b = #False
        EndIf
        
        Case 514 ; Bouton gauche relacher avec la souris sur la fenêtre.
          
          If SliderCapturer.b = #True
            
            SliderCapturer.b = #False
            
            If OngletTreeAfficher.i = 1
              
              FreeGadget(#TexteInfoEditeur)
              TextGadget(#TexteInfoEditeur, 0, 0, 0, 15, TexteInfoEditeur$, #PB_Text_Center)
              ResizeGadget(#TexteInfoEditeur, GadgetX(#Tree1) + GadgetWidth(#Tree1) + 10, 6, GadgetWidth(#Editeur), 15)
              
            ElseIf OngletTreeAfficher.i = 2
              
              FreeGadget(#TexteInfoEditeur)
              TextGadget(#TexteInfoEditeur, 0, 0, 0, 15, TexteInfoEditeur$, #PB_Text_Center)
              ResizeGadget(#TexteInfoEditeur, GadgetX(#Tree2) + GadgetWidth(#Tree2) + 10, 6, GadgetWidth(#Editeur), 15)
              
            EndIf
            
          EndIf
          
      Case #PB_Event_CloseWindow
        CloseWindow(#Fenetre)
        Break
        
      Default

    EndSelect
    
  ForEver
  
EndProcedure

OuvrirFenetre("Exemple Onglet personnalisé avec Splitter", "Veuillez entrer un texte:")
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.