Quelques Interrogations sur les forms et gadgets

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Cyrion81
Messages : 26
Inscription : jeu. 25/juin/2015 20:13

Quelques Interrogations sur les forms et gadgets

Message par Cyrion81 »

Bonjour à tous
Continuant mon apprentissage, je suis actuellement dans la création de fenêtres avec des Gadgets à l'intérieur.
J'ai trouvé une instruction qui m'est signalée comme obsolète :CreateGadjetList. je me doute que cela fonctionne encore, mais a t elle été remplacée ?
Je vois aussi plusieurs références à un RAD (enfin si je puis me permettre cette qualification) PureForme de gnozal pour créer facilement des fenêtres complètes, mais lorsque je veux le télécharger grâce au liens dans les posts je tombe sur un site en russe, comme le russe est pas trop ma tasse de thé...... y a t il un endroit ou je puisse le télécharger ?
Autre petite complication, Lors de l'utilisation du gadget option, il réagit bien, c 'est a dire que l'on peut en sélectionner un uniquement, mais dans mon futur projet j'aurai besoin de 3 séries de 10 options (voire + de série) dans la même fenêtre. Dans d'autres logiciels de développement on utilise un Container, J'ai surement mal cherché, mais, j'ai pas trouvé un descriptif sur cette méthode sur PB. Quelqu'un pourrait il me mettre sur le bonne voie .
Merci de vos réponses.
Dernière modification par Cyrion81 le jeu. 09/juil./2015 19:09, modifié 1 fois.
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Quelques ?

Message par microdevweb »

@Cyrion81,

Plus besoins de l'utilisé, exemple si tu crée un ScollAreaGadget, tu ajoute à la suite tous les gadgets que tu veux à l’intérieur et une fois terminé tu ajoute CloseGadgetList().

Si tu veux par la suite ajouté d'autre gadget, tu utilise OpenGadgetList(#MonContainer)
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Quelques ?

Message par Marc56 »

Bonjour Cyrion81,

- Depuis la version 5, l'un des RAD(1) est intégré à PB, Menu Form et il fonctionne très bien. Il y a quelques subtilités à connaitre pour bien l'utiliser. N'hésite pas à poser des questions.

- Pour utiliser plusieurs séries de gadget Option, il faut encapsuler chaque série dans le gadget FrameGadget et non pas container gadget (Tu n'es pas obligé de mettre un nom de cadre)
- La création d'un nouveau FrameGadget ferme le précédent, c'est à dire que pour plusieurs séries, tu fais

Code : Tout sélectionner

FrameGadget(
OptionGadget(...
OptionGadget(...

FrameGadget(
OptionGadget(...
OptionGadget(...
etc
Il y a un pseudo-bug dans le générateur de form, car si tu ajoutes par exemple une option dans le groupe 1 après avoir créé le groupe 2, l'option est affichée dans le 1 mais gérée par le 2, car il créé les nouveau objets à la suite (je sais pas si j'explique bien). Dans ce cas, il faut passer en mode code et déplacer la ligne au bon endroit.

:wink:

(1) RAD C'est plus un générateur de code avec un certains nombre d'extensions: Il est notamment très bien
- Quand on a beaucoup de gadgets et qu'on veut des fenêtres et gadgets redimensionnables automatiquement (il suffit alors de préciser le type d'ancrage de chaque gadget et il créé la procédure tout seul).
- Il gère un manager d'images qui permet de rendre les images relatives et de les incorporer automatiquement dans l'EXE
- Il se charge de renommer toutes les occurrences d'un même objet
Cyrion81
Messages : 26
Inscription : jeu. 25/juin/2015 20:13

Re: Quelques ?

Message par Cyrion81 »

Ce qui concerne le code pour la programmation, je n'ai pas trop de difficulté, peut être pour le moment,mais tout que j ai réalisé et envoyant le résultat avec débug, cela fonctionne relativement bien.
Pour bien comprendre le système de fenêtre et de gadgets, j'ai consulté les Tutos,( par exemple les gadgets). Seulement voila, même si ça plante pas je n'ai aucun affichage. je suppose que Datant de 2004 il y a eu bcp de changements dans PureBasic.
C'est vrai que c'est assez déroulant d'étudier un truc et que cela ne fonctionne pas ou que les résultats ne sont pas ceux que l'on attends.
Loin de moi de critiquer les tutos, qui sont au demeurant très bien fait, mais aussi anciens et quand on débute cela fait mal quand la séance se fini sur un gros point d’interrogation.
Une première suggestion d'un bleu comme moi, serait peut être de les rafraichir pour une utilisation avec la version 5.31.
Je n'agresse pas, loin de là, je vous fait seulement connaitre mon ressenti.
Autre chose, ( encore un truc de débutant) lorsque je réalise avec l'éditeur incorporé une form avec boutons, gadgets etc, si je suis dans "form,cela ce lance, j'aperçois ma fenêtre . je copie le code dans un nouveau onglet, je lance la procédure d'affichage, je conçois la boucle de gestion des événement mais la, juste l apparition dans ma barre de tache d'un symbole , et aucun affichage.

je suis preneur simplement d'un code avec une forme simple, deux trois boutons ou gadgets texte, avec un échange entre les gadgets, par exemple écrire un truc dans un gadetsTexte avec un bouton, ou l capture d'un texte avec un bouton et passé dans une variable, pas plus n'y moins, a partir de cela je serai suffisamment "branché" pour les interfaces.
Pardonnez mon illettrisme total de la conception des form.
Merci encore à ce groupe.
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

Re: Quelques ?

Message par Micheao »

salut Cyrion81

Voici un peu code de mon mini-lecteur mp3

Code : Tout sélectionner

; *** Petit lecteur mp3 ***
;** Constantes **
; ** Fenetre**
Enumeration
  #Fenetre_music
EndEnumeration
; ** Gadgets **

Enumeration
  #Music
  #texte_nom
  #texte_fichier
  #texte_volume
  #barre_volume
  #bouton_jouer
  #bouton_stop
  #bouton_charger
EndEnumeration

InitMovie() 
Global Fichier.s 
; ** Procedures  

Procedure Charger_mp3();*** Chargement d'un fichier mp3 ***
  Fichier.s= OpenFileRequester("Charger","","mp3 fichier (*.mp3)|*.mp3",0)
  If Fichier.s  <> ""
    SetGadgetText(#texte_fichier,GetFilePart(Fichier.s))
    LoadMovie(#Music,Fichier.s)
  EndIf
EndProcedure
Procedure lecture(); *** Lecture du fichier mp3***
  If Fichier.s <> ""
    PlayMovie(#Music,#Null)
  EndIf
EndProcedure

Procedure Arreter();*** On arrete stop la musique 
  If Fichier.s <> ""
    StopMovie(#Music)
  EndIf
EndProcedure

Procedure Volume(); *** On augmente ou diminue le son 
  If Fichier.s <> ""
    Volume.l = GetGadgetState(#barre_volume)
     MovieAudio(#Music,Volume,Balance)
  EndIf
  
EndProcedure

;**Creation de la fenetre 
If OpenWindow(#Fenetre_music,0,0,250,170,"Mini mp3",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
  TextGadget(#texte_nom,20,10,150,20,"Titre du mp3 : ")
  TextGadget(#texte_fichier,20,30,210,20,"",#PB_Text_Border)
  TextGadget(#texte_volume,20,60,150,20,"Volume :")
  TrackBarGadget(#barre_volume,20,80,210,20,0,100)
  SetGadgetState(#barre_volume,100)
  ButtonGadget(#bouton_jouer,40,130,50,20,"Jouer")
  ButtonGadget(#bouton_stop,100,130,50,20,"Stop")
  ButtonGadget(#bouton_charger,160,130,50,20,"Charger")
  
  EndIf




; ** Boucle du programme** 

Repeat 
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #barre_volume : Volume()
          Case #bouton_charger :Charger_mp3()   
        Case #bouton_jouer : lecture() 
        Case #bouton_stop : Arreter()
          EndSelect
      Case #PB_Event_CloseWindow
      fermer =#True
      
  EndSelect
Until fermer
End
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Quelques Interrogations sur les forms et gadgets

Message par falsam »

Cyrion81 a écrit :je suis preneur simplement d'un code avec une forme simple, deux trois boutons ou gadgets texte, avec un échange entre les gadgets, par exemple écrire un truc dans un gadetsTexte avec un bouton
Et bien voila tu vas être servi.

Un code qui permet :
- De cliquer sur Clic1 pour afficher une valeur dans le premier champ de saisie.
- De cliquer sur Clic2 pour transférer cette valeur du premier champ vers le second champ de saisie.

Le reste des explications est dans le code

Code : Tout sélectionner

Enumeration Window
  #MainForm ;IDentifiant d'une fenetre
EndEnumeration

Enumeration Gadget
  #Button1
  #Button2
  
  #String1
  #String2
EndEnumeration

Declare Start()
Declare OnClicButton1()
Declare OnClicButton2()


Start()

;Affichage de la fenetre Menu Systeme et centrée 
Procedure Start()
  OpenWindow(#MainForm, 0, 0, 500, 500, "Titre de la fenetre", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  
  ;Affichage du premier champ
  TextGadget(#PB_Any, 10, 25, 100, 22, "Champ 1")
  StringGadget(#String1, 100, 20, 200, 24, "")
  
  ;Affichage du deuxiéme champ
  TextGadget(#PB_Any, 10, 55, 100, 22, "Champ 2")
  StringGadget(#String2, 100, 50, 200, 24, "")
  
  ;Affichage des deux boutons
  ButtonGadget(#Button1, 400, 20, 80, 24, "Clic 1")
  ButtonGadget(#Button2, 400, 50, 80, 24, "Clic 2")
  
  ;Evenement gadget (Par exemple les boutons)
  ;Clic sur #Button1 appelera la procédure @OnClickButton1()
  BindGadgetEvent(#Button1, @OnClicButton1())
  
  ;Idem pour button2
  BindGadgetEvent(#Button2, @OnClicButton2())
  
  ;Boucle evenementielle jusqu'à fermeture de la fenetre
  Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow  
EndProcedure


Procedure OnClicButton1()
  ;On va ajouter un mot dans #String1
  SetGadgetText(#String1, "Un mot")
EndProcedure

Procedure OnClicButton2()
  ;Cette fois çi on va transférer #String1 vers #String2
  
  Protected VarTemp.s ;Déclaration d'une variable provisoire
  ;Cette variable ne peut être lu que par la procédure OnClicButton2
  
  ;Récupération du contenu de #String1
  VarTemp = GetGadgetText(#String1)
  
  ;On vide #String1
  SetGadgetText(#String1, "")
  
  ;Et on envoi à #String2
  SetGadgetText(#String2, VarTemp)
EndProcedure
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%
Cyrion81
Messages : 26
Inscription : jeu. 25/juin/2015 20:13

Re: Quelques Interrogations sur les forms et gadgets

Message par Cyrion81 »

Merci de votre aide concernant les interfaces, je sais ou je vais passer mon Vendredi
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Quelques ?

Message par Marc56 »

Cyrion81 a écrit :... je copie le code dans un nouveau onglet, je lance la procédure d'affichage, je conçois la boucle de gestion des événement mais la, juste l apparition dans ma barre de tache d'un symbole , et aucun affichage...
Le générateur de form tel qu'il est est apparu dans l'IDE en 2012, soit douze ans! après la première version publique de PB :D donc tous les tutoriels que tu peux trouver datant d'avant cette date sont obsolète. Il y a un petit chapitre mis à jour dans l'aide (http://www.purebasic.com/french/documen ... _form.html)
Il faut se fier à la doc qui accompagne le programme lui-même (comme on dit en informatique: en cas de problème la solution est au bout du doigt: la touche F1)

Tu n'es pas obligé de copier le code généré par le Form dans le code source, il suffit de simplement de sauvegarder le fichier (par défaut ce sera un .pbf) puis d'indiquer à ton source principal (.pb) de l'inclure au moment de compiler. Ainsi tu peux modifier le Form autant de fois que tu veux sans aller refaire à chaque fois un copié/coller.

Ton fichier principal (par exemple "Accueil.PB") commencer donc par exemple par:

Code : Tout sélectionner

XIncludeFile "Fenetre_accueil.PBF"
Comme tu auras potentiellement plusieurs fenêtres, je te conseille de procéder de la manière suivante:
  • Créé un répertoire unique où tu mettras tout ce qui sera utile à ton application (code, images, icones etc)
  • Dans l'IDE Préférences / Form / décoche Générer procédure d'évènements et Générer boucle d'évènements
  • Créé ton interface graphique, referme la fenêtre et sauvegarde-là! (il y a un bug si tu sauvegarde avant puis referme)
  • Ne modifie jamais rien directement dans le code source du form, sauf à changer une valeur numérique ou le contenu d'une chaine de caractère
  • Créé un nouveau fichier qui sera ton code principal. Il doit donc avoir une ligne XInclude "nom du fichier form.pbf"
  • Créé le reste du code
Par la suite, tu mettras tout ça en mode projet, mais c'est une autre histoire, pas la peine de te prendre la tête avec cela pour l'instant.

Ton code va donc commencer par
XInclude "..."

Ensuite tu créé tes procédures

Ensuite la boucle principale

Note
  • XIncludeFile plutôt que IncludeFile, évite d'inclure plusieurs fois le même fichier par erreur
  • Idéalement, il faut ajouter EnableExplicite au début du code source, ce qui oblige à déclare toutes les variables et évite donc des erreurs (une simple faute de frappe dans un nom de variable par exemple)
:wink:
Répondre