Problême avec un menu popup

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ulix
Messages : 315
Inscription : ven. 04/juin/2004 14:27
Localisation : Frontignan

Problême avec un menu popup

Message par Ulix »

Bonjour a tous,

J'ai besoin d'un peu d'aide.
Je n'arrive pas a déterminé si mon problême ( Ouverture d'un menu popup aprés l'affichage et la fermeture d'une fenetre) provient d'un bug, ou alors de ma programmation (oublie d'une instruction, mauvaise structure de programme vis a vis de l'appel de la 2eme fenetre ?)

Tester le code ci aprés et dite moi où je me suis planté ! :oops:

Note: c'est un programme sur le quel je bosse, j'ai envelé tous le code qui n'était pas indispensable pour la démonstration et j'ai conservé la structure du programme.


[code]

Enumeration
#Fenetre1:#Fenetre2
;menu
;menupopup
#MenuPopup3:#MenuPopup3Modifier:#MenuPopup3Supprimer:#MenuPopup3Couper
#MenuPopup3Coller:#MenuPopup3AjouterSous
;gadget
#Button1:#TreeGadget:#Fenetre1StatusBar
#Fenetre2Button1:#Fenetre2Button2
EndEnumeration

Procedure Fenetre1Creation()
If OpenWindow(#Fenetre1, 100, 150, 1024 ,749, #PB_Window_SystemMenu| #PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget, "C.S.Programme")

;menu
;menu popup
If CreatePopupMenu(#MenuPopup3)
MenuItem(#MenuPopup3Modifier ,"Modifier")
MenuItem(#MenuPopup3Supprimer ,"Supprimer")
MenuBar()
MenuItem(#MenuPopup3Couper ,"Couper")
MenuItem(#MenuPopup3Coller ,"Coller")
MenuBar()
MenuItem(#MenuPopup3AjouterSous ,"Ajouter sous")
EndIf

If CreateGadgetList(WindowID())
ButtonGadget(#Button1, 20, 70, 100, 40, "Une fenetre", #PB_Button_MultiLine)

TreeGadget (#TreeGadget, 170, 50, 200, 500, #PB_Tree_AlwaysShowSelection ) ;#PB_Tree_CheckBoxes|
SendMessage_(GadgetID(#TreeGadget),$111D,0,12189133);colorise le fond
EndIf

If CreateStatusBar(#Fenetre1StatusBar,WindowID())
AddStatusBarField(200)
AddStatusBarField(600)
EndIf

EndIf
EndProcedure

Procedure Proc_AccesFenetre()



EndProcedure


Procedure StatusInfo(Text1.s,Text2.s) ; Affiche les infos dans la statue barre
StatusBarText(#Fenetre1StatusBar,0,Text1)
StatusBarText(#Fenetre1StatusBar,1,Text2)
EndProcedure

Procedure RempliTree()


For a=0 To 10
AddGadgetItem (#TreeGadget, -1, "Normal Item "+Str(a)) ; if you want to add an image, use
AddGadgetItem (#TreeGadget, -1, "Noeud "+Str(a)) ; UseImage(x) as 4th parameter
OpenTreeGadgetNode(#TreeGadget)
AddGadgetItem(#TreeGadget, -1, "Sub-Item 1")
AddGadgetItem(#TreeGadget, -1, "Sub-Item 2")
AddGadgetItem(#TreeGadget, -1, "Sub-Item 3")
AddGadgetItem(#TreeGadget, -1, "Sub-Item 4")
CloseTreeGadgetNode(#TreeGadget)
AddGadgetItem (#TreeGadget, -1, "File "+Str(a))
Next

EndProcedure


Procedure.b AjoutFenetre()
If OpenWindow(#Fenetre2, 238, 141, 486,200, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Ajout d'une fenétre")
If CreateGadgetList(WindowID())

ButtonGadget(#Fenetre2Button1, 360, 100, 100, 30, "Ok")
ButtonGadget(#Fenetre2Button2, 360, 150, 100, 30, "Annuler")
EndIf

EndIf



Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget ; Evenement gadget
Select EventGadgetID(); retourne le numero du gadget
Case #Fenetre2Button2 :CloseWindow(#Fenetre2): ProcedureReturn 0
Case #Fenetre2Button1 :CloseWindow(#Fenetre2): ProcedureReturn 1
EndSelect

Case #PB_EventCloseWindow
CloseWindow(#Fenetre2): ProcedureReturn 0
EndSelect
ForEver

EndProcedure

;{/ traitement des menus et evénements
Fenetre1Creation()
ShowWindow_(WindowID(),#SW_MAXIMIZE)
RempliTree()


Repeat
Select WaitWindowEvent()
;Case #WM_RBUTTONDOWN :
;If EventGadgetID()=#TreeGadget: DisplayPopupMenu(#MenuPopup3,WindowID()):EndIf ; Le bouton droit de la souris a été clické =>

Case #PB_EventMenu; evenement menu
Select EventMenuID() ; retourne le numero du menu
;menu fichier
;Case #MenuNouveauProjet :Menu_NouveauProjet()
;menu popup
Case #MenuPopup3Modifier ;:;MenuPopup3_Modifier()
Case #MenuPopup3Supprimer ;:MenuPopup3_Supprimer()
Case #MenuPopup3Couper ;:MenuPopup3_Couper()
Case #MenuPopup3Coller ;:MenuPopup3_Coller()
Case #MenuPopup3AjouterSous ;:MenuPopup3_AjouterSous()
EndSelect
Case #PB_Event_Gadget ; Evenement gadget
Select EventGadgetID(); retourne le numero du gadget
Case #Button1 : AjoutFenetre()
Case #TreeGadget
If EventType()=#PB_EventType_RightClick

Debug "evement = "+Str(EventType()) ;evenement bien détecter
Debug "valide = "+Str(IsMenu(#MenuPopup3));gadget valide

DisplayPopupMenu(#MenuPopup3, WindowID())
;HideMenu(#MenuPopup3, 0) ;ça marche pas, ni avant, ni aprés

Else
LigneSelectionneAbre=GetGadgetState(#TreeGadget);recherche position
If LigneSelectionneAbre<>-1
;SelectElement(Plans(), LigneSelectionneArbre)
;NiveauDeLaSelection=Plans()\Niveau
;affiche info
Texte1$=Str(LigneSelectionneAbre)+"/"+Str(CountGadgetItems(#TreeGadget)-1)
Texte2$="Niveau de la selection = "+Str(NiveauDeLaSelection)
StatusInfo(Texte1$,Texte2$)
EndIf
EndIf

EndSelect
Case #PB_EventCloseWindow
quit=1:;Menu_QuitterProjet()

EndSelect
;ForEver
Until quit=1; si 1 alors fin de boucle
End

[/code]

Merci d'avance, et n'hésités pas a me proposé des solutions.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Remplace:

Code : Tout sélectionner

DisplayPopupMenu(#MenuPopup3, WindowID()) 
Par:

Code : Tout sélectionner

DisplayPopupMenu(#MenuPopup3, GadgetID(#TreeGadget)) 
Avatar de l’utilisateur
Ulix
Messages : 315
Inscription : ven. 04/juin/2004 14:27
Localisation : Frontignan

Message par Ulix »

Merci Nico,

J'ai galèrer pendant des heures, est la solution était de rattaché le menu popup au gadget et pas à la fenetre. Une erreur grosse comme une maison, et je la voyais pas !
Merci encore Nico, j'apprécis beaucoup ! :lol:
Répondre