Non, non, NSKeyValueCoding existe depuis l'origine (au moins depuis Mac OS X 10.0) et est intégré à NSObject. Les propriétés ont été ajoutés à ce système de gestion... Sinon en effet, il s'agit bien d'une entorse grave au principe d'encapsulation, enfin ça dépend, si le développeur définit les accesseurs pour ses variables d'instance, la méthode les utilise en priorité, sinon il va chercher la valeur directement dans l'obje,t et si vraiment il trouve rien il appelle une autre méthode "-valueForUndefinedKey:". Mais toujours est-il que la méthode cherche en premier des "méthodes légales" pour accéder aux valeurs.
"return [row valueForKey:identifier];" -> il sort d'où ce "row" ?
Quant à ta méthode "- (void)tableview:(NSTableview *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(id)rowIndex", ben... elle ne fait rien. Enfin si, elle fait ce qu'aurait dû faire celle du dessus avant d'utiliser "row"
Schlum . Oui , normalement c' est le nom de la classe ?ou du taleau ? donc Inscription . Mais ça ne fonctionne pas mieux ? Pas çafile areuh . Donc j'avais pensé m' etre trompé et j'ai ecris row , plus de message d'erreur , plus de fonctions .
Oui d'accord . Compressé avec stuffit ? Envoyé avec Répondre ? je suis couillons ,une petite partie de code ,n'est lisible que dans le context . Je vais regrouper tout le projet . Merci d'avance .
Pour compresser le projet, tu sélectionnes le dossier du projet (duquel tu as retiré le dossier "build" sinon ça prend beaucoup de place pour rien), et tu fais clique-droit (ctrl + clic) et tu choisis "compresse <nom du dossier>" ou "archiver <nom du dossier>". (c'est soit l'un soit l'autre selon ton système.)
Je sais pas trop ce que t'as fait mais t'as programmé comme un porc... Sans vouloir te vexer je précise ! Entre les implémentations incomplètes, les noms des méthodes bancals, les releases envoyer à des objets-classes, les méthodes en double... Il y a vraiment un gros problème là -dedans...
Non mais c'est pas grave, ça arrive à tous, je suis désolé si j'ai été un peu brutal. Je sais pas si c'est toi qui a fait un peu ds bourdes ou si c'est la compression qui pose problème. Je pense que tu devrais regarder le fichier .zip que tu places dans ton post pour vérifier s'il n'y a pas eu de problème pendant la transmission.
Ce sont seulement mes bourdes . J' assume . Je pensais pour dire la vérité que je pouvais réaliser un petit programme de débutant en faisant du copier/coller. D'après ce que j'avais lu (mal compris?) je croyais cela réalisable facilement . En fait même si le code " est standard " il ne fonctione jamais ou rarement .Je me suis planté . C'est beaucoup plus subtil que je croyais. Pour un pro ce que j'ai réalisé ........ J'essaye ....C'est vachement prenant ... Pas besoin de ferninde (ClicCool).Xcode me suffit . Merci Cordialement
Par définition, le copier/coller est à éviter, il t'empêche de voir que tu fais une connerie. Il faut aussi chercher à commencer par le plus simple pour ensuite aller ves plus compliqué, que ce soit dans l'apprentissage ou au sein d'un projet. Mais surtout, il ne faut pas aller trop vite.
Ton projet est faisable à ton niveau, mais encore faut-il que tu t'organises, essaye de découper ton projet en brique plus simple et ensuite assemble-les. Commence par les briques qui n'ont besoin d'aucune autre pour fonctionner, comme par exemple une classe qui va stocker une ligne de tableau.
Euh ... Même cela je n'y suis pas parvenu ..... Mon idée de départ était celle la , faire pour une ligne et 3 colonnes et ensuite améliorer . Je ne lis pas l' anglais alors pour mettre en oeuvre les exemples apple .... En plus seul ... Je ne sais pas , mais le copier/coller si on ne sais pas ,en + à quoi les parties selectionnées servent vraiment .. Comprendre avec un petit dico ... Comment savez-vous que tel ligne sert a ... ça ? avec les définitions ? En plus actuellement je veut avoir terminé ce que j' entreprend avant de l' avoir commencé . Cordialement.
En général, les noms des méthodes d'Apple sont suffisamment précis pour être considérés comme auto-documentées, mais lorsqu'on ne comprend pas l'utilité d'une méthode, on va fouiller dans la documentation.
Mais à force de programmer, au bout d'un moment on comprend rapidement un code rien qu'en le lisant, c'est sûr que là il faut quand même comprendre l'anglais sinon on ne s'en sort pas.
Je pense que tu t'en sortirais mieux si tu t'essayais à un tutoriel complet sur la programmation en Cocoa. Par exemple, le livre Cocoa par la Pratique de Aaron Hillegass est excellent pour commencer à programmer en Cocoa. Le seul ennuie c'est que la version française a été écrite pour Mac OS X 10.2, mais la majorité de ce qui est dit dans ce livre est toujours d'actualité, pour tout ce qui ne l'est plus ce n'est jamais vraiment éloigné des techniques actuelles.
Bonjour . Je vous doit la vérité : Le code que je vous ai adressé ; ce sont des notes , des photos d'ecrans , des copies ,que j'ai rassemblé .J'ai pensé que si je vous disais que je n'avais pas encore réussi a écrire du code , vous ne voudriez pas m'aider . Vous c'est pour tous les membres du forum . Je n'ai réalisé que le dossier MyDocument.h .....celui que je vous demandais de controler. J'ai ralisé le tutorial 2 fois . Une fois en 2004/5 . Une Fois en 2007. Psychoh13 [Commence par les briques qui n'ont besoin d'aucune autre pour fonctionner, comme par exemple une classe qui va stocker une ligne de tableau.] accepterais-tu de détailler la "fabrication"de cette brique .? Cordialement
Le code que je vous ai adressé ; ce sont des notes , des photos d'ecrans , des copies ,que j'ai rassemblé .J'ai pensé que si je vous disais que je n'avais pas encore réussi a écrire du code , vous ne voudriez pas m'aider .
Cela explique le côté décousu de beaucoup de tes messages. Maintenant, le problème n'est pas tant que tu n'a pas codé une ligne de code mais que que tu ne comprends pas l'anglais. Tout est en anglais avec l'Objective-C. En me projetant à mes débuts sous cocoa, j'aurais beaucoup du mal à imaginer pouvoir faire quelques chose avec XCode si celui-ci parlait allemand par exemple (je parle pas un mot d'allemand). Cela me semble vraiment mission impossible.
Bonjour Mala . Je suis retraité ,sans moyen financier , les logiciels payant , défendus . Bon , je cherche à "traduire" mot à mot .... dure dure .
Est-il possible de créer (je sais comment dire )ou de nommer des colonnes sans passer par le .NIB et IB . si oui les infos sont stockées dans quel dossier ?
Comment fait-on pour changer les icônes donc les classes dans la fenêtre de .NIB ex: L'icône files Owner qui se transforme en Contrôleur (hexagone <-- ? bleu)
Alors, déjà pour faire une classe de données, c'est très simple, tu fais une classe héritant de NSObject, et tu mets comme variables d'instance chaque colonne de ton tableau. Ce qui donne dans ton cas :
Il faudra en fait définir aussi les accesseurs pour chacune de ces variables d'instance, ce sera en effet plus propre, mais le plus urgent et de faire un accesseur pour la valeur total, puisque celle-ci doit contenir la somme des 7 parties de la ligne, il faut donc qu'à chaque fois que la NSTableView demande le contenu de la variable d'instance "total" il faut que se valeur soit calculée en fonction des parties et retourné.
Ce qui fait que la variable d'instance "total" n'est pas obligatoire, mais les accesseurs le sont de "total" le sont.
En ce qui concerne ton tableau, il faut les "identifiers" des colonnes soient exactement les mêmes que les variables d'instance de cette classe. Cela permettra de rendre ton application plus souple. Pour changer l'identifier, le plus simple étant de passer par IB, tu sélectionnes une colonne, tu vas dans le Attributes Inspector (pomme + 1) et tu les modifies en conséquence.
En ce qui concerne la phrase que tu voulais qu'on traduise elle signifie simplement que la classe NSOutlineView est une sous-classe de NSTableView et qu'elle définit un tableau en forme d'arbre, c'est-à -dire que certains éléments peuvent être étendus ou refermé pour afficher les éléments qui en héritent sous forme de hiérarchie.
Je découvre ton sujet mais ne parvient pas du tout à comprendre ni où tu en es ni ce que tu veux faire. Je me demande si tu ne ferais pas mieux d'oublier, pendant un temps, les NSTableView pour faire et refaire tous les tutoriels qui te tombent sous la main, à commencer par les plus simples et le bases. Histoire de mieux te faire une idée de la structure de base d'un petit logiciel en Cocoa et en maà®triser les mécanismes. Une fois que tu auras, pas à pas, écrit, et non pas copier/coller, quelques tutoriels avec un résultat fonctionnel, zéro warning et zéro erreurs, tu te lances, personnalises et ajoutes prudemment des variantes et fonctionnalités à un de tes projets-tutoriels fonctionnel. A chaque moindre petit ajout tu compile exécutes et vérifies que tu maà®trise ce que tu as ajouté. Ne te lances pas à partir de zéro sur un projet impliquant une technique dont tu ne comprends pas les bases elles mêmes.
Ne t'inquiète pas, tétu comme tu as l'air de l'être tu devrais y parvenir. Faut juste commencer par le commencement.
dans 1201299580:
... Pas besoin de ferninde (ClicCool).Xcode me suffit . Merci Cordialement
Ma signature est une allusion à la technique des bindings dont certains ici pensent peut-être que j'abuse et que je binde un peu trop sovent dans mon code
ClicCool Bonjour J'avais bien compris qu'ils s'agissait des Bindings et que tu bind trop .. Je ne me permettrais pas .. Merci pour vos conseils c'estchment sympa .. Bon j'ai compris ( je pense ! ) pas mal de chose . Et je fait ce que tu conseil , à savoir " Bidouiller " les codes des exemples du livre de Mr Hillegas . (J'ai téléchargé les code sur le site Eyrolles .. ) Psychoh Je te soumettrai un nouveau (quel rasoir) morceau de code .Au départ 28 Erreurs 30 warnings Il me reste 4 Erreurs 3Warnings Je vous pries de m'excuser , vous tous , mais je cherchais désespérément de l'aide car je pensais que; trop bête vous ne m'aideriez pas (Le Forum) vu certain écrit peu accueillant lors de mon inscription.@End Cordialement
Je te soumettrai un nouveau (quel rasoir) morceau de code .Au départ 28 Erreurs 30 warnings Il me reste 4 Erreurs 3Warnings .../...
.../...28 erreur et 30 warning d'un coup ? Je sais bien que souvent i y a des erreurs en cascade dues à une seule ligne mais bon là ça fait beaucoup. Je te conseille de compiler (Pomme quasiment à chaque ligne que tu écris, de telle sorte qu'il n'y ait pas de doutes sur la localisation de l'erreur ayant déclenché warnings et erreurs. De cette façon, peu de risque d'avoir d'un coup 28 erreurs difficiles à localiser. Ce qui te permet en plus de cibler l'aide que tu pourrais avoir à nous demander.
dans 1201365607:
.../... vu certain écrit peu accueillant lors de mon inscription.@End Cordialement
Peut-être pourrais-tu commencer par remplir un peu les informations de ton profil par exemple ? Et n'oublies pas que ceux qui t'aident ici le font bénévollement et généreusement, plus tes questions seront précises et bien décrites, plus ils nous sera possible d'y répondre. Comment répondrais-tu à quelqu'un qui te demande "à brûle moi le pourpoint" : "pourquoi ma poule ne pond pas ?" sans savoir de quelle poule il parle, qu'elle race, quel âge, s'il a un jardin suffisamment grand, ce qu'il lui donne à manger etc... le tout pour se rendre compte après 15 posts que sa poule est un coq ! ?
Bonjour à tous . Je sais maintenant que toute la Communauté Mac Parcitipe non ? Je cherche correcteurs ( Encore ?...) sympa . Pas zéro ......javascript:void(0) Merci Cordialement à vous ..!
ClicCool Bonsoir . Tout à fait d' accord pour remercier les bénévoles .....Merci .. L'incident du début Oublié et Oublions ..... Je veut encore aller plus vite que la musique..... Je me soigne , je me soigne . J'ai reposté une oeuvre "majeuse" soyez indulgent . Ils restent beaucoup de ..bugs Je n'ai pas essayé de débuger ligne par ligne car je pensais cela impossible . Il manque un Smiley qui fume .... l'état de mes cheveux ce soir .. Cordialement
Réponses
Sinon en effet, il s'agit bien d'une entorse grave au principe d'encapsulation, enfin ça dépend, si le développeur définit les accesseurs pour ses variables d'instance, la méthode les utilise en priorité, sinon il va chercher la valeur directement dans l'obje,t et si vraiment il trouve rien il appelle une autre méthode "-valueForUndefinedKey:".
Mais toujours est-il que la méthode cherche en premier des "méthodes légales" pour accéder aux valeurs.
@implementation MyDocument
//Initialisation du tableau
- (id)init
{
self = [super init];
if (self) {
tableau = [[NSMutableArray alloc] init];
}
return self;
}
//Destruction
- (void)dealloc {
[tableau release];
}
//Implémentation de la sauvegarde du fichier
- (BOOL)writeToFile:(NSString *)aPath ofType:(NSString *)type {
return [tableau writeToFile:aPath atomically:YES];
//Implémentation de la lecture du fichier en utilisant la fonction miroir
- (BOOL)readFromFile:(NSString *)aPath ofType:(NSString *)type {
[tableau autorelease];
tableau = [[NSMutableArray alloc] initWithContentsOfFile:(NSString *)aPath;
}
return YES;
}
@end
Et ce morceau la ?
Hihihi
Cordialement
Euh... Qu'elle est bancaleÂ
Je m'arrête aux premières lignes :
"return [row valueForKey:identifier];" -> il sort d'où ce "row" ?
Quant à ta méthode "- (void)tableview:(NSTableview *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(id)rowIndex", ben... elle ne fait rien. Enfin si, elle fait ce qu'aurait dû faire celle du dessus avant d'utiliser "row"
Oui , normalement c' est le nom de la classe ?ou du taleau ? donc Inscription . Mais ça ne fonctionne pas mieux ?
Pas çafile areuh .
Donc j'avais pensé m' etre trompé et j'ai ecris row , plus de message d'erreur , plus de fonctions .
Compressé avec stuffit ?
Envoyé avec Répondre ?
je suis couillons ,une petite partie de code ,n'est lisible que dans le context .
Je vais regrouper tout le projet .
Merci d'avance .
Ensuite, le code, notamment dans MyDocument.m, est complètement... bousillé. o_O
Entre les implémentations incomplètes, les noms des méthodes bancals, les releases envoyer à des objets-classes, les méthodes en double... Il y a vraiment un gros problème là -dedans...
Désolé ......
Merci ..
Je pense que tu devrais regarder le fichier .zip que tu places dans ton post pour vérifier s'il n'y a pas eu de problème pendant la transmission.
Ce sont seulement mes bourdes . J' assume .
Je pensais pour dire la vérité que je pouvais réaliser un petit programme de débutant en faisant du copier/coller.
D'après ce que j'avais lu (mal compris?) je croyais cela réalisable facilement .
En fait même si le code " est standard " il ne fonctione jamais ou rarement .Je me suis planté .
C'est beaucoup plus subtil que je croyais.
Pour un pro ce que j'ai réalisé ........ J'essaye ....C'est vachement prenant ...
Pas besoin de ferninde (ClicCool).Xcode me suffit .
Merci
Cordialement
Il faut aussi chercher à commencer par le plus simple pour ensuite aller ves plus compliqué, que ce soit dans l'apprentissage ou au sein d'un projet.
Mais surtout, il ne faut pas aller trop vite.
Ton projet est faisable à ton niveau, mais encore faut-il que tu t'organises, essaye de découper ton projet en brique plus simple et ensuite assemble-les.
Commence par les briques qui n'ont besoin d'aucune autre pour fonctionner, comme par exemple une classe qui va stocker une ligne de tableau.
Même cela je n'y suis pas parvenu .....
Mon idée de départ était celle la , faire pour une ligne et 3 colonnes et ensuite améliorer .
Je ne lis pas l' anglais alors pour mettre en oeuvre les exemples apple ....
En plus seul ...
Je ne sais pas , mais le copier/coller si on ne sais pas ,en + à quoi les parties selectionnées servent vraiment ..
Comprendre avec un petit dico ...
Comment savez-vous que tel ligne sert a ... ça ? avec les définitions ? En plus actuellement je veut avoir terminé ce que j' entreprend avant de l' avoir commencé .
Cordialement.
Mais à force de programmer, au bout d'un moment on comprend rapidement un code rien qu'en le lisant, c'est sûr que là il faut quand même comprendre l'anglais sinon on ne s'en sort pas.
Je pense que tu t'en sortirais mieux si tu t'essayais à un tutoriel complet sur la programmation en Cocoa. Par exemple, le livre Cocoa par la Pratique de Aaron Hillegass est excellent pour commencer à programmer en Cocoa. Le seul ennuie c'est que la version française a été écrite pour Mac OS X 10.2, mais la majorité de ce qui est dit dans ce livre est toujours d'actualité, pour tout ce qui ne l'est plus ce n'est jamais vraiment éloigné des techniques actuelles.
Je vous doit la vérité :
Le code que je vous ai adressé ; ce sont des notes , des photos d'ecrans , des copies ,que j'ai rassemblé .J'ai pensé que si je vous disais que je n'avais pas encore réussi a écrire du code , vous ne voudriez pas m'aider .
Vous c'est pour tous les membres du forum .
Je n'ai réalisé que le dossier MyDocument.h .....celui que je vous demandais de controler.
J'ai ralisé le tutorial 2 fois . Une fois en 2004/5 . Une Fois en 2007.
Psychoh13
[Commence par les briques qui n'ont besoin d'aucune autre pour fonctionner, comme par exemple une classe qui va stocker une ligne de tableau.]
accepterais-tu de détailler la "fabrication"de cette brique .?
Cordialement
[NSOutlineView is a subclass of NSTableView that lets the user expand or collapse rows that contain hierarchical data.]
Merci à vous .
Cela explique le côté décousu de beaucoup de tes messages. Maintenant, le problème n'est pas tant que tu n'a pas codé une ligne de code mais que que tu ne comprends pas l'anglais. Tout est en anglais avec l'Objective-C. En me projetant à mes débuts sous cocoa, j'aurais beaucoup du mal à imaginer pouvoir faire quelques chose avec XCode si celui-ci parlait allemand par exemple (je parle pas un mot d'allemand). Cela me semble vraiment mission impossible.
As-tu pensé à te tourner vers des outils plus accessibles en français? Je pense notamment au dernier né de FileMaker qui s'appelle Bento. Voir ici...
http://www.filemaker.fr/products/bento/preview/learn-more.html
Je suis retraité ,sans moyen financier , les logiciels payant , défendus .
Bon , je cherche à "traduire" mot à mot .... dure dure .
Est-il possible de créer (je sais comment dire )ou de nommer des colonnes sans passer par le .NIB et IB . si oui les infos sont stockées dans quel dossier ?
Comment fait-on pour changer les icônes donc les classes dans la fenêtre de .NIB ex:
L'icône files Owner qui se transforme en Contrôleur (hexagone <-- ? bleu)
Cordialement
Ce qui donne dans ton cas :
Il faudra en fait définir aussi les accesseurs pour chacune de ces variables d'instance, ce sera en effet plus propre, mais le plus urgent et de faire un accesseur pour la valeur total, puisque celle-ci doit contenir la somme des 7 parties de la ligne, il faut donc qu'à chaque fois que la NSTableView demande le contenu de la variable d'instance "total" il faut que se valeur soit calculée en fonction des parties et retourné.
Ce qui fait que la variable d'instance "total" n'est pas obligatoire, mais les accesseurs le sont de "total" le sont.
En ce qui concerne ton tableau, il faut les "identifiers" des colonnes soient exactement les mêmes que les variables d'instance de cette classe. Cela permettra de rendre ton application plus souple. Pour changer l'identifier, le plus simple étant de passer par IB, tu sélectionnes une colonne, tu vas dans le Attributes Inspector (pomme + 1) et tu les modifies en conséquence.
En ce qui concerne la phrase que tu voulais qu'on traduise elle signifie simplement que la classe NSOutlineView est une sous-classe de NSTableView et qu'elle définit un tableau en forme d'arbre, c'est-à -dire que certains éléments peuvent être étendus ou refermé pour afficher les éléments qui en héritent sous forme de hiérarchie.
Je découvre ton sujet mais ne parvient pas du tout à comprendre ni où tu en es ni ce que tu veux faire.
Je me demande si tu ne ferais pas mieux d'oublier, pendant un temps, les NSTableView pour faire et refaire tous les tutoriels qui te tombent sous la main, à commencer par les plus simples et le bases. Histoire de mieux te faire une idée de la structure de base d'un petit logiciel en Cocoa et en maà®triser les mécanismes.
Une fois que tu auras, pas à pas, écrit, et non pas copier/coller, quelques tutoriels avec un résultat fonctionnel, zéro warning et zéro erreurs, tu te lances, personnalises et ajoutes prudemment des variantes et fonctionnalités à un de tes projets-tutoriels fonctionnel.
A chaque moindre petit ajout tu compile exécutes et vérifies que tu maà®trise ce que tu as ajouté.
Ne te lances pas à partir de zéro sur un projet impliquant une technique dont tu ne comprends pas les bases elles mêmes.
Ne t'inquiète pas, tétu comme tu as l'air de l'être tu devrais y parvenir.
Faut juste commencer par le commencement.
Ma signature est une allusion à la technique des bindings dont certains ici pensent peut-être que j'abuse et que je binde un peu trop sovent dans mon code
Salut Psychoh,
Tu connaà®s pas la chanson ? "Qand je pense à Fernande, je bande, je bande ..." ?
C'est juste un jeu de mot, avec Cocoa je binde, je binde ...
La chanson je la connaissais mais j'avais pas fait le lien.
Bonjour
J'avais bien compris qu'ils s'agissait des Bindings et que tu bind trop .. Je ne me permettrais pas ..
Merci pour vos conseils c'estchment sympa ..
Bon j'ai compris ( je pense ! ) pas mal de chose .
Et je fait ce que tu conseil , à savoir " Bidouiller " les codes des exemples du livre de Mr Hillegas .
(J'ai téléchargé les code sur le site Eyrolles .. )
Psychoh
Je te soumettrai un nouveau (quel rasoir) morceau de code .Au départ 28 Erreurs 30 warnings
Il me reste 4 Erreurs 3Warnings
Je vous pries de m'excuser , vous tous , mais je cherchais désespérément de l'aide car je pensais que; trop bête vous ne m'aideriez pas (Le Forum) vu certain écrit peu accueillant lors de mon inscription.@End
Cordialement
.../...28 erreur et 30 warning d'un coup ?
Je sais bien que souvent i y a des erreurs en cascade dues à une seule ligne mais bon là ça fait beaucoup.
Je te conseille de compiler (Pomme quasiment à chaque ligne que tu écris, de telle sorte qu'il n'y ait pas de doutes sur la localisation de l'erreur ayant déclenché warnings et erreurs.
De cette façon, peu de risque d'avoir d'un coup 28 erreurs difficiles à localiser.
Ce qui te permet en plus de cibler l'aide que tu pourrais avoir à nous demander.
Peut-être pourrais-tu commencer par remplir un peu les informations de ton profil par exemple ?
Et n'oublies pas que ceux qui t'aident ici le font bénévollement et généreusement, plus tes questions seront précises et bien décrites, plus ils nous sera possible d'y répondre.
Comment répondrais-tu à quelqu'un qui te demande "à brûle moi le pourpoint" : "pourquoi ma poule ne pond pas ?" sans savoir de quelle poule il parle, qu'elle race, quel âge, s'il a un jardin suffisamment grand, ce qu'il lui donne à manger etc... le tout pour se rendre compte après 15 posts que sa poule est un coq ! ?
Cordialement à toi
Je sais maintenant que toute la Communauté Mac Parcitipe non ?
Je cherche correcteurs ( Encore ?...) sympa . Pas zéro ......javascript:void(0)
Merci
Cordialement à vous ..!
Bonsoir .
Tout à fait d' accord pour remercier les bénévoles .....Merci ..
L'incident du début Oublié et Oublions .....
Je veut encore aller plus vite que la musique..... Je me soigne , je me soigne .
J'ai reposté une oeuvre "majeuse" soyez indulgent .
Ils restent beaucoup de ..bugs
Je n'ai pas essayé de débuger ligne par ligne car je pensais cela impossible .
Il manque un Smiley qui fume .... l'état de mes cheveux ce soir ..
Cordialement