Page 1 sur 1

About box avec une nouvelle fiche.

Publié : dim. 30/déc./2007 13:27
par Geo Trouvpatou
Bonjour à tous.

J'ai voulu faire une About box que l'on ouvre à partir d'un menu.
Au début j'ai fait ça avec un simple MessageRequester et cela fonctionne.

Mais je voulais faire quelque chose de plus évolué et j'ai donc créé une nouvelle fiche.
J'ai crû naïvement que dans l'évenement de mon menu il me suffisait à la place du MessageRequester, de remplacer par Open_Window_AboutBox() (le nom de ma fenêtre), mais cela m'ouvre bien celle-ci, mais me referme la fenêtre principale.

Donc quel est la technique.
J'ai zieuté les tutos, les exemples fournis et fait une recherche avec "about box" mais je n'ai rien trouvé.

Bye.

Re: About box avec une nouvelle fiche.

Publié : dim. 30/déc./2007 14:50
par Thyphoon
Geo Trouvpatou a écrit :Bonjour à tous.

J'ai voulu faire une About box que l'on ouvre à partir d'un menu.
Au début j'ai fait ça avec un simple MessageRequester et cela fonctionne.

Mais je voulais faire quelque chose de plus évolué et j'ai donc créé une nouvelle fiche.
J'ai crû naïvement que dans l'évenement de mon menu il me suffisait à la place du MessageRequester, de remplacer par Open_Window_AboutBox() (le nom de ma fenêtre), mais cela m'ouvre bien celle-ci, mais me referme la fenêtre principale.

Donc quel est la technique.
J'ai zieuté les tutos, les exemples fournis et fait une recherche avec "about box" mais je n'ai rien trouvé.

Bye.
A mon avis tes 2 fenêtre on le même numero
si j'étais toi je ferais au debut

Code : Tout sélectionner

;Enumeration des fenêtres
Enumeration
#MainWindow
#AboutWindow
EndEnumeration


et tu ouvre ta fenêtre principal avec #MainWindow et ta fenêtre about avec #AboutWindow

Code : Tout sélectionner

