Page 1 sur 1
Quelques Interrogations sur les forms et gadgets
Publié : jeu. 09/juil./2015 14:35
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.
Re: Quelques ?
Publié : jeu. 09/juil./2015 14:42
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)
Re: Quelques ?
Publié : jeu. 09/juil./2015 15:03
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.
(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
Re: Quelques ?
Publié : jeu. 09/juil./2015 17:43
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.
Re: Quelques ?
Publié : jeu. 09/juil./2015 18:45
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
Re: Quelques Interrogations sur les forms et gadgets
Publié : jeu. 09/juil./2015 19:28
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
Re: Quelques Interrogations sur les forms et gadgets
Publié : jeu. 09/juil./2015 19:57
par Cyrion81
Merci de votre aide concernant les interfaces, je sais ou je vais passer mon Vendredi
Re: Quelques ?
Publié : ven. 10/juil./2015 7:59
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

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:
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)
