Probleme de fenetre

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Del_Zur
Messages : 5
Inscription : jeu. 22/févr./2007 2:03

Probleme de fenetre

Message par Del_Zur »

Bonsoir a tous, je commence en pure basic et j'aurais deux questions ^^ (pour l'instant lol)

Déjà, pourquoi mettre des "if" avant chaque ligne? est-ce que ça sert a quelquechose ? meme les codes générés automatiquement en on Oo

et ma deuxieme question est :

Pourquoi mon programme ne fait qu'ouvrir une fenetre grise ??

Code : Tout sélectionner

Enumeration
  #Menuprincipal
  #nouvellepartie
  #chargerpartie
  #quitter
EndEnumeration



  OpenWindow(#Menuprincipal, -74, 3, 1028, 712, "Menuprincipal",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_WindowCentered )
    CreateGadgetList(WindowID(#Menuprincipal))
      ButtonGadget(#nouvellepartie, 350, 250, 330, 40, "Nouvelle Partie", #PB_Button_Default | #PB_Button_Toggle)
      ButtonGadget(#chargerpartie, 350, 300, 330, 40, "Charger Partie (indisponible)", #PB_Button_Default | #PB_Button_Toggle)
      ButtonGadget(#quitter, 350, 350, 330, 40, "Quitter le jeu", #PB_Button_Default | #PB_Button_Toggle)
      Delay(5000)


voila merci a tous !
RegisLG
Messages : 154
Inscription : mer. 22/juin/2005 2:32

Re: Probleme de fenetre

Message par RegisLG »

Del_Zur a écrit :pourquoi mettre des "if" avant chaque ligne? est-ce que ça sert a quelquechose ? meme les codes générés automatiquement en on Oo
Avant chaque ligne hmm c'est un peu exagéré. Je présume que les "If" auxquels tu fais allusion sont ceux qui testent les codes retour des fonctions d'ouverture de fenetre, de création de gadgetlist etc... pour s'assurer que ces fonctions se sont réalisées avec succès avant de continuer à utiliser ces éléments.
Pourquoi mon programme ne fait qu'ouvrir une fenetre grise ??
Tout simplement parce que tu rends la main au système avec ton instruction "Delay" alors que tes boutons n'ont pas encore eu le temps de s'afficher.
Remplace ton "Delay" par :

Code : Tout sélectionner

Repeat
 event=WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
et tu obtiendras ce que tu souhaites.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Probleme de fenetre

Message par Backup »

RegisLG a écrit :Tout simplement parce que tu rends la main au système avec ton instruction "Delay"
oui le Delay en purebasic est en fait comparable a "DOEVENTS" de VisualBasic :D
Del_Zur
Messages : 5
Inscription : jeu. 22/févr./2007 2:03

Message par Del_Zur »

Merci a toi ^^

sinon j'ai une autre question:

comment peut on faire pour que le programme reconnaisse un clic sur un bouton, enfin que ça fasse quelquechose !

est-ce qu'un :

Code : Tout sélectionner

If #nouvellepartie = 1
Then .....
suffit ?

ah au fait, pourquoi une fois enfonçé, il ne ressort pas ? (le bouton bien sur ^^')

REmerci d'avance ^^
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

je te conseille d'utiliser le visual designer !!

il te permet (dans les options) de generer la boucle des events !

de cette façon tu comprendra mieux un code type !

car une fois que tu aura dessiné l'interface, et que tu aura generer le code avec la boucle d'event, tout te sera beaucoups plus clair !:D

voici un exemple typique generé par le designer :D



  ; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
;- Window Constants
;




;- Gadget Constants
;
Enumeration
     #Window_0
     #Button_ok
     #Text_0
EndEnumeration


Procedure Open_Window_0()
     If OpenWindow ( #Window_0 , 327, 98, 346, 310, "New window ( 0 )" , #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
         If CreateGadgetList ( WindowID ( #Window_0 ))
             ButtonGadget ( #Button_ok , 60, 250, 80, 30, "ok" )
             TextGadget ( #Text_0 , 50, 40, 240, 20, "voici un exemple" , #PB_Text_Center )
            
         EndIf
     EndIf
EndProcedure

Open_Window_0()

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
        
         If GadgetID = #Button_ok
             MessageRequester ( "Hello" , "le bouton est appuyé" , #PB_MessageRequester_Ok )
         EndIf
        
     EndIf
    
Until Event = #PB_Event_CloseWindow ; End of the event loop

End
;

Del_Zur
Messages : 5
Inscription : jeu. 22/févr./2007 2:03

Message par Del_Zur »

merci !

mais je suis pas sur de très bien comprendre ces lignes :

Code : Tout sélectionner

     
     WindowID = EventWindow () 
     
     GadgetID = EventGadget ()
     
     EventType = EventType ()

peut tu me les expliquer en détails ?

merci ^^
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

tu met ton curseur sur la fonction que tu veux connaitre, puis tu appuis sur la touche F1
cela aura pour effet d'appeler la Doc, qui te donnera tout les renseignement necessaire :D
Del_Zur
Messages : 5
Inscription : jeu. 22/févr./2007 2:03

Message par Del_Zur »

ah ouais jsavais pas ça ^^

mais j'ai encore une question ( j'en aurai toute la journée ^^)

j'ai écris du texte comme ça :

Code : Tout sélectionner


If Event = #PB_Event_Gadget 
         
         If GadgetID = #nouvellepartie

          Open_feuillepersonnage()
          
         ElseIf GadgetID = #quitter
         
         Event=#PB_Event_CloseWindow
         
         ElseIf GadgetID = #chargerpartie
         
         StartDrawing(WindowOutput(#Menuprincipal))
         DrawText(400,300,"J'ai dit que c'était pas disponible !",(RGB(0,0,0)),(RGB(255,255,255)))
         
         StopDrawing()
         EndIf

mais je veux qu'il s'envele au bout de deux secondes, c'est quelle commande qu'il faut?

merci ^^
bernard13
Messages : 1221
Inscription : mer. 05/janv./2005 21:30

Message par bernard13 »

Pure form de gnozal est encore meilleur
Del_Zur
Messages : 5
Inscription : jeu. 22/févr./2007 2:03

Message par Del_Zur »

Heinnn ?
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

salut Del_Zur

voici mon exemple car le tien ne fonctionne pas chez moi :?

Code : Tout sélectionner

;- Window Constants
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
Enumeration
  #Text_0
EndEnumeration

;- police de caractère
Global FontID1
FontID1 = LoadFont(1, "Comic Sans MS", 14, #PB_Font_Bold)

;- on crée la fenetre
  If OpenWindow(#Window_0, 0, 0, 410, 50, "Exemple",  #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_TitleBar )
;- on crée la liste de gadgets 
    If CreateGadgetList(WindowID(#Window_0))
;-on crée le gadget texte
      TextGadget(#Text_0, 10, 10, 390, 30, "Ce texte dissparaitera dans 3 secondes")
      SetGadgetFont(#Text_0, FontID1)
      Delay(1000);- sa décompte 1 seconde car  1 s = 1000 ms ;)
      TextGadget(#Text_0, 10, 10, 390, 30, "Ce texte dissparaitera dans 2 secondes")
      SetGadgetFont(#Text_0, FontID1)
      Delay(1000)
      TextGadget(#Text_0, 10, 10, 390, 30, "Ce texte dissparaitera dans 1 secondes")
      SetGadgetFont(#Text_0, FontID1)
      Delay(1000)
      TextGadget(#Text_0, 10, 10, 390, 30, "")

    EndIf
  EndIf

  Repeat
   EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget 
      Select EventGadget()

     EndSelect
    EndIf
  Until EventID = #PB_Event_CloseWindow ;- on ferme la fenetre avec la croix rouge
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Répondre