OpenWindow(#MainWindow, ....
OpenWindow(#AboutWindow, ....

Re: About box avec une nouvelle fiche.

Publié : dim. 30/déc./2007 15:45
par Geo Trouvpatou
Salut Thyphoon.

Voici mon code :

main.pb

Code : Tout sélectionner

IncludeFile "AboutBox.pb"

;- Window Constants
;
Enumeration
  #Window_principale = 0 ; Ajout de =0 suite à ton commentaire Thyphoon
EndEnumeration

;- MenuBar Constants
;
Enumeration
  #MenuBar_0
EndEnumeration

Enumeration
  #MENU_A_propos
EndEnumeration

Enumeration
  #Text_0
  #Text_1
  #Text_2
  
EndEnumeration

Procedure Open_Window_principale()
  If OpenWindow(#Window_principale, 297, 20, 332, 333, "Fenêtre principale",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered )
    If CreateMenu(#MenuBar_0, WindowID(#Window_principale))
      MenuTitle("Aide")
      MenuItem(#MENU_A_propos, "About")
      EndIf

      If CreateGadgetList(WindowID(#Window_principale))
        TextGadget(#Text_0, 55, 35, 200, 20, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
        TextGadget(#Text_1, 55, 55, 200, 20, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb")
        TextGadget(#Text_2, 55, 75, 200, 20, "cccccccccccccccccccccccccccccccc")
      EndIf
    EndIf
  EndProcedure

;+++++++++++++++++++++++++++++++++++++
  
  Open_Window_principale()
  
;+++++++++++++++++++++++++++++++++++++   
  
  Repeat
    Event = WaitWindowEvent()
    
    Select Event
      
      Case #PB_Event_Menu
        Select EventMenu()  
          
          Case #MENU_A_propos
            
            ;MessageRequester("aaaa", "aaaaaaaaa")
            Open_Window_AboutBox()
            
        EndSelect 
        
    EndSelect
  Until Event = #PB_Event_CloseWindow
AboutBox.pb

Code : Tout sélectionner

;- Window Constants
;
Enumeration
  #Window_AboutBox = 1 ; Ajout de =1 suite à ton commentaire Thyphoon
EndEnumeration


Procedure Open_Window_AboutBox()
  If OpenWindow(#Window_AboutBox, 200, 200, 322, 324, "A propos",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_AboutBox))
      
    EndIf
  EndIf
EndProcedure
Thyphoon a écrit : A mon avis tes 2 fenêtre on le même numero
si j'étais toi je ferais au debut
Apparemment il y avait déjà ce problème j'ai donc rajouté :
#Window_principale = 0 dans "main.pb"
et
#Window_AboutBox = 1 dans "AboutBox.pb"
Je ne sais si cette technique est bonne?

Mais par contre le nouveau problème est que lorsque je ferme l'About box, cela ferme aussi la fenêre principale.

Bye.

Publié : dim. 30/déc./2007 15:57
par Thyphoon
normal que ça ferme tout car ta boucle principal s'arrête des qu'il y a un evenement de fermeture de fenêtre

Code : Tout sélectionner

  Until Event = #PB_Event_CloseWindow
Il te faut modifier de façon que si il s'agit de ta fenêtre ABout ça fasse un closewindow(#Aboutwindow) et que si il s'agit de ta fenêtre principal tu termine.
regarde fans la doc, il y a moyen de connaitre quel est la fenêtre activé :wink:

Publié : dim. 30/déc./2007 15:59
par Chris
Remplace ta boucle dans le fichier principal par celle-la:

Code : Tout sélectionner

Repeat 
  Event = WaitWindowEvent() 
  
  Select Event 
    
    Case #PB_Event_Menu 
      Select EventMenu()  
        
        Case #MENU_A_propos 
          
          ;MessageRequester("aaaa", "aaaaaaaaa") 
          Open_Window_AboutBox() 
          
      EndSelect 
      
    Case  #PB_Event_CloseWindow
      Select EventWindow()
        Case #Window_AboutBox : CloseWindow(#Window_AboutBox)
          
        Case #Window_principale : Quit = 1
      EndSelect
      
  EndSelect 
Until Quit = 1

Publié : dim. 30/déc./2007 16:33
par Geo Trouvpatou
Merci Chris et Thyphoon

A vous deux vous avez résolu mon problème.

Et pour vous montrer que je jette un œil dans la doc, j'ai ajouté 2 petites lignes pour rendre la fenêtre modal (je crois que c'est comme ça que l'on dit), bref quand l'About box est ouverte on ne peut pas faire passer par dessus la fenêtre principale.

Code : Tout sélectionner

Repeat
    Event = WaitWindowEvent()
    
    Select Event
      
      Case #PB_Event_Menu
        Select EventMenu() 
          
          Case #MENU_A_propos
            
            ;MessageRequester("aaaa", "aaaaaaaaa")
            Open_Window_AboutBox()
            DisableWindow(#Window_principale, 1) ; On bloque
        EndSelect
        
      Case  #PB_Event_CloseWindow
        Select EventWindow()
          Case #Window_AboutBox : CloseWindow(#Window_AboutBox)
            DisableWindow(#Window_principale, 0) ; On débloque
          Case #Window_principale : Quit = 1
        EndSelect
        
    EndSelect
  Until Quit = 1
Je ne savais pas qu'il y avait aussi un EventWindow().
Déjà que la dernière fois je n'arrivais pas à faire fonctionner mon menu parce que je collais mes instructions dans un EventGadget() :lol:, on en apprend tout les jours.

Bye.

Publié : dim. 30/déc./2007 17:05
par Backup
prends l'habitude de n'utiliser qu'un enumeration...


au lieu de :

Code : Tout sélectionner

Enumeration
  #Window_principale = 0 ; Ajout de =0 suite à ton commentaire Thyphoon
EndEnumeration

;- MenuBar Constants
;
Enumeration
  #MenuBar_0
EndEnumeration

Enumeration
  #MENU_A_propos
EndEnumeration

Enumeration
  #Text_0
  #Text_1
  #Text_2
 
EndEnumeration 
fait :

Code : Tout sélectionner

Enumeration
  #Window_principale = 0 ; Ajout de =0 suite à ton commentaire Thyphoon
  #MenuBar_0
  #MENU_A_propos
  #Text_0
  #Text_1
  #Text_2 
EndEnumeration 
c'est la seul façon d'etre sur de ne pas avoir 2 constantes identique :)
car meme en les laçant dans des enumeration par genre
certaine fois, le fait d'avoir les meme valeur dans 2 constantes differente peut ammener des problemes , dont la memoire du programmeur est souvent la cause .... :)


il suffit de mettre toutes les constantes dans le meme enumeration
le nom des constante doit de toute façon etre explicite, cela evite les melange , et surtout d'avoir 2 constante avec la meme valeur :)

Publié : dim. 30/déc./2007 23:11
par Geo Trouvpatou
Salut Michel.
prends l'habitude de n'utiliser qu'un enumeration...
De la faute à qui tous ces Enumeration/EndEnumeration,...Ben à Visual Designer :wink:

Remarque prise en compte et pour cause quand j'ouvrais mon About box, cela m'effaçait du texte sur ma fenêtre principale.

J'avais dans chaque fichier des #Text_0 etc...

J'ai donc fait comme j'avais vu dans un prog sur le site, j'ai créé un fichier "enumeration.pb" où je mets toutes les énumérations.

Bye et merci des conseils.

Publié : dim. 30/déc./2007 23:26
par Chris
Geo Trouvpatou a écrit :Salut Michel.
prends l'habitude de n'utiliser qu'un enumeration...
De la faute à qui tous ces Enumeration/EndEnumeration,...Ben à Visual Designer :wink:

Remarque prise en compte et pour cause quand j'ouvrais mon About box, cela m'effaçait du texte sur ma fenêtre principale.

J'avais dans chaque fichier des #Text_0 etc...

J'ai donc fait comme j'avais vu dans un prog sur le site, j'ai créé un fichier "enumeration.pb" où je mets toutes les énumérations.

Bye et merci des conseils.
Tu peux utiliser une énumération pour les fenêtres, une autre pour les gadgets, une autre pour des constantes personnelles, etc...
Par contre, il faut éviter de mélanger les différents types dans plusieurs énumérations.

Si tu veux mélanger, tu n'en fais qu'une, sinon, fais en une par type.