Page 1 sur 1

Desactiver une page d'un panel

Publié : mar. 10/mai/2011 12:31
par anissa
Bonjour,

Pour desactiver un gadget string par exemple, on fait comme ça;
disablegadget(0,1)

Mais pour desactiver une page d'un panel (qui contient 3 pages par exemple), comment faire pour desactiver uniquement la deuxième page? (sur la doc, il n'y a pas d'exemple sur ce cas précis).

Merci de votre aide

Anissa

Re: Desactiver une page d'un panel

Publié : mar. 10/mai/2011 13:50
par pat
anissa,

Je ne suis pas très doué mais d'emblée je pense désactiver tous les objets de la page du panel en question.
Comme ça, même si l'utilisateur clique dessus, pas d'effet.
Tu peux aussi cacher (rendre invisible) ces objets.
Comme quoi, je pense qu'on peut déjà faire certaines choses utiles.

Re: Desactiver une page d'un panel

Publié : mar. 10/mai/2011 14:28
par Ar-S
Et pour plus de facilité, mets les gadgets d'un ContainerGadget, ainsi tu "hide" ou "disable" seulement le container, tu y gagnes en lisibilité et en rapidité.

Re: Desactiver une page d'un panel

Publié : mar. 10/mai/2011 20:41
par anissa
Oui, c'est exactement ce que je vais faire (désactiver tous les objets de la page concernée), c'est en effet ce que je remarque sur cette commande. on ne peut donc activer/désactiver qu'un objet gadget et non pas ses composants (comme le PanelGadget, ListIconGadget etc...).

Bon, merci quand même à vous 2. Je vais opter pour la 1ère solution (désactiver chaque gadget interne à la page).

Re: Desactiver une page d'un panel

Publié : mer. 11/mai/2011 0:52
par Geo Trouvpatou
Salut.

J'ai fait ça pour un de mes prog.
Je viens de formater donc je n'ai plus PB installé, donc j'espère que le code est fonctionnel (Normalement oui)

Code : Tout sélectionner

; Bridage d'un onglet.
; Auteur : GeoTrouvpatou.
; OS : Windows, Linux.
; Post : http://www.purebasic.fr/french/viewtopic.php?p=129998#p129998
EnableExplicit

Define.i bridage = 1, evenement, quit

If OpenWindow(0, 0, 0, 322, 220, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
      
      PanelGadget     (0, 8, 8, 306, 203)
      AddGadgetItem (0, -1, "Onglet 1")
      PanelGadget (1, 5, 5, 290, 166)
      AddGadgetItem(1, -1, "Sous-onglet 1")
      AddGadgetItem(1, -1, "Sous-onglet 2")
      CloseGadgetList()
      
      AddGadgetItem (0, -1,"Onglet 2")
      ButtonGadget(2, 40, 35, 220, 44,"Cliquez sur ce bouton, pour pouvoir passer sur l'onglet 1", #PB_Button_MultiLine);#PB_Button_Left |
      CloseGadgetList()
      
      ; On met sur "Onglet 2" au démarrage.
      SetGadgetState(0,1)
      
      
      Repeat
            evenement = WaitWindowEvent()
            
            ;->> Evènements Window
            If evenement = #PB_Event_CloseWindow
                  quit = 1
            EndIf
            
            ;->> Evènements Boutons (Gadget en général)
            If evenement =  #PB_Event_Gadget
                  Select EventGadget() 
                        Case 0 ; Le panelGadget
                              
                              ; Si on clique sur "Onglet 1"
                              If GetGadgetState(0) = 0
                                    ;action = 0   
                                    Debug "Clic sur l'onglet 0"
                                    
                                    If bridage = 1
                                          
                                          ; On remet de suite sur "Onglet 2" pour empêcher d'aller sur "Onglet 1"
                                          ; et ensuite on met un message d'avertissement.
                                          SetGadgetState(0,1)
                                          MessageRequester("Erreur", "Vous devez cliquer sur le bouton pour pouvoir passer sur l'autre onglet")
                                    Else
                                          ;quit = 1
                                          ;Debug "quit vaut "+ str(quit)
                                          
                                    EndIf
                                    
                              ElseIf GetGadgetState(0) = 1
                                    Debug "Clic sur l'onglet 1"
                              EndIf
                              
                              
                        Case 2 ; Le bouton
                              If bridage = 1
                                    bridage = 0
                                    SetGadgetText(2, "Onglet 1 : Débridé"+ Chr(13) +"Cliquez à nouveau pour brider l'onglet.")
                              Else
                                    bridage = 1
                                    SetGadgetText(2, "Onglet 1 : Bridé"+ Chr(13) +"Cliquez à nouveau pour débrider l'onglet.")
                              EndIf
                              
                              
                  EndSelect
            EndIf
            
      Until quit = 1
EndIf

Re: Desactiver une page d'un panel

Publié : mer. 11/mai/2011 14:26
par El Papounet
Que celui qui est à l'origine du code me pardonne, mais j'ai oublié son pseudo. :oops:
J'ai recherché en vain sur le forum anglais et sur le forum français.

Code : Tout sélectionner

Enumeration
	#Window_0

EndEnumeration

Enumeration
	#Panel_0
	#Button_1
	#Button_2
	#CheckBox_3

EndEnumeration



Global Dim Panels.l(5)

Procedure WinProcTab(hWnd, Msg, wParam, lParam)
	
	Protected Result.l = #PB_ProcessPureBasicEvents
	Protected tch.TC_HITTESTINFO
	Protected *pNMHDR.NMHDR
	Protected DeltaX.l
	Protected Tab.TC_ITEM
	Protected *lpdis.DRAWITEMSTRUCT
	Protected DrawFoc.l
	Protected Itm.TC_ITEM
	Protected TextBuffer.s
	Protected dtFlags.l
	Protected TextColor.l
	
	Select Msg
		Case #WM_DRAWITEM
			TextBuffer = Space(255)
			*lpdis = lParam
			Select *lpdis\CtlType
				Case #ODT_TAB
					Select *lpdis\itemState
						Case #ODS_SELECTED
							Tab\Mask = #TCIF_TEXT
							Tab\pszText = @TextBuffer
							Tab\cchTextMax = 255
							SendMessage_(*lpdis\hwndItem, #TCM_GETITEM, *lpdis\itemID, @Tab)
							DeltaX = 8
							TextColor = GetSysColor_(#COLOR_BTNTEXT)
						
						Case #ODS_SELECTED | #ODS_FOCUS
							DrawFoc = #True
						
						Case 0
							Tab\Mask = #TCIF_PARAM
							SendMessage_(*lpdis\hwndItem, #TCM_GETITEM, *lpdis\itemID, @Tab)
							If Panels(*lpdis\itemID)
								Tab\Mask = #TCIF_TEXT
								Tab\pszText = @TextBuffer
								Tab\cchTextMax = 255
								SendMessage_(*lpdis\hwndItem, #TCM_GETITEM, *lpdis\itemID, @Tab)
								*lpdis\rcItem\left + 5
								*lpdis\rcItem\top + 4
								TextColor = GetSysColor_(#COLOR_BTNHIGHLIGHT)
								SetBkMode_(*lpdis\hdc, #TRANSPARENT)
								SetTextColor_(*lpdis\hdc, TextColor)
								DrawText_(*lpdis\hdc, TextBuffer, Len(TextBuffer), *lpdis\rcItem, dtFlags)
								*lpdis\rcItem\top - 4
								*lpdis\rcItem\left - 5
								DeltaX = 4
								TextColor = GetSysColor_(#COLOR_BTNSHADOW)
							
							Else
								Tab\Mask = #TCIF_TEXT
								Tab\pszText = @TextBuffer
								Tab\cchTextMax = 255
								SendMessage_(*lpdis\hwndItem, #TCM_GETITEM, *lpdis\itemID, @Tab)
								*lpdis\rcItem\left + 5
								*lpdis\rcItem\top + 4
								TextColor = GetSysColor_(#COLOR_BTNHIGHLIGHT)
								SetBkMode_(*lpdis\hdc, #TRANSPARENT)
								SetTextColor_(*lpdis\hdc, TextColor)
								DrawText_(*lpdis\hdc, TextBuffer, Len(TextBuffer), *lpdis\rcItem, dtFlags)
								*lpdis\rcItem\top - 4
								*lpdis\rcItem\left - 5
								DeltaX = 4
								TextColor = GetSysColor_(#COLOR_BTNTEXT)
							
							EndIf
					
					EndSelect
					If DrawFoc = #True
						DrawFocusRect_(*lpdis\hdc, *lpdis\rcItem)
					
					EndIf
					*lpdis\rcItem\left + DeltaX
					*lpdis\rcItem\top + 3
					SetBkMode_(*lpdis\hdc, #TRANSPARENT)
					SetTextColor_(*lpdis\hdc, TextColor)
					DrawText_(*lpdis\hdc, TextBuffer, Len(TextBuffer), *lpdis\rcItem, dtFlags)
					ProcedureReturn 0
			
			EndSelect
		
		Case #WM_NOTIFY
			*pNMHDR = lParam
			Select *pNMHDR\code
				Case #TCN_SELCHANGING
					Itm\Mask = #TCIF_PARAM
					If GetAsyncKeyState_(#VK_LBUTTON) & 32768
						GetCursorPos_(tch\pt)
						MapWindowPoints_(#Null, *pNMHDR\hwndFrom, tch\pt, 1)
						If Panels(SendMessage_(*pNMHDR\hwndFrom, #TCM_HITTEST, 0, tch))
							Result = 1
						
						EndIf
					
					ElseIf GetAsyncKeyState_(#VK_LEFT) & 32768 ;
						panel = SendMessage_(*pNMHDR\hwndFrom, #TCM_GETCURSEL, 0, 0) - 1
						If panel > 0 And Panels(panel)
							Result = 1
						
						EndIf
					
					ElseIf GetAsyncKeyState_(#VK_RIGHT) & 32768
						panel = SendMessage_(*pNMHDR\hwndFrom, #TCM_GETCURSEL, 0, 0) + 1
						ct = PeekL(@Panels() - 8) - 1
						If panel < ct And Panels(panel)
							Result = 1
						
						EndIf
					
					EndIf
			
			EndSelect
	
	EndSelect
	ProcedureReturn Result

EndProcedure

Procedure OpenWindow_Window_0()
	
	If OpenWindow(#Window_0, 450, 200, 400, 381, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
		ButtonGadget(#Button_1, 20, 340, 110, 30, "Activer")
		ButtonGadget(#Button_2, 270, 340, 110, 30, "Désactiver")
		PanelGadget(#Panel_0, 10, 10, 380, 320)
		SetWindowLong_(GadgetID(#Panel_0), #GWL_STYLE, GetWindowLong_(GadgetID(#Panel_0), #GWL_STYLE) | #TCS_OWNERDRAWFIXED)
		AddGadgetItem(#Panel_0, -1, "Tab #1")
		AddGadgetItem(#Panel_0, -1, "Tab #2")
		AddGadgetItem(#Panel_0, -1, "Tab #3")
		CheckBoxGadget(#CheckBox_3, 10, 45, 147, 15, "CheckBoxGadget")
		AddGadgetItem(#Panel_0, -1, "Tab #4")
		CloseGadgetList()
	
	EndIf
	SetWindowCallback(@WinProcTab())
	Panels(2) = 1

EndProcedure

OpenWindow_Window_0()

Repeat
	Select WaitWindowEvent()
		Case #PB_Event_Gadget
			Select EventGadget()
				Case #Button_1
					Panels(2) = 0
					RedrawWindow_(GadgetID(#Panel_0), 0, 0, #RDW_ERASE|#RDW_INTERNALPAINT|#RDW_INVALIDATE)
					
				Case #Button_2
					Panels(2) = 1
					RedrawWindow_(GadgetID(#Panel_0), 0, 0, #RDW_ERASE|#RDW_INTERNALPAINT|#RDW_INVALIDATE)
			
			EndSelect
		
		Case #PB_Event_CloseWindow
			Select EventWindow()
				Case #Window_0
					CloseWindow(#Window_0)
					Break
		
			EndSelect
			
	EndSelect

ForEver