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
Desactiver une page d'un panel
Re: Desactiver une page d'un panel
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.
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
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
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳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
Re: Desactiver une page d'un panel
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).
Bon, merci quand même à vous 2. Je vais opter pour la 1ère solution (désactiver chaque gadget interne à la page).
-
- Messages : 471
- Inscription : dim. 23/déc./2007 18:10
Re: Desactiver une page d'un panel
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)
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.
-
- Messages : 57
- Inscription : mer. 09/juin/2010 23:47
Re: Desactiver une page d'un panel
Que celui qui est à l'origine du code me pardonne, mais j'ai oublié son pseudo.
J'ai recherché en vain sur le forum anglais et sur le forum français.

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