Pourquoi #PB_Event_Gadget retourne-t-il deux fois le résulta

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Pourquoi #PB_Event_Gadget retourne-t-il deux fois le résulta

Message par Marc56 »

Pourquoi quand on demande la ligne sélectionnée d'un ListIconGadget, reçoit-on deux fois le contenu ?

Exemple:

Code : Tout sélectionner

OpenWindow(0, 0, 0, 600, 400, "", #PB_Window_SystemMenu)
ListIconGadget(1, 10, 10, 580, 380, "Column 1", 100)

For i = 1 To 26
    AddGadgetItem(1, -1, Chr(i + 64))
Next

Repeat
    Select WaitWindowEvent(50)
            
        Case #PB_Event_CloseWindow
            End
            
        Case #PB_Event_Gadget
            Select EventGadget()
                Case 1
                    Debug "Ligne: " + GetGadgetText(1)
            EndSelect
            
    EndSelect
ForEver
Résultat (pour 1 clic gauche sur chaque ligne)

Code : Tout sélectionner

Ligne: A
Ligne: A
Ligne: B
Ligne: B
Ligne: C
Ligne: C
J'avais trouvé l'explication dans le forum, mais je ne retrouve plus (ni comment reformuler la question)
(je crois que c'est le comportement normal (souris puis clic, je crois, mais je ne sais plus comment contourner?)

:?
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Pourquoi #PB_Event_Gadget retourne-t-il deux fois le rés

Message par Marc56 »

Ça y est, j'ai retrouvé :D

Il faut isoler le bouton de la souris:

Code : Tout sélectionner

If EventType() = #PB_EventType_LeftClick

Code : Tout sélectionner

OpenWindow(0, 0, 0, 600, 400, "", #PB_Window_SystemMenu)
ListIconGadget(1, 10, 10, 580, 380, "Column 1", 100)

For i = 1 To 26
    AddGadgetItem(1, -1, Chr(i + 64))
Next

Repeat
    Select WaitWindowEvent(50)
            
        Case #PB_Event_CloseWindow
            End
            
        Case #PB_Event_Gadget       
            Select EventGadget()
                Case 1
                    If EventType() = #PB_EventType_LeftClick
                        Debug "Ligne: " + GetGadgetText(1)
                    EndIf
            EndSelect
            
    EndSelect
ForEver
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Pourquoi #PB_Event_Gadget retourne-t-il deux fois le rés

Message par Marc56 »

Spock a écrit :[reedit]ha bah tu as retrouvé (pendant que je codais) :)
Merci Spock, quelle promptitude :D
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Pourquoi #PB_Event_Gadget retourne-t-il deux fois le rés

Message par falsam »

Pas vraiement une solution puisque que tu l'as déja trouvé, mais une autre façon de faire dans la gestion des événements que tu connais j'en suis certain mais qui peut servir à d'autres utilisateurs.

Code : Tout sélectionner

Declare OnSelect()
Declare OnEnd()

OpenWindow(0, 0, 0, 600, 400, "", #PB_Window_SystemMenu)
ListIconGadget(1, 10, 10, 580, 380, "Column 1", 100)

For i = 1 To 26
  AddGadgetItem(1, -1, Chr(i + 64))
Next

;Evenement fenetre
BindEvent(#PB_Event_CloseWindow, @OnEnd())

;Une autre façon de gérer l'évenement gadget
BindGadgetEvent(1, @OnSelect(), #PB_EventType_LeftClick)

Repeat : WaitWindowEvent(50) : ForEver

Procedure OnSelect()
  Debug "Ligne: " + GetGadgetText(1)
EndProcedure

Procedure OnEnd()
  Debug "Fin de l'éxécution"
  
  ;Le code de fin de traitement
  
  ;Et fin
  End
EndProcedure
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Pourquoi #PB_Event_Gadget retourne-t-il deux fois le rés

Message par Marc56 »

Merci falsam,

Il y a aussi un truc vu récemment et je ne sais plus où je l'ai noté (mémoire, mémoire :? classement :mrgreen: :?: )
C'est un moyen donné par Fred sur le forum us pour forcer la régénération d'une fenêtre.
C'est basé sur le principe qu'une fenêtre n'est redessinée par PB que lorsqu'une boucle WaitWindowEvent() est effectuée
(une seule itération suffit)
Je ne me souviens plus comment (1 seule ligne) ni dans quel truc je l'ai noté :roll:


Edit (5 minutes après): Ah, si: retrouvé!
Forcer le refresh d'une fenêtre:

Code : Tout sélectionner

While WindowEvent(): Wend
C'est tout. Une seule boucle WindowEvent(), c'est instantané et ça suffit à forcer la régénération de tous les gadgets.
À caler dans la FAQ au besoin :)

Il suffit que j'écrive un post pour que la mémoire revienne :mrgreen: :roll:
(C'est parce qu'il n'y avait pas Wait que je ne le retrouvais plus bien que l'ayant utilisé)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Pourquoi #PB_Event_Gadget retourne-t-il deux fois le rés

Message par falsam »

La syntaxe est BindEvent(Event, @Callback() [, Window [, Object [, EventType]]])

Dans le code que je propose, BindEvent(#PB_Event_CloseWindow, @OnEnd()) devient BindEvent(#PB_Event_CloseWindow, @OnEnd(), 0) 0 étant l'identifiant de la fenêtre.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Pourquoi #PB_Event_Gadget retourne-t-il deux fois le rés

Message par Marc56 »

Une curiosité de BindEvent (ou je ne sais pas si ça vient de ma programmation "spaghetti au fromage")

- Je créé une fenêtre principale et secondaire
- J'affecte globalement un BindEvent aux éléments de la fenêtre secondaire
- Si j'ouvre puis referme, puis réouvre la fenêtre secondaire, les évènements de la fenêtre secondaire ne sont plus gérés.
- Pour qu'ils soient à nouveau gérés, il faut que je mette à nouveau BindEvent après la création de la fenêtre secondaire.

C'est comme si chaque OpenWindow créé un nouvel ID associé au BindEvent (normal) mais pas au # de la fenêtre donc nécessite de remettre un BindEvent
(ça marche très bien, mais est-ce normal ?)

Ceci ne se produit pas avec la méthode classique: visiblement le numéro attribué lors de l'énumération suffit à PB à réaffecter les Events quand on ré-ouvre la fenêtre secondaire avec le même #nom

Je ne sais pas si j'exprime bien le truc :roll: :oops:
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Pourquoi #PB_Event_Gadget retourne-t-il deux fois le rés

Message par falsam »

Marc56 a écrit :Je ne sais pas si j'exprime bien le truc
je pense que j'ai compris

Tu peux procéder de cette manière.

Code : Tout sélectionner

Declare OpenWindow0()
Declare OpenWindow1()
Declare OnClose()

OpenWindow0()

Procedure OpenWindow0()
  OpenWindow(0, 0, 0, 600, 400, "Fenetre principale", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ButtonGadget(0, 450, 20, 100, 22, "Fenêtre secondaire")
  
  BindEvent(#PB_Event_CloseWindow, @OnClose()) ;Fonctionnera pour toutes les fenetres
  
  BindGadgetEvent(0, @OpenWindow1(), #PB_EventType_LeftClick)
  
  Repeat : WaitWindowEvent(50) : ForEver
EndProcedure

Procedure OpenWindow1()
  OpenWindow(1, 0, 0, 400, 300, "Fenetre Secondaire", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EndProcedure

Procedure OnClose()  
  Select EventWindow()
    Case 0 : End ;Ou exécution d'un traitement de fermeture
    Case 1 : CloseWindow(1) ;Ou exécution d'un code spécifique
  EndSelect
EndProcedure
Evidemment pour un si petit code ça parait ridicule de procéder de la sorte, mais pour un code conséquent, les traitements sont bien segmentés.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Pourquoi #PB_Event_Gadget retourne-t-il deux fois le rés

Message par Ar-S »

J'avoue que je les utilise de plus en plus et que ça s'avère pratique bien souvent.
~~~~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
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Pourquoi #PB_Event_Gadget retourne-t-il deux fois le rés

Message par Marc56 »

Je suis un peu de l'avis de Spock, j'aime bien gérer les Events de la méthode classique qui a l'avantage de mettre toutes les actions au même endroit. Ce qui ne m’empêche pas de mettre un BindEventGadget "à l'arrache"

BindEvent à des avantages:
- Déclenchement immédiat
- Déclenchement d'un gadget en une seule ligne avec gestion de la fenêtre appelante

mais des inconvénients
- On est obligé de les (re)mettre un peu partout dans le code, voir dans des procédures
- Il ne gèrent pas tous les type d'évènements (cf je ne sais plus quel topic sur le forum us)

Reste à voir quel est la préconisation de Fred.
:)
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: Pourquoi #PB_Event_Gadget retourne-t-il deux fois le rés

Message par Anonyme2 »

Marc56 a écrit :Je suis un peu de l'avis de Spock, j'aime bien gérer les Events de la méthode classique qui a l'avantage de mettre toutes les actions au même endroit. Ce qui ne m’empêche pas de mettre un BindEventGadget "à l'arrache"

mais des inconvénients
- On est obligé de les (re)mettre un peu partout dans le code, voir dans des procédures
:)
Ha bon ?

Voilà comment je gère dans PureIconManager, 2 procédures dédiées pour les Bind...
Si je veux modifier, je vais dans la procedure.

Code : Tout sélectionner

Procedure PIM_Set_BindEvent()
      CompilerIf #Nom_Procedure = #True
            Debug #PB_Compiler_Procedure
      CompilerEndIf
      ;- #PB_Event_SizeWindow de redimensionnement de la fenêtre principale
      BindEvent(#PB_Event_SizeWindow, @OnSizeWindow(), #MainWindow)
      ;///*************************************************
      ;// Les boutons de la ToolBar principale
      ;- #Button_Ouvrir_Dossier_Preferences
      BindEvent(#PB_Event_Gadget, @OnOpenPreferencesFolder(), #Fenetre_preferences, #Button_Ouvrir_Dossier_Preferences)
      ;- #Bouton_Conversion
      BindEvent(#PB_Event_Menu, @PIM_BatchConversion(), #MainWindow, #Bouton_Conversion)
      ;- #Bouton_folder_explorer
      BindEvent(#PB_Event_Menu, @PIM_Ouvrir_Fichier_Par_Bouton(), #MainWindow, #Bouton_folder_explorer)
      ;- #Bouton_Credits
      BindEvent(#PB_Event_Menu, @PIM_Credits(), #MainWindow, #Bouton_Credits)
      ;- #Bouton_Apropos
      BindEvent(#PB_Event_Menu, @PIM_A_Propos_De(), #MainWindow, #Bouton_Apropos)
      ;- #Bouton_Supprimer
      BindEvent(#PB_Event_Menu, @OnDelete(), #MainWindow, #Bouton_Supprimer)
      ;- #Bouton_Aide
      BindEvent(#PB_Event_Menu, @OnHelp(), #MainWindow, #Bouton_Aide)
      ;- #Bouton_Quit
      BindEvent(#PB_Event_Menu, @OnQuit(), #MainWindow, #Bouton_Quit)
      ;///*************************************************
      ;// Les boutons de la Rebar en dessous Toolbar
      BindEvent(#PB_Event_Menu, @OnCopyToClipBoard(), #MainWindow, #Button_Copy_To_ClipBoard)
      BindEvent(#PB_Event_Menu, @OnPasteFromClipBoard(), #MainWindow, #Button_Paste_From_ClipBoard)
      BindEvent(#PB_Event_Menu, @OnChangeExplorerListDisplayMode(), #MainWindow, #Button_ChangeExplorerList_Display)
      BindEvent(#PB_Event_Menu, @OnChangeLanguage(), #MainWindow, #ButtonChangeLanguage)
      ;///*************************************************
      ;// Les boutons de la Rebar container images
      BindEvent(#PB_Event_Menu, @OnBouton_PbGetColor(), #MainWindow, #Button_PbGetColor)
      BindEvent(#PB_Event_Menu, @OnBouton_EncadrerImage(), #MainWindow, #Button_EncadrerImage)
      ;///*************************************************
      ;// Les Raccourcis clavier
      ;- #Touche_DELETE
      ;// ne marche pas avec BindMenuEvent car menu déjà subclassés
      BindEvent(#PB_Event_Menu, @OnDelete(), #MainWindow, #Touche_DELETE)
      ; ;- #Touche_Escape
      ; BindEvent(#PB_Event_Menu, @OnEscape(), #MainWindow, #Touche_Escape)
      ;- #Touche_CTRL_T
      BindEvent(#PB_Event_Menu, @On_CTRL_T(), #MainWindow, #Touche_CTRL_T)
      ;- #Touche_CTRL_A
      BindEvent(#PB_Event_Menu, @On_CTRL_A(), #MainWindow, #Touche_CTRL_A)
      ; ;//  *****************************************************
      ; ;// PopupMenu des boutons de la toolbar
      BindEvent(#PB_Event_Menu, @OnOpenPreferences(), #MainWindow, #PopupImageMenu_ouvrir_Fenetre_Preferences)
      BindEvent(#PB_Event_Menu, @OnOpenPreferencesFolder(), #MainWindow, #PopupImageMenu_ouvrir_Dossier_Preferences)
      BindEvent(#PB_Event_Menu, @OnAddItemToFavoris(), #MainWindow, #PopupImageMenu_Ajouter_fichier_aux_favoris)
      BindEvent(#PB_Event_Menu, @OnAddFolderToFavoris(), #MainWindow, #PopupImageMenu_Ajouter_dossier_aux_favoris)
      BindEvent(#PB_Event_Menu, @PIM_Gerer_favoris(), #MainWindow, #PopupImageMenu_Gerer_favoris)
      ; ;//  *****************************************************
      ; ;// PopupMenu des boutons de la Rebar en dessous Toolbar
      BindEvent(#PB_Event_Menu, @OnSetExplorerListDisplayMode_Details(), #MainWindow, #PopupImageMenu_ExplorerListDisplayMode_Details)
      BindEvent(#PB_Event_Menu, @OnSetExplorerListDisplayMode_SmallIcons(), #MainWindow, #PopupImageMenu_ExplorerListDisplayMode_SmallIcons)
      BindEvent(#PB_Event_Menu, @OnSetExplorerListDisplayMode_Medium(), #MainWindow, #PopupImageMenu_ExplorerListDisplayMode_Medium)
      BindEvent(#PB_Event_Menu, @OnSetEnglishLanguage(), #MainWindow, #PopupImageMenu_Display_Drapeau_Anglais)
      BindEvent(#PB_Event_Menu, @OnSetFrenchLanguage(), #MainWindow, #PopupImageMenu_Display_Drapeau_Francais)
      ;//  *****************************************************
      ;// Les PopupMenus clic droit ou gauche sur un élément de l'ExplorerList
      BindEvent(#PB_Event_Menu, @OnExplorerListConversion_To_Ico_File_KeepCompression(), #MainWindow, #PopupImageMenu_ExplorerListConversion_To_Ico_File_KeepCompression)
      BindEvent(#PB_Event_Menu, @OnExplorerListConversion_To_Ico_File_Uncompress(), #MainWindow, #PopupImageMenu_ExplorerListConversion_To_Ico_File_Uncompress)
      
      BindEvent(#PB_Event_Menu, @OnExplorerListConversion_To_Icl_NE_File_KeepCompression(), #MainWindow, #PopupImageMenu_ExplorerListConversion_To_Icl_NE_File_KeepCompression)
      BindEvent(#PB_Event_Menu, @OnExplorerListConversion_To_Icl_NE_File_Uncompress(), #MainWindow, #PopupImageMenu_ExplorerListConversion_To_Icl_NE_File_Uncompress)
      
      BindEvent(#PB_Event_Menu, @OnExplorerListConversion_To_Icl_PE_File_KeepCompression(), #MainWindow, #PopupImageMenu_ExplorerListConversion_To_Icl_PE_File_KeepCompression)
      BindEvent(#PB_Event_Menu, @OnExplorerListConversion_To_Icl_PE_File_Uncompress(), #MainWindow, #PopupImageMenu_ExplorerListConversion_To_Icl_PE_File_Uncompress)
      
      BindEvent(#PB_Event_Menu, @OnExplorerListConversion_To_dll_PE_File_KeepCompression(), #MainWindow, #PopupImageMenu_ExplorerListConversion_To_dll_PE_File_KeepCompression)
      BindEvent(#PB_Event_Menu, @OnExplorerListConversion_To_dll_PE_File_Uncompress(), #MainWindow, #PopupImageMenu_ExplorerListConversion_To_dll_PE_File_Uncompress)
      
      BindEvent(#PB_Event_Menu, @OnExplorerListConversion_Remove_File(), #MainWindow, #PopupImageMenu_ExplorerListConversion_Remove_File)
      
      ;//  *****************************************************
      ;// Les PopupMenus clic droit ou gauche sur un élément de la listeIcone des groupes
      BindEvent(#PB_Event_Menu, @OnSupprimer_Selection_ListIcon_Group_icons(), #MainWindow, #Supprimer_selection_ListIcon_Group_icons)
      BindEvent(#PB_Event_Menu, @OnSupprimer_Selection_ListIcon_Group_icons(), #MainWindow, #Supprimer_selection_ListIcon_Group_icons_autres_Que_ICO)
      
      BindEvent(#PB_Event_Menu, @OnSelectionner_Tout_ListIcon_Group_Icons_Autres_Que_ICO(), #MainWindow, #Selectionner_tout_ListIcon_Group_icons_Autres_Que_ICO)
      BindEvent(#PB_Event_Menu, @OnTout_Deselectionner_ListIcon_Group_Icons_Autres_Que_ICO(), #MainWindow, #Tout_deselectionner_ListIcon_Group_icons_Autres_Que_ICO)
      BindEvent(#PB_Event_Menu, @OnInverser_La_selection_ListIcon_Group_Icons_Autres_Que_ICO(), #MainWindow, #Inverser_la_selection_ListIcon_Group_icons_Autres_Que_ICO)
      
      BindEvent(#PB_Event_Menu, @OnEnregistrer_au_format_ico_ListIcon_Group_icons_Autres_Que_ICO_KeepCompression(), #MainWindow, #Popup_Enregistrer_au_format_ico_ListIcon_Group_icons_Autres_Que_ICO_KeepCompression)
      BindEvent(#PB_Event_Menu, @OnEnregistrer_au_format_ico_ListIcon_Group_icons_Autres_Que_ICO_Uncompress(), #MainWindow, #Popup_Enregistrer_au_format_ico_ListIcon_Group_icons_Autres_Que_ICO_Uncompress)
      
      BindEvent(#PB_Event_Menu, @OnEnregistrer_au_format_ico_compression_Vista_ListIcon_Group_icons(), #MainWindow, #Enregistrer_au_format_ico_compression_Vista_ListIcon_Group_icons)
      BindEvent(#PB_Event_Menu, @OnEnregistrer_au_format_ico_decompression_Vista_ListIcon_Group_icons(), #MainWindow, #Enregistrer_au_format_ico_decompression_Vista_ListIcon_Group_icons)
      
      BindEvent(#PB_Event_Menu, @OnEnregistrer_au_format_icl_PE_ListIcon_Group_icons_Autres_Que_ICO_KeepCompression(), #MainWindow, #Popup_Enregistrer_au_format_icl_PE_ListIcon_Group_icons_Autres_Que_ICO_KeepCompression)
      BindEvent(#PB_Event_Menu, @OnEnregistrer_au_format_icl_PE_ListIcon_Group_icons_Autres_Que_ICO_Uncompress(), #MainWindow, #Popup_Enregistrer_au_format_icl_PE_ListIcon_Group_icons_Autres_Que_ICO_Uncompress)
      
      BindEvent(#PB_Event_Menu, @OnEnregistrer_au_format_icl_compression_Vista_PE_ListIcon_Group_icons(), #MainWindow, #Enregistrer_au_format_icl_compression_Vista_PE_ListIcon_Group_icons)
      BindEvent(#PB_Event_Menu, @OnEnregistrer_au_format_icl_decompression_Vista_PE_ListIcon_Group_icons(), #MainWindow, #Enregistrer_au_format_icl_decompression_Vista_PE_ListIcon_Group_icons)
      
      BindEvent(#PB_Event_Menu, @OnPopup_Enregistrer_au_format_dll_PE_ListIcon_Group_icons_Autres_Que_ICO_KeepCompression(), #MainWindow, #Popup_Enregistrer_au_format_dll_PE_ListIcon_Group_icons_Autres_Que_ICO_KeepCompression)
      BindEvent(#PB_Event_Menu, @OnPopup_Enregistrer_au_format_dll_PE_ListIcon_Group_icons_Autres_Que_ICO_Uncompress(), #MainWindow, #Popup_Enregistrer_au_format_dll_PE_ListIcon_Group_icons_Autres_Que_ICO_Uncompress)
      
      
      BindEvent(#PB_Event_Menu, @OnEnregistrer_au_format_dll_compression_Vista_ListIcon_Group_icons(), #MainWindow, #Enregistrer_au_format_dll_compression_Vista_ListIcon_Group_icons)
      BindEvent(#PB_Event_Menu, @OnEnregistrer_au_format_dll_decompression_Vista_ListIcon_Group_icons(), #MainWindow, #Enregistrer_au_format_dll_decompression_Vista_ListIcon_Group_icons)
      
      BindEvent(#PB_Event_Menu, @OnEnregistrer_au_format_icl_compression_Vista_NE_ListIcon_Group_icons(), #MainWindow, #Popup_Enregistrer_au_format_icl_NE_ListIcon_Group_icons_Autres_Que_ICO_KeepCompression)
      BindEvent(#PB_Event_Menu, @OnEnregistrer_au_format_icl_decompression_Vista_NE_ListIcon_Group_icons(), #MainWindow, #Popup_Enregistrer_au_format_icl_NE_ListIcon_Group_icons_Autres_Que_ICO_Uncompress)
      
      BindEvent(#PB_Event_Menu, @OnEnregistrer_au_format_icl_compression_Vista_NE_ListIcon_Group_icons(), #MainWindow, #Enregistrer_au_format_icl_compression_Vista_NE_ListIcon_Group_icons)
      BindEvent(#PB_Event_Menu, @OnEnregistrer_au_format_icl_decompression_Vista_NE_ListIcon_Group_icons(), #MainWindow, #Enregistrer_au_format_icl_decompression_Vista_NE_ListIcon_Group_icons)
      
      ;//  *****************************************************
      ;// Les PopupMenus clic droit ou gauche sur un élément du Scrollarea des icones
      BindEvent(#PB_Event_Menu, @OnSupprimer_Selection_ScrollArea_Icons(), #MainWindow, #Supprimer_selection_ScrollArea_Icons)
      
      BindEvent(#PB_Event_Menu, @OnSelectionner_Tout_ScrollArea_Icons_Autres_Que_ICO(), #MainWindow, #Selectionner_tout_ScrollArea_icons_Autres_Que_ICO)
      BindEvent(#PB_Event_Menu, @OnTout_Deselectionner_ScrollArea_Icons_Autres_Que_ICO(), #MainWindow, #Tout_deselectionner_ScrollArea_icons_Autres_Que_ICO)
      BindEvent(#PB_Event_Menu, @PIM_Inverser_tout_ScrollArea_icons(), #MainWindow, #Inverser_la_selection_ScrollArea_icons_Autres_Que_ICO)
      
      ;//  *****************************************************
      ;// Les gadgets fenêtre notification --> conversion
      BindEvent(#PB_Event_Gadget, @OnBatchButton_Ok(), #Fenetre_Conversion_Notification, #Batch_Button_Ok)
      
      BindEvent(#PB_Event_Menu, @OnEvenementFinLecturePreferences(), #MainWindow, #EvenementFinLecturePreferences)
EndProcedure

Procedure SetBindEvent_ImageGadgetScrollAreaIcon(StaticID_ImageGadget)
      CompilerIf #Nom_Procedure = #True
            Debug #PB_Compiler_Procedure
      CompilerEndIf
      ;// Les gadgets fenêtre principale
      ;// StaticID_ImageGadget est l'identifiant statique de l'imageGadget
      BindGadgetEvent(StaticID_ImageGadget, @OnScrollAreaIcons_ImageGadget())
EndProcedure
J'ai aussi ce code pour créer des BindMenuEvent sur des menus dynamiques que j'utilise après lecture des préférences qui mémorise les éléments du menu qui peut évoluer.

Code : Tout sélectionner

      For i = #PopupImageMenu_favoris_Debut_Favoris To #PopupImageMenu_favoris_Fin_Favoris
                  BindMenuEvent(#PopupImageMenu_Favoris, i, @OnPopupImageMenu_favoris__Favoris())
      Next
Répondre