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()

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.

...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
Publié : jeu. 20/avr./2006 13:33
par olivier
Merci à vous deux.
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à....

Publié : lun. 15/mai/2006 9:40
par olivier
Et voilà, j'ai trouvé.
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
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