Page 1 sur 1

PanelGadget et position

Publié : sam. 26/nov./2011 18:19
par Guimauve
Bonjour à tous,

Lorsque l'on ajoute des gadgets sur un onglet dans un PanelGadget(), si on positionne un bouton à (5,5), la position est calculé par rapport au PanelGadget() et non par rapport à la fenêtre.
La commande GadgetY() retourne toujours la position Y d'un Gadget présent sur un PanelGadget() par rapport à quoi ?

1. À la fenêtre ?
2. À l'origine (0,0) de la surface de dessin d'un PanelGadget ?

Dans le code ci-dessous, sur un PanelGadget et un Container Gadget, la commande GadgetY() ne retourne pas la même valeur (5 pixels). Est-ce un bogue ou c'est normal ?

Code : Tout sélectionner

Macro GadgetDown(GadgetID)
  
  GadgetY(GadgetID) + GadgetHeight(GadgetID)
  
EndMacro

Macro GadgetRight(GadgetID)

  GadgetX(GadgetID) + GadgetWidth(GadgetID)
  
EndMacro

If OpenWindow(0, 0, 0, 515, 220, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
  
  PanelGadget(0, 8, 8, 200, 203)
    
    AddGadgetItem(0, -1,"Onglet 1")
    
    ; Ici je veux que les boutons 1 et 2 soient
    ; collés l'un au-dessus de l'autre. La Macro
    ; GadgetDown() prend la position Y et Ajoute 
    ; la hauteur du Gadget spécifié.
    
    ButtonGadget(2, 5, 5, 80, 24,"Bouton 1")
    ButtonGadget(3, 5, GadgetDown(2), 80, 24,"Bouton 2")
    
    Debug "GadgetY(2) = " + Str(GadgetY(2))
    Debug GetGadgetAttribute(0, #PB_Panel_TabHeight)
    Debug GadgetY(2) - GetGadgetAttribute(0, #PB_Panel_TabHeight)
    
    ; Ici je veux que les boutons 3 et 4 soient
    ; collés l'un au-dessus de l'autre. En utilisant
    ; la macro et en enlevant la hauteur d'un onglet
    ; ça marche.
    
    ButtonGadget(4, GadgetRight(2), 5, 80, 24,"Bouton 3")
    ButtonGadget(5, GadgetRight(2), GadgetDown(4) - GetGadgetAttribute(0, #PB_Panel_TabHeight), 80, 24, "Bouton 4")    
    
  CloseGadgetList()
  
  ; Alors que si les boutons sont sur la 
  ; fenêtre, ça fonctionne nickel.
  
  ButtonGadget(6, GadgetRight(0)+5, 5, 80, 24,"Bouton 5")
  ButtonGadget(7, GadgetRight(0)+5, GadgetDown(6), 80, 24,"Bouton 6")
  ButtonGadget(8, GadgetRight(0)+5, GadgetDown(7), 80, 24,"Bouton 7")
  
  ; Ou sur un autre gadget contenant des gadgets, ça fonctionne nickel aussi.
  
  ContainerGadget(50, GadgetRight(6)+5, 10, 200, 203, #PB_Container_Raised)
    
    ButtonGadget(52, 5, 5, 80, 24,"Bouton 8")
    ButtonGadget(53, 5, GadgetDown(52), 80, 24,"Bouton 9")
    
    Debug "GadgetY(52) = " + Str(GadgetY(52))
    
    ButtonGadget(54, 100, 5, 80, 24,"Bouton 10")   
    ButtonGadget(55, 100, GadgetDown(54), 80, 24,"Bouton 11") 
    
  CloseGadgetList()
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Merci à l'avance
Guimauve

Re: PanelGadget et position

Publié : sam. 26/nov./2011 19:12
par Ar-S
Bizarre en effet.

En plus ça fonctionne si on stock la hauteur dans une variable
Hpanel = GetGadgetAttribute(0, #PB_Panel_TabHeight)

et en utilisant Hpanel ensuite plutôt que le GetGadgetAttribute

Code : Tout sélectionner

Macro GadgetDown(GadgetID)
	
	GadgetY(GadgetID) + GadgetHeight(GadgetID)
	
EndMacro

Macro GadgetRight(GadgetID)
  
	GadgetX(GadgetID) + GadgetWidth(GadgetID)
	
EndMacro


If OpenWindow(0, 0, 0, 515, 220, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
	
	PanelGadget(0, 8, 8, 200, 203)
		
    Hpanel = GetGadgetAttribute(0, #PB_Panel_TabHeight)
    
		AddGadgetItem(0, -1,"Onglet 1")
		
		; Ici je veux que les boutons 1 et 2 soient
		; collés l'un au-dessus de l'autre. La Macro
		; GadgetDown() prend la position Y et Ajoute 
		; la hauteur du Gadget spécifié.
		
		ButtonGadget(2, 5, 5, 80, 24,"Bouton 1",#PB_Button_Default)
		ButtonGadget(3, 5, GadgetDown(2), 80, 24,"Bouton 2",#PB_Button_Default)
		
		Debug "GadgetY(2) = " + Str(GadgetY(2))
	
		Debug GadgetY(2) - GetGadgetAttribute(0, #PB_Panel_TabHeight)
		
		; Ici je veux que les boutons 3 et 4 soient
		; collés l'un au-dessus de l'autre. En utilisant
		; la macro et en enlevant la hauteur d'un onglet
		; ça marche.
		
		ButtonGadget(4, GadgetRight(2), 5, 80, 24,"Bouton 3",#PB_Button_Default)
		ButtonGadget(5, GadgetRight(2), GadgetDown(4) - Hpanel, 80, 24, "Bouton 4",#PB_Button_Default)    
	  Debug GetGadgetAttribute(0, #PB_Panel_TabHeight)
    Debug Hpanel
		Debug GadgetY(4) - Hpanel
    
  CloseGadgetList()
	
	; Alors que si les boutons sont sur la 
	; fenêtre, ça fonctionne nickel.
	
	ButtonGadget(6, GadgetRight(0)+5, 5, 80, 24,"Bouton 5")
	ButtonGadget(7, GadgetRight(0)+5, GadgetDown(6), 80, 24,"Bouton 6")
	ButtonGadget(8, GadgetRight(0)+5, GadgetDown(7), 80, 24,"Bouton 7")
	
	; Ou sur un autre gadget contenant des gadgets, ça fonctionne nickel aussi.
	
	ContainerGadget(50, GadgetRight(6)+5, 10, 200, 203, #PB_Container_Raised)
		
		ButtonGadget(52, 5, 5, 80, 24,"Bouton 8")
		ButtonGadget(53, 5, GadgetDown(52), 80, 24,"Bouton 9")
		
		Debug "GadgetY(52) = " + Str(GadgetY(52))
		
		ButtonGadget(54, 100, 5, 80, 24,"Bouton 10")   
		ButtonGadget(55, 100, GadgetDown(54), 80, 24,"Bouton 11") 
		
  CloseGadgetList()
	
	Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Re: PanelGadget et position

Publié : sam. 26/nov./2011 19:40
par Guimauve
Ar-S a écrit :Bizarre en effet.

En plus ça fonctionne si on stock la hauteur dans une variable
Hpanel = GetGadgetAttribute(0, #PB_Panel_TabHeight)

et en utilisant Hpanel ensuite plutôt que le GetGadgetAttribute
Il ne s'agit que d'un exemple ici, faire plusieurs fois l'appel d'une même commande c'est pas très logique. Mais la démonstration du problème reste la même.

J'ai oublié de mentionner, j'ai testé le truc avec PureBasic 4.60 Final x64 sous Linux Mint 11 x64.

A+
Guimauve

Re: PanelGadget et position

Publié : lun. 28/nov./2011 17:32
par Le Soldat Inconnu
Aucun bug chez moi sous Windows, le problème doit venir de Linux

Un gadget placé à la coordonné 5,5 dans un panel gadget renvoie la position 5,5 avec GadgetX() GadgetY()