Page 1 sur 1
[Résolu] ExplorerTreeGadget : Obtenir la sélection courante
Publié : mar. 18/sept./2018 20:21
par falsam
Petite bizarrerie avec ce code. Quand je sélectionne un item, j'ai le résultat de l'item précédent.
Code : Tout sélectionner
EnableExplicit
;Plan de l'application
Declare Start()
Declare OnSelect()
Declare Exit()
Start()
Procedure Start()
OpenWindow(0, 0, 0, 800, 600, "ExplorerTreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ExplorerTreeGadget(0, 10, 10, 300, 580, "*.*", #PB_Explorer_NoDriveRequester)
;Triggers
BindGadgetEvent(0, @OnSelect(), #PB_EventType_LeftClick)
BindEvent(#PB_Event_CloseWindow, @Exit())
Repeat : WaitWindowEvent() : ForEver
EndProcedure
Procedure OnSelect()
Protected Buffer.s = GetGadgetText(0)
Debug Buffer
EndProcedure
Procedure Exit()
End
EndProcedure
Je précise que je ne veux pas utiliser le flag #PB_EventType_LeftDoubleClick qui est réservé à un autre usage dans le code. Merci pour votre aide.
Re: ExplorerTreeGadget : Obtenir la sélection courante
Publié : mar. 18/sept./2018 20:31
par falsam
Souci avec le Bind visiblement. Si je teste avec l'ancienne méthode, j'ai bien la bonne valeur. Il y a quand même un double appel de la procédure OnSelect() à l'exécution du code.
Code : Tout sélectionner
EnableExplicit
;Plan de l'application
Declare Start()
Declare OnSelect()
Declare Exit()
Start()
Procedure Start()
OpenWindow(0, 0, 0, 800, 600, "ExplorerTreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ExplorerTreeGadget(0, 10, 10, 300, 580, "*.*", #PB_Explorer_NoDriveRequester)
;Triggers
;BindGadgetEvent(0, @OnSelect(), #PB_EventType_LeftClick)
BindEvent(#PB_Event_CloseWindow, @Exit())
Repeat
WaitWindowEvent()
If EventGadget() = 0 And EventType() = #PB_EventType_LeftClick
OnSelect()
EndIf
ForEver
EndProcedure
Procedure OnSelect()
Protected Buffer.s = GetGadgetText(0)
Debug "Valeur " + Buffer
EndProcedure
Procedure Exit()
End
EndProcedure
Merci à Gally de sa proposition sur le chat de PureBasic
Re: ExplorerTreeGadget : Obtenir la sélection courante
Publié : mar. 18/sept./2018 20:40
par falsam
Petite solution de contournement qui consiste à ne pas mettre de flag au triger faisant appel à la procédure OnSelect()
Code : Tout sélectionner
EnableExplicit
;Plan de l'application
Declare Start()
Declare OnSelect()
Declare Exit()
Start()
Procedure Start()
OpenWindow(0, 0, 0, 800, 600, "ExplorerTreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ExplorerTreeGadget(0, 10, 10, 300, 580, "*.*", #PB_Explorer_NoDriveRequester)
;Triggers
BindGadgetEvent(0, @OnSelect())
BindEvent(#PB_Event_CloseWindow, @Exit())
Repeat : WaitWindowEvent() : ForEver
EndProcedure
Procedure OnSelect()
Static PreviousBuffer.s
Protected Buffer.s = GetGadgetText(0)
If Buffer <> PreviousBuffer And Buffer <> ""
Debug "Valeur " + Buffer
PreviousBuffer = Buffer
EndIf
EndProcedure
Procedure Exit()
End
EndProcedure
Re: ExplorerTreeGadget : Obtenir la sélection courante
Publié : mar. 18/sept./2018 22:52
par El Papounet
Dans ton code d'origine il suffit simplement de remplacer
par
Re: ExplorerTreeGadget : Obtenir la sélection courante
Publié : mar. 18/sept./2018 22:57
par falsam
Ooops mais oui tu as raison. Merci El Papounet
Sujet résolu.