Re en panne avec menupopup

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

Re en panne avec menupopup

Message par Ulix »

Salut a tous,

Je suis denouveau en panne.
Si maintenant le menupopup réapparait après l'affichage et la fermeture
d'une 2eme fenetre (il fallait lié le menu au gadget) je suis incapable
de détecté les évenement du menupopup. :oops:

Où se font-ils, et comment les gérés ? Vous avez une idée :idea:
ou une solution ?
Essayer le code ci-joint et dit moi ce qui ne va pas.
Merci d'avance !

Code : Tout sélectionner


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 EnTravaux()
Titre$="En travaux...":Texte$="Désolè, cette fonction n'est pas réalisée !"
MessageRequester(Titre$, Texte$, #PB_MessageRequester_Ok )
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				:EnTravaux();:;MenuPopup3_Modifier()
			                    Case #MenuPopup3Supprimer			:EnTravaux();:MenuPopup3_Supprimer()
			                    Case #MenuPopup3Couper				:EnTravaux();:MenuPopup3_Couper()
			                    Case #MenuPopup3Coller					:EnTravaux();:MenuPopup3_Coller()
			                    Case #MenuPopup3AjouterSous 			:EnTravaux();: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
							                    			
			                    							;ici était le problême du menu popup qui ne se réaffiché pas
							                    			;solution donné par Nico, remplacé  => DisplayPopupMenu(#MenuPopup3, WindowID()) 	
		 			                    					;par la ligne desous :		                    					
					                    			 		DisplayPopupMenu(#MenuPopup3, GadgetID(#TreeGadget))
		 			                    					;Toutefois les evenements menu ne sont plus détectés
					                    			 		
					                    			 	
		 			                    												                    			
		                                             Else 
		              							LigneSelectionneAbre=GetGadgetState(#TreeGadget);recherche position
									          			If LigneSelectionneAbre<>-1 ;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]
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

La solution que je t'avais donné n'est pas bonne alors supprime là:
DisplayPopupMenu(#MenuPopup3, GadgetID(#TreeGadget))

et rajoute ça:

Code : Tout sélectionner

Procedure CB(Window, Message, wParam, lParam) 
  result = #PB_ProcessPureBasicEvents     
  Select Message
    Case #WM_NOTIFY 
      *info.NMTTDISPINFO=lParam 
      Select  *info\hdr\hwndFrom
        Case GadgetID(#TreeGadget) 
          Select *info\hdr\code
            Case #NM_RCLICK
              DisplayPopupMenu(#MenuPopup3,Window) 
              ProcedureReturn 0
          EndSelect
      EndSelect 
  EndSelect 
  
  ProcedureReturn result 
EndProcedure 

et la aussi:

Code : Tout sélectionner

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") 
    SetWindowCallback(@CB())  ; rajoute cette ligne
Maintenant, ça marche réellement. :)
Avatar de l’utilisateur
Ulix
Messages : 315
Inscription : ven. 04/juin/2004 14:27
Localisation : Frontignan

Message par Ulix »

Merci encore Nico,

C'est fois tout est opérationnel !
Je ne pensé pas que l'utilisation d'une callback était nécessaire.
Sans tes conseils je n'y serais jamais arrivé !
Un grand merci. :lol:
Répondre