About box avec une nouvelle fiche.
-
- Messages : 471
- Inscription : dim. 23/déc./2007 18:10
About box avec une nouvelle fiche.
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.
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.
A mon avis tes 2 fenêtre on le même numeroGeo 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.
si j'étais toi je ferais au debut
Code : Tout sélectionner
;Enumeration des fenêtres
Enumeration
#MainWindow
#AboutWindow
EndEnumeration
Code : Tout sélectionner
OpenWindow(#MainWindow, ....
OpenWindow(#AboutWindow, ....
-
- Messages : 471
- Inscription : dim. 23/déc./2007 18:10
Re: About box avec une nouvelle fiche.
Salut Thyphoon.
Voici mon code :
main.pb
AboutBox.pb
#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.
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
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
Apparemment il y avait déjà ce problème j'ai donc rajouté :Thyphoon a écrit : A mon avis tes 2 fenêtre on le même numero
si j'étais toi je ferais au debut
#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.
normal que ça ferme tout car ta boucle principal s'arrête des qu'il y a un evenement de fermeture de fenêtre
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é
Code : Tout sélectionner
Until Event = #PB_Event_CloseWindow
regarde fans la doc, il y a moyen de connaitre quel est la fenêtre activé

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
-
- Messages : 471
- Inscription : dim. 23/déc./2007 18:10
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.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()
, on en apprend tout les jours.
Bye.
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
Déjà que la dernière fois je n'arrivais pas à faire fonctionner mon menu parce que je collais mes instructions dans un EventGadget()

Bye.
prends l'habitude de n'utiliser qu'un enumeration...
au lieu de :
fait :
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
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
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

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

-
- Messages : 471
- Inscription : dim. 23/déc./2007 18:10
Salut Michel.

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.
De la faute à qui tous ces Enumeration/EndEnumeration,...Ben à Visual Designerprends l'habitude de n'utiliser qu'un enumeration...

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...Geo Trouvpatou a écrit :Salut Michel.De la faute à qui tous ces Enumeration/EndEnumeration,...Ben à Visual Designerprends l'habitude de n'utiliser qu'un enumeration...
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.
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.