FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Gestion d'un système client-serveur.
Squelette d'un programme Emptypar Klaus Ven 17 Mai 2024 - 14:02

» item_index(résolu)
Squelette d'un programme Emptypar jjn4 Mar 14 Mai 2024 - 19:38

» Bataille terrestre
Squelette d'un programme Emptypar jjn4 Lun 13 Mai 2024 - 15:01

» SineCube
Squelette d'un programme Emptypar Marc Sam 11 Mai 2024 - 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Squelette d'un programme Emptypar Marc Sam 11 Mai 2024 - 12:22

» Philharmusique
Squelette d'un programme Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Squelette d'un programme Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Squelette d'un programme Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Squelette d'un programme Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Squelette d'un programme Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Squelette d'un programme Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Squelette d'un programme Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0(résolu)
Squelette d'un programme Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Squelette d'un programme Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
Squelette d'un programme Emptypar Jack Mar 30 Avr 2024 - 20:40

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
-28%
Le deal à ne pas rater :
Précommande : Smartphone Google Pixel 8a 5G Double Sim 128Go ...
389 € 539 €
Voir le deal

 

 Squelette d'un programme

Aller en bas 
2 participants
AuteurMessage
Klaus

Klaus


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

Squelette d'un programme Empty
MessageSujet: Squelette d'un programme   Squelette d'un programme EmptyVen 16 Mar 2012 - 1:21

Quelques jours d'absence, sans liaison internet. Suffisamment pour se poser et restructurer certaines choses. Et voici un premier résultat, fortement influencé par le code généré par mon IDE, mais plus lisible:

le squelette d'un programme Panoramic

Ce morceau de code est complet et exécutable, mais il ne fait rien: il pose le cadre général d'un programme gérant un fichier, avec les fonctions habituelles, y compris la génération d'un menu "fichiers", "édition" et d'une page d'aide et d'à-propos. Il y a aussi la gestion d'un fichier ini, et un moyen de gérer les clics dans un GRID et la saisie des zones d'un GRID. On peut reprendre ce code et l'adapter à tout type de programme, en obtenant ainsi une structure cohérente à travers tous les programmes concernés. Pour ma part, j'ai appliqué cette technique à 3 programmes que je poste dans séparément:
- emploi du temps - utilitaire pour élèves, parents d'élèves et enseigants
- horloge - eh oui, encore une...
- test 3d - petite démonstration de cette technique dans le domaine de la 3D

Voici le sqelette:
Code:
' squelette de programme.bas

' Ce fichier contient l'ossature d'un programme permettant de
' gérer un fichier de données, l'utilisation d'un fichier de
' configuration "ini", un écran a_propos et une page d'aide.
' Ce fichier est pleinement opérationnel et exécutable. Il faut
' ajouter les champs de saisie dans la form 0 (fichier à gérer)
' et dans la fenêtre des options, les traitements spécifiques pour
' chaque fonction, adapter les pages d'aide et à-propos,gérer la
' mémorisation et la modification des paramètres de configuration.
' Les variables
'      i%, j%, k%, s$, x%, y%, lig%, col%
' sont librement utilisables (variables de travail).Le menu peut
' être étendu en respectant la logique de construction.

' Le principe de construction impose la numérotationi automatique
' de chaque objet. Les numéros des objets auxquels il faut pouvoir
' accéder directement, doivent être mémorisés dans des variables
' spécifiques (ce sont les no_xxx).

' *** routine principale
label labels : gosub labels
gosub variables
gosub form0
gosub menu
gosub GUI
gosub initialisations
end

' *** définition de tous les labels
labels:
  label variables, form0, menu, GUI, initialisations, close_options
  label new, opn, svg, svx, clsx, raz, sortir, options, val_options
  label aide, apropos, gerer_menu, close_saisie, close_apropos
  label effacer, click_grille
  return

' *** définition de toutes les variables
variables:
  dim no%, parent_1%, parent_2%
  dim nom_fichier$, no_open%, no_save%, no_options%
  dim flag_present%, flag_modif%, no_modif%, no_val_options%
  dim no_obj_si_present%(10), no_obj_si_modif%(10)
  dim n_obj_si_present%, n_obj_si_modif%
  dim no_apropos%, no_aide%
  dim i%, j%, k%, s$, x%, y%, lig%, col%
  dim nl$ : nl$ = chr$(13)+chr$(10)
  dim version$ : version$ = "V01.00"
  dim creation$ : creation$ = "9 Mars 2012"
  dim nom_rep$, nom_ini$
  return
 
' *** configuration de l'écran principal
form0:
'  full_space 0
  width 0,850 : height 0,570
  caption 0,"<nouveau>"
  return

' *** création des menus
menu:
  no% = no% + 1 : main_menu no% : parent_1% = no%
  no% = no% + 1 : sub_menu no% : parent no%,parent_1%
    parent_2% = no% : caption no%,"Fichiers"
  no% = no% + 1 : sub_menu no% : parent no%,parent_2%
    caption no%,"Nouveau" : on_click no%,new
  no% = no% + 1 : sub_menu no% : parent no%,parent_2%
    caption no%,"Ouvrir..." : on_click no%,opn
  no% = no% + 1 : sub_menu no% : parent no%,parent_2% : inactive no%
    caption no%,"Enregistrer" : on_click no%,svg
    n_obj_si_present% = n_obj_si_present% + 1
    no_obj_si_present%(n_obj_si_present%) = no%
  no% = no% + 1 : sub_menu no% : parent no%,parent_2% : inactive no%
    caption no%,"Enregistrer sous.." : on_click no%,svx
    n_obj_si_present% = n_obj_si_present% + 1
    no_obj_si_present%(n_obj_si_present%) = no%
  no% = no% + 1 : sub_menu no% : parent no%,parent_2% : inactive no%
    caption no%,"Fermer" : on_click no%,clsx
    n_obj_si_present% = n_obj_si_present% + 1
    no_obj_si_present%(n_obj_si_present%) = no%
  no% = no% + 1 : sub_menu no% : parent no%,parent_2%
    caption no%,"------------------"
  no% = no% + 1 : sub_menu no% : parent no%,parent_2%
    caption no%,"Sortir" : on_click no%,sortir

  no% = no% + 1 : sub_menu no% : parent no%,parent_1%
    parent_2% = no% : caption no%,"Edition"
  no% = no% + 1 : sub_menu no% : parent no%,parent_2%
    caption no%,"Effacer" : on_click no%, raz : inactive no%
    n_obj_si_present% = n_obj_si_present% + 1
    no_obj_si_present%(n_obj_si_present%) = no%
  no% = no% + 1 : sub_menu no% : parent no%,parent_2%
    caption no%,"------------------"
  no% = no% + 1 : sub_menu no% : parent no%,parent_2%
    caption no%,"Options" : on_click no%, options
  no% = no% + 1 : sub_menu no% : parent no%,parent_2% : inactive no%
    no_val_options% = no%
    caption no%,"Valider les options" : on_click no%, val_options

  no% = no% + 1 : sub_menu no% : parent no%,parent_1%
    parent_2% = no% : caption no%,"Aide"
  no% = no% + 1 : sub_menu no% : parent no%,parent_2%
    caption no%,"Aide" : on_click no%, aide
  no% = no% + 1 : sub_menu no% : parent no%,parent_2%
    caption no%,"A-propos" : on_click no%, apropos

  return
 
création de tous les objets Panoramic
GUI:
' *** d'abord les objets invisibles
'    dialogues, list, timer, ...
  no% = no% + 1 : open_dialog no% : no_open% = no%
    filter no%,"Fichier texte|*.txt"
  no% = no% + 1 : save_dialog no% : no_save% = no%
    filter no%,"Fichier texte|*.txt"
   
' *** les objets de la form 0

' *** la page de gestion des options avec ses champs
  no% = no% + 1 : form no% : hide no% : no_options% = no% : parent_1% = no%
    caption no%,"Options"
    top no%, 30 : left no%,30 : height no%,screen_y-60 : width no%,screen_x-60
    on_close no%,close_options

' *** la fenêtre de saisie avec ses champs
  no% = no% + 1 : form no% : hide no% : no_modif% = no% : parent_1% = no%
    caption no%,"Saisie"
    top no%, 200 : left no%,200 : height no%,100 : width no%,250
    on_close no%,close_saisie
  no% = no% + 1 : edit no% : parent no%,parent_1%
    top no%,20 : left no%,20 : width no%,130

' *** la fenêtre a-propos avc ses champs
  no% = no% + 1 : form no% : hide no% : no_apropos% = no% : parent_1% = no%
    caption no%,"A-propos"
    top no%, 200 : left no%,200 : height no%,150 : width no%,250
    on_close no%,close_apropos
  no% = no% + 1 : alpha no% : parent no%,parent_1%
    top no%,20 : left no%,20
    s$ = "Application Panoramic "+nl$
    s$ = s$ + "Version: "+version$+nl$
    s$ = s$ + "Date: "+creation$+nl$
    s$ = s$ + "Auteur: Klaus"+nl$
    caption no%,s$

' *** la fenêtre d'aide avec ses champs
  no% = no% + 1 : form no% : hide no% : no_aide% = no% : parent_1% = no%
    caption no%,"Aide"
    top no%, 200 : left no%,200 : height no%,400 : width no%,400
    on_close no%,close_apropos
  no% = no% + 1 : alpha no% : parent no%,parent_1%
    top no%,20 : left no%,20
    s$ = "Mode d'emploi"+nl$+nl$
    caption no%,s$

  return
 
' *** toutes les initialisations du programme
initialisations:
' répertoire de l'application, nom du fichier ini
  s$ = param_value$(0)
  nom_rep$ = file_extract_path$(s$)
  if instr(lower$(s$),"\temp\")>0 then nom_rep$ = "C:\temp\"
  nom_ini$ = nom_rep$ + "xxxx.ini" : ' adapter le nom du fichier ini
  dir_dialog no_open%,nom_rep$
  dir_dialog no_save%,nom_rep$
  if dir_exists(nom_rep$)=0 then dir_make nom_rep$
  if file_exists(nom_ini$)=0 : ' créer le fichier ini vide s'il n'existe pas
    file_open_write 1,nom_ini$
    file_writeln 1,"; créé le "+date$+" à "+time$+" heures"
    file_close 1
  end_if
' traiter le fichier ini
  file_open_read 1,nom_ini$
  file_readln 1,s$
  while file_eof(1)=0
' charger le fichier ini
  end_while
  file_close 1
  return

' *** fonction "nouveau fichier"
new:
clsx:
  if flag_present%=1
    gosub effacer
    flag_present% = 0
    flag_modif% = 0
  end_if
  flag_present% = 1
  caption 0,"<nouveau>"
  gosub gerer_menu
  nom_fichier$ = ""
  return

' *** fonction "ouvrir un fichier existant"
opn:
  s$ = file_name$(no_open%)
  if s$="_" then return
  gosub effacer
  flag_present% = 1
  gosub gerer_menu
  nom_fichier$ = s$
  caption 0,file_extract_name$(nom_fichier$)
  file_open_read 1,nom_fichier$
' charger le fichier
  file_close 1
  return

' *** fonction "sauvegarder le fichier"
svg:
  if nom_fichier$=""
    message "Aucun nom de fichier connu pour ce plan"
    return
  end_if
  if file_exists(nom_fichier$)=1
    if message_confirmation_yes_no("Ce fichier existe déjà."+nl$+"Voulez-vous le remplacer ?")<>1 then return
  end_if
  file_open_write 1,nom_fichier$
' sauver le fichier
  file_close 1
  return

' *** fonction "sauvegarder le fichier sous un autre nom"
svx:
  s$ = file_name$(no_save%)
  if s$="_" then return
  if instr(right$(s$,5),".")=0 then s$ = s$ + ".txt"
  nom_fichier$ = s$
  caption 0,file_extract_name$(nom_fichier$)
  gosub svg
  return
 
' *** fonction "sortir dur programme"
sortir:
  terminate
 
' *** fonction "effacer tout"
raz:
' effacer toutes les données en mémoire

  return
 
' *** afficher la page d'aide en mode non-modal
aide:
  show no_aide%
  to_foreground no_aide%
  return

' *** afficher la page à-propos en mode modal
apropos:
  inactive 0
  show no_apropos%
  return
 
' *** fermer la page a-propos
close_apropos:
  hide no_apropos%
  active 0
  to_foreground 0
  return

' *** adapter les menus si effacement
effacer:
  flag_present% = 0
  flag_modif% = 0
  gosub gerer_menu
  return

' *** adapter les menus en fonction de la situation
gerer_menu:
  if flag_present%=1
    if n_obj_si_present% >0
      for i%=1 to n_obj_si_present%
        active no_obj_si_present%(i%)
      next i%
    end_if
  else
    if n_obj_si_present% >0
      for i%=1 to n_obj_si_present%
        inactive no_obj_si_present%(i%)
      next i%
    end_if
  end_if
  if flag_modif%=1
    if n_obj_si_modif% >0
      for i%=1 to n_obj_si_modif%
        active no_obj_si_modif%(i%)
      next i%
    end_if
  else
    if n_obj_si_modif% >0
      for i%=1 to n_obj_si_modif%
        inactive no_obj_si_modif%(i%)
      next i%
    end_if
  end_if
  return

' *** montrer la page de gestion des options en mode modal
options:
  inactive 0 : show no_options%
  return

' *** fermer la page des options
close_options:
  hide no_options%
  active 0
  to_foreground 0
  return

' *** modèle de gestion d'un clic dans un GRID
'    avec affichage de la fenêtre de saisie en mode modal
click_grille:
  x% = mouse_x_left_down(no_grille%)
  y% = mouse_y_left_down(no_grille%)
  col% = grid_x_to_column(no_grille%,x%)
  lig% = grid_y_to_row(no_grille%,y%)
' ici gérer la case cliquée
  caption no_modif%,"Saisie"
  inactive 0
  show no_modif%
  return
 
' *** fermeture de la fenêtre de saisie
close_saisie:
  s$ = text$(no_modif%+1)
' ici, gérer la nouvelle valeur présente dans s$
  flag_modif% = 1
  flag_present% = 1
  gosub gerer_menu
  hide no_modif%
  active 0
  to_foreground 0
  return

' *** enregistrer les options modifiées
val_options:
  file_open_write 1,nom_ini$
  file_writeln 1,"; créé le "+date$+" à "+time$+" heures"
' écrire les options dans le fichier ini
  file_close 1
  inactive no_val_options%
  return
 
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Squelette d'un programme Empty
MessageSujet: Re: Squelette d'un programme   Squelette d'un programme EmptyVen 16 Mar 2012 - 14:49

Je viens de récupérer ton programme, et l'analyserai plus tard. J'ai un problème de virus qui m'empoisonne.
Revenir en haut Aller en bas
Invité
Invité




Squelette d'un programme Empty
MessageSujet: Re: Squelette d'un programme   Squelette d'un programme EmptyMar 27 Mar 2012 - 8:39

Bonjour Klaus. Smile

Je suis en train de regarder tat recette, enfin ton squelette (ici c'est la même chose).
C'est pour mon Puding que je suis en train de faire. J'essaye de le faire digeste.
Je regardais pour les dim, car j'avais une idée particulière que le résoudre, mais là je ne sais plus trop quoi penser.
Ton système n'est pas mal, d'autant que j'ai déjà utilisé ce type pour un programme particulier, et qu'en plus celà me permettais de décomposer le programme, de le mettre par morceau dans des onglets différents, et d'avoir un rassembleur pour l'exécuter.

Si j'interviens, c'est que je m'aperçois qu'il y a un problème. Ce système généraliste, ne va pas avec des includes qui doivent avoir des noms d'étiquettes et de dim différents.

Il faudrait que tu trouves le moyen de faire disparaitre ceux-ci, en quelque sorte, de faire du KLAUS-UP! Very Happy lol!
Revenir en haut Aller en bas
Klaus

Klaus


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

Squelette d'un programme Empty
MessageSujet: Re: Squelette d'un programme   Squelette d'un programme EmptyMer 28 Mar 2012 - 21:45

Je veux bien regarder cela d'un peu plus près, mais il faudrait que tu sois un peu plus clair. Qu'est-ce qu'exactement que je dois faire disparaître ? Peux-tu me montrer cela dans le source du squelette dont tu parles ?
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Squelette d'un programme Empty
MessageSujet: Re: Squelette d'un programme   Squelette d'un programme EmptyMer 28 Mar 2012 - 23:44

Bonsoir Klaus.
Je réponds bien souvent à ce que je lis dans le forum, mais la plupart du temps, au moment de poster, je clique ailleurs pour annuler, car je pense que ce que je peux dire n'apporte rien, ou cela entraine sur autre chose, et je dis stop.

En regardant ton squelette, et les programmes que tu as faits avec (lecture rapide), je me suis rendus compte que cela avait pour effet de mettre les mêmes labels et les mêmes dim dans chaque programme, ce qui fait que ce n'est pas valable pour des includes, vu que tu vas faire rentrer des programmes avec des doublons de labels et de dim.

J'étais sur le point d'annuler la remarque, vu ton professionnalisme, et j'ai jeu de mots (il faut le dire vite) qui m'est apparu en écrivant:

recette et squelette, pluging et pouding, close-up et Klaus-Up, et comme cela me faisait sourire avec la recette de pouding et le squelette d pluging, finalement j'ai posté en espérant vous faire sourire (je sais je suis bête) aussi. Je suis fait comme cela, je ne me refais pas.
Revenir en haut Aller en bas
Klaus

Klaus


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

Squelette d'un programme Empty
MessageSujet: Re: Squelette d'un programme   Squelette d'un programme EmptyMer 28 Mar 2012 - 23:59

J'aime bien un peu d'humour dans ce monde bien souvent trop terne ou trop triste ! Le tien est le bienvenu, et je te remercie du rapprochement flatteur entre mon nom et le close-up des manipulateurs de cartes (il se trouve que je suis un fan inconditionnel de Bernard Billis, éblouissant dans ce domaine). Ceci dit, et là encore, juste pour rire, mon nom est trop souvent prononcé "Klos" au lieu de "Kla-o-ous" (avec on "a-o-ou" comme dans "miaou" sans le "i"). Or, "Klos" en allemand, écrit et prononcé de cette manière, veut dire "boule de viande" ce qui me rappelle douloureusement mon embonpoint...

Blaque à part, au sujet des labels: je ne saurais trop recommander l'utilisation du ctrl-R dans l'éditeur Panoramic pour remplacer en une seule opération, des labels ou autres noms afin de personnaliser un source. Mon squelette n'a en aucune façon l'ambition d'être une norme de programmation. Juste un exemple de structuration d'un programme, et encore... Il y a mille et une façon de concevoir son code, et je ne suis pas de ceux qui veulent imposer leur marque. Juste donner une idée à ceux qui cherchent quelque chose de ce genre.

Une solution consisterait à systématiquement préfacer chaque label et chaque variable avec le nom du programme dans lequel on utilise un tel module. Ainsi, mon sous-programme "initialisations" deviendrait "MonAlbumPhoto_initialisations", ma variable i% deviendrait "MonAlbumPhoto_i%" dans un programme "MonAlbumPhoto.bas". El il n'y a plus de conflits. Mais là encore, ce n'est qu'une suggestion.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Squelette d'un programme Empty
MessageSujet: Re: Squelette d'un programme   Squelette d'un programme EmptyJeu 29 Mar 2012 - 11:10

Bonjour Klaus (ou Klos) Very Happy
Je ne le fais qu'une fois, et je ne recommencerai pas.
Surtout ne pas faire pas d'erreur dans tes programmes, sinon tu feras une boulette! (boule de viande).

Là tu n'as pas d'excuses, tu as tout fait pour. Mais les blagues les plus courtes étant les meilleurs, je t'ennuierai plus la dessus.

As propos, en lisant ton nom, c'est toujours Klaus prononcé à l'allemande, que je te lis. J'ai fais un peu d'allemand, et malheuresement il ne m'en reste rien.
Revenir en haut Aller en bas
Klaus

Klaus


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

Squelette d'un programme Empty
MessageSujet: Re: Squelette d'un programme   Squelette d'un programme EmptyJeu 29 Mar 2012 - 13:36

Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


Nombre de messages : 7009
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Squelette d'un programme Empty
MessageSujet: Re: Squelette d'un programme   Squelette d'un programme EmptyJeu 29 Mar 2012 - 19:20

Salut Klaus !
J’ai décidé de faire un programme un peu plus consistant, à mon humble avis. Et ton squelette (si j’ose parler ainsi) m’a apporté une aide inestimable.
Mille mercis pour proposer ton aide à tous ceux qui en ont besoin. Nous ne sommes pas tous chevronnés car il y a de nouveaux venus sur ce forum (voir des bleus) et qui veulent apprendre. Pour ma part, j’ai déjà programmé en d’autres langages (en tant qu’amateur et autodidacte) et je connais un peu l’algorithmique et autre méthodologie de programmation. Mais PANORAMIC est nouveau pour moi : ces FORM, ALPHA, MEMO, GRID, COMBO, LIST, DLIST, EDIT etc.
Donc merci à toi et à tous les autres qui apportent leurs aides à qui en a besoin.

Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


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

Squelette d'un programme Empty
MessageSujet: Re: Squelette d'un programme   Squelette d'un programme EmptyJeu 29 Mar 2012 - 21:42

Merci ! Ca fait plaisir de voir que j'ai pu être utile. N'hésite pas à poser des questions si besoin est - nous sommes tous là pour ça !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





Squelette d'un programme Empty
MessageSujet: Re: Squelette d'un programme   Squelette d'un programme Empty

Revenir en haut Aller en bas
 
Squelette d'un programme
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» programme de trigo
» ce fut mon 2ème programme en panoramic! (mauvais programme)
» Re : Programme graphique
» Tester un programme
» Numerotation ligne de programme

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: