Page 1 sur 1

[RESOLU] Il n'y a pas de gadgetList actuellement .....

Publié : ven. 08/avr./2011 15:36
par falsam
Bonjour, Je voudrais, quand on clique sur un bouton d'une fenêtre, pouvoir créer un gadget sur une autre fenêtre. Dans d'autres langages il est possible d'indiquer la fenêtre parent au moment de la création mais je ne sais pas comment faire avec Pure Basic. J'ai pensé que prendre le focus sur la fenêtre concernée aller résoudre le problème mais ça n'a pas été le cas.

Code simple pour illustrer ma demande.

Code : Tout sélectionner

Enumeration
  #Window1
  #Button
  
  #Window2
EndEnumeration

Procedure Window1()
  OpenWindow(#Window1,0,0,800,600,"Nouvelle application",#PB_Window_ScreenCentered |#PB_Window_SizeGadget | #PB_Window_SystemMenu)
EndProcedure

Procedure Window2()
  OpenWindow(#Window2,0,0,500,400,"Nouvelle application",#PB_Window_ScreenCentered |#PB_Window_SizeGadget | #PB_Window_SystemMenu)
  ButtonGadget(#Button,20,20,80,20,"Test")
EndProcedure

Window1()
Window2()

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Button
          CloseWindow(#Window2)
          ButtonGadget(#PB_Any, 20,20,80,20,"Test")
          
      EndSelect
      
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver
Merci de votre aide.

Re: Il n'y a pas de gadgetList actuellement ..... mais alors

Publié : ven. 08/avr./2011 15:53
par dayvid
Un exemple:

Code : Tout sélectionner

Enumeration
  #Window1
  #Button
  
  #Window2
EndEnumeration

Procedure Window1(a)
  OpenWindow(#Window1,0,0,800,600,"Nouvelle application",#PB_Window_ScreenCentered |#PB_Window_SizeGadget | #PB_Window_SystemMenu)
  Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Button
          CloseWindow(#Window1)
          
          UseGadgetList(#Window2)
          ButtonGadget(#PB_Any, 20,20,80,20,"Test")
          
      EndSelect
      
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver
EndProcedure

Procedure Window2(b)
  OpenWindow(#Window2,0,0,500,400,"Nouvelle application",#PB_Window_ScreenCentered |#PB_Window_SizeGadget | #PB_Window_SystemMenu)
  ButtonGadget(#Button,20,20,80,20,"Test")
  Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Button
          CloseWindow(#Window2)
          ButtonGadget(#PB_Any, 20,20,80,20,"Test")
          
      EndSelect
      
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver
EndProcedure

a1 = CreateThread(@Window1(), 0)
a2 = CreateThread(@Window2(), 0)

WaitThread(a1)
WaitThread(a2)

Re: Il n'y a pas de gadgetList actuellement ..... mais alors

Publié : ven. 08/avr./2011 16:04
par falsam
Dayvid, merci de ton code. Il m'aura permis de me souvenir de UseGadgetList par contre ce n'est pas comme ça qu'il faut l'employer. Tu fais très très très très compliquer ......

Code : Tout sélectionner

Enumeration
  #Window1
  #Button
  
  #Window2
EndEnumeration

Procedure Window1()
  OpenWindow(#Window1,0,0,800,600,"Nouvelle application",#PB_Window_ScreenCentered |#PB_Window_SizeGadget | #PB_Window_SystemMenu)
EndProcedure

Procedure Window2()
  OpenWindow(#Window2,0,0,500,400,"Nouvelle application",#PB_Window_ScreenCentered |#PB_Window_SizeGadget | #PB_Window_SystemMenu)
  ButtonGadget(#Button,20,20,80,20,"Test")
EndProcedure

Window1()
Window2()

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Button
          UseGadgetList(WindowID(#Window1))
          ButtonGadget(#PB_Any, 20,100,80,20,"Test")
          
      EndSelect
      
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver

Re: Il n'y a pas de gadgetList actuellement .....

Publié : sam. 09/avr./2011 12:46
par dayvid
Pas de quoi Falsam, très heureux de t'avoir aider :D

Ah oui c'est carrément plus simple comme ceci
Cependant mon très cher amis, comment tu va faire pour générer
les évents de chaque gadget sur les deux fenêtre a la fois ?

Si tu ferme une fenêtre, l'autre se ferme également !
Bon je suis pas très douer c'est sur et je fait avec ce que je peut

Je te propose qu'on bosse ensemble sur un petit programme
d'exemple sur ce problème !

J'ai une demande particulier a faire ici même:

Je voudrait apprendre a me servir correctement des threads
et tous ce qui tourne autour:
CreateMutex
CreateSemaphore
CreateThread
FreeMutex
FreeSemaphore
IsThread
KillThread
LockMutex
PauseThread
ResumeThread
SignalSemaphore
ThreadID
ThreadPriority
TryLockMutex
TrySemaphore
UnlockMutex
WaitSemaphore
WaitThread
Car dans ce domaine je n'y connais pratiquement rien du tous
et je voudrait apprendre a me servir convenablement de tous ceci
Qu'en pense tu Falsam, je te propose que ensemble et ceux qu'il veule bien nous aider
de faire un petit programme de démonstration sur tous sa !

Ou même un tutoriel :P

Ou même les deux :wink:

Re: Il n'y a pas de gadgetList actuellement .....

Publié : sam. 09/avr./2011 18:00
par jbernard13
je peux peux etre vous aider ....

Re: Il n'y a pas de gadgetList actuellement .....

Publié : sam. 09/avr./2011 21:00
par falsam
dayvid a écrit :Cependant mon très cher amis, comment tu va faire pour générer
les évents de chaque gadget sur les deux fenêtre a la fois ?

Si tu ferme une fenêtre, l'autre se ferme également !
Bon je suis pas très douer c'est sur et je fait avec ce que je peut

Je te propose qu'on bosse ensemble sur un petit programme d'exemple sur ce problème !
Un code pour te montrer qu'il est inutile de passer par des thread (Je suis très soft) pour gérer la fermeture d'une des fenêtre.

Code : Tout sélectionner

Enumeration
  #Window1
  #Button1
  #Button2
  
  #Window2
EndEnumeration

Procedure Open_Window1()
  OpenWindow(#Window1,0,0,800,600,"Window1",#PB_Window_ScreenCentered |#PB_Window_SizeGadget | #PB_Window_SystemMenu)  
  ButtonGadget(#Button1,300,20,100,20,"Ouvre Window2")  
EndProcedure

Procedure Open_Window2()
  OpenWindow(#Window2,0,0,500,400,"Window2",#PB_Window_ScreenCentered |#PB_Window_SizeGadget | #PB_Window_SystemMenu)
  ButtonGadget(#Button2,20,20,80,20,"Test")
EndProcedure

Open_Window1()
Open_Window2()

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Button1
          Open_Window2()
          
        Case #Button2
          UseGadgetList(WindowID(#Window1))
          ButtonGadget(#PB_Any, 20,100,80,20,"Test")
          
      EndSelect
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Window2
          CloseWindow(#Window2)
          
        Case #Window1
          End
          
      EndSelect
   
  EndSelect
ForEver

Re: Il n'y a pas de gadgetList actuellement .....

Publié : sam. 09/avr./2011 21:17
par jbernard13
c'est mieux sans le Forever ....

Code : Tout sélectionner

Enumeration 
#Window1 
#Button1 
#Button2 

#Window2 
EndEnumeration 

Procedure Open_Window1() 
	OpenWindow(#Window1,0,0,800,600,"Window1",#PB_Window_ScreenCentered |#PB_Window_SizeGadget | #PB_Window_SystemMenu)   
	ButtonGadget(#Button1,300,20,100,20,"Ouvre Window2")   
EndProcedure 

Procedure Open_Window2() 
	OpenWindow(#Window2,0,0,500,400,"Window2",#PB_Window_ScreenCentered |#PB_Window_SizeGadget | #PB_Window_SystemMenu) 
	ButtonGadget(#Button2,20,20,80,20,"Test") 
EndProcedure 

Open_Window1() 
Open_Window2() 

Repeat 
	Select WaitWindowEvent() 
    Case #PB_Event_Gadget 
      Select EventGadget() 
        Case #Button1 
          Open_Window2() 
          
        Case #Button2 
          UseGadgetList(WindowID(#Window1)) 
          ButtonGadget(#PB_Any, 20,100,80,20,"Test") 
          
      EndSelect 
      
    Case #PB_Event_CloseWindow 
      Select EventWindow() 
        Case #Window2 
          CloseWindow(#Window2) 
          
        Case #Window1 
          Quitter =#True
          
          
      EndSelect 
      
  EndSelect 
Until Quitter
End

Re: Il n'y a pas de gadgetList actuellement .....

Publié : sam. 09/avr./2011 21:18
par falsam
jbernard13 a écrit :c'est mieux sans le Forever ....
Ha oui ? pour quelle raison ?

Re: Il n'y a pas de gadgetList actuellement .....

Publié : sam. 09/avr./2011 23:26
par GeBonet
Je ne sais pas si cela peut t'apporter un semblant de début de solution ?
Mais je passe d'une fenêtre à l'autre en gardant mes saisies !!!
Détails, quand on est dans une fenêtre "HideWindow(#Window1,Etat)" cache la fenêtre ou non selon "Etat"
Si on veux voir les deux ou une seule... Également dans le schéma ci après cela peux s'étendre à plus de fenêtre...
Et on n'est pas dans le schéma "Parents->fille" => MDIGadget()

Code : Tout sélectionner

;
; Passage d'une fenetre à l'autre et écrire dans les deux... 
;
Enumeration
  
  #Window1
	#Button0
	#Button1
	
	#Text1
	#String1 
	
	#Window2
	#Button2
	#Button3
	
	#Text2
	#String2
	
EndEnumeration

Global Text1$, Text2$

Procedure Open_Window1()
	OpenWindow(#Window1,0,0,600,600,"Window1",#PB_Window_ScreenCentered |#PB_Window_SizeGadget | #PB_Window_SystemMenu)  
	TextGadget(#Text1,20,100,160,20, "Ce texte est actif sur Windows2") 
  StringGadget(#String1,180,100,50,20,Text2$) 
	ButtonGadget(#Button0,300,10,120,20,"Ouvre Window2") 
	ButtonGadget(#Button1,20,20,80,20,"Test 1")
EndProcedure

Procedure Open_Window2()
  OpenWindow(#Window2,0,0,500,400,"Window2",#PB_Window_ScreenCentered |#PB_Window_SizeGadget | #PB_Window_SystemMenu)
  TextGadget(#Text2,20,100,160,20, "Ce texte est actif sur Windows2") 
  StringGadget(#String2,180,100,50,20,Text2$) 
	ButtonGadget(#Button2,200,30,120,20,"Passe à Windows1")
	ButtonGadget(#Button3,20,60,80,20,"Test 2")
EndProcedure

Open_Window1()
Open_Window2()

Repeat
	Select WaitWindowEvent()
	  Case #PB_Event_Gadget
	    
	    Select EventGadget()
	        
	      Case #Button0 
	        If Open_Window2()
	        Else: Open_Window2():EndIf   
				    SetActiveWindow(#Window2)
				    
        Case #Button1
				  If Open_Window2()
				  Else: Open_Window2():EndIf   
				    Text1$=GetGadgetText(#String1)
				    ;Debug Text1$
					  SetActiveWindow(#Window2)
					  UseGadgetList(WindowID(#Window2))
					  TextGadget(#Text2,20,100,160,20, "Ce texte est actif sur Windows2") 
					  StringGadget(#String2,180,100,50,20,Text2$) 

				; -------------------------------------------	
				Case #Button2
				  SetActiveWindow(#Window1)
				  
				Case #Button3
				  Text2$=GetGadgetText(#String2)
				  ;Debug Text2$
				  SetActiveWindow(#Window1)
				  UseGadgetList(WindowID(#Window1))
				  TextGadget(#Text1,20,100,160,20, "Et ici on est sur Windows1" )
				  StringGadget(#String1,200,100,50,20,Text1$) 
				  
			EndSelect
			; ----------------------------------
		Case #PB_Event_CloseWindow
			Select EventWindow()
				Case #Window2
					CloseWindow(#Window2)
					
				Case #Window1
		      Break 			
			EndSelect
	EndSelect
ForEver
End

Re: Il n'y a pas de gadgetList actuellement .....

Publié : dim. 10/avr./2011 0:37
par falsam
falsam a écrit :Dayvid, merci de ton code. Il m'aura permis de me souvenir de UseGadgetList
jbernard13 a écrit :je peux peux etre vous aider ....
@jbernard13 : Comme tu peux le voir, j'ai déjà remercié Dayvid pour sa réponse. Le sujet est donc clos. je ne me souvenais plus de la fonction UseGadgetList. :)

@Gebonet : Merci pour ton code, mais il ne répond pas à ma demande qui de plus est résolu.

Re: [RESOLU] Il n'y a pas de gadgetList actuellement .....

Publié : dim. 10/avr./2011 7:56
par GeBonet
@falsam
Ben voilà, j'en suis heureux pour toi... :lol:
Mais puisque résolu, alors qu'elle est la solution ? Ne serait-ce que pour, alors, comprendre la question ? :wink:
Car apparemment j'ai pas compris le problème ! :cry:
Merci

Re: [RESOLU] Il n'y a pas de gadgetList actuellement .....

Publié : lun. 11/avr./2011 12:40
par dayvid
En tous qu'a moi personne n'as l'air de vouloir m'aider :cry:

Je souhaite de l'aide sur tous ce qui conserne les thread :wink:
alors je vais poster ailleurs et voilà tous puisque ce sujet est clos :wink: