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
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 »

majikeyric a écrit :En temps d'exécution c'est la même chose ( push+call+pop+ret = pinuts)
pinuts ?

Code : Tout sélectionner

Repeat
  event = WaitWindowEvent(x)
Until Window_0_Events(event) = #False
ce type de boucle tourne tres tres vite... donc souvent ... les secondes font les Siecles :)

en dehors de ça c'est le coté "evenements" géré en Local dans une procedure qui m'inquiete ...

j'avoue ne pas vraiment savoir se qui se passe au niveau de Windows
mais le fait d'entrer en local dans une procedure ,pour gerer des evenements ...
n'y a t'il pas de risque d'en louper des événements, justement , pendant le temps d'empilement/dépilement ?
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 »

Dobro a écrit : pinuts ?

Code : Tout sélectionner

Repeat
  event = WaitWindowEvent(x)
Until Window_0_Events(event) = #False
ce type de boucle tourne tres tres vite... donc souvent ... les secondes font les Siecles :)
un empilement de paramètres, un débranchement à l'adresse de la procèdure et un retour à l'adresse suivant le débranchement cela prends très peu de cycles processeur.

On quantifie la surchage par tour de boucle, donc l'appel à Window_0_Events() et bien transparent.
Dobro a écrit : j'avoue ne pas vraiment savoir se qui se passe au niveau de Windows
mais le fait d'entrer en local dans une procedure ,pour gerer des evenements ...
n'y a t'il pas de risque d'en louper des événements, justement , pendant le temps d'empilement/dépilement ?
bein je ne vais rien t'apprendre, tu récupères un nouvel évenement à traiter uniquement quand tu fais un WaitWindowEvent() ou un WindowEvent() (sinon ils sont stockés dans la file des messages):
les valeurs retournées par les fonctions EventType(), EventWindow(), EventMenu()...etc ne changent qu'après un nouvel appel à WaitWindowEvent() ou WindowEvent(),

Etant donné que lorsqu'on appelle une procédure on n'y fait pas appel, le contexte n'est pas modifié et on ne loupe pas d'évènement.

C'est uniquement une mauvaise façon de gérer les evenements qui peut t'en faire perdre (ex:ne pas tous les traiter avant de faire un flibuffer() si on a un openwindowedscreen() ), pas des instructions supplémentaires à exécuter.
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 »

mouaip .....

enfin, perso je ne code pas comme ça :)


ps: ne croyez pas que je vais reprendre mon Ane Vert :mrgreen: :lol:
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message par falsam »

Une gestion d'événements dans une procédure ne me gène pas. Ayant été habitué à travailler avec des groupes de développeurs, il m'est souvent arrivé de travailler sur une ou plusieurs fonctionnalité d'une application. Ces fonctionnalités se trouvant dans une ou plusieurs procédures. Quand un code devient trop gros, il devient nécessaire de fractionner le programme en plusieurs fichiers sources. (je me sauve très vite)
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: RESOLUS PAR FALSAM] Il n'y pas de gadget list actuelleme

Message par microdevweb »

Bha tous le monde à sa manière de coder, le tous c'est de si retrouver non. Je ne dis pas que tu as tort Dobro, de toute façon j'utilise PB pour m'amuser, autrement j'utilise Windev pour les applications de bureau. (beaucoup plus groumant et moins performant dans son exe) mais rapide en développement.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

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

Message par Micoute »

Bonjour à tous,

moi je pense que dans certains cas, les évènements peuvent être traités dans une procédure, je prend un exemple : j'ai dans mon logiciel, une procédure qui ouvre une fenêtre d'aide; je pense donc que la fermeture de cette fenêtre peut et même doit être gérée par cette procédure, mais que cela doit rester exceptionnel !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

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

Message par MLD »

Bonjour a tous

Pour une fois je suis en accord avec Dobro :roll:
Pour ma part dans des programmes longs, J'utilise avec la fenêtre principale une boucle d'évènements générale.
Cette boucle distribue aux différrentes procédures les fonctions de la fenêtre principale, y compris l'ouverture de fenêtres secondaires.
La gestion des événements pour chaque fenêtre secondaire, se faisant a l'intérieur de la procédure qui a crée cette fenêtre.
Je me souviens que cela avait un peu étonné Dobro :mrgreen:
Ceci me permet de parfaitement structurer mes programes, il suffit simplement de prendre quelques dispositions pour le déplacement des fenêtres secondaires,et eventuellement dans certains cas de bloquer toutes actions sur la fenêtre principale pendant l'utilisation d'une fenêtre secondaire.
Mais chacun fait comme il le sent, du moment qu'il y retrouve ses petits
Si vous distribué vos programmes, il faut penser a se qu'ils soient facilement maintenables, et par d'autres que vous même.
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 »

MLD a écrit :Je me souviens que cela avait un peu étonné Dobro :mrgreen:
mais j'ai toujours ton exemple !

peut etre m'a t'il etonné ? (je ne me souviens pas de ça )
mais aujourd'hui lorsque je le regarde , je constate que chaque Fenetre gere ses evenements ... :)
je veux dire, que la gestion des event (le WaitWindowEvent()) n'est pas extrait de la creation de la fenetre ....
tant qu'on ne sort pas de la fenetre on reste dans la procedure .... pour moi c'est clair, et beaucoup mieux que ce dont on parle avec microdevweb
qui lui Extrait la Gestion des events, de la creation de la fenetre ... c'est la dedans qu'il y a quelques chose qui me gene ...


voici selon moi , les 2 "Ecoles" exemples a suivres de gestion multi-fenetre

ton exemple MLD (qui donc reprend une procedure par creation , mais sans extraire la gestion des event par une procedure externe )
en clair un gestion d'event par procedure et par fenetre ... (ça me va :) )

Code : Tout sélectionner

;MLD le 28/10/2013

Enumeration
	#Ma_fen
	#btfen2
	#Ma_fen2
	#btstop
EndEnumeration
Declare  Fen1()
Declare  fen2()

Fen1()
End

; ************ zone procedures **********************************

Procedure Fen1()
	OpenWindow(#Ma_fen,500,200,400,400,"Ma Fenêtre",#PB_Window_SystemMenu)
	SetWindowColor(#Ma_fen,$998660)
	
	; Ici vos gadgets
	ButtonGadget(#btfen2, 200, 360, 60, 20,"Fenêtre 2")
	
	;  Boucle générale
	Repeat
		Event = WaitWindowEvent(2)
		Select EventGadget()
			Case #btfen2
			fen2()
		EndSelect   
	Until Event = #PB_Event_CloseWindow
Endprocedure


Procedure fen2()
	OpenWindow(#Ma_fen2,550,300,300,100,"Ma Fenêtre",#PB_Window_SystemMenu)
	;SetClassLongPtr_(WindowID(#Ma_fen2),#GCL_STYLE,$00020000);*** pour faire une hombre
	;HideWindow(#Ma_fen2,0)
	;StickyWindow(#Ma_fen2,1)
	
	; Ici vos gadgets
	ButtonGadget(#btstop, 200,70, 60, 20,"Stop")
	
	;  Boucle générale
	Repeat
		Event = WaitWindowEvent(2)
		If Event = #PB_Event_Gadget
			Select EventGadget()
				Case #btstop
				CloseWindow(#Ma_fen2)
				Break
			EndSelect     
		EndIf
	ForEver
EndProcedure 
; Epb


et l'exemple plus traditionnel (que souvent j'utilise perso , on gère les 2 fenêtres dans le programme principal

toujours pas d'extraction de la gestion des events en dehors ....

Code : Tout sélectionner

Enumeration 0 ; Id. Fenêtres
	#FENETRE1
	#FENETRE2
EndEnumeration
Enumeration 0 ; Id. Gadgets
	#FEN1_BOUTON
	#FEN1_FERMER
	#FEN2_FERMER
EndEnumeration

If OpenWindow(#FENETRE1, 0, 0, 640, 480, "Fenêtre 1", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)      
	If CreateGadgetList(WindowID(#FENETRE1))
		ButtonGadget(#FEN1_BOUTON, 5,  5, 100, 22, "Ouvrir Fenêtre 2")
		ButtonGadget(#FEN1_FERMER, 5, 45, 100, 22, "Quitter")
	EndIf      
	Repeat            
		Evenement.l = WaitWindowEvent()            
		Select EventWindow()                        
			;=====================================================
			;== EVENEMENTS DE LA FENETRE PRINCIPALE
			;=====================================================
			
			Case #FENETRE1                        
			Select Evenement                                    
				Case #PB_Event_Gadget                                    
				Select EventGadget()                                                
					Case #FEN1_BOUTON
					If OpenWindow(#FENETRE2, 0, 0, 320, 240, "Fenêtre 2", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
						If CreateGadgetList(WindowID(#FENETRE2))
							ButtonGadget(#FEN2_FERMER, 5, 5, 100, 22, "Fermer")
						EndIf
					EndIf                                                
					Case #FEN1_FERMER
					Break                                                
				EndSelect
				
				Case #PB_Event_CloseWindow
				Break
				
			EndSelect
			
			;=====================================================
			;== EVENEMENTS DE LA FENETRE SECONDAIRE
			;=====================================================
			
			Case #FENETRE2                        
			Select Evenement                                    
				Case #PB_Event_Gadget                                    
				If EventGadget() = #FEN2_FERMER
					CloseWindow(#FENETRE2)
				EndIf                                    
				Case #PB_Event_CloseWindow                                    
				CloseWindow(#FENETRE2)                                    
			EndSelect                        
		EndSelect            
	ForEver      
EndIf

; Epb


dans les 2 cas, on n'expatrie pas la gestion des events dans une procedure externe a la creation de la fenetre
chaque fenetre a son contexte , et sa gestion d'event ....

je continue a dire que meme si sa marche , vouloir sortir la gestion des events dans une procedure , est une erreur ..
mais chacun code comme il veux ....
je tiens juste a dire, que trouver un bug dans un programme est d'autant plus difficile , que le code est morcelé .....

et je ne parlerai pas des includes :lol: on va pas grossir le topic inutilement, deja qu'on est hors sujet depuis un moment :)
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 »

Quel est la formule la plus simple à maintenir

Formule A (préconisée par Dobro

Code : Tout sélectionner

Repeat
      EtatToolsScene()
      gEvent=WaitWindowEvent()
      Select EventWindow()
            Case gMainWindows
                  Select gEvent
                        Case #PB_Event_CloseWindow
                              gExit=#True
                        Case #PB_Event_Menu
                              Select EventMenu()
                                    Case #OptExit
                                          gExit=#True
                              EndSelect
                        Case #PB_Event_SizeWindow
                              ResizeMain()
                        Case #PB_Event_Gadget
                              Select EventGadget()
                                    Case gTsNew
                                          gScMode$="NEW"
                                          DisableWindow(gMainWindows,1)
                                          OuvreSceneWindows()
                                    Case gTsEdit
                                          DisableBt(gTsEdit)
                                    Case gTsDelete
                                          
                                    Case gTsLine
                                          DisableBt(gTsLine)
                                          DeselectionneTout()
                                          DessineScene()
                                    Case gTsRectangle
                                          DisableBt(gTsRectangle)
                                          DeselectionneTout()
                                          DessineScene()
                                    Case gTsGrille
                                          DessineScene()
                                    Case gTsTaille
                                          DessineScene()
                                    Case gTsPlayer
                                          Disablebt(gTsPlayer)
                              EndSelect
                              If *gSceneEncour<>-1
                                    If EventGadget()=monJeux\mesScene()\IdCanvas
                                          If GetGadgetState(gTsLine)=0 And  GetGadgetState(gTsRectangle)=0 And GetGadgetState(gTsEdit)=0
                                                SetGadgetAttribute(monJeux\mesScene()\IdCanvas,#PB_Canvas_Cursor,#PB_Cursor_Default)
                                          EndIf
                                          If GetGadgetState(gTsLine)=1 Or GetGadgetState(gTsRectangle)=1 
                                                SetGadgetAttribute(monJeux\mesScene()\IdCanvas,#PB_Canvas_Cursor,#PB_Cursor_Cross)
                                                If EventType()=65540 And gClicOn=#False
                                                      gPosX=GetGadgetAttribute(monJeux\mesScene()\IdCanvas,#PB_Canvas_MouseX)
                                                      gPosY=GetGadgetAttribute(monJeux\mesScene()\IdCanvas,#PB_Canvas_MouseY)
                                                      gClicOn=#True
                                                      If GetGadgetState(gTsLine)=1
                                                            AddElement(monJeux\mesScene()\mesLignes())
                                                      EndIf
                                                      If GetGadgetState(gTsRectangle)=1
                                                            AddElement(monJeux\mesScene()\mesRectangles())
                                                      EndIf
                                                      If GetGadgetState(gTsEdit)=1
                                                            SectionneForme()
                                                      EndIf
                                                EndIf
                                                If GetGadgetAttribute(monJeux\mesScene()\IdCanvas,#PB_Canvas_Buttons)=#PB_Canvas_LeftButton
                                                      gClicOn=#True
                                                      gSourisX=GetGadgetAttribute(monJeux\mesScene()\IdCanvas,#PB_Canvas_MouseX)
                                                      gSourisY=GetGadgetAttribute(monJeux\mesScene()\IdCanvas,#PB_Canvas_MouseY)
                                                      If GetGadgetState(gTsLine)=1
                                                            DessineLigne()
                                                            DessineScene()
                                                      EndIf
                                                      If GetGadgetState(gTsRectangle)=1
                                                            DessineRectangle()
                                                            DessineScene()
                                                      EndIf
                                                      If gFormeSelected=#True
                                                            ModifieForm()
                                                      EndIf
                                                Else
                                                      gClicOn=#False
                                                EndIf
                                          EndIf
                                          If GetGadgetState(gTsEdit)=1
                                                SetGadgetAttribute(monJeux\mesScene()\IdCanvas,#PB_Canvas_Cursor,#PB_Cursor_Hand)
                                                If gFormeSelected=#True And gClicOn=#False
                                                      SelectPoignee()
                                                EndIf
                                                If EventType()=65540 And gClicOn=#False
                                                      gPosX=GetGadgetAttribute(monJeux\mesScene()\IdCanvas,#PB_Canvas_MouseX)
                                                      gPosY=GetGadgetAttribute(monJeux\mesScene()\IdCanvas,#PB_Canvas_MouseY)
                                                      gClicOn=#True
                                                      If GetGadgetState(gTsLine)=1
                                                            AddElement(monJeux\mesScene()\mesLignes())
                                                      EndIf
                                                      If GetGadgetState(gTsRectangle)=1
                                                            AddElement(monJeux\mesScene()\mesRectangles())
                                                      EndIf
                                                      If GetGadgetState(gTsEdit)=1
                                                            SectionneForme()
                                                      EndIf
                                                EndIf
                                                If GetGadgetAttribute(monJeux\mesScene()\IdCanvas,#PB_Canvas_Buttons)=#PB_Canvas_LeftButton
                                                      gClicOn=#True
                                                      gSourisX=GetGadgetAttribute(monJeux\mesScene()\IdCanvas,#PB_Canvas_MouseX)
                                                      gSourisY=GetGadgetAttribute(monJeux\mesScene()\IdCanvas,#PB_Canvas_MouseY)
                                                      If GetGadgetState(gTsLine)=1
                                                            DessineLigne()
                                                            DessineScene()
                                                      EndIf
                                                      If GetGadgetState(gTsRectangle)=1
                                                            DessineRectangle()
                                                            DessineScene()
                                                      EndIf
                                                      If gFormeSelected=#True
                                                            ModifieForm()
                                                      EndIf
                                                Else
                                                      gClicOn=#False
                                                EndIf
                                          EndIf
                                          
                                    EndIf
                              EndIf
                  EndSelect
            Case gSceneWindows
                  Select gEvent
                        Case #PB_Event_CloseWindow
                              CloseWindow(gSceneWindows)
                              DisableWindow(gMainWindows,0)
                              SetActiveWindow(gMainWindows)
                        Case #PB_Event_Gadget
                              Select EventGadget()
                                    Case gScBUTON_Annuler
                                          CloseWindow(gSceneWindows)
                                          DisableWindow(gMainWindows,0)
                                          SetActiveWindow(gMainWindows)
                                    Case gScBUTON_valider
                                          Select gScMode$
                                                Case "NEW"
                                                      If AjouteScene()
                                                            CloseWindow(gSceneWindows)
                                                            DisableWindow(gMainWindows,0)
                                                            SetActiveWindow(gMainWindows)
                                                      EndIf
                                                Case "EDIT"
                                                      
                                          EndSelect
                              EndSelect
                  EndSelect
      EndSelect
Until gExit=#True
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: RESOLUS PAR FALSAM] Il n'y pas de gadget list actuelleme

Message par microdevweb »

Formule B avec procédure

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

Code : Tout sélectionner

Procedure MenuEventMain(Event)
      Select Event
            Case #OptExit
                  gExit=#True
      EndSelect
EndProcedure

Code : Tout sélectionner

Procedure GadgetEventMain(Event)
       Select Event
             Case gTsNew
                   gScMode$="NEW"
                   DisableWindow(gMainWindows,1)
                   OuvreSceneWindows()
             Case gTsEdit
                   DisableBt(gTsEdit)
             Case gTsDelete
                   
             Case gTsLine
                   DisableBt(gTsLine)
                   DeselectionneTout()
                   DessineScene()
             Case gTsRectangle
                   DisableBt(gTsRectangle)
                   DeselectionneTout()
                   DessineScene()
             Case gTsGrille
                   DessineScene()
             Case gTsTaille
                   DessineScene()
             Case gTsPlayer
                   Disablebt(gTsPlayer)
       EndSelect
       If *gSceneEncour<>-1
             If Event=monJeux\mesScene()\IdCanvas
                   If GetGadgetState(gTsLine)=0 And  GetGadgetState(gTsRectangle)=0 And GetGadgetState(gTsEdit)=0
                         SetGadgetAttribute(monJeux\mesScene()\IdCanvas,#PB_Canvas_Cursor,#PB_Cursor_Default)
                   EndIf
                   If GetGadgetState(gTsLine)=1 Or GetGadgetState(gTsRectangle)=1 
                          SetGadgetAttribute(monJeux\mesScene()\IdCanvas,#PB_Canvas_Cursor,#PB_Cursor_Cross)
                         EventCanvas(EventType())
                   EndIf
                   If GetGadgetState(gTsEdit)=1
                         SetGadgetAttribute(monJeux\mesScene()\IdCanvas,#PB_Canvas_Cursor,#PB_Cursor_Hand)
                         If gFormeSelected=#True And gClicOn=#False
                               SelectPoignee()
                         EndIf
                         EventCanvas(EventType())
                   EndIf
                   
             EndIf
       EndIf
EndProcedure

Code : Tout sélectionner

Procedure EventCanvas(Event)
       If Event=65540 And gClicOn=#False
             gPosX=GetGadgetAttribute(monJeux\mesScene()\IdCanvas,#PB_Canvas_MouseX)
             gPosY=GetGadgetAttribute(monJeux\mesScene()\IdCanvas,#PB_Canvas_MouseY)
             gClicOn=#True
             If GetGadgetState(gTsLine)=1
                   AddElement(monJeux\mesScene()\mesLignes())
             EndIf
             If GetGadgetState(gTsRectangle)=1
                   AddElement(monJeux\mesScene()\mesRectangles())
             EndIf
             If GetGadgetState(gTsEdit)=1
                   SectionneForme()
             EndIf
       EndIf
       If GetGadgetAttribute(monJeux\mesScene()\IdCanvas,#PB_Canvas_Buttons)=#PB_Canvas_LeftButton
             gClicOn=#True
             gSourisX=GetGadgetAttribute(monJeux\mesScene()\IdCanvas,#PB_Canvas_MouseX)
             gSourisY=GetGadgetAttribute(monJeux\mesScene()\IdCanvas,#PB_Canvas_MouseY)
             If GetGadgetState(gTsLine)=1
                   DessineLigne()
                   DessineScene()
             EndIf
             If GetGadgetState(gTsRectangle)=1
                   DessineRectangle()
                   DessineScene()
             EndIf
             If gFormeSelected=#True
                   ModifieForm()
             EndIf
       Else
             gClicOn=#False
       EndIf
 EndProcedure

Code : Tout sélectionner

Procedure EventScene(Event)
      Select Event
            Case #PB_Event_CloseWindow
                  CloseWindow(gSceneWindows)
                  DisableWindow(gMainWindows,0)
                  SetActiveWindow(gMainWindows)
            Case #PB_Event_Gadget
                  SceneEventGadget(EventGadget())    
      EndSelect
EndProcedure

Code : Tout sélectionner

Procedure SceneEventGadget(Event)
      Select Event
            Case gScBUTON_Annuler
                  CloseWindow(gSceneWindows)
                  DisableWindow(gMainWindows,0)
                  SetActiveWindow(gMainWindows)
            Case gScBUTON_valider
                  Select gScMode$
                        Case "NEW"
                              If AjouteScene()
                                    CloseWindow(gSceneWindows)
                                    DisableWindow(gMainWindows,0)
                                    SetActiveWindow(gMainWindows)
                              EndIf
                        Case "EDIT"
                              
                  EndSelect
      EndSelect
EndProcedure

A vous de voir
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 »

[quote="microdevweb"]Quel est la formule la plus simple à maintenir

Formule A (préconisée par Dobro )


hum pas vraiment dans cette forme car deja je n'utilises pas le systeme automatique de PB #Pb_Any
je préfère gerer moi meme mes numéros de gadgets ....
le jour ou tu fera des jeux (avec les Sprites ) , tu comprendra pourquoi :)

Code : Tout sélectionner

 Case gTsNew                                          
Case gTsEdit                                         
Case gTsDelete                                        
Case gTsLine                                        
 Case gTsRectangle                                        
Case gTsGrille                                       
Case gTsTaille                                         
Case gTsPlayer

mais :

Code : Tout sélectionner

 Case #gTsNew                                          
Case #gTsEdit                                         
Case #gTsDelete                                        
Case #gTsLine                                        
 Case #gTsRectangle                                        
Case #gTsGrille                                       
Case #gTsTaille                                         
Case #gTsPlayer

de plus ceci :

Code : Tout sélectionner

 Case #PB_Event_SizeWindow
est rare dans mes codes, je privilégie le system basé sur CallBack ....
de plus j'evite au max les suite de If , privilégiant les Select-case :)

bon je vais pas t’embêter plus longtemps , mon but n'est pas de vendre ma façon de coder, c'etait juste pour donner un avis :)
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 »

Il a toujours du bon a prendre de chaque coté. C'est vrai que je ne suit pas un spécialiste des jeux, plutôt orienter gestion. Mais prend en considérations tes remarques et dans certains cas n' hésiterais pas à codé de la sorte.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

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

Message par Micoute »

Bonjour à tous,

je pense qu'il serait bien qu'il y ait un tuto sur le codage avec PureBasic de façon qu'il en ressorte une méthode commune, avec divers exemples de ce qu'il faut ou ne faut pas faire, les pièges à éviter.

Moi, pour ma part, j'ai beaucoup appris avec les exemples de Dobro entre autres et plein de noms qui ont disparus de ce forum du fait d'énorme prises de tête, mais je sort du sujet.

Il est bien évident que chacun a sa propre "patte", moi par exemple, j’appelle toujours comme nom pour ma fenêtre mère #Fenetre_principale, d'autres comme falsam l'appelle plutôt #MainForm, mais peut importe, ce n'est pas les noms des constantes ou des variables qui comptent pourvu qu'un autre programmeur comprenne de quoi on parle.

Je veux parler plutôt de méthode de programmation et que chacun utilise la même pour des raisons évidentes, donc le tuto expliquerait justement ces raisons évidentes.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
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 »

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 »

Si je code de la sorte personnellement, c'est parce que j'utilise principalement Windev pour mes applis pro et dans ce langage (plutôt générateur d'application que langage proprement dis) le code se place directement dans, primo la fenêtres concernées et l'action du bouton/ champ / ouverture de fenêtre ect.

Image

Cela donne une grande aisance pour debuger ou maintenir son code. Donc je divise en PB mon code un peux de la sorte.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Répondre