Premiers essais avec PB

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
squale
Messages : 22
Inscription : mer. 28/août/2013 22:30
Localisation : Strasbourg
Contact :

Premiers essais avec PB

Message par squale »

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 !
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Premiers essais avec PB

Message par graph100 »

Bonsoir squale, bienvenue sur PB :D

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
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 !
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Premiers essais avec PB

Message par Ar-S »

Bonjour et bienvenue dans le monde merveilleux de PB :P

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
Avatar de l’utilisateur
squale
Messages : 22
Inscription : mer. 28/août/2013 22:30
Localisation : Strasbourg
Contact :

Re: Premiers essais avec PB

Message par squale »

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 ?
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Premiers essais avec PB

Message par falsam »

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 ?
Tu peux laisser tes gadgets communs aux deux pages par exemple en haut, et disposer deux containers en dessous.

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%
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Premiers essais avec PB

Message par falsam »

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%
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Premiers essais avec PB

Message par graph100 »

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 :D
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 ;))
Avatar de l’utilisateur
squale
Messages : 22
Inscription : mer. 28/août/2013 22:30
Localisation : Strasbourg
Contact :

Re: Premiers essais avec PB

Message par squale »

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 ?
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Premiers essais avec PB

Message par falsam »

squale 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 ?
Colorier un container dans mon exemple ci-dessus par exemple

Code : Tout sélectionner

SetGadgetColor(#Container1,#PB_Gadget_BackColor ,RGB(255, 69, 0))
Plusieurs lignes dans un MessageRequester

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%
Avatar de l’utilisateur
squale
Messages : 22
Inscription : mer. 28/août/2013 22:30
Localisation : Strasbourg
Contact :

Re: Premiers essais avec PB

Message par squale »

Extra ! Merci pour votre réactivité !
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Premiers essais avec PB

Message par blendman »

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.
Avatar de l’utilisateur
squale
Messages : 22
Inscription : mer. 28/août/2013 22:30
Localisation : Strasbourg
Contact :

Re: Premiers essais avec PB

Message par squale »

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 ?
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Premiers essais avec PB

Message par Mesa »

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.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Premiers essais avec PB

Message par Backup »

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 :) [/reedit]
Avatar de l’utilisateur
squale
Messages : 22
Inscription : mer. 28/août/2013 22:30
Localisation : Strasbourg
Contact :

Re: Premiers essais avec PB

Message par squale »

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 ?
Répondre