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

Code : Tout sélectionner

BindGadgetEvent(0, @OnSelect(), #PB_EventType_LeftClick)
par

Code : Tout sélectionner

BindGadgetEvent(0, @OnSelect(), #PB_EventType_Change)

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 :wink:

Sujet résolu.