Premiers essais avec PB
Premiers essais avec PB
Bonjour, je débute avec PB et j'essaye m'entrainer de créer un programme de gestion de données, j'ai cherché un peu partout mais je ne trouve pas comment on doit d'y prendre pour afficher un autre contenu sur une fenetre. Je m'explique, j'ai crée sur une fenetre mes champs de saisie et maintenant j'aimerai qu'en cliquant sur valider, ma fenetre affiche d'autres champs. Dois-je créer un autre ficher et le charger au moment de l'action sur le bouton ? J'imagine qu'il doit y avoir une fonction pour effacer la page.
Merci d'avance pour votre aide !
Merci d'avance pour votre aide !
Re: Premiers essais avec PB
Bonsoir squale, bienvenue sur PB
Pour ton soucis : Tu fais une erreur de principe sur le fonctionnement de ta fenêtre.
Les gadgets que tu créés sont toujours affichés sur la fenetre, à moins que tu ne les caches (commande : Hidegadget()) ou que tu les détruises (commande : FreeGadget()).
Si tu les caches, tu pourras les rappeler plus tard, si tu les détruits tu devrais le recréer.
Personnellement pour afficher des contenus différents sur une même fenêtre je gère quels gadgets sont visibles et à quel moment.
Tu peux aussi créer des fenêtres différentes et passer de l'autre à l'autre.
Une solution intéressante consiste à utiliser le ContainerGadget() pour mettre tes différents affichages dedans, puis les montrer / cacher tous en même temps.
Voici un petit exemple :
Si tu as plus de 2 pages, gérer les containers dans une liste ou un tableau est plus simple pour les cacher facilement.
Voila, pour le reste, regarde bien les exemples c'est super utile !

Pour ton soucis : Tu fais une erreur de principe sur le fonctionnement de ta fenêtre.
Les gadgets que tu créés sont toujours affichés sur la fenetre, à moins que tu ne les caches (commande : Hidegadget()) ou que tu les détruises (commande : FreeGadget()).
Si tu les caches, tu pourras les rappeler plus tard, si tu les détruits tu devrais le recréer.
Personnellement pour afficher des contenus différents sur une même fenêtre je gère quels gadgets sont visibles et à quel moment.
Tu peux aussi créer des fenêtres différentes et passer de l'autre à l'autre.
Une solution intéressante consiste à utiliser le ContainerGadget() pour mettre tes différents affichages dedans, puis les montrer / cacher tous en même temps.
Voici un petit exemple :
Code : Tout sélectionner
fenetre_principale = OpenWindow(#PB_Any, 0, 0, 400, 200, "Test de plusieurs affichages", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
If fenetre_principale <> 0
Bouton_pour_changer_d_affichage = ButtonGadget(#PB_Any, (WindowWidth(fenetre_principale) - 200) / 2, WindowHeight(fenetre_principale) - 30, 200, 20, "Changer d'affichage")
; on créé le container de la 1ère page
Container_affichage_1 = ContainerGadget(#PB_Any, 10, 10, WindowWidth(fenetre_principale) - 20, WindowHeight(fenetre_principale) - 40)
; les gadgets qui suivent sont ajouté dans cette page.
ButtonGadget(1, 10, 10, 70, 20, "Boutton 1")
ButtonGadget(2, 90, 10, 70, 20, "Boutton 2")
; on ferme la liste de gadget du container 1
CloseGadgetList()
; on créé le container de la 2ème page
Container_affichage_2 = ContainerGadget(#PB_Any, 10, 10, WindowWidth(fenetre_principale) - 20, WindowHeight(fenetre_principale) - 40)
; les gadgets qui suivent sont ajouté dans cette page.
ButtonGadget(3, 10, 30, 70, 20, "Boutton 3")
ButtonGadget(4, 90, 50, 90, 20, "Boutton 4")
; on ferme la liste de gadget du container 2
CloseGadgetList()
HideGadget(Container_affichage_2, #True)
page = 1
Else
; Il y a un problème et la fenêtre ne peut-être créée (n'arrive jamais)
End
EndIf
; boucle principale
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Gadget
Select EventGadget()
Case Bouton_pour_changer_d_affichage
If page = 1
page = 2
HideGadget(Container_affichage_1, #True)
HideGadget(Container_affichage_2, #False)
Else
page = 1
HideGadget(Container_affichage_2, #True)
HideGadget(Container_affichage_1, #False)
EndIf
EndSelect
EndIf
Until event = #PB_Event_CloseWindow
End
Voila, pour le reste, regarde bien les exemples c'est super utile !
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel
)
Mon site : CeriseCode (Attention Chantier perpétuel

Re: Premiers essais avec PB
Bonjour et bienvenue dans le monde merveilleux de PB
Je suis tout à fait d'accord avec Graph100, je te conseils de vraiment grouper tes champs par ContainerGadget(), tu y gagneras en simplicité et en légèreté de code.
Ensuite tu peux gérer leur affichage avec des hidegadget. Tu peux aussi utiliser un PanelGadget() qui peut apporter une certaine convivialité. Tout dépend de comment tu as pensé ton interface.

Je suis tout à fait d'accord avec Graph100, je te conseils de vraiment grouper tes champs par ContainerGadget(), tu y gagneras en simplicité et en légèreté de code.
Ensuite tu peux gérer leur affichage avec des hidegadget. Tu peux aussi utiliser un PanelGadget() qui peut apporter une certaine convivialité. Tout dépend de comment tu as pensé ton interface.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Premiers essais avec PB
Merci pour vos retours, je vais essayer tout ça. C'est vraiment un language très intéressant et la courbe d'apprentissage est très rapide !
Comme je viens d'arriver je me demandais s'il y avait un endroit pour se présenter mais je ne l'ai pas trouvé. Ou bien suis-je passé à côté ?
Edit : Ok j'ai pigé mais une autre question qui va avec, si j'ai un ou des gadgets que je voudrais avoir dans les deux pages, il suffit que je les mettes dans un autre Container que lui je laisse toujours visible, c'est bien ça ?
Comme je viens d'arriver je me demandais s'il y avait un endroit pour se présenter mais je ne l'ai pas trouvé. Ou bien suis-je passé à côté ?
Edit : Ok j'ai pigé mais une autre question qui va avec, si j'ai un ou des gadgets que je voudrais avoir dans les deux pages, il suffit que je les mettes dans un autre Container que lui je laisse toujours visible, c'est bien ça ?
- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Premiers essais avec PB
Tu peux laisser tes gadgets communs aux deux pages par exemple en haut, et disposer deux containers en dessous.squale a écrit :si j'ai un ou des gadgets que je voudrais avoir dans les deux pages, il suffit que je les mettes dans un autre Container que lui je laisse toujours visible, c'est bien ça ?
Oops j'ai oublié de te souhaiter la bienvenue sur ce forum

Code : Tout sélectionner
Enumeration
#Mainform
#Button1
#Button2
#Container1
#String10
#String11
#Container2
#String20
#String21
EndEnumeration
Define.l Event, GEvent
Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget
Procedure Open_MainForm()
OpenWindow(#Mainform, 0, 0, 500, 400, "Container", WindowStyle)
;Bouton commun
ButtonGadget(#Button1, 10, 10, 100, 22, "Container 1")
ButtonGadget(#Button2, 120, 10, 100, 22, "Container 2")
;Premier container
ContainerGadget(#Container1, 10, 40, 480, 300)
StringGadget(#String10, 10, 10, 200, 22, "String 10")
StringGadget(#String11, 10, 40, 200, 22, "String 11")
CloseGadgetList()
;Deuxiéme container
ContainerGadget(#Container2, 10, 40, 480, 300)
StringGadget(#String20, 10, 10, 200, 22, "String 20")
StringGadget(#String21, 10, 40, 200, 22, "String 21")
CloseGadgetList()
EndProcedure
Procedure Start()
;OUverture de la fenetre
Open_MainForm()
;Par defaut On cache le container 2
HideGadget(#Container2, #True)
EndProcedure
start()
;Boucle évenementielle
Repeat
Event = WaitWindowEvent()
GEvent = EventGadget()
Select Event
Case #PB_Event_Gadget
Select GEvent
Case #Button1
;Clique sur le bouton1
;On affiche le container 1
HideGadget(#Container1, #False)
;et on cahche le container 1
HideGadget(#Container2, #True)
Case #Button2
;Clique sur le bouton2
;On cache le container 1
HideGadget(#Container1, #True)
;et on affiche le container 2
HideGadget(#Container2, #False)
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Premiers essais avec PB
Une autre façon de faire est d'utiliser un PanelGadget() dans lequel tu inclus des onglets.
Code : Tout sélectionner
Enumeration
#Mainform
#Panel
#String10
#String11
#String20
#String21
EndEnumeration
Define.l Event, GEvent
Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget
Procedure Open_MainForm()
OpenWindow(#Mainform, 0, 0, 500, 400, "Container", WindowStyle)
;Mise en place du panel
PanelGadget(#Panel, 10, 40, 480, 300)
;Premier onglet
AddGadgetItem(#Panel, -1, "Onglet1")
StringGadget(#String10, 10, 10, 200, 22, "String 10")
StringGadget(#String11, 10, 40, 200, 22, "String 11")
;Deuxiéme onglet
AddGadgetItem(#Panel, -1, "Onglet1")
StringGadget(#String20, 10, 10, 200, 22, "String 20")
StringGadget(#String21, 10, 40, 200, 22, "String 21")
;Fermeture du panel
CloseGadgetList()
EndProcedure
;Ouverture de la fenetre
Open_MainForm()
;Boucle évenementielle
Repeat
Event = WaitWindowEvent()
GEvent = EventGadget()
Select Event
Case #PB_Event_Gadget
Select GEvent
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Premiers essais avec PB
Pour garder un gadget commun aux différents affichages le mieux et de penser l'interface de façon à ce que les containers ne se superposent pas !
Tu as eu la chance de voir 2 types de programmation différentes avec Falsam et moi
Falsam a appelé ses gadgets avec des constantes et moi avec des #pb_any (dynamique).
Il y a plein de façon d'arriver au résultat désiré.
Tu as eu la chance de voir 2 types de programmation différentes avec Falsam et moi

Falsam a appelé ses gadgets avec des constantes et moi avec des #pb_any (dynamique).
Il y a plein de façon d'arriver au résultat désiré.
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel
)
Mon site : CeriseCode (Attention Chantier perpétuel

Re: Premiers essais avec PB
Merci !
Deux questions bêtes, est-il possible de colorier un container ? Pour pouvoir voir plus facilement si ma mise ne forme correspond.
y'a t'il possiblilité de faire des saut de ligne dans la chaine de caractère d'un MessageRequester ?
Deux questions bêtes, est-il possible de colorier un container ? Pour pouvoir voir plus facilement si ma mise ne forme correspond.
y'a t'il possiblilité de faire des saut de ligne dans la chaine de caractère d'un MessageRequester ?
- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Premiers essais avec PB
Colorier un container dans mon exemple ci-dessus par exemplesquale a écrit :Merci !
Deux questions bêtes, est-il possible de colorier un container ? Pour pouvoir voir plus facilement si ma mise ne forme correspond.
y'a t'il possiblilité de faire des saut de ligne dans la chaine de caractère d'un MessageRequester ?
Code : Tout sélectionner
SetGadgetColor(#Container1,#PB_Gadget_BackColor ,RGB(255, 69, 0))
Code : Tout sélectionner
MessageRequester("Information","Ligne1" + #CRLF$ + "Ligne 2" + #CRLF$ +"Etc ...")
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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Premiers essais avec PB
Extra ! Merci pour votre réactivité !
Re: Premiers essais avec PB
bienvenue Squale 
Tu verras, le purebasci c'est vraiment top comme langage
Pour les sauts de ligne (ce qui correspond à la touche entrée) une autre technique c'est d'utiliser les chr() + le numéro ASCII.
Quelques numéro qu'on utilise souvent (correspond à la lettre tapée au clavier):
- entrée : chr(10)
- espace : chr(13)
- tab : chr(9)
Voilà pour les plus courantes
Tu trouves la plupart des valeurs ASCII dans l'IDE de purebasic, menu Outils/Table ASCII.
Ce qui donnerait :
MessageRequester("Information","Ligne1" + Chr(10) + "Ligne 2" + chr(10) +"Etc ...")
Attention, ça ne marche pas avec certains requester comme l'InputRequester() par exemple.

Tu verras, le purebasci c'est vraiment top comme langage

Pour les sauts de ligne (ce qui correspond à la touche entrée) une autre technique c'est d'utiliser les chr() + le numéro ASCII.
Quelques numéro qu'on utilise souvent (correspond à la lettre tapée au clavier):
- entrée : chr(10)
- espace : chr(13)
- tab : chr(9)
Voilà pour les plus courantes

Tu trouves la plupart des valeurs ASCII dans l'IDE de purebasic, menu Outils/Table ASCII.
Ce qui donnerait :
MessageRequester("Information","Ligne1" + Chr(10) + "Ligne 2" + chr(10) +"Etc ...")
Attention, ça ne marche pas avec certains requester comme l'InputRequester() par exemple.
http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Re: Premiers essais avec PB
Hé hé salut Blendman, c'est en suivant tes travaux que j'ai eu envie d'essayer 
C'est vraiment très agréable à utiliser, je trouve de plus que c'est très bien documenté ! Et puis cette commuauté m'a l'air très réactive et sympatique de plus !
Merci pour ces infos ça va effectivement être très utile !
Et toi où en es-tu de ton projet de jeu ?

C'est vraiment très agréable à utiliser, je trouve de plus que c'est très bien documenté ! Et puis cette commuauté m'a l'air très réactive et sympatique de plus !
Merci pour ces infos ça va effectivement être très utile !
Et toi où en es-tu de ton projet de jeu ?
Re: Premiers essais avec PB
Oupps, petite rectif :
Saut de ligne : chr(10)
Retour chariot : chr(13)
Espace : chr(32)
Suivant les systèmes d'exploitation, la touche Entrée envoie un Retour chariot : chr(13) ou un Saut de ligne : chr(10) + Retour chariot : chr(13).
Pour comprendre la subtilité (essentielle dans l'utilisation pro d'un traitement de texte), voir les wiki correspondant :
https://fr.wikipedia.org/wiki/Retour_chariot
https://fr.wikipedia.org/wiki/Saut_de_ligne
http://fr.wikipedia.org/wiki/Fin_de_ligne
Ça n'est pas bien expliqué mais dans un traitement de texte, écrivez un paragraphe contenant plusieurs lignes. Faites des paragraphes avec la touche Entrée ou des sauts de ligne avec Shift+Entrée et jouez avec le format (tabulation, retrait gauche, retrait première ligne, etc). Le format n'est pas forcément respecté.
L'espace est un caractère imprimable, c'est un "espace blanc" entre 2 caractères alors que les caractères de 0 à 31 ne sont pas imprimable en échange ils ont une fonction comme le retour chariot...
Mesa.
Saut de ligne : chr(10)
Retour chariot : chr(13)
Espace : chr(32)
Suivant les systèmes d'exploitation, la touche Entrée envoie un Retour chariot : chr(13) ou un Saut de ligne : chr(10) + Retour chariot : chr(13).
Pour comprendre la subtilité (essentielle dans l'utilisation pro d'un traitement de texte), voir les wiki correspondant :
https://fr.wikipedia.org/wiki/Retour_chariot
https://fr.wikipedia.org/wiki/Saut_de_ligne
http://fr.wikipedia.org/wiki/Fin_de_ligne
Ça n'est pas bien expliqué mais dans un traitement de texte, écrivez un paragraphe contenant plusieurs lignes. Faites des paragraphes avec la touche Entrée ou des sauts de ligne avec Shift+Entrée et jouez avec le format (tabulation, retrait gauche, retrait première ligne, etc). Le format n'est pas forcément respecté.
L'espace est un caractère imprimable, c'est un "espace blanc" entre 2 caractères alors que les caractères de 0 à 31 ne sont pas imprimable en échange ils ont une fonction comme le retour chariot...
Mesa.
Re: Premiers essais avec PB
blendman a écrit : Quelques numéro qu'on utilise souvent (correspond à la lettre tapée au clavier):
- entrée : chr(10)
- espace : chr(13)
- tab : chr(9)
tant qu'a donner une info , donne la bonne !

http://www.asciitable.pro/ascii_table.htm
fin de ligne chr(10) (#LF$)
return chr(13) (#CR$)
qu'on peut grouper par( #CRLF$)

[reedit] Mesa a envoyé son message pendant que je rédigeais le miens

Re: Premiers essais avec PB
Hello, une autre question, j'ai crée un bouton qui me permet d'ouvrir une nouvelle fenetre dans laquelle j'ai mis un StringGadget mais quand je teste il n'est pas actif. Je dois détecter quelle fenetre est active pour rendre actifs les gadgets qui sont dedans ?