Desactiver une page d'un panel

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
anissa
Messages : 136
Inscription : mer. 13/oct./2010 15:43

Desactiver une page d'un panel

Message 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
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Re: Desactiver une page d'un panel

Message 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.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Desactiver une page d'un panel

Message 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é.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
anissa
Messages : 136
Inscription : mer. 13/oct./2010 15:43

Re: Desactiver une page d'un panel

Message 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).
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Re: Desactiver une page d'un panel

Message 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
Dernière modification par Geo Trouvpatou le mer. 11/mai/2011 15:36, modifié 1 fois.
El Papounet
Messages : 57
Inscription : mer. 09/juin/2010 23:47

Re: Desactiver une page d'un panel

Message 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
Répondre