RESOLUS PAR FALSAM] Il n'y pas de gadget list actuellement

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

RESOLUS PAR FALSAM] Il n'y pas de gadget list actuellement

Message par microdevweb »

J'ai remis mon problème dans un petit exemple. J'ai donc le message d'erreur suivant après un clic sur le Bouton valider de la deuxième fenêtre
Il n'y pas de gadget list actuellement

Comment faire

Code : Tout sélectionner

Procedure OuvreMainWindows()
      OpenWindow(0, 0, 0,800,600,"Teste",#PB_Window_SystemMenu|#PB_Window_Maximize)
       ButtonGadget(1, 360, 115, 100, 25, "Teste")
EndProcedure
Procedure OuvreNewSceneWindows()
      Protected NumScene$,NbrScene,Nb
      gNewSceneWindows = OpenWindow(1, 0, 0, 480, 155, "Nouvelle scene", #PB_Window_SystemMenu | #PB_Window_WindowCentered)
      TextGadget(1, 10, 0, 100, 25, "Nom:")
      StringGadget(2, 10, 30, 460, 25, "")
      ButtonGadget(3, 360, 115, 100, 25, "Valider")
      ButtonGadget(4, 250, 115, 100, 25, "Annuler")
      SetActiveGadget(1)
EndProcedure
OuvreMainWindows()
Exit.b=#False
Repeat
      Event=WaitWindowEvent()
      Select EventWindow()
            Case 0 ;Main windows
                  Select Event
                        Case #PB_Event_CloseWindow
                              Exit=#True
                        Case  #PB_Event_Gadget
                              If EventGadget()=1 ; Bt teste
                                    OuvreNewSceneWindows()
                                    DisableWindow(0,1) ;Désactive Main windows
                              EndIf
                  EndSelect
            Case 1 ;Other windows 
                  Select Event
                        Case #PB_Event_CloseWindow
                              CloseWindow(1) ; Close other windows
                              DisableWindow(0,0) ;Réactive Main windows
                              SetActiveWindow(0);Done le focus à main windows
                        Case #PB_Event_Gadget
                              Select EventGadget()
                                    Case 4 ;Bt Annuler
                                          CloseWindow(1) ; Close other windows
                                          DisableWindow(0,0) ;Réactive Main windows
                                          SetActiveWindow(0);Done le focus à main windows
                                    Case 3 ;Bt Valdier
                                          CloseWindow(1) ; Close other windows
                                          DisableWindow(0,0) ;Réactive Main windows
                                          SetActiveWindow(0);Done le focus à main windows
                                          CanvasGadget(1,0,0,500,500)
                              EndSelect
                              
                  EndSelect
      EndSelect
Until Exit=#True

Merci a falsam et Mesa

Solution utiliser UseGadgetList(WindowID())
Dernière modification par microdevweb le ven. 25/avr./2014 11:44, modifié 4 fois.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Il n'y pas de gadget list actuellement

Message par Mesa »

bizarre, je n'ai pas eu ce message d'erreur, mais avec quelques modifs mineures, ça fonctionne chez moi :

Code : Tout sélectionner

Procedure OuvreMainWindows()
			OpenWindow(0, 0, 0,800,600,"Teste",#PB_Window_SystemMenu|#PB_Window_Maximize)
				ButtonGadget(0, 360, 115, 100, 25, "Test") ;<-------
EndProcedure
Procedure OuvreNewSceneWindows()
			Protected NumScene$,NbrScene,Nb
			gNewSceneWindows = OpenWindow(1, 0, 0, 480, 155, "Nouvelle scene", #PB_Window_SystemMenu | #PB_Window_WindowCentered)
			TextGadget(1, 10, 0, 100, 25, "Nom:")
			StringGadget(2, 10, 30, 460, 25, "")
			ButtonGadget(3, 360, 115, 100, 25, "Valider")
			ButtonGadget(4, 250, 115, 100, 25, "Annuler")
			SetActiveGadget(2) ;<-----------
EndProcedure
OuvreMainWindows()
Exit.b=#False
Repeat
			Event=WaitWindowEvent()
			Select EventWindow()
						Case 0 ;Main windows
									Select Event
												Case #PB_Event_CloseWindow
															Exit=#True
												Case  #PB_Event_Gadget
															If EventGadget()=0 ; Bt teste
																		OuvreNewSceneWindows()
																		DisableWindow(0,1) ;Désactive Main windows
															EndIf
									EndSelect
						Case 1 ;Other windows 
									Select Event
												Case #PB_Event_CloseWindow
															CloseWindow(1) ; Close other windows
															DisableWindow(0,0) ;Réactive Main windows
															SetActiveWindow(0);Donne le focus à main windows
												Case #PB_Event_Gadget
															Select EventGadget()
																		Case 4 ;Bt Annuler
																					CloseWindow(1) ; Close other windows
																					DisableWindow(0,0) ;Réactive Main windows
																					SetActiveWindow(0);Done le focus à main windows
																		Case 3 ;Bt Valdier
																					CloseWindow(1) ; Close other windows
																					DisableWindow(0,0) ;Réactive Main windows
																					SetActiveWindow(0);Donne le focus à main windows
																					;---->CanvasGadget(1,0,0,500,500)
															EndSelect
															
									EndSelect
			EndSelect
Until Exit=#True


M.
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Il n'y pas de gadget list actuellement

Message par microdevweb »

Bonjour Messa,

Cela fonctionne parce que tu à commenter

Code : Tout sélectionner

CanvasGadget(1,0,0,500,500)
et c'est évidement ce qui bloque, mais je dois ajouter un gadget dynamiquement après l'ouverture du fenêtre et c'est la que ca bloque
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Il n'y pas de gadget list actuellement

Message par microdevweb »

Voila une solution que j'ai trouvée (peut-être pas la plus propre mais cela fonctionne) ajouter un container

Code : Tout sélectionner

Procedure OuvreMainWindows()
      OpenWindow(0, 0, 0,800,600,"Teste",#PB_Window_SystemMenu|#PB_Window_Maximize)
      ContainerGadget(0,0,0,800,600) ;-----> Container ajouter
      ButtonGadget(1, 360, 115, 100, 25, "Teste")
      CloseGadgetList()
EndProcedure
Procedure OuvreNewSceneWindows()
      Protected NumScene$,NbrScene,Nb
      gNewSceneWindows = OpenWindow(1, 0, 0, 480, 155, "Nouvelle scene", #PB_Window_SystemMenu | #PB_Window_WindowCentered)
      TextGadget(1, 10, 0, 100, 25, "Nom:")
      StringGadget(2, 10, 30, 460, 25, "")
      ButtonGadget(3, 360, 115, 100, 25, "Valider")
      ButtonGadget(4, 250, 115, 100, 25, "Annuler")
      SetActiveGadget(2)
EndProcedure
OuvreMainWindows()
Exit.b=#False
Repeat
      Event=WaitWindowEvent()
      Select EventWindow()
            Case 0 ;Main windows
                  Select Event
                        Case #PB_Event_CloseWindow
                              Exit=#True
                        Case  #PB_Event_Gadget
                              If EventGadget()=1 ; Bt teste
                                    OuvreNewSceneWindows()
;                                     DisableWindow(0,1) ;Désactive Main windows
                              EndIf
                  EndSelect
            Case 1 ;Other windows 
                  Select Event
                        Case #PB_Event_CloseWindow
                              CloseWindow(1) ; Close other windows
                              DisableWindow(0,0) ;Réactive Main windows
                              SetActiveWindow(0);Done le focus à main windows
                        Case #PB_Event_Gadget
                              Select EventGadget()
                                    Case 4 ;Bt Annuler
                                          CloseWindow(1) ; Close other windows
;                                           DisableWindow(0,0) ;Réactive Main windows
                                          SetActiveWindow(0);Done le focus à main windows
                                    Case 3 ;Bt Valdier
                                          CloseWindow(1) ; Close other windows
;                                           DisableWindow(0,0) ;Réactive Main windows
                                             SetActiveWindow(0);Done le focus à main windows
                                            OpenGadgetList(0) ;-------------> ouverture du container
                                            CanvasGadget(1,0,0,500,500)
                              EndSelect
                              
                  EndSelect
      EndSelect
Until Exit=#True

Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [PRESQUE RESOLUS] Il n'y pas de gadget list actuellement

Message par falsam »

microdevweb tu as un souci de compréhension sur la gestion des événements et les énumérations de gadgets.

■ Prends l'habitude d'intercepter les événements au début de ta boucle événementielle.

Code : Tout sélectionner

Repeat
  ;Intercepte l'ensemble des évenements ici !! 
  Event=WaitWindowEvent(100)
  WEvent = EventWindow() ;Quel est la fenetre qui déclenche l'évenement
  GEVent = EventGadget() ;QUel est le gadget qui déclenche un évenement
  
■ Deux gadgets se trouvant dans une fenêtre ou répartis sur deux fenêtres ne peuvent PAS avoir la même énumération.
Dans ton code le ButtonGadget teste et le StringGadget de ta deuxiéme fenêtre avaient la même énumération.

Ton débuger te donnait la solution en te disant qu'il n'y avait pas de gadgetlist ouvert actuellement.
Utilise dans ce cas UseGadgetList()

Code : Tout sélectionner

UseGadgetList(WindowID(0))
Ton code corrigé et plus court avec un remaniement de ta boucle événementielle.

Code : Tout sélectionner

Procedure OuvreMainWindows()
  OpenWindow(0, 0, 0,800,600,"Teste",#PB_Window_SystemMenu|#PB_Window_Maximize)
  ButtonGadget(1, 360, 115, 100, 25, "Teste")
EndProcedure

Procedure OuvreNewSceneWindows()
  
  Protected NumScene$,NbrScene,Nb
  gNewSceneWindows = OpenWindow(1, 0, 0, 480, 155, "Nouvelle scene", #PB_Window_SystemMenu | #PB_Window_WindowCentered)
  
  TextGadget(2, 10, 0, 100, 25, "Nom:")
  StringGadget(3, 10, 30, 460, 25, "")
  ButtonGadget(4, 360, 115, 100, 25, "Valider")
  ButtonGadget(5, 250, 115, 100, 25, "Annuler")
  
  SetActiveGadget(3)
EndProcedure

OuvreMainWindows()

;-Boucle évenementielle
Repeat
  ;Intercepte l'ensemble des évenements ici !! 
  Event=WaitWindowEvent(100)
  WEvent = EventWindow() ;Quel est la fenetre qui déclenche l'évenement
  GEVent = EventGadget() ;QUel est le gadget qui déclenche un évenement
  
  Select Event  
      
    ;-Evenements fenetre
    Case #PB_Event_CloseWindow
      Select WEvent ; Quel est la fenetre qui a provoqué l'évenement de fermerture  
        Case 0
          Exit=#True
                  
        Case 1
          SetActiveWindow(0)
          DisableWindow(0, #False) ;Réactive Main windows
          CloseWindow(1)
          
      EndSelect
      
    ;-Evenement gadget                              
    Case  #PB_Event_Gadget
      Select GEvent
        Case 1 ; Bt teste
          OuvreNewSceneWindows()
          DisableWindow(0,1) ;Désactive Main windows    
          
        Case 3
          
        Case 4 ;Bt Valdier
          SetActiveWindow(0)
          DisableWindow(0, #False) ;Réactive Main windows
          CloseWindow(1) ; Close other windows  
          
          UseGadgetList(WindowID(0))
          NewGadget = CanvasGadget(#PB_Any,0,0,200,200)
                     
        Case 5 ;Bt Annuler
          DisableWindow(0, #False) ;Réactive Main windows
          CloseWindow(1) ; Close other windows  
           
      EndSelect
  EndSelect
Until Exit=#True
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: [PRESQUE RESOLUS] Il n'y pas de gadget list actuellement

Message par microdevweb »

Bonjour Falsam,

Merci pour ces remarques constructives :lol:

NB: C'est un exemple fait à la vas vite pour expliquer mon soucis, j'utilise de préférence #PB_Any pour mes gadgets
Dernière modification par microdevweb le ven. 25/avr./2014 11:10, modifié 1 fois.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: [PRESQUE RESOLUS] Il n'y pas de gadget list actuellement

Message par Mesa »

Et comme ça ?

Code : Tout sélectionner

Global Dim gadgets(10)
Global Indexgadget=5

Procedure OuvreMainWindows()
  OpenWindow(0, 0, 0,800,600,"Teste",#PB_Window_SystemMenu|#PB_Window_Maximize)
  gadgets(0)=ContainerGadget(#PB_Any,0,0,800,600) ;-----> Container ajouter
  gadgets(1)=ButtonGadget(#PB_Any, 10, 10, 100, 25, "Teste")
  CloseGadgetList()
EndProcedure
Procedure OuvreNewSceneWindows()
  Protected NumScene$,NbrScene,Nb
  gNewSceneWindows = OpenWindow(1, 0, 0, 480, 155, "Nouvelle scene", #PB_Window_SystemMenu | #PB_Window_WindowCentered)
  gadgets(2)=TextGadget(#PB_Any, 10, 0, 100, 25, "Nom:")
  gadgets(3)=StringGadget(#PB_Any, 10, 30, 460, 25, "")
  gadgets(4)=ButtonGadget(#PB_Any, 360, 115, 100, 25, "Valider")
  gadgets(5)=ButtonGadget(#PB_Any, 250, 115, 100, 25, "Annuler")
  SetActiveGadget(gadgets(3))
EndProcedure
OuvreMainWindows()
Exit.b=#False
Repeat
  Event=WaitWindowEvent()
  Select EventWindow()
    Case 0 ;Main windows
      Select Event
        Case #PB_Event_CloseWindow
          Exit=#True
        Case  #PB_Event_Gadget
          If EventGadget()=gadgets(1) ; Bt teste
            OuvreNewSceneWindows()
            ;                                     DisableWindow(0,1) ;Désactive Main windows
          EndIf
      EndSelect
    Case 1 ;Other windows 
      Select Event
        Case #PB_Event_CloseWindow
          CloseWindow(1) ; Close other windows
          DisableWindow(0,0) ;Réactive Main windows
          SetActiveWindow(0);Donne le focus à main windows
        Case #PB_Event_Gadget
          Select EventGadget()
            Case gadgets(5) ;Bt Annuler
              CloseWindow(1) ; Close other windows
              ;                                           DisableWindow(0,0) ;Réactive Main windows
              SetActiveWindow(0);Donne le focus à main windows
            Case gadgets(4) ;Bt Valdier
              CloseWindow(1) ; Close other windows
              ;                                           DisableWindow(0,0) ;Réactive Main windows
              SetActiveWindow(0);Donne le focus à main windows
              OpenGadgetList(gadgets(0)) ;-------------> ouverture du container
              Indexgadget=Indexgadget+1
              gadgets(Indexgadget)=CanvasGadget(#PB_Any,120+Random(255,3),0+Random(255,3),500,500)
              CloseGadgetList()
              If StartDrawing(CanvasOutput(gadgets(Indexgadget)))
                Box(0, 0, 500, 500, RGB(Random(255), Random(255), Random(255)))
                StopDrawing()
              EndIf
              
          EndSelect
          
      EndSelect
  EndSelect
Until Exit=#True

M.
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: [PRESQUE RESOLUS] Il n'y pas de gadget list actuellement

Message par microdevweb »

Merci Mesa je vais tester.

Petite question Falsam,
Je sépare mon code en pbi (habitude Windev peut'être) suivant les différentes fenêtres
exemple

main.pb
mainWindows.pbi
sceneWindows.pbi

etc...

ce type de gestion événementielle te semble t'il correct ?

Code : Tout sélectionner

Repeat
      EtatToolsScene()
      gEvent=WaitWindowEvent()
      Select EventWindow()
            Case gMainWindows
                  EventMain(gEvent)
            Case gSceneWindows
                  EventScene(gEvent)
      EndSelect
Until gExit=#True

Code : Tout sélectionner

Procedure EventMain(Event)
      Select Event
            Case #PB_Event_CloseWindow
                  gExit=#True
            Case #PB_Event_Menu
                  MenuEventMain(EventMenu())
            Case #PB_Event_SizeWindow
                  ResizeMain()
            Case #PB_Event_Gadget
                  GadgetEventMain(EventGadget())
      EndSelect
EndProcedure
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: RESOLUS PAR FALSAM] Il n'y pas de gadget list actuelleme

Message par Backup »

pourquoi chercher a mettre ta gestion des evenements dans une procedure !??

une procedure c'est une perte de temps car
le programme va empiler les paramètres sur la pile ... effectuer le traitement de la procedure ..... depiler la pile pour retrouver l'etat d'avant l'appel a la procedure !

bref , une perte de temps (machine) a l’empilement et au dépilement !

la meilleur façon de gerer les événements c'est de faire comme l'aide :

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 230, 90, "Exemple de gestion des évènements...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	
	ButtonGadget  (1, 10, 10, 200, 20, "Cliquez moi")
	CheckBoxGadget(2, 10, 40, 200, 20, "Cochez  moi")
	
	If CreateMenu(0, WindowID(0))
		MenuTitle("Menu")
		MenuItem(1, "Item 1")
		MenuItem(2, "Item 2")
		MenuItem(3, "Item 3")
	EndIf
	
	Repeat
		Event = WaitWindowEvent()
		
		Select Event
			
			Case #PB_Event_Gadget
			Select EventGadget()
				Case 1 
				Debug "Bouton cliqué !"
				Case 2 
				Debug "Case à cocher cliquée !"
			EndSelect
			
			Case #PB_Event_Menu
			Select EventMenu()
				Case 1 
				Debug "Menu item 1 cliqué !"
				Case 2 
				Debug "Menu item 2 cliqué !"
				Case 3 
				Debug "Menu item 3 cliqué !"
			EndSelect
			
		EndSelect
	Until Event = #PB_Event_CloseWindow
EndIf
; Epb



les procedures, ne devraient servir qu'a l’exécution d'un algorithme , un traitement, d'une moulinettes ...etc ... (procedure =Fonction() )
mais en aucun cas pour traiter les Événements ,
pouvoir faire une chose, ne signifie pas que c'est judicieux de le faire ....

pour moi , l'exemple ci dessus extrait de la Doc Purebasic a "WaitWindowEvent()" ... est la meilleur démarche a suivre ! :)
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: RESOLUS PAR FALSAM] Il n'y pas de gadget list actuelleme

Message par G-Rom »

bref , une perte de temps (machine) a l’empilement et au dépilement !
Tu as quoi comme PC ? , un T05 ? pour les petites appli l'exemple est très bien , mais dès que c'est gros , vaut mieux séparé les tâches proprement dans des fonctions.
c'est pas en appelant des proc pour les event que tu vas faire sauté la pile... :mrgreen:
On sent bien le vieux briscard :D
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: RESOLUS PAR FALSAM] Il n'y pas de gadget list actuelleme

Message par microdevweb »

Perso, j'ai du travailler pendant deux ans sur un gros projet (6 développeurs 2 chefs de projet) ce n'étais évidement pas en PB mais la consigne était simple, structurer au maximum le programme en procédures. J'ai donc garder cette habitude. Je me vois mal dans un programme de plusieurs milliers de ligne ne structurer le code de la sorte. :P
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: RESOLUS PAR FALSAM] Il n'y pas de gadget list actuelleme

Message par Backup »

je ne vois pas le probleme !

une boucle principale qui gere les events

chaque event appel sa procedure ...

c'est tout simplement la base du codage procedurale comme ça c'est toujours fait !
et que je sache , Purebasic est un langage procedurale ...

mettre la gestion des events dans des procdures, c'est le debut des emmerdes ...

les events peuvent avoir changé pendant l'appel d'une procedure, et avoir un contexte différent lors de l'appel d'une autre procedure
(multithreading par exemple )

en ayant la gestion des events dans la boucle principale, au moins on est sur de ce qui se passe

pour moi un prg bien fait c'est :
************************
-initialisation
.....
.......

- debut de boucle principale

-gestion des events
select case ; en fonction de l'event
case 1
appel procedure pour le cas 1
case 2
appel procedure pour le cas 2
case 3
appel procedure pour le cas 3
case 4
appel procedure pour le cas 4
etc .....
endselect
fin_de boucle principale
End

************ Zone procedure ****************
procedure 1
blabla
endprocedure

procedure 2
blabla
endprocedure

procedure 3
blabla
endprocedure

procedure 4
blabla
endprocedure
plus simple, plus clair, tu meurt !

je ne sais pas ce que tu appel un Gros projet
perso EPB c'est grosso modo 12800 lignes de code
PureGolo 9500 lignes
Nono c'est 17800 lignes ....

bon certe je ne vais pas rivaliser avec un 3dsmax ... mais qu'importe le nombre de lignes
si cette methode fonctionne pour 17800 lignes de code, elle peut fonctionnner pour 10 fois plus !

l'appel de chaque nouvelle procedure est geré par la boucle principale
ou éventuellement par d'autres procédures (procédure qui appel des procédures ... )
mais la gestion des events sont dans la boucle principale

on codait comme ça a l'epoque du GFA basic , ça marchait deja bien .... que je sache , ça marche toujours !

d'ailleurs je vous enjoint a chercher les exemples de codes qui integre la gestion des event dans une ou plusieurs procedures...
vous en trouverez surement ... pas pas beaucoup ;)

d'ailleurs c'est surtout vrais en equipe , je vois mal une equipe faire des procedures gerant des events
alors qu'une autre fait la meme chose dans son coin , dans une (ou plusieurs) autre procedure ....
imagine le cirque ....

"allo trucmuche... c'est pas a vous de gerer les events de la souris.. c'es a nous"
" quoi c'est a vous ? non monsieur , vous etes chargé de gerer le clavier ... laissez nous la souris "

là le Sysop interviens ... "ho les gars ... c'est dans la boucle principale que ça se gere .. contactez la team qui s'occupe de la boucle principale "

et voila on retombe sur nos pattes :)

:lol:

ps: avec Ar-s on a collaboré sur des codes, jamais on a fait une gestion des event séparé de la boucles principale
.... donc si ça fonctionne sur de petit prg, ça marche sur des gros !
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: RESOLUS PAR FALSAM] Il n'y pas de gadget list actuelleme

Message par microdevweb »

Pour faire court voici le code générer par PB Form et la gestion d’événements est reprise dans une procédure.

Code : Tout sélectionner

;
; This code is automatically generated by the FormDesigner.
; Manual modification is possible to adjust existing commands, but anything else will be dropped when the code is compiled.
; Event procedures needs to be put in another source file.
;

Global Window_0

Global Button_0, Button_1


Procedure OpenWindow_0(x = 0, y = 0, width = 600, height = 400)
  Window_0 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu)
  Button_0 = ButtonGadget(#PB_Any, 240, 90, 100, 25, "")
  Button_1 = ButtonGadget(#PB_Any, 240, 140, 100, 25, "")
EndProcedure

Procedure Window_0_Events(event)
  Select event
    Case #PB_Event_CloseWindow
      ProcedureReturn #False

    Case #PB_Event_Menu
      Select EventMenu()
      EndSelect

    Case #PB_Event_Gadget
      Select EventGadget()
      EndSelect
  EndSelect
  ProcedureReturn #True
EndProcedure

OpenWindow_0()

Repeat
  event = WaitWindowEvent()
Until Window_0_Events(event) = #False

End
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: RESOLUS PAR FALSAM] Il n'y pas de gadget list actuelleme

Message par Backup »

et alors ?

tu me démontre quoi ?
que ça marche ? ... oui ça marche ... mais est-ce bien de faire comma ça ? ... perso je ne crois pas .. fait comme tu veux :)
ici je ne fais que donner mon avis et répondre a ta question
ce type de gestion événementielle te semble t'il correct ?
pour moi clairement non ! ...
si tu ne veux pas de réponse qui ne te conviennent pas , ne pose pas de question .

le code générer par PB Form
Form designer est fait par un membre "Polo"
http://forums.purebasic.com/english/vie ... db1b532e8c

il n'a pas la science infuse non plus ...
je pourrai opposer le designer PureForm de Gnozal ,

Code : Tout sélectionner

;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_0
EndEnumeration
;}
Define.l Event
;}
Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 919, 83, 400, 400, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
  EndIf
EndProcedure

OpenWindow_Window_0()

;{- Event loop
Repeat
  Event = WaitWindowEvent(12)
  Select Event
    ; ///////////////////
    Case #PB_Event_Gadget
    ; ////////////////////////
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Window_0
          CloseWindow(#Window_0)
          Break
      EndSelect
  EndSelect
Forever
;
;}

qui lui ne te met pas la gestion des events dans une procedure .... on aura gagné quoi au final ?

il ne m'etonnerai pas que Polo est crus bon de mettre la gestion des event dans une procedure parce que plus facile a retirer
lorsqu'on ne coche pas l'option "generer la procedure d'evenement" .... c'est plus facile pour lui de mettre ou retirer une boucle d'event si celle-ci se trouve dans une procedure .... mais bon ... je m'en fiche, je n'utilises pas l'editeur Officiel, donc , pas le designer qui va avec ... :)

fais, comme tu le sent :)

je suis juste surpris du manque de réaction des membres Anglais a ce sujet ... 8O
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: RESOLUS PAR FALSAM] Il n'y pas de gadget list actuelleme

Message par majikeyric »

De manière générale : structurer son code au maximum, isoler les traitements, est une bonne chose même si cela ne sert rien au niveau fonctionnel.

En temps d'exécution c'est la même chose ( push+call+pop+ret = pinuts)
Répondre