papydall
Nombre de messages : 7009 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Tutoriel de Klaus Sam 20 Oct 2012 - 19:22 | |
| Salut tout le monde. Suite au lien donné par Nardo26 dans « A l’aide sur ‘procédures’ » qui fait référence à «Tutoriels et éclaircissements : Structure pour un programme Windows » écrit par Klaus, j’ai lu avec un grand intérêt la totalité des 4 leçons. Ce tutoriel est très bien fait, bien expliqué, très pédagogique : merci Klaus ! Je m’en veux un peu pour ne pas l’avoir lu plus tôt ! J’invite tous ceux qui ne l’ont pas lu à le faire : c’est très bien expliqué. @KlausJe me suis permis de modifier le programme final de la 4ème leçon en introduisant les SUB qui sont à la mode actuellement et par la même occasion j’ai corrigé une erreur : - Code:
-
2D_CLEAR 90 qui provoquait : (48) Not correct expression. Line : … - Code:
-
2D_CLEAR En effet 2D_CLEAR n’admet pas un numéro d’objet : elle agit sur l’objet système « cible 2D » sélectionné par 2D_TARGET_IS. Voici le programme modifié - Code:
-
' ******************************************************** ' * Tutoriel sur la structure pour un programme Windows * ' * Par Klaus * ' * Modifié par Papydall * ' ********************************************************
demarrer() : ' Appel du module principal qui gère tout le programme end : ' INDISPENSABLE pour arrêter l'exécution du programme principal ' Le programme reste actif et traite les événements ' ****************************************************************************** SUB demarrer() ' Déclarer tous les labels du programme
label saisie_mot : ' saisie du mot en cours ' Panoramic ne permet pas encore d'appeler des SUB par ON_CHANGE xxx label click : ' Pour gérer les ON_CLICK xxx ' Panoramic ne permet pas encore d'appeler des SUB par ON_CLICK xxx ' ----------------------------------------------------------------------------- ' toutes les variables du programme dim longueur%, mot_a_analyser$, i% dim nom_programme$, auteur$, date_creation$, version_programme$, modif$ dim x% : ' position du prochain rectangle dans picture 90 dim couleur% : ' couleur pour les rectangles de l'histogramme ' ------------------------------------------------------------------------------ ' toutes les initialisations nom_programme$ = "Tutoriel leçon 4" auteur$ = "Klaus" date_creation$ = "21 mars 2011" version_programme$ = "V01.00" modif$ = "Papydall le 20 Octobre 2012"
' container en haut à gauche container 310 : ' pour le champ de saisie et le bouton "Analyser" top 310,5 : left 310,5 : ' positionnement width 310,280 : height 310,130 caption 310,"Saisie"
' container en haut à droite container 320 : ' pour la liste top 320,5 : left 320,285 : ' positionnement width 320,280 : height 320,130 caption 320,"Historique"
' container en bas container 330 : ' pour les graphiques top 330,135 : left 330,5 : ' positionnement width 330,560 : height 330,280 caption 330,"Graphiques"
' champ de saisie edit 10 : ' champ de saisie top 10,20 : left 10,120 : ' position du coin en haut à gauche du champ dans la fenêtre on_change 10,saisie_mot : ' placé après la création de l'objet 30 pour informer Panoramic
' affichage du nombre de caractères alpha 20 : ' zone d'affichage top 20,80 : left 20,120 : ' position du coin en haut à gauche de la zone d'affichage dans la fenêtre font_size 20,12 : ' pour avoir une taille lisible facilement ' personnaliser l'affichage font_name 20,"Roman" : ' choix de la police font_bold 20 : ' caractères gras font_italic 20 : ' en italique font_color 20,0,0,255 : ' bleu foncé
' libellés des champs affichés alpha 1 : top 1,20 : left 1,10 : caption 1,"Mot à analyser:" alpha 2 : top 2,80 : left 2,10 : caption 2,"Nombre de lettres:"
' bouton déclenchant l'analyse button 30 : ' bouton déclenchant l'analyse top 30,50 : left 30,120 : ' position du coin en haut à gauche du bouton caption 30,"Analyse" : ' libellé du bouton ON_CLICK 30,click : ' ---> analyser_mot ' attacher ces objets au container 310 parent 10,310 parent 20,310 parent 1,310 parent 2,310 parent 30,310
' liste d'affichage des mots traités list 40 : ' zone d'affichage top 40,20 : left 40,300-285 : ' position du coin en haut à gauche de la liste
' détermination de la direction du tri option 50 : ' option pour tri ascendant top 50,10 : left 50,450-285 : ' placement à l'écran caption 50,"Tri ascendant" option 51 : ' option pour tri ascendant top 51,30 : left 51,450-285 : ' placement à l'écran caption 51,"Tri descendant" MARK_ON 50 : ' cocher l'option tri ascendant par défaut
' bouton déclenchant le tri button 60 : ' bouton déclenchant l'analyse top 60,50 : left 60,450-285 : ' position du coin en haut à gauche du bouton caption 60,"Tri" : ' libellé du bouton ON_CLICK 60,CLICK : ' placé après la création de l'objet 60 pour informer Panoramic inactive 60 : ' bouton inactif par défaut
' bouton effaçant la liste button 70 : ' bouton déclenchant l'analyse top 70,80 : left 70,450-285 : ' position du coin en haut à gauche du bouton caption 70,"Effacer" : ' libellé du bouton on_click 70,click : ' placé après la création de l'objet 70 pour informer Panoramic inactive 70 : ' bouton inactif par défaut ' personnaliser ce bouton font_bold 70 : ' caractères gras
' attacher les objets au container 320 parent 40,320 parent 50,320 parent 51,320 parent 60,320 parent 70,320
' liste invisible pour le tri descendant dlist 80 : ' liste invisible
' menu système main_menu 100 : ' racine du menu ' définir les sous-menus sub_menu 101 : parent 101,100 : caption 101,"Fichiers" sub_menu 102 : parent 102,100 : caption 102,"Fonctions" sub_menu 103 : parent 103,100 : caption 103,"A-Propos" on_click 103,click : ' ---> A_propos ' sous-menu Fichiers sub_menu 104 : parent 104,101 : caption 104,"Sortie" on_click 104,click : ' ---> sortir
' sous-menu Fonctions sub_menu 105 : parent 105,102 : caption 105,"Analyser mot" on_click 105,click : ' ---> analyser_mot sub_menu 106 : parent 106,102 : caption 106," Tri descendant" ON_click 106,click : ' ---> inverser_sens sub_menu 107 : parent 107,102 : caption 107,"Trier liste" on_click 107,click : ' ---> trier_liste sub_menu 108 : parent 108,102 : caption 108,"Effacer liste" on_click 108,click : ' ---> effacer_liste
form 200 : ' créer une fenêtre hide 200 : ' et la cacher tout de suite top 200,300 : left 200,300 width 200,400 : height 200,200 caption 200,"A-propos" ' border_hide 200 : ' supprimer le bord et les boutons système button 210 : ' créer le bouton de fermeture parent 210,200 : ' il appartient à la fenêtre 200 ! top 210,140 : left 210,180 : ' positionner ce bouton dans la fenêtre caption 210,"Fermer" on_click 210,click : ' ---> cacher_a_propos ' afficher les informations fixes alpha 211 : parent 211,200 top 211,10 : left 211,10 : caption 211,"Programme : "+nom_programme$ alpha 212 : parent 212,200 top 212,30 : left 212,10 : caption 212,"Auteur : "+auteur$ alpha 213 : parent 213,200 top 213,50 : left 213,10 : caption 213,"Créé le : "+date_creation$ alpha 214 : parent 214,200 top 214,70 : left 214,10 : caption 214,"Version : "+version_programme$ alpha 215 : parent 215,200 top 215,90 : left 215,10 : caption 215,"Modifié par : " +modif$
' pour recevoir les graphismes picture 90 : ' picture pour les graphismes parent 90,330 : ' attacher ce picture au container 30 top 90,15 : left 90,10 : ' positionnement dans le container width 90,540 : height 90,260 : ' dimensions color 90,230,230,100 : ' couleur de fond 2d_target_is 90 : ' toutes les commandes 2d_ iront dans picture 90
END_SUB ' ****************************************************************************** ' Pour gérer les on_click xxx ' Panoramic ne permet pas encore d'appeler des SUB par ON_CLICK xxx click: if clicked(30) > 0 or clicked(105) > 0 then analyser_mot() : return if clicked(60) > 0 or clicked(107) > 0 then trier_liste() : return if clicked(106) > 0 then inverser_sens() : return if clicked(70) > 0 or clicked(108) > 0 then effacer_liste() : return if clicked(103) > 0 then a_propos() : return if clicked(104) > 0 then sortir() if clicked(210) > 0 then cacher_a_propos() return ' ****************************************************************************** ' traitement des événements SUB analyser_mot() mot_a_analyser$ = text$(10) : ' récupérer le mot saisi ' et afficher le résultat dans l'objet 20 longueur% = len(mot_a_analyser$) caption 20,"Ce mot a "+str$(longueur%)+" lettres." text 10,"" : ' effacer le champ de saisie if mot_a_analyser$<>"" item_add 40,mot_a_analyser$ : ' ajouter le mot traité à la liste active 60 : ' bouton actif active 70 : ' bouton actif end_if set_focus 10 : ' placer le curseur dans le champ de saisie ' tracer l'histogramme if longueur%>25 then longueur% = 25 : ' limiter la hauteur du rectangle if x%=540 : ' est-ce que le picture est plein ? 2d_clear : ' si oui: effacer et recommencer au début color 90,230,230,100 x% = 0 end_if 2d_fill_color couleur%,0,255-couleur% : ' forcer la couleur de remplissage 2d_rectangle x%,260,x%+9,260-longueur%*10 : ' tracer le rectangle couleur% = 255 - couleur% : ' passer à la couleur alternée x% = x% + 10 : ' pointer au début du rectangle suivant END_SUB ' ****************************************************************************** ' le tri des mots traités SUB trier_liste() if checked(50)=1 : ' tri ascendant choisi ? SORT 40 : ' alors trier normalement else : ' ici, tri descendant choisi ! clear 80 : ' effacer la DLIST par précaution for i%=1 to count(40) : ' boucler sur le contenu de la liste item_add 80,item_read$(40,i%) : ' et copier chaque élément next i% sort 80 clear 40 : ' effacer notre liste for i%=count(80) to 1 step -1 : ' boucler sur le contenu de la DLIST item_add 40,item_read$(80,i%) : ' et copier chaque élément next i% end_if END_SUB ' ****************************************************************************** ' effacer la liste des mots traités SUB effacer_liste() if message_confirmation_yes_no("Voulez-vous vraiment effacer la liste ?")<>1 then return clear 40 : ' effacer la liste inactive 60 : ' bouton inactif inactive 70 : ' bouton inactif 2d_clear : ' effacer l'histogramme color 90,230,230,100 : ' couleur de fond x% = 0 : ' replacer le pointeur à gauche du picture END_SUB ' ******************************************************************************
saisie_mot: ' activation conditonnelle des boutons if text$(10)="" active 60 active 70 else inactive 60 inactive 70 end_if return ' ****************************************************************************** ' sortir du programme SUB sortir() if message_confirmation_yes_no("Vous voulez vraiment quitter ?") = 1 terminate : ' Si yes ---> arrêt du programme end_if ' Sinon, on continue END_SUB ' ****************************************************************************** ' inverser le sens du tri SUB inverser_sens() text 10,"" : ' effacer le champ de saisie if checked(50)=1 : ' actuellement en mode ascendant ? mark_on 51 : ' oui, alors passer en mode descendant caption 106,"* Tri descendant" else : ' non mark_on 50 : ' alors passer en mode ascendant caption 106," Tri descendant" end_if END_SUB ' ****************************************************************************** ' montrer la fenêtre A-propos SUB a_propos() show 200 : ' montrer la fenêtre A-propos inactive 0 : ' bloquer la fenêtre principale END_SUB ' ****************************************************************************** ' cacher la fenêtre A_propos SUB cacher_a_propos() hide 200 : ' cacher le fenêtre A-propos active 0 : ' et réactiver la fenêtre principale to_foreground 0 : ' replacer la fenêtre principale en avant-plan END_SUB ' *************** FIN *****************
Qu’en penses-tu Klaus ? La modification c’est aussi pour m’entrainer un peu ! Ais-je bien fais ? Approuves-tu cette modification ? Faut-il la rectifier ? Bref, ton point de vue sera le bienvenu.
Dernière édition par papydall le Lun 16 Déc 2013 - 23:30, édité 1 fois | |
|
Klaus
Nombre de messages : 12301 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Tutoriel de Klaus Sam 20 Oct 2012 - 21:06 | |
| @Nardo26: J'ai fait ce tuto pour Panoramic, et j'ai donc utilisé le vocabulaire et les éléments de Panoramic. Je ne voulais pas donner un cours général de programmation. Il me paraît évident que le novice a tout intérêt à lire le "Manuel de l'Utilisateur" et les "Conseils" accessibles dans le menu de l'éditeur. Cela me paraît l'étape initiale. Ensuite, viennent les tutos.
@Papydall: Tu as parfaitement raison avec tes remarques. Et ta version modernisée avec les fonctions est bien utile. Je valide tout à fait. Seulement, ce tuto a été mis en ligne par Jack, à partir d'un de mes posts. C'est donc à lui que ta demande devrait s'adresse, car je n'ai pas accès aux tutos publiés par Jack. | |
|