Page 1 sur 1

souci avec un gadget

Publié : mar. 30/nov./2010 17:17
par dayvid
pourquoi ce code ne marche pas ?
si je mets la commande "StringGadget" dans la boucle avec comme condition que des que la variable X est = à 1
faire apparaitre le StringGadget et remettre la variable X a 0 et que quand la touche entrer est pressé que celui-ci disparaisse

la sa marche mais si je laisse ça comme ça, ça bloc et plus rien ne marche
alors je me suis dit que il y avait un problème de canaux de communication entre le gadget et la fenêtre
mais pour tous dire, j'ai eu beaux chercher, je ne comprends vraiment pas d'où sa peut venir
bref ce code n’est que un exemple car le véritable problème étais lui dans mon programme
mais j’ai trouvé un moyen d’y remédier mais j’aurais aimé savoir pourquoi ceci ne fonctionnais pas


Code : Tout sélectionner

;- Window Constants
;
Enumeration
  #Window_0
  #a
EndEnumeration

Procedure s()
StringGadget(#a, 50, 20, 100, 20, "")
EndProcedure

Procedure Open_Window_0(a)
  If OpenWindow(#Window_0, 377, 177, 600, 300, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
   
  EndIf
  Repeat ; Start of the event loop
  
  
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  
  WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
  
  GadgetID = EventGadget() ; Is it a gadget event?
  
  EventType = EventType() ; The event type
  
  ;You can place code here, and use the result as parameters for the procedures
  
  If Event = #PB_Event_Gadget
    
  EndIf
  
Until Event = #PB_Event_CloseWindow ; End of the event loop
EndProcedure




b = CreateThread(@Open_Window_0(), 0)
Delay(100)
s()

WaitThread(b)

Re: souci avec un gadget

Publié : mar. 30/nov./2010 19:08
par falsam
Ne connaissant pas la finalité de ton programme, je n’émettrais aucun jugement sur ce code.


Pour répondre à ta question, la procédure Open_Window_0(a) ouvre ta fenêtre puis se met en boucle dans ton bloc d'instruction Repeat ... until ce qui empeche ta procedure s() de s'exécuter.

dayvid il serait temps d’arrêter de fumer ton clavier :p

Re: souci avec un gadget

Publié : mer. 01/déc./2010 7:24
par jbernard13
et tes variables pourquoi tu l'as pas declarées?

Re: souci avec un gadget

Publié : mer. 01/déc./2010 9:04
par Backup
falsam a écrit :dayvid il serait temps d’arrêter de fumer ton clavier :p
et de changer de hobby, celui ci te conviendra mieux, je pense :
http://gilles-et-martine.pagesperso-ora ... /tour.html

:)

Re: souci avec un gadget

Publié : mer. 01/déc./2010 9:40
par kernadec
:mrgreen:

Re: souci avec un gadget

Publié : mer. 01/déc./2010 15:10
par pat
Pour essayer de répondre à dayvid.
Je trouve ton programme très mal structuré et on ne sait pas ce que tu veux faire.
Supprime le thread qui semble inutile.
Dans ce cas, si tu supprimes le thread, tu pourras également supprimer le paramètre (a) de la procédure Open_Window_0(a).
Essaie de mettre le String-gadget dans la fenêtre.
Les noms de variables sont absolument pas clairs et se confondent avec les mots-clés PureBasic.
La boucle Repeat Until semble inutile.
Bref, tout à revoir et regarde dans le forum les exemples fournis.
Tu as du travail à faire pour t'améliorer.
Mais tu peux faire ce que tu veux si tu fais quelques efforts. :|

Re: souci avec un gadget

Publié : mer. 01/déc./2010 17:15
par Warkering
Il ne faut pas placer de telle boucle dans une procédure! :lol:
Tu peux, mais dans ce cas précis, c'est un peu con.
Normalement, un programme est géré par une seule grande boucle, habituellement situé à la fin de ton code ou bien dans un fichier principal final séparé. Ensuite, selon les évènements reçus par la fenêtre, on exécute les différentes fonctionnalités.
Le Thread, quant à lui, est complètement inutile. Je ne vois pas son intérêt dans le code. Vire-le.
Pour le nom des variables, procédures et tout ce qui peut être nommé en PureBasic, pense à utiliser des noms plus ... disons ... pratiques.
La procédure 's' par exemple, en plus d'être inutile, est un très bon exemple de ce qu'il ne faut pas faire. Ici, un bon nom aurait été "CreateStringGadget" ou bien "CreerBoiteDeTexte". Soit un peu plus constructif car là, c'est un bordel!
En tout cas, il y a place à amélioration, mais bon. Lâche pas! :roll:

Re: souci avec un gadget

Publié : mer. 01/déc./2010 21:30
par Ulix
@dayvid

Je pense que tu manque de rigueur ! C'est une critique constructive que je te fais, ne le prend pas mal !

Comme le disais "pat" ton programme est très mal structuré et on ne sait pas ce que tu veux faire.

Aussi te faudrait-il un modèle. Comme il a été dit, je ne sais pas ce que tu veux faire, alors j'ai inventé.

Regard un peu le code et repaire les différentes sections. Attention ce code n'est qu'un exemple,
il n'est pas a prendre au pied de la lettre, juste pour comprendre les différentes parties. :wink:

Code : Tout sélectionner

Enumeration
;---------La fenétre principale
 #f0
;---------Les gadget de la fenétre
#String1
#BoutonQuitter
;..... etc

;---------Mon menu
#f0Menu
#MenuNouveau:#MenuOuvrir:#MenuQuitter

;---------Ma barre d'état
#f0BarreEtat

EndEnumeration


;Section déclaration des structures


;Section déclaration des variables, listes... etc
EnableExplicit	;  <======== Important

Global  Quitter_f0.b
 

  
;Section déclaration des procédures
Declare FenetreCreation()
Declare FichierNouveau()
Declare FichierOuvrir()
Declare FenetreQuitter()


;====================================================================================================
;Début du programme proprement dit
;--------Lecture du fichier init

;--------Création et ouverture de la fenétre principale
FenetreCreation()

;--------Initialisation des gadgets, listes... etc

;Affichage de la fenétre principale
HideWindow(#f0, 0)


;Boucle principale du programme
Repeat
Select WaitWindowEvent()

      	Case #PB_Event_Menu
			        	Select EventMenu() 
					Case #MenuNouveau			:	FichierNouveau()
					Case #MenuOuvrir				:	FichierOuvrir()
					; .....
   					Case #MenuQuitter				:	FenetreQuitter()
			          	EndSelect
		
		Case #PB_Event_Gadget
					Select EventGadget()
					Case #BoutonQuitter			:	FenetreQuitter()
					Case #String1					
					EndSelect
      	
		Case #PB_Event_CloseWindow				:	FenetreQuitter()
EndSelect
Until Quitter_f0 = 1
;Sortie du programme
End

;====================================================================================================
;Ici toutes les procédures...

Procedure FenetreCreation()

If OpenWindow(#f0, 377, 177, 600, 300, "Fenétre Principale)",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar|#PB_Window_Invisible) 

	
			;Mes gadgets   	
			StringGadget( #String1, 			50,  20,  100,  20, "")
			
			ButtonGadget(#BoutonQuitter, 	200,   180, 150,   50, "Quitter")
			;..... et les autres

; Menu principal
If CreateMenu(#f0Menu, WindowID(#f0))
MenuTitle("Fichier")
		MenuItem( #MenuNouveau, 			"N&ouveau"+ #TAB$ + "Alt+N")
		MenuItem( #MenuOuvrir, 			"O&uvrir"+ #TAB$ + "Alt+O")
      	;.....
      	MenuBar()
      	;.....
        	MenuBar()
      	MenuItem( #MenuQuitter, 			"Q&uitter"+ #TAB$ + "Alt+Q")

;Les touches raccourcis clavier...
AddKeyboardShortcut(#f0, #PB_Shortcut_Alt | #PB_Shortcut_N, #MenuNouveau)
AddKeyboardShortcut(#f0, #PB_Shortcut_Alt | #PB_Shortcut_Q, #MenuQuitter)
;Grisés les menus 

EndIf

; Barre d'état
If CreateStatusBar(#f0BarreEtat, WindowID(#f0))
		AddStatusBarField(#PB_Ignore)
EndIf




Else	;Ici je suis en echec
		;peu probable, mais...
		MessageRequester("ERREUR", "Désolé, il est impossible d'ouvrir .... !",0)
EndIf
EndProcedure

Procedure FenetreQuitter()

MessageRequester("Quitter", "Ici confirmer la fin du programme", 0)

Quitter_f0 = 1


EndProcedure

Procedure FichierNouveau()

MessageRequester("Nouveau", "Ici le menu Nouveau", 0)

EndProcedure

Procedure FichierOuvrir()

MessageRequester("Ouvrir", "Ici le menu Ouvrir", 0)

EndProcedure

J'espéres que cela te donnera des idées, de comment organisé ton programme, a toi d'y mettre ce que tu veux !

A+

Re: souci avec un gadget

Publié : mer. 01/déc./2010 23:56
par Warkering
Je ne vois pas pourquoi le EnableExplicit serait très important ici. Je ne m'en sert jamais et j'en suis pas mort! :lol:

Re: souci avec un gadget

Publié : jeu. 02/déc./2010 0:35
par boddhi
Warkering a écrit :Je ne vois pas pourquoi le EnableExplicit serait très important ici. Je ne m'en sert jamais et j'en suis pas mort! :lol:
Pas indispensable, certes, mais cela évite, parfois ou assez souvent (c'est selon) des erreurs de frappe dans les noms de variables, surtout lorsque l'on est débutant et un peu fouilli (ce qui semble être un peu le cas ici, non ? :wink: ).

Ca semble être déjà une galère pour mettre les instructions dans le bon ordre alors, si en plus, il faut y rajouter des erreurs incongrues à cause des noms de variables... houille, houille, mazout !!! :lol:

Re: souci avec un gadget

Publié : jeu. 02/déc./2010 2:04
par Warkering
C'est vrai que c'est une bonne idée pour les débutants. Je n'ai jamais utilisé de tel mécanisme, peut-être parce que je suis trop intelligent! :mrgreen:
Nan, sérieux, j'ai commencé sur le Html pas longtemps et ensuite direct sur le C donc quand j'ai tombé sur le Basic, j'ai remercié Jésus. :P
Faire ses déclarations après la séance "J'ai toute mon idée en tête!" est trop plaisante.

Re: souci avec un gadget

Publié : sam. 04/déc./2010 14:34
par dayvid
Merci tous le monde pour vos réponce :D

Ulix, grand merci pour ton code d'éxemple, j'étudirais sa
mais si j'ai voulue faire sa, c'est toujour pour simuler un input le plus vérritable possible dans un editor gadget
mais a l'heur qu'il est j'ai presque reussi, si si !

mais il me manque encore deux trois petite chose importante
a bientôt sur la chaine des débutant en pure basic :)

Re: souci avec un gadget

Publié : sam. 04/déc./2010 17:07
par Ar-S
En attendant je t'avais donné des exercices à faire, tu as vite abandonné, et c'est là ton problème principal. Tu manques cruellement de patience. A l'heure d'aujourd'hui, je n'ai plus le temps ni l'envie de "perdre" ce temps à essayer de te faire avancer.
ça reviendra peut-être un jour... ou pas.

Re: souci avec un gadget

Publié : lun. 06/déc./2010 14:34
par dayvid
Ar-s mon ami, je n'est pas du tous abandonner :D

mais je t'avoue que ces dernier temps ayant plus internet
je n'y est plus pensser et j'avais d'autre chose a faire voila tous, ne te vexe pas :)
mais ne t'inkiette pas, je reprendrais aussi vite que j'ai arrèter, je verrais plus tard 8)

Re: souci avec un gadget

Publié : lun. 06/déc./2010 20:03
par case
a noter que le monde ne tourne pas autour de toi et qu'AR-S n'est pas a ton service donc quand TU voudra reprendre c'est pas sur que LUI veuille continuer ne t'en vexe pas , c'est tout a fait normal
dans le cas ou il ferais cet effort je ne pourrais que lui tirer mon chapeau. bon courage pour la suite en tout cas.