Page 1 sur 1

Comment savoir a quelle fenetre appartient un bouton

Publié : mar. 18/avr./2006 17:11
par olivier
Bien le bonjour messieur et mesdames

Bon ben tout est dit dans le titre, je balance un code qui donne rien mais qui sert de base a vos réponses...merci d'avance.

Code : Tout sélectionner

Enumeration 
   #fenetre_1   
   #fenetre_2
   #btn_1
   #btn_2
   
EndEnumeration

   
OpenWindow (#fenetre_1,10,10,200,200, "ess", #PB_Window_SystemMenu  )
CreateGadgetList ( WindowID (#fenetre_1))
ButtonGadget(#btn_1,5,5,80,20,"button fenetre 1")

OpenWindow (#fenetre_2,210,10,200,200, "ess", #PB_Window_SystemMenu  ,WindowID(0))
CreateGadgetList ( WindowID (#fenetre_2))
ButtonGadget(#btn_2,5,35,80,20,"button fenetre 2")

For idgadget=0 To #PB_Compiler_EnumerationValue
   If IsGadget(idgadget)
      Debug "id gadget : "+Str(idgadget)
      Debug "gadgettype : "+Str(GadgetType(idgadget))
      Debug "gadget_windows : ????"
   EndIf
Next

Repeat
   event= WaitWindowEvent ()
   Select event
      Case #PB_Event_Gadget ; *****************Choix d'un bouton
         idgadget=EventGadget()
         Select idgadget

         EndSelect
   EndSelect
Until event=#WM_CLOSE

Publié : mar. 18/avr./2006 17:37
par Flype
ben tu connais déjà EventType(), EventGadget(), et bien il y a aussi EventWindow() :D

Publié : jeu. 20/avr./2006 9:02
par olivier
Merci pour ta réponse.

Mais ça c'est quand tu récupère les évenements, mais la ce n'est pas le cas...regarde bien mon exemple. :D ...ou je n'ai pas compris ta réponse.... :?

Publié : jeu. 20/avr./2006 11:04
par AWEAR
Tu peux facilement récuperer le handle de la fenêtre (son "windowid()"), grâce à GetParent_(GadgetId(idgadget)), mais si tu veux son identifiant (0, 1, 2, etc..), là je ne sais pas.

Publié : jeu. 20/avr./2006 12:26
par Chris
GetParent() retourne le handle du parent direct. Si le gadget est sur un ContainerGagdet, c'est le handle du ContainerGadget qui est retourné.

Pour avoir le handle de la fenêtre qui supporte les gadgets, il faut utiliser

Code : Tout sélectionner

GetAncestor_(GadgetId(#Gadget), #GA_ROOT) ; #GA_ROOT vaut 2

Publié : jeu. 20/avr./2006 13:33
par olivier
Merci à vous deux. :D
En plus il me fallait les deux !

Code : Tout sélectionner

Enumeration
   #fenetre_1   
   #fenetre_2
   #btn_1
   #btn_2
   
EndEnumeration

   
OpenWindow (#fenetre_1,10,10,200,200, "ess", #PB_Window_SystemMenu  )
CreateGadgetList ( WindowID (#fenetre_1))
ButtonGadget(#btn_1,5,5,80,20,"button fenetre 1")

OpenWindow (#fenetre_2,210,10,200,200, "ess", #PB_Window_SystemMenu  ,WindowID(0))
CreateGadgetList ( WindowID (#fenetre_2))
ButtonGadget(#btn_2,5,35,80,20,"button fenetre 2")

For idgadget=0 To #PB_Compiler_EnumerationValue
   If IsGadget(idgadget)
      Debug "id gadget : "+Str(idgadget)
      Debug "gadgettype : "+Str(GadgetType(idgadget))
      Debug "gadget_windows : " + Str (GetParent_(GadgetID(idgadget))) +"normalement "+Str(WindowID(#fenetre_1))+" ou "+Str(WindowID(#fenetre_2))
      Debug "ou alors : " + Str (GetAncestor_(GadgetID(idgadget), 2)) +"normalement "+Str(WindowID(#fenetre_1))+" ou "+Str(WindowID(#fenetre_2))
   EndIf
Next

Repeat
   event= WaitWindowEvent ()
   Select event
      Case #PB_Event_Gadget ; *****************Choix d'un bouton
         idgadget=EventGadget()
         Select idgadget
            
         EndSelect
   EndSelect
Until event=#WM_CLOSE 

Publié : jeu. 20/avr./2006 13:35
par olivier
...Suite.....
Et pour avoir l'onglet du panel dans lequel est un bouton ? :?

Publié : jeu. 20/avr./2006 14:32
par Chris
olivier a écrit :...Suite.....
Et pour avoir l'onglet du panel dans lequel est un bouton ? :?
Alors là.... 8O

Publié : lun. 15/mai/2006 9:40
par olivier
Et voilà, j'ai trouvé. :D

Code : Tout sélectionner

Procedure GetGadgetTab(Id_gadget)
   retour=-1
   tab.tc_item
   tab\MASK=12 ; j'ai mis cela presque au hazard et ça marche mais je ne sais pas pourquoi ???? et si on change la valeur cela ne donne pas la même chose.....
   
   id_panel=GetParent_(GetParent_(GadgetID(Id_gadget)))
   nb_panel=SendMessage_(id_panel,#TCM_GETITEMCOUNT,0,0)
   
   For i=0 To nb_panel-1
      SendMessage_(id_panel,#TCM_GETITEM,i,@tab) 
      If tab\lParam=GetParent_(GadgetID(Id_gadget))
         retour=i
         i=nb_panel-1
      EndIf
      
   Next
   ProcedureReturn retour
EndProcedure

Publié : lun. 15/mai/2006 12:29
par Flype
bravo pour ta persévérence :D
olivier a écrit :tab\MASK=12 ; j'ai mis cela presque au hazard et ça marche mais je ne sais pas pourquoi ???? et si on change la valeur cela ne donne pas la même chose.....
j'ai cherché un peu et d'après msdn, mask devrait etre 8 ( #TCIF_PARAM )

Code : Tout sélectionner

Procedure GetGadgetTab(gadget) 
  
  Protected hParent.l, hPanel.l, nPanel.l
  Protected tab.TC_ITEM\mask = #TCIF_PARAM
  
  hParent = GetParent_(GadgetID(gadget))
  hPanel  = GetParent_(hParent)
  nPanel  = SendMessage_(hPanel, #TCM_GETITEMCOUNT, 0, 0)
  
  For item = 0 To nPanel - 1
    If SendMessage_(hPanel, #TCM_GETITEM, item, @tab) And tab\lParam = hParent
      ProcedureReturn item
    EndIf 
  Next
  
  ProcedureReturn -1
  
EndProcedure

Publié : lun. 15/mai/2006 14:30
par olivier
Ha oui c'est plus jolie comme cela !

Meci Flype