FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Traceur de courbes représentatives des fonctions y = f(x)
par Jean Claude Aujourd'hui à 9:45

» Problème de syntaxe
par Klaus Hier à 12:40

» KGF_dll - nouvelles versions
par Klaus Hier à 12:36

» Compilateur FBPano
par jean_debord Hier à 12:31

» Toolbar en Panoramic
par ygeronimi Dim 22 Jan 2017 - 23:56

» Documentation des évènements
par Klaus Dim 22 Jan 2017 - 16:46

» Klaus est de retour!
par jjn4 Dim 22 Jan 2017 - 16:31

» Texte sur image
par Jicehel Dim 22 Jan 2017 - 12:23

» MIN - MAX avec SPIN
par ygeronimi Sam 21 Jan 2017 - 10:02

» HEIGHT_CLIENT(N)
par ygeronimi Ven 20 Jan 2017 - 16:41

» Non demande de commande
par ygeronimi Jeu 19 Jan 2017 - 11:50

» Bataille navale sous-marine
par papydall Jeu 19 Jan 2017 - 2:19

» Version instantanée du 16/01/2017 : PANORAMIC V 0.9.27i10
par mindstorm Mer 18 Jan 2017 - 21:05

» PLM N34
par Froggy One Mer 18 Jan 2017 - 17:32

» saving 1.png [RÉSOLU]
par Froggy One Mar 17 Jan 2017 - 19:44

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Janvier 2017
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
CalendrierCalendrier

Partagez | 
 

 Tutoriel de Klaus

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
papydall



Nombre de messages : 5111
Age : 66
Localisation : Moknine (Tunisie)
Date d'inscription : 03/03/2012

MessageSujet: Tutoriel de Klaus   Sam 20 Oct 2012 - 20: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é.

@Klaus

Je 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 Mar 17 Déc 2013 - 1:30, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Nardo26



Nombre de messages : 2294
Age : 48
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: Tutoriel de Klaus   Sam 20 Oct 2012 - 20:50

C'est clair qu'il est très bien fait.

@Klaus:
Je n'ai pas encore tout lu mais concernant la 1ère partie:

Conventions 2 et 3 :
tu parles de LABEL mais en basic classique (celui avec des GOTO n° de ligne) la notion de label n'existe pas.
Donc donner des règles sur des choses qui ne sont pas encore expliquées risque de ne pas être compréhensible pour quelqu'un qui démarre.

PS: je verrai bien ce genre de discussion dans un environnement wiki... Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Klaus



Nombre de messages : 9436
Age : 67
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Tutoriel de Klaus   Sam 20 Oct 2012 - 22: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé




MessageSujet: Re: Tutoriel de Klaus   Aujourd'hui à 12:08

Revenir en haut Aller en bas
 
Tutoriel de Klaus
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Tutoriel de Jetico Personal Firewall
» Tutoriel SpywareBlaster
» Tutoriel JottiQ
» Tutoriel Kaspersky Virus Removal Tool 2010 (AVPTool)
» [Tutoriel] Optimisation maximale sous Gamemaker [en rédaction]

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC 32 bits :: Présentation et bavardage-
Sauter vers: