willy95 Posté(e) le 19 juillet 2022 Posté(e) le 19 juillet 2022 Bonjour les amis, Est il possible d'avoir un exemple simple d'une boîte de dialogue avec une liste (list_box) avec choix multiple, ou l'on peu choisir plusieurs lignes, j'ai tout essayer avec ;list ou avec multiple_select mais rien ne fonctionne. En vous remerciant pour votre retour par avance.
Luna Posté(e) le 19 juillet 2022 Posté(e) le 19 juillet 2022 Coucou, Regarde la fonction (ListBox) de (gile) ! 😉 Simple et efficace. Certes elle permet de gérer aussi les liste déroulante et la sélection unique mais tu auras un exemple de ce qu'il faut écrire. Bisous, Luna
willy95 Posté(e) le 21 juillet 2022 Auteur Posté(e) le 21 juillet 2022 Merci Luna pour cette information mais qui reste vraiment trop complexe pour moi, je cherche a comprendre par un simple exemple contrairement à la fonction de Gile qui intégre beaucoup d'autre chose, mon idée de base étant comme ci dessous mais avec la possibilité de prendre plusieurs Choix en même temps : (setq List1 '( "Choix A" "Choix B" "Choix C" )) (setq temponota1 (vl-filename-mktemp "QuestionNota1.dcl") file (open temponota1 "w")) (write-line " QuestionNota1 : dialog { label = \"1, 2 ou 3 Choix \"; key =\"\"; spacer; : list_box { label = \"Choisir : \"; key = \"List1\"; width = 1; height = 2 ; edit_width = 25; height = 27;} : spacer { width = 10; height = 1;} ok_cancel; edit_width = 10;} " file) (close file) (setq Dcl_Id (load_dialog temponota1)) (new_dialog "QuestionNota1" Dcl_Id) (start_list "List1") (mapcar 'add_list List1) (end_list) (action_tile "List1" "(setq Notas (nth (atoi $value) List1))") (start_dialog) (unload_dialog Dcl_Id2) (vl-file-delete temponota1)) Merci par avance pour vos retours sur ce sujet qui m'est vraiment trop difficile à faire alors que j'ai essayer plein de chose différentes sans résultat 😞
Luna Posté(e) le 21 juillet 2022 Posté(e) le 21 juillet 2022 Coucou, J'ai essayé de simplifier au max pour une list_box avec multiple_select = true : (defun TestBox4 (lst / *error* filename file DCL_ID rslt) (defun *error* (msg) (if file (close file)) (if filename (vl-file-delete filename)) (princ msg) ) (setq filename (vl-filename-mktemp "TestBox.dcl") file (open filename "W") ) (write-line (strcat "TestBox:dialog {" " label = \"DCL Test\" ;" " :list_box {" " label = \"message :\" ;" " key = \"key\" ;" " multiple_select = true ;" " }" " ok_cancel ;" " }" ) file ) (close file) (setq DCL_ID (load_dialog filename)) (if (not (new_dialog "TestBox" DCL_ID)) (exit) ) (start_list "key") (mapcar 'add_list lst) (end_list) (action_tile "accept" "(setq rslt (get_tile \"key\")) (done_dialog)") (action_tile "cancel" "(done_dialog)") (start_dialog) (unload_dialog DCL_ID) (vl-file-delete filename) rslt ) Donc par exemple on peut avoir command: (testbox4 '("1" "2" "3" "4")) "0 1 2" ; si l'on a sélectionné "1", "2" et "3" Donc pour retourner la liste des valeurs sélectionnées, on va plutôt remplacer (action_tile "accept" "(setq rslt (get_tile \"key\")) (done_dialog)") par (action_tile "key" " (foreach n (str2lst (get_tile \"key\") "\ \") (setq rslt (cons (nth (atoi n) lst) rslt)) ) (done_dialog) " ) avec du coup (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) Avec le changement ci dessus, en refaisant la même manip' on a : command: (testbox4 '("1" "2" "3" "4")) ("1" "2" "3") ; si l'on a sélectionné "1", "2" et "3" En espérant que cela te permettra de mieux comprendre 😉 Bisous, Luna 1
willy95 Posté(e) le 21 juillet 2022 Auteur Posté(e) le 21 juillet 2022 Merci beaucoup mais c'est trop chaud pour moi, j'ai essayer de mélanger tous ça avec des tentatives de compréhension mais rien ne marche jamais, je dois faire quelques trucs qui ne vont pas du tout, je désespère...
Luna Posté(e) le 21 juillet 2022 Posté(e) le 21 juillet 2022 Euh....j'ai pourtant simplifié au maximum... >w< Sinon dis-moi ce que tu désires comme allure de dialog_box et j'écris un programme tout fait. Il faudra ensuite que tu compares avec tes essais pour comprendre d'où vient tes erreurs mais je ne sais pas comment faire plus simple... Dis-moi ce que tu ne comprends pas dans mon code à la limite ^^" Un exercice intéressant que tu peux essayer de mettre en pratique, c'est d'ajouter un commentaire à chaque ligne du programme d'exemple. Si tu es en mesure de ne pas faire de faute de compréhension pour chacune des lignes, alors tu seras en mesure de comprendre comment l'incorporer à ton programme (ou le modifier selon ce que tu as besoin). Mais si tu n'arrives pas à comprendre certaines lignes, il faudrait se focaliser sur ces lignes pour que je puisse t'aider. En théorie, le programme ci-dessus n'a pas vraiment besoin d'être modifié, si ce n'est l'esthétique de la boîte de dialogue. Sinon, tu devrais l'intégrer dans sa globalité dans ton programme (mais tu n'apprendras pas grand chose) ! Car pour en revenir au multiple_select, il n'y a rien qui peut faire planter le programme et le retour initial d'un list_box c'est une chaîne de caractère avec la position de chaque élément sélectionné dans la liste. Donc si ton programme ne fonctionne pas avec le multiple_select, c'est sûrement qu'il ne fonctionne pas sans déjà ^^" J'ai repris les lignes de codes que tu m'as donné ci-dessus et je les ai incorporées à mon exemple comme ci-dessous (en corrigeant quelques erreurs obvious) : (defun willy95 (lst / *error* filename file DCL_ID rslt) (defun *error* (msg) (if file (close file)) (if filename (vl-file-delete filename)) (princ msg) ) (setq filename (vl-filename-mktemp "TestBox.dcl") file (open filename "W") ) (write-line (strcat "TestBox:dialog {" " label = \"1, 2 ou 3 Choix \" ;" " spacer ;" " :list_box {" " label = \"Choisir : \" ;" " key = \"key\" ;" " width = 1 ;" " height = 2 ;" " edit_width = 25 ;" " edit_height = 27 ;" " multiple_select = true ;" " }" " spacer ;" " ok_cancel ;" " }" ) file ) (close file) (setq DCL_ID (load_dialog filename)) (if (not (new_dialog "TestBox" DCL_ID)) (exit) ) (start_list "key") (mapcar 'add_list lst) (end_list) (action_tile "accept" "(setq rslt (mapcar '(lambda (n) (nth (atoi n) lst)) (str2lst (get_tile \"key\") \" \"))) (done_dialog)") (action_tile "Cancel" "(done_dialog)") (start_dialog) (unload_dialog DCL_ID) (vl-file-delete filename) rslt ) L'aperçu de ta boîte de dialogue donne ceci : C'est pas très esthétique pour une list_box car on ne peut voir qu'une seule ligne (mais on peut les dérouler donc on a accès aux 3). Si l'affichage ne correspond pas à ce que tu désires, c'est très certainement parce que tu as voulu mettre tous les attributs de width, height, edit_width, edit_height, ... sans savoir comment les utiliser ni à quoi chat correspond. Quand chat ne passe pas, l'idéal c'est de le faire pas à pas, tu en met aucun pour commencer et tu vois si chat te va bien. Puis si c'est pas bon, tu en essayes un, tu le fais varier, etc et tu essayes de comprendre qu'est-ce que chat impacte réellement. Et ainsi de suite, mais il ne faut pas bourrer le programme de tout et n'importe quoi. Idem avec les spacer, tu peux t'en passer et voir ce que chat donne déjà sans. En tout cas en l'état, la boîte de dialogue fonctionne très bien avec le multiple_select ! Bisous, Luna
willy95 Posté(e) le 22 juillet 2022 Auteur Posté(e) le 22 juillet 2022 Bonjour Luna, tout d'abord je tiens vraiment a te remercier pour le temps passé et l'énergie à me répondre, je t'en suis bien sur redevable. J'ai essayer dans tous les sens de comprendre et de mettre en pratique tes lignes de codes sans obtenir un résultat qui me propose plusieurs choix sélectionnable. J'ai donc suivi ton idée en inscrivant ce que je comprends de chacune des lignes du codes, pour autant je ne comprends pas ou ce trouve les choix de la liste, comme par exemple dans ta petite image du résultat de la boite de dialogue : ou ce trouve dans le code : Choix A ? je ne comprends vraiment pas, il faut m'en excuser car je ne suis pas développeur et je bricole beaucoup en lisp afin de me facilité un peu le travail dans mon job. J'ai donc essayer en rajoutant au début une liste que j'ai appeler "key" mais sans résultat également (setq key '( "Choix A" "Choix B" "Choix C")) Pour info le visuelle de la boite de dialogue m'importe peu, seul la possibilité d'avoir des choix multiple avec au final les choix dans une et seule variable m'est nécessaire. (defun willy95 (lst / *error* filename file DCL_ID rslt) ;creation de la fonction et reset des variable (defun *error* (msg) ;définition si erreur il y a (if file (close file)) ;condition (if filename (vl-file-delete filename)) ;condition si erreur d'éffacer la variable (princ msg) ) (Setq ;création de la variable contenant les éléments de la boite de dialogue filename (vl-filename-mktemp "TestBox.dcl") ;creation du fichier dcl temporaire file (open filename "W") ;ouverture et ecriture ) (write-line ;ecriture des lignes suivantes dans le fichier temporaire (strcat ;concatenage des plusieurs réponses "TestBox:dialog {" ;nom de la boite de dialogue " label = \"1, 2 ou 3 Choix \" ;" ;affichage de la question dans la boite de dialogue " spacer ;" ;espace " :list_box {" ;affichage de la liste dans la boite de dialogue " label = \"Choisir : \" ;" ;question affichée " key = \"key\" ;" ;nom de la réponse " width = 1 ;" ;largeur de la case de la question au mini " height = 2 ;" ;hauteur de la case de la question au mini " edit_width = 25 ;" ;largeur de la case de la réponse " edit_height = 27 ;" ;hauteur de la case de la réponse " multiple_select = true ;" ;valeur vrai pour prendre en compte plusieurs selection dans la boite de dialogue " }" " spacer ;" ;espace " ok_cancel ;" ;validation ou annuler la boite de dialogue " }" ) ;fermeture du concatenage file ;nom de la boite de dialogue avec ses réponse apportées ) (close file) ;fermeture de la boite dialogue (setq DCL_ID (load_dialog filename)) ;creation variable contenant les valeurs de la boite de dialogue (if (not (new_dialog "TestBox" DCL_ID)) ;condition si vide (exit) ;pour sortir ) ;fermeture de la condition (start_list "key") ;démarage de la lecture de la liste (mapcar 'add_list lst) ;traitement de la fonction (end_list) ;fin de la lecture de la liste (action_tile "accept" "(setq rslt (mapcar '(lambda (n) (nth (atoi n) lst)) (str2lst (get_tile \"key\") \" \"))) (done_dialog)") ; création de la variable contenant les choix précedent (action_tile "Cancel" "(done_dialog)") ;quitter sans rien faire (start_dialog) ;démarrer la lecture de la boite de dialogue (unload_dialog DCL_ID) ;vider la variable contenant la boite de dialogue (vl-file-delete filename) ;effacer la variable du fichier temporaire rslt ;création de la variable contenant les choix effectués ) ;fermeture de la fonction Je suis désolé de te prendre la tête avec ce genre de chose mais je suis bloqué sur ce problème que je n'arrive pas à résoudre, sans le quel je ne peu avancer ou même faire autrement. Je te remercie encore une fois pour ton temps passée et énergie, je vais poursuivre dans mes recherche afin d'y arriver, mais ne t'en fait pas, et perds pas plus de temps avec moi, je n'ose plus rien dire au vu des mon incompétence en la matière. Merci pour ta compréhension
Luna Posté(e) le 22 juillet 2022 Posté(e) le 22 juillet 2022 Ok, première question : comment testes-tu la boîte de dialogue ? Dans mon message précédent, il me semble que je répond parfaitement à ta question Il y a 2 heures, willy95 a dit : J'ai donc suivi ton idée en inscrivant ce que je comprends de chacune des lignes du codes, pour autant je ne comprends pas ou ce trouve les choix de la liste, comme par exemple dans ta petite image du résultat de la boite de dialogue : ou ce trouve dans le code : Choix A ? je ne comprends vraiment pas, il faut m'en excuser car je ne suis pas développeur et je bricole beaucoup en lisp afin de me facilité un peu le travail dans mon job. J'ai donc essayer en rajoutant au début une liste que j'ai appeler "key" mais sans résultat également avec cette ligne : command: (testbox4 '("1" "2" "3" "4")) ("1" "2" "3") ; si l'on a sélectionné "1", "2" et "3" Il te suffit de le mettre en pratique, c'est-à-dire : command: (willy95 '("Choix A" "Choix B" "Choix C")) ("Choix A" "Choix C") ; si l'on a sélectionné "Choix A" et "Choix C" Mais si ce n'est pas suffisant, essaye avec chat : (defun ListBoxWilly95 (lst / *error* str2lst filename file DCL_ID rslt) (defun *error* (msg) (if file (close file)) (if filename (vl-file-delete filename)) (princ msg) ) (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) (setq filename (vl-filename-mktemp "Willy95.dcl") file (open filename "W") ) (write-line (strcat "ListBoxM:dialog {" " label = \"1, 2 ou 3 choix\" ;" " :list_box {" " label = \"Choisir :\" ;" " key = \"key\" ;" " multiple_select = true ;" " }" " ok_cancel ;" " }" ) file ) (close file) (setq DCL_ID (load_dialog filename)) (if (not (new_dialog "ListBoxM" DCL_ID)) (exit) ) (start_list "key") (mapcar 'add_list lst) (end_list) (action_tile "accept" "(foreach n (str2lst (get_tile \"key\") \" \") (setq rslt (cons (nth (atoi n) lst) rslt))) (done_dialog)") (action_tile "cancel" "(done_dialog)") (start_dialog) (unload_dialog DCL_ID) (vl-file-delete filename) (reverse rslt) ) C'est du tout cuit, inutile d'essayer de l'adapter ou quoi (la mise en page est plus agréable et logique à l'utilisation). Tu intègres juste dans ton programme la ligne (setq answer (ListBoxWilly95 '("Choix A" "Choix B" "Choix C"))) et tu auras ta liste de réponses multiples... Cependant, j'ai comme l'impression que tu t'attaques à un problème beaucoup trop complexe par rapport à tes connaissances actuelles. Bisous, Luna 1
Luna Posté(e) le 22 juillet 2022 Posté(e) le 22 juillet 2022 En complément de ma réponse, puisqu'il existe des programmes existants pour faire ce que tu souhaites. En se basant par exemple sur la fonction originelle de (ListBox) de (gile) ci-dessous : ;; ListBox (gile) ;; Boite de dialogue permettant un ou plusieurs choix dans une liste ;; ;; Arguments ;; title : le titre de la boite de dialogue (chaîne) ;; msg ; message (chaîne), "" ou nil pour aucun ;; keylab : une liste d'association du type ((key1 . label1) (key2 . label2) ...) ;; flag : 0 = liste déroulante ;; 1 = liste choix unique ;; 2 = liste choix multipes ;; ;; Retour : la clé de l'option (flag = 0 ou 1) ou la liste des clés des options (flag = 2) ;; ;; Exemple d'utilisation ;; (listbox "Présentation" "Choisir une présentation" (mapcar 'cons (layoutlist) (layoutlist)) 1) (vl-load-com) (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) (defun ListBox (title msg keylab flag / tmp file dcl_id choice) (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w") ) (write-line (strcat "ListBox:dialog{label=\"" title "\";") file ) (if (and msg (/= msg "")) (write-line (strcat ":text{label=\"" msg "\";}") file) ) (write-line (cond ((= 0 flag) "spacer;:popup_list{key=\"lst\";") ((= 1 flag) "spacer;:list_box{key=\"lst\";width=32;") (T "spacer;:list_box{key=\"lst\";width=32;multiple_select=true;") ) file ) (write-line "}ok_cancel_err;}" file) (close file) (setq dcl_id (load_dialog tmp)) (if (not (new_dialog "ListBox" dcl_id)) (exit) ) (start_list "lst") (mapcar 'add_list (mapcar 'cdr keylab)) (end_list) (action_tile "accept" "(or (= (get_tile \"lst\") \"\") (if (= 2 flag) (progn (foreach n (str2lst (get_tile \"lst\") \" \") (setq choice (cons (nth (atoi n) (mapcar 'car keylab)) choice)) ) (setq choice (reverse choice)) ) (setq choice (nth (atoi (get_tile \"lst\")) (mapcar 'car keylab))) ) ) (done_dialog)" ) (start_dialog) (unload_dialog dcl_id) (vl-file-delete tmp) choice ) On peut avoir l'exécution suivante pour répondre à ton besoin : (setq lst '("Choix A" "Choix B" "Choix C")) (setq ans (ListBox "1, 2 ou 3 choix" "Choisir : " (mapcar 'cons lst lst) 2)) Ce qui retourne par exemple ("Choix A" "Choix C") ; Si ces deux choix ont été sélectionnés ("Choix B") ; Si ce seul choix a été sélectionné nil ; Si aucun choix n'a été sélectionné Etant donné que tu bricoles des LISP existants pour faire tes propres LISP, je ne comprends pas bien la démarche de vouloir bricoler des LISP existants sans savoir comment ils fonctionnent au lieu d'essayer plutôt de chercher à comprendre comment il marche dans son intégrité pour l'utiliser tel quel... Bisous, Luna 1
willy95 Posté(e) le 22 juillet 2022 Auteur Posté(e) le 22 juillet 2022 Merci beaucoup, grâce a toi j'avance et je te ferai un retour quand ce sera parfait pour moi, merci encore et à bientôt.
didier Posté(e) le 22 juillet 2022 Posté(e) le 22 juillet 2022 Bonjour @Luna Étant donné que tu bricoles des LISP existants… Ben oui !, c'est l'air du temps, je suis atterré de constater que ce genre de situation devient "la normale", on n'apprend plus, on recopie... Et moi qui suis en train de préparer des vidéos d'apprentissage qui me prennent un temps fou pour faire des choses claires et efficaces. Je me demande si je ne perds pas un peu mon temps... C'est la différence entre donner un poisson à quelqu'un et lui apprendre à pêcher... dans une situation, il aura faim à nouveau et réclamera, dans l'autre, il se débrouillera, mais il faut "apprendre" ! (désolé d'avoir écrit un "gros mot") Amicalement 2 1 Éternel débutant... Mon site perso : Programmer dans AutoCAD
willy95 Posté(e) le 26 juillet 2022 Auteur Posté(e) le 26 juillet 2022 Bonjour les amis, Pour info je suis pas développeur de métier, je n'ai jamais reçu ou suivi de formation en lisp, dcl ou autre langage, cela fait plus de 25 ans que je me débrouille et passe énormément de temps à coder, tester et utiliser mes lignes, même si elles sont peu orthodoxe et j'en conviens, mais elles me facilite la vie dans mon travail et j'aide mes collègues en même temps grâce à ça sans quelconque rémunération ni honneur supplémentaire. Je passe des soirées entières à chercher et trouver des solutions sans aide et dans mon coin par peur de me prendre en retour des remarques désobligeantes. Tristement, je constate toujours et depuis de nombreuses années une nonchalance de certains quand on lance un appel à l'aide sur ce forum, je précise que cet appel au secours est toujours établi après de nombreuses heures à essayer de trouver la solution, j'effectue des multiples recherches diverses et variées en amont afin de venir avec quelques éléments pour posé ma question. J'ai bien d'autre passion dans ma vie et je vous confirme que mes dits amis dans mes autres domaines sont bien plus altruiste et bienveillant à l'égard des autres qui n'y connaissent rien et veulent apprendre pour espérer avancer sur le sujet, ces autres domaines sont plus avenant que dans le domaine du développement, heureusement que certains ou certaines reste ouvert d'esprit et prennent un peu de temps à répondre à des gens comme moi. Après ces quelques mots, certains d'entre nous (pour pas dire vous), vont à coup sûr me tirer dessus à boulet rouge, ce qui démontrera probablement mes précédents propos, mais il faut bien comprendre les gens comme moi qui font plus d'effort que ceux qui si connaissent en la matière pour arriver parfois après de longues heures d'efforts à un résultat qui pour certains d'entre vous semble ridicule. Alors par pitié pas de leçons de morale ou de dénigrement sans connaître les gens à qui vous avez a faire, ni dans ce forum, ni dans la vie, car les préjugés sont toujours néfaste pour l'ensemble de la société humaine, sachez que je travail dur sur ces codes sans recopier bêtement les codes des autres et je cherche toujours à comprendre et à avancer pour faire mieux demain. Merci d'avoir pris le temps de me lire.
Luna Posté(e) le 26 juillet 2022 Posté(e) le 26 juillet 2022 Coucou, Je n'ai jamais dénigré tes connaissances et encore moins cherché à être malveillante dans mes propos ! Il en est sûrement de même avec @didier qui ne te visait pas en particulier. Tu es présent sur les forums, et tes messages montrent que tu as tout essayé avant de venir ici. Je reconnais que j'ai pu perdre patience pour ce cas précis (la journée n'avait malheureusement pas aidée pour m'apaiser) et j'en suis désolée. Si chat peut te rassurer, je n'ai pas vraiment eut de formation LISP non plus (juste une mise en bouche très succincte) donc j'ai aussi appris sur le tas depuis 4ans. Les cours de Gilles et Didier m'ont beaucoup aidé, et désormais j'utilise essentiellement l'aide AutoCAD et des .dwg pour apprendre et comprendre de nouvelles choses et continuer de progresser. A vrai dire, je suis presque sûre que toutes les personnes qui prennent le temps d'écrire dans ce forum de programmation n'ont pas eut de réelle formation. C'est un langage assez élitiste donc il n'y a pas de vraiment de formations, c'est beaucoup de formations autodidactes et de patience. Le plus dur n'est pas forcément de développer un programme, c'est d'en parler avec autrui. Aussi bien lorsqu'on est coincé (il est parfois difficile de voir la multitude de chemins amenant vers la solution quand on a arpenté un chemin pendant de nombreuses heures d'effort) que lorsqu'on doit le partager avec d'autres personnes (ni reconnaissance, ni retours, et bien souvent on a du mal à expliquer correctement pourquoi on l'a fait). Donc tout le monde doit faire des efforts, dans les deux sens. Car en tant que développeur, il faut savoir faire des efforts pour apprendre/comprendre de nouvelles choses, de nouvelles fonctionnalités toujours plus complexes et élaborées pour continuer de progresser sans cesse, mais il faut aussi savoir faire des efforts dans le sens inverse pour réussir à être concis, clair, relativement simple tout en restant précis pour les explications que l'on fourni à autrui. L'exercice n'est vraiment pas simple, et plus on progresse dans la complexité des développements et plus la distance entre les deux mondes est grande, rendant la gymnastique beaucoup plus...difficile. Bisous et bon courage pour la suite, Luna
willy95 Posté(e) le 26 juillet 2022 Auteur Posté(e) le 26 juillet 2022 Bonjour Luna, mon message précédent ne t'était pas du tout destiné, tu est bien une des rares personnes qui prends du temps pour me lire et répondre à mes questions bizarre, je ne cesse et ne cesserai jamais assez de te remercier pour tes bons mots, en plus je suis plus que d'accord sur les propos de ton message précédent, j'ai juste été blessé par @didier alors que j'ai pour Bible son site que je lit, relit et essai de comprendre depuis qu'il l'a mis en place, je ne suis peut être pas si doué que vous mais je regrette que l'on m'insulte d'une forme de fainéantise de copier coller alors que je buche sévère tous les jours sur mes sujets de codes. Merci pour votre compréhension.
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant