Page 1 sur 1

splittergadget et panel gadget

Publié : mer. 09/mai/2012 8:23
par blendman
salut

J'ai 2 questions concernant les splitters gadgets (associés à d'autres gadgets comme les panelgadget) :
- savez-vous comment on peut faire en sorte que lorsque l'on bouge le 1er panel, le 2ème reste là où il est et se redimensionne uniquement ?)
- lorsque l'on change la dimension d'un panelgadget, il arrive qu'on voit encore un morceau des gadget contenu dans celui-ci, ici un morceau du button gadget fait un petit bug graphique si on redimensionne le panel (avec le splitter). C'est un bug ou on peut résoudre ça ?

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 300, 300, "SplitterGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  Enumeration 
    #scrollarea 
    #containter1
    #Panel1  
    #Panel2  
    #Panel3 
    #Splitter1 
    #Splitter2 
    #btn1 
  EndEnumeration
  
  PanelGadget(#Panel1, 0, 0, 0,0)
  AddGadgetItem(#Panel1, -1, "Sub-Panel 1")
  ButtonGadget(#btn1,5,5,120,20,"test")
  CloseGadgetList()  
  
  PanelGadget(#Panel2, 0, 0, 0, 0)
  AddGadgetItem(#Panel2, -1, "Sub-Panel 2")
  CloseGadgetList()
  
  PanelGadget(#panel3,0,0,0,0)
  AddGadgetItem(#Panel3, -1, "Sub-Panel 3")
  ContainerGadget(#containter1,5,5,0,0)
  CloseGadgetList()
  CloseGadgetList()
  
  SplitterGadget(#Splitter1, 0, 0, 230, 100, #Panel1, #Panel2) 
  SplitterGadget(#Splitter2, 0, 100, 230, 100, #Panel2, #Panel3)
  
  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Merci :)

Re: splittergadget et panel gadget

Publié : mer. 09/mai/2012 9:33
par dayvid
ça dois pas être très compliquer je pense comme truc, je regarde ça :wink:
malheureusement je connais pas trop ce gadget mais il m'intéresse donc je vais apprendre :)

Edit: Tien regarde ça pour le bouton:

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 300, 300, "SplitterGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  Enumeration 
    #scrollarea 
    #containter1
    #Panel1  
    #Panel2  
    #Panel3 
    #Splitter1 
    #Splitter2 
    #btn1 
  EndEnumeration
  
  PanelGadget(#Panel1, 0, 0, 0,0)
  AddGadgetItem(#Panel1, -1, "Sub-Panel 1")
  ButtonGadget(#btn1,5,5,120,20,"test")
  CloseGadgetList()  
  
  PanelGadget(#Panel2, 0, 0, 0, 0)
  AddGadgetItem(#Panel2, -1, "Sub-Panel 2")
  CloseGadgetList()
  
  PanelGadget(#panel3,0,0,0,0)
  AddGadgetItem(#Panel3, -1, "Sub-Panel 3")
  ContainerGadget(#containter1,5,5,0,0)
  CloseGadgetList()
  CloseGadgetList()
  
  SplitterGadget(#Splitter1, 0, 0, 230, 100, #Panel1, #Panel2, #PB_Splitter_Separator) 
  SplitterGadget(#Splitter2, 0, 100, 230, 100, #Panel2, #Panel3, #PB_Splitter_Separator)
  
  Repeat ; Start of the event loop
    
    Event = WaitWindowEvent() ; This line waits until an event is received from Windows
    WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
    GadgetID = EventGadget() ; Is it a gadget event?
    EventType = EventType() ; The event type
    
    ;You can place code here, and use the result as parameters for the procedures
    
    If Event = #PB_Event_Gadget
      
      If GadgetID = #Splitter1
        
        If GadgetHeight(#Panel1) < 51
          HideGadget(#btn1, 1)
        Else
          HideGadget(#btn1, 0)
        EndIf
        
      EndIf
      
    EndIf
    
  Until Event = #PB_Event_CloseWindow ; End of the event loop
  
EndIf


Re: splittergadget et panel gadget

Publié : mer. 09/mai/2012 10:16
par Backup
pour ma part , le fait que le panel 2 se decale vers le bas lorsqu'on bouge le Silter 1

est un bug !

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 300, 500, "SplitterGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	Enumeration
		#scrollarea
		#containter1
		#Panel1 
		#Panel2 
		#Panel3
		#Splitter1
		#Splitter2
		#btn1
		#btn2
	EndEnumeration
	
	PanelGadget(#Panel1, 0, 0, 0,0)
	AddGadgetItem(#Panel1, -1, "Sub-Panel 1")
	
	ButtonGadget(#btn1,5,5,120,20,"test")
	
	CloseGadgetList()
	
	
	PanelGadget(#Panel2, 0, 0, 0, 0)
	AddGadgetItem(#Panel2, -1, "Sub-Panel 2")
	ButtonGadget(#btn2,5,5,120,20,"test2")
	CloseGadgetList()
	
	; 
	;  
	PanelGadget(#panel3,0,0,0,0)
	AddGadgetItem(#Panel3, -1, "Sub-Panel 3")
	ContainerGadget(#containter1,5,5,0,0)
	CloseGadgetList()
	CloseGadgetList()
	
	;  
	;   
	SplitterGadget(#Splitter1, 0, 0, 230, 200, #Panel1, #Panel2,#PB_Splitter_SecondFixed |#PB_Splitter_Separator)
	SplitterGadget(#Splitter2, 0, 130, 230, 400, #Panel2, #Panel3,#PB_Splitter_Separator )
	
	
	Repeat
	Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf






; EPB


Re: splittergadget et panel gadget

Publié : mer. 09/mai/2012 10:53
par blendman
je pense aussi que c'est un bug.

je vais le poster sur le forum Anglais, je crois ;)

Merci.

Re: splittergadget et panel gadget

Publié : mer. 09/mai/2012 13:53
par zaphod
Salut,

J'ai ça qui marche sous pb 4.61b2 et xp sp3

Code : Tout sélectionner


If OpenWindow(0, 0, 0, 300, 300, "SplitterGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  Enumeration 
    #scrollarea 
    #containter1
    #Panel1  
    #Panel2  
    #Panel3 
    #Splitter1 
    #Splitter2 
    #btn1 
  EndEnumeration
  
  PanelGadget(#Panel1, 5, 5, 200,30)
  AddGadgetItem(#Panel1, -1, "Sub-Panel 1")
  ButtonGadget(#btn1,5,5,120,20,"test")
  CloseGadgetList()  
  
  ContainerGadget(#containter1,5,20,230,280)
  PanelGadget(#Panel2, 5, 0, 200, 30)
  AddGadgetItem(#Panel2, -1, "Sub-Panel 2")
  CloseGadgetList()
  
  PanelGadget(#panel3,5,30,200,30)
  AddGadgetItem(#Panel3, -1, "Sub-Panel 3")
    CloseGadgetList()
  SplitterGadget(#Splitter2, 5, 5, 230, 200, #Panel2, #Panel3, #PB_Splitter_Separator)  
  CloseGadgetList()
  
  
  
  SplitterGadget(#Splitter1, 5, 5, 230, 280, #Panel1, #containter1, #PB_Splitter_Separator) 
  
 
  
  
  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf




Re: splittergadget et panel gadget

Publié : mer. 09/mai/2012 16:03
par Backup
oui ça marche ...

cependant, je ne suis pas sur qu'il soit normal de fermer le Spilter2 avec un CloseGadgetList().

m'enfin , puisque ça marche :)

Re: splittergadget et panel gadget

Publié : mer. 09/mai/2012 17:10
par Le Soldat Inconnu
c'est pas un bug, il faut l'écrire correctement, c'est tout :D

Voilà la solution, le splitter 1 est entre le panel 1 et le splitter 2 (qui lui est entre le panel 2 et le panel 3)

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 300, 300, "SplitterGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	Enumeration
		#scrollarea
		#containter1
		#Panel1
		#Panel2
		#Panel3
		#Splitter1
		#Splitter2
		#btn1
	EndEnumeration
	
	PanelGadget(#Panel1, 0, 0, 300, 150)
		AddGadgetItem(#Panel1, -1, "Sub-Panel 1")
		ButtonGadget(#btn1, 5, 5, 120, 20, "test")
	CloseGadgetList()
	
		PanelGadget(#Panel2, 0, 0, 300, 150)
			AddGadgetItem(#Panel2, -1, "Sub-Panel 2")
		CloseGadgetList()
		
		PanelGadget(#Panel3, 0, 0, 300, 150)
			AddGadgetItem(#Panel3, -1, "Sub-Panel 3")
		CloseGadgetList()
		
		SplitterGadget(#Splitter2, 0, 0, 300, 150, #Panel2, #Panel3, #PB_Splitter_Separator)
	
	SplitterGadget(#Splitter1, 0, 0, 300, 300, #Panel1, #Splitter2, #PB_Splitter_Separator)
	
	
	
	Repeat
	Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Re: splittergadget et panel gadget

Publié : mer. 09/mai/2012 17:40
par Backup
le manque de dimensions des panel aurai suffit a mettre le souk ?

je n'avais pas corrigé , puisque effectivement , le Spilter désactive ces valeurs ... :roll:

Re: splittergadget et panel gadget

Publié : mer. 09/mai/2012 18:24
par blendman
salut

Merci pour les exemples, mais pour moi, il y a quand même un "bug" dans vos exemples :
lorsque l'on bouge le panel numéro 1, ça ne devrait changer que le numéro 2 et pas le 2 et le 3 ;).

Re: splittergadget et panel gadget

Publié : mer. 09/mai/2012 19:20
par Backup
c'est le parametre : #PB_Splitter_SecondFixed qui gere ça :)

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 300, 300, "SplitterGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   Enumeration
      #scrollarea
      #containter1
      #Panel1
      #Panel2
      #Panel3
      #Splitter1
      #Splitter2
      #btn1
   EndEnumeration
   
   PanelGadget(#Panel1, 0, 0, 300, 150)
      AddGadgetItem(#Panel1, -1, "Sub-Panel 1")
      ButtonGadget(#btn1, 5, 5, 120, 20, "test")
   CloseGadgetList()
   
      PanelGadget(#Panel2, 0, 0, 300, 150)
         AddGadgetItem(#Panel2, -1, "Sub-Panel 2")
      CloseGadgetList()
      
      PanelGadget(#Panel3, 0, 0, 300, 150)
         AddGadgetItem(#Panel3, -1, "Sub-Panel 3")
      CloseGadgetList()
      
      SplitterGadget(#Splitter2, 0, 0, 300, 150, #Panel2, #Panel3, #PB_Splitter_Separator|#PB_Splitter_SecondFixed)
   
   SplitterGadget(#Splitter1, 0, 0, 300, 300, #Panel1, #Splitter2, #PB_Splitter_Separator|#PB_Splitter_SecondFixed)
   
   
   
   Repeat
   Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

; 
; EPB 


Re: splittergadget et panel gadget

Publié : mer. 09/mai/2012 19:26
par blendman
ah oui, nickel comme ça :D

Il reste un léger "bug" visuel : l'intérieur d'un panel est toujours légèrement plus grand que le panel lui-même.

Par exemple, ici le container dépasse du bas du panel :

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 300, 300, "SplitterGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   Enumeration
      #scrollarea
      #container1
      #Panel1
      #Panel2
      #Panel3
      #Splitter1
      #Splitter2
      #btn1
   EndEnumeration
   
   PanelGadget(#Panel1, 0, 0, 300, 150)
      AddGadgetItem(#Panel1, -1, "Sub-Panel 1")
      ButtonGadget(#btn1, 5, 5, 120, 20, "test")
      
   CloseGadgetList()
   
      PanelGadget(#Panel2, 0, 0, 300, 150)
      AddGadgetItem(#Panel2, -1, "Sub-Panel 2")
      ContainerGadget(#container1,5,5,280,140)      
      CloseGadgetList()
      CloseGadgetList()
     
      PanelGadget(#Panel3, 0, 0, 300, 150)
         AddGadgetItem(#Panel3, -1, "Sub-Panel 3")
      CloseGadgetList()
     
      SplitterGadget(#Splitter2, 0, 0, 300, 150, #Panel2, #Panel3, #PB_Splitter_Separator|#PB_Splitter_SecondFixed)
   
   SplitterGadget(#Splitter1, 0, 0, 300, 300, #Panel1, #Splitter2, #PB_Splitter_Separator|#PB_Splitter_SecondFixed)
   
   
   
   Repeat
   Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf