Forums Développement Multimédia

Aller au contenu

- - - - -

Tutoriel: Flex4 et les modèles de mise en page personnalisés

TUTO

13 réponses à ce sujet

#1 autourdeflash

    Ceinture Jaune

  • Members
  • PipPip
  • 18 messages

Posté 29 March 2011 - 15:03 PM

Bonjour à tous,

j'ai réalisé un tutoriel sur les modèles de mise en page personnalisés sous flex4.

Il se trouve ici: http://ressources.me...f_customlayouts

les sources sont disponibles sous mon compte google (click droit - view source) en attendant mieux.

Bonne lecture.

#2 achauvire

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 411 messages

Posté 29 March 2011 - 16:06 PM

Salut,

Après une première lecture plutôt en diagonale, je pense que tu devrais détailler beaucoup plus les 2 modèles personnalisés que tu as créés en nous montrant plus de code et en expliquant comment tu calcules les positions notamment.

Voili voilou pour le moment

#3 autourdeflash

    Ceinture Jaune

  • Members
  • PipPip
  • 18 messages

Posté 30 March 2011 - 06:29 AM

Salut Tannoy,

ils sont juste la pour l'exemple et pour montrer l'implémentation à suivre. J'ai donc pris des exemples simples sans m'attarder dessus. Le code est dispo via le menu contextuel et l'option "view source".

Maintenant si ton sentiment est partagé, je ne manquerai évidemment pas de le rajouter.

#4 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 30 March 2011 - 13:58 PM

Bonjour,

Merci pour ce premier tuto de ta part sur le wiki :)

Alors tu vas voir, ici, quand tu as de la chance et selon le sujet abordé, tu auras des retours sur tes écris. Je dis de la chance car c'est une occasion d'améliorer son travail, et d'avancer dans sa "pratique de pédagogue". Mais ne te crois pas non plus obligé de tenir compte de toutes les remarques, personne n'oublie qu'écrire un tutoriel est un gros boulot ;)

Pour ma part:

Je pense que ce serait bien d'avoir le code plus "à vue". Devoir télécharger les sources pour comprendre comment il faut s'y prendre pour changer le layout à l'exécution me semble être un problème pour te suivre facilement (tu montres bien la ligne:
layout="{layoutList.selectedItem.data}"
mais on ne sait pas ce qu'il faut mettre dans la liste. J'imagine que de simples chaînes ne suffisent pas, ou si?)
De façon générale, je pense qu'il faut éviter de demander d'ouvrir des sources pour un tutoriel comme celui-là. Cela ne veut pas forcément dire tout exposer, mais je crois que là ça manque.


Effectivement je ne serais pas contre voir la totalité de la classe pour un de tes 2 layouts personnalisés. Par contre je ne pense pas qu'il faille expliquer comment on calcule les coordonnées des points d'un cercle, cela ne me semble pas dans le cadre du tuto. Tu peux éventuellement mettre un lien vers http://ressources.me...inus_et_cosinus


Je pense que la problématique "comment appliquer un layout concrètement", que ce soit dynamiquement ou dans le mxml, devrait être abordée dès le premier chapitre. Là tu le fais et tu proposes les sources, mais ce serait quand même bien de voir dans le tuto lui-même comment on fait. C'est quand même le sujet du premier chapitre: quels sont les layouts et comment on s'en sert. Tu réponds très bien à la 1ere question, en texte et en image, mais on voudrait les infos à vue pour la 2eme :)


Pour le 2eme chapitre, j'aurais bien aimé, en bonus, que tu nous dises comment appliquer un layout en AS3. Mais c'est peut-être pas le sujet là, je sais pas...


Pour les sources, il faudrait les mettre dans le wiki. C'est sympa l'idée du clic droit, je n'y aurais pas pensé, mais on préfère s'assurer l'intégrité des tutoriels dans le temps, en stockant les fichiers joints directement dans le wiki. Comme cela jamais de liens rompus. Ne te fatigue pas à supprimer l'option clic droit pour autant, à partir du moment où on a les sources sur le wiki c'est bon. Si tu ne vois pas comment faire envoie-nous le zip, je te montrerais.


J'aime bien tes swf d'application. Cela c'est un véritable plus à un tuto, d'avoir de la pratique et de voir le résultat. Merci d'avoir pris ce temps, c'est super.


"Cela peut suffire si la position des éléments graphiques est déterminée dans les limites du conteneur parent. Dans le cas inverse, on devra également surcharger la méthode measure."
Veux-tu dire que si le layout demande plus de place que la taille disponible, il faut aussi surcharger measure() pour faire en sorte d'étendre la zone d'affichage? Je pense qui oui. Le mot "déterminée" est peut-être ambigu.
J'ai rajouté un lien en passant.
Sinon dans l'ensemble je trouve que tes explications sont claires et qu'on comprend bien ton texte.


Une dernière ch'tite remarque: D'expérience, il vaut mieux éviter les phrases comme "Ce sera l'objet d'un autre tutoriel." Ceci n'apporte rien au lecteur, à part peut-être de rechercher dans le wiki un article qui n'existe pas (encore, certes, mais qui sait ce que l'avenir réserve?). Il vaut mieux ne rien dire, et venir rajouter le lien vers le tuto une fois qu'il est écrit.


Voilà, tu n'as plus qu'à prendre ce que tu veux de tout cela, selon ton humeur et autres paramètres :)

Bien sûr n'hésite pas à demander si tu veux des précisions.

#5 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 30 March 2011 - 14:11 PM

P.S: je viens de modifier le titre, je me dis que ce sera mieux pour les moteurs de recherche. Rechange si tu n'aimes pas, surtout si tu trouves une autre formule qui contient le mot "layout"

#6 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 30 March 2011 - 16:00 PM

Qu'est-ce que SimpleRenderer dans tes sources?
Je compile avec Flex4 et j'ai:

Citation

1120: Accès à la propriété non définie SimpleRenderer
1172: La définition renderers:SimpleRenderer est introuvable
Pas de trace de cette classe dans la doc. Je rate quelque chose?

#7 autourdeflash

    Ceinture Jaune

  • Members
  • PipPip
  • 18 messages

Posté 30 March 2011 - 16:19 PM

Les réponses ci-dessous:

Voir le messagelilive, le 30 March 2011 - 13:58 PM, dit :

Bonjour,

Merci pour ce premier tuto de ta part sur le wiki :)

Alors tu vas voir, ici, quand tu as de la chance et selon le sujet abordé, tu auras des retours sur tes écris. Je dis de la chance car c'est une occasion d'améliorer son travail, et d'avancer dans sa "pratique de pédagogue". Mais ne te crois pas non plus obligé de tenir compte de toutes les remarques, personne n'oublie qu'écrire un tutoriel est un gros boulot ;)

[AF]pas de soucis

Pour ma part:

Je pense que ce serait bien d'avoir le code plus "à vue". Devoir télécharger les sources pour comprendre comment il faut s'y prendre pour changer le layout à l'exécution me semble être un problème pour te suivre facilement (tu montres bien la ligne:
layout="{layoutList.selectedItem.data}"
mais on ne sait pas ce qu'il faut mettre dans la liste. J'imagine que de simples chaînes ne suffisent pas, ou si?)
De façon générale, je pense qu'il faut éviter de demander d'ouvrir des sources pour un tutoriel comme celui-là. Cela ne veut pas forcément dire tout exposer, mais je crois que là ça manque.
[AF] je vais rectifier

Effectivement je ne serais pas contre voir la totalité de la classe pour un de tes 2 layouts personnalisés.
[AF] corrigé

Par contre je ne pense pas qu'il faille expliquer comment on calcule les coordonnées des points d'un cercle, cela ne me semble pas dans le cadre du tuto. Tu peux éventuellement mettre un lien vers http://ressources.me...inus_et_cosinus
[AF] c'est mon avis également. c'est fait.

Je pense que la problématique "comment appliquer un layout concrètement", que ce soit dynamiquement ou dans le mxml, devrait être abordée dès le premier chapitre. Là tu le fais et tu proposes les sources, mais ce serait quand même bien de voir dans le tuto lui-même comment on fait. C'est quand même le sujet du premier chapitre: quels sont les layouts et comment on s'en sert. Tu réponds très bien à la 1ere question, en texte et en image, mais on voudrait les infos à vue pour la 2eme :)
[AF] je vais rectifié et ajouter l'assignation d'un layout en as3 du même coup

Pour le 2eme chapitre, j'aurais bien aimé, en bonus, que tu nous dises comment appliquer un layout en AS3. Mais c'est peut-être pas le sujet là, je sais pas...
[AF] voir plus haut

Pour les sources, il faudrait les mettre dans le wiki. C'est sympa l'idée du clic droit, je n'y aurais pas pensé, mais on préfère s'assurer l'intégrité des tutoriels dans le temps, en stockant les fichiers joints directement dans le wiki. Comme cela jamais de liens rompus. Ne te fatigue pas à supprimer l'option clic droit pour autant, à partir du moment où on a les sources sur le wiki c'est bon. Si tu ne vois pas comment faire envoie-nous le zip, je te montrerais.
[AF] ok. je t'ai envoyé les sources par mail car en effet je ne sais pas comment faire. Mais je veux bien savoir pour le futur

J'aime bien tes swf d'application. Cela c'est un véritable plus à un tuto, d'avoir de la pratique et de voir le résultat. Merci d'avoir pris ce temps, c'est super.
[AF] Ok

"Cela peut suffire si la position des éléments graphiques est déterminée dans les limites du conteneur parent. Dans le cas inverse, on devra également surcharger la méthode measure."
Veux-tu dire que si le layout demande plus de place que la taille disponible, il faut aussi surcharger measure() pour faire en sorte d'étendre la zone d'affichage? Je pense qui oui. Le mot "déterminée" est peut-être ambigu.
J'ai rajouté un lien en passant.
Sinon dans l'ensemble je trouve que tes explications sont claires et qu'on comprend bien ton texte.
[AF] modifié en... "Cela peut suffire si le contenu doit s'adapter aux dimensions du conteneur. Dans le cas inverse, c'est à dire si le conteneur doit s'adapter au contenu, on devra également surcharger la méthode measure"

Une dernière ch'tite remarque: D'expérience, il vaut mieux éviter les phrases comme "Ce sera l'objet d'un autre tutoriel." Ceci n'apporte rien au lecteur, à part peut-être de rechercher dans le wiki un article qui n'existe pas (encore, certes, mais qui sait ce que l'avenir réserve?). Il vaut mieux ne rien dire, et venir rajouter le lien vers le tuto une fois qu'il est écrit.
[AF] corrigé

Voilà, tu n'as plus qu'à prendre ce que tu veux de tout cela, selon ton humeur et autres paramètres :)

Bien sûr n'hésite pas à demander si tu veux des précisions.


#8 autourdeflash

    Ceinture Jaune

  • Members
  • PipPip
  • 18 messages

Posté 30 March 2011 - 16:30 PM

Voir le messagelilive, le 30 March 2011 - 16:00 PM, dit :

Qu'est-ce que SimpleRenderer dans tes sources?

Je compile avec Flex4 et j'ai:

Pas de trace de cette classe dans la doc. Je rate quelque chose?

[AF] DataGroup demande un renderer pour représenter les données. J'ai créé un renderer basic qui contient un bouton pour remplacer celui par défaut. Il est bien dans les sources. Je n'en parle pas car il n'est pas lié au layout. ca doit marcher.

liste des fichiers fournis

com/projects/atourdeflash/customlayouts

Custom2DLayout.mxml
DefaultLayouts.mxml

/layouts
CircularLayout.as
RandomLayout.as

/renderers
SimpleRenderer.mxml

dans le code

<s:DataGroup
width="100%" height="100%"
layout="{layoutList.selectedItem.data}"
dataProvider="{dataSource}"
itemRenderer="renderers.SimpleRenderer">
</s:DataGroup>






#9 autourdeflash

    Ceinture Jaune

  • Members
  • PipPip
  • 18 messages

Posté 30 March 2011 - 16:34 PM

désolé le chemin correct est com.autourdeflash.flex4.demos.customlayouts pour reprendre ce que j'ai écrit plus haut.

essayes comme cela en fournissant le namespace en entier.

<s:DataGroup
width="100%" height="100%"
layout="{layoutList.selectedItem.data}"
dataProvider="{dataSource}"
itemRenderer="com.autourdeflash.flex4.demos.customlayouts.renderers.SimpleRenderer">
</s:DataGroup>

#10 autourdeflash

    Ceinture Jaune

  • Members
  • PipPip
  • 18 messages

Posté 30 March 2011 - 20:44 PM

dernière mise à jour en soirée 30/03 21h45.

#11 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 01 April 2011 - 18:17 PM

Bien tes changements je trouve, spécialement pour la progression.

Si tu veux un avis quand à l'affichage du code source mxml de tes 2 applications, je crois que ce n'était pas indispensable de le donner in-extenso, ça alourdit. A partir du moment où tu as expliqué comment on fait pour changer dynamiquement de layout (dans le chapitre rajouté, qui est bien), on a tous les éléments pour comprendre. Eventuellement tu pourrais laisser à vue seulement une partie du code:

[Bindable]
private var layouts : ArrayCollection;

private function applicationCompleteListener(event : FlexEvent) : void {
        layouts = new ArrayCollection();
        layouts.addItem({label:'Vertical', data:new VerticalLayout()});
        layouts.addItem({label:'Horizontal', data:new HorizontalLayout()});
        layouts.addItem({label:'Basic', data:new BasicLayout()});
        var tileLayout:TileLayout = new TileLayout();
        tileLayout.orientation = 'columns';
        layouts.addItem({label:'Grille', data:tileLayout});
}

<s:DropDownList
        id="layoutList"
        requireSelection="true"
        width="190"
        dataProvider="{layouts}" />

<s:DataGroup
        width="100%" height="100%"
        layout="{layoutList.selectedItem.data}"
        dataProvider="{dataSource}"
        itemRenderer="com.autourdeflash.flex4.demos.customlayouts.renderers.SimpleRenderer">
</s:DataGroup>
 
Ce qui me semble bien suffisant, puisque le reste du code n'est pas en rapport avec le sujet. Quand à la source intégrale mxml de la 2eme application, là je crois que c'est vraiment superflu, c'est quasi la même chose. C'est surtout la classe de layout le point de ce chapitre.
Enfin bon, j'arrête là avec mes considérations de mise en page, tu prends, tu laisses, ne te formalise pas de mes chipottis, c'est que je pense que la forme est importante :)



Voir le messagelilive, le 30 March 2011 - 16:00 PM, dit :

Qu'est-ce que SimpleRenderer dans tes sources?
Je compile avec Flex4 et j'ai:
Pas de trace de cette classe dans la doc. Je rate quelque chose?

Voir le messageautourdeflash, le 30 March 2011 - 16:34 PM, dit :

désolé le chemin correct est com.autourdeflash.flex4.demos.customlayouts pour reprendre ce que j'ai écrit plus haut.

C'est ma faute, désolé, j'étais géné par ce long chemin de package, alors j'ai copié et adapté les sources comme ceci, sauf que j'ai raté le dossier renderers au passage :oops:


Une chose m'a génée pour comprendre les sources, c'est justement l'utilisation d'un itemRenderer. J'ai peu de pratique de flex, mais le tuto s'adresse à des personnes comme moi, donc je te le dis. J'ai trouvé un changement possible qui demande peut-être moins de connaissances pour le comprendre:
<fx:Script>
                <![CDATA[
                        import spark.layouts.BasicLayout;
                        import spark.layouts.HorizontalLayout;
                        import spark.layouts.TileLayout;
                        import spark.layouts.VerticalLayout;
                       
                        import spark.components.Button;
                        import mx.collections.ArrayCollection;
                        import mx.events.FlexEvent;
                        import flash.events.MouseEvent;
                       
                        [Bindable]
                        private var layouts : ArrayCollection;

                        private function applicationCompleteListener(event : FlexEvent) : void {
                                layouts = new ArrayCollection();
                                layouts.addItem({label:'Vertical', data:new VerticalLayout()});
                                layouts.addItem({label:'Horizontal', data:new HorizontalLayout()});
                                layouts.addItem({label:'Basic', data:new BasicLayout()});
                               
                               
                                var tileLayout:TileLayout = new TileLayout();
                                tileLayout.orientation = 'columns';
                                layouts.addItem({label:'Grille', data:tileLayout});
                               
                                setDataSource();
                        }
                       
                        private function setDataSource():void {
                                if (group.numElements > 0) group.removeAllElements();
                               
                                var button:Button;
                                for ( var x:int = 1; x < 5; x++ ){
                                        button = new Button();
                                        button.label = x.toString();
                                        group.addElement( button );
                                }
                        }
                       
                        private function addItem(event : MouseEvent) : void {
                                var button:Button = new Button();
                                button.label = (group.numChildren + 1).toString();
                                group.addElement( button );
                        }

                ]]>
        </fx:Script>
       
        <s:layout>
                <s:VerticalLayout gap="5"/>
        </s:layout>

        <s:HGroup>
                <s:DropDownList
                        id="layoutList"
                        requireSelection="true"
                        width="190"
                        dataProvider="{layouts}" />
       
                <s:Button label="Nouvel élément" click="addItem(event)"/>
                <s:Button label="Recommencez" click="setDataSource()"/>
        </s:HGroup>
       
        <s:Group
                id="group"
                width="100%" height="100%"
                layout="{layoutList.selectedItem.data}">
        </s:Group>

</s:Application>

Il n'y a plus d'itemRenderer, ni de <mx:ArrayCollection id="dataSource" />

Voilà c'est fini, penses bien à nous dire si tu aimes ou pas les critiques, qu'on le sache :)

Fichier(s) joint(s)



#12 autourdeflash

    Ceinture Jaune

  • Members
  • PipPip
  • 18 messages

Posté 01 April 2011 - 22:55 PM

Réponses ci-dessous

Voir le messagelilive, le 01 April 2011 - 18:17 PM, dit :

Bien tes changements je trouve, spécialement pour la progression.

Si tu veux un avis quand à l'affichage du code source mxml de tes 2 applications, je crois que ce n'était pas indispensable de le donner in-extenso, ça alourdit. A partir du moment où tu as expliqué comment on fait pour changer dynamiquement de layout (dans le chapitre rajouté, qui est bien), on a tous les éléments pour comprendre. Eventuellement tu pourrais laisser à vue seulement une partie du code:

[Bindable]
private var layouts : ArrayCollection;

private function applicationCompleteListener(event : FlexEvent) : void {
        layouts = new ArrayCollection();
        layouts.addItem({label:'Vertical', data:new VerticalLayout()});
        layouts.addItem({label:'Horizontal', data:new HorizontalLayout()});
        layouts.addItem({label:'Basic', data:new BasicLayout()});
        var tileLayout:TileLayout = new TileLayout();
        tileLayout.orientation = 'columns';
        layouts.addItem({label:'Grille', data:tileLayout});
}

<s:DropDownList
        id="layoutList"
        requireSelection="true"
        width="190"
        dataProvider="{layouts}" />

<s:DataGroup
        width="100%" height="100%"
        layout="{layoutList.selectedItem.data}"
        dataProvider="{dataSource}"
        itemRenderer="com.autourdeflash.flex4.demos.customlayouts.renderers.SimpleRenderer">
</s:DataGroup>
 
Ce qui me semble bien suffisant, puisque le reste du code n'est pas en rapport avec le sujet.
[AF] corrigé

Quand à la source intégrale mxml de la 2eme application, là je crois que c'est vraiment superflu, c'est quasi la même chose. C'est surtout la classe de layout le point de ce chapitre.
Enfin bon, j'arrête là avec mes considérations de mise en page, tu prends, tu laisses, ne te formalise pas de mes chipottis, c'est que je pense que la forme est importante :)

[AF] corrigé

C'est ma faute, désolé, j'étais géné par ce long chemin de package, alors j'ai copié et adapté les sources comme ceci, sauf que j'ai raté le dossier renderers au passage :oops:
Fichier-joint sources1.zip

Une chose m'a génée pour comprendre les sources, c'est justement l'utilisation d'un itemRenderer. J'ai peu de pratique de flex, mais le tuto s'adresse à des personnes comme moi, donc je te le dis. J'ai trouvé un changement possible qui demande peut-être moins de connaissances pour le comprendre:
<fx:Script>
                <![CDATA[
                        import spark.layouts.BasicLayout;
                        import spark.layouts.HorizontalLayout;
                        import spark.layouts.TileLayout;
                        import spark.layouts.VerticalLayout;
                       
                        import spark.components.Button;
                        import mx.collections.ArrayCollection;
                        import mx.events.FlexEvent;
                        import flash.events.MouseEvent;
                       
                        [Bindable]
                        private var layouts : ArrayCollection;

                        private function applicationCompleteListener(event : FlexEvent) : void {
                                layouts = new ArrayCollection();
                                layouts.addItem({label:'Vertical', data:new VerticalLayout()});
                                layouts.addItem({label:'Horizontal', data:new HorizontalLayout()});
                                layouts.addItem({label:'Basic', data:new BasicLayout()});
                               
                               
                                var tileLayout:TileLayout = new TileLayout();
                                tileLayout.orientation = 'columns';
                                layouts.addItem({label:'Grille', data:tileLayout});
                               
                                setDataSource();
                        }
                       
                        private function setDataSource():void {
                                if (group.numElements > 0) group.removeAllElements();
                               
                                var button:Button;
                                for ( var x:int = 1; x < 5; x++ ){
                                        button = new Button();
                                        button.label = x.toString();
                                        group.addElement( button );
                                }
                        }
                       
                        private function addItem(event : MouseEvent) : void {
                                var button:Button = new Button();
                                button.label = (group.numChildren + 1).toString();
                                group.addElement( button );
                        }

                ]]>
        </fx:Script>
       
        <s:layout>
                <s:VerticalLayout gap="5"/>
        </s:layout>

        <s:HGroup>
                <s:DropDownList
                        id="layoutList"
                        requireSelection="true"
                        width="190"
                        dataProvider="{layouts}" />
       
                <s:Button label="Nouvel élément" click="addItem(event)"/>
                <s:Button label="Recommencez" click="setDataSource()"/>
        </s:HGroup>
       
        <s:Group
                id="group"
                width="100%" height="100%"
                layout="{layoutList.selectedItem.data}">
        </s:Group>

</s:Application>

Il n'y a plus d'itemRenderer, ni de <mx:ArrayCollection id="dataSource" />
[AF] Pas d'accord. selon moi, un tutoriel doit donner les bons réflexes aux développeurs. Les utilisateurs de Flex s'y retrouveront avec mon code et les autres gagneront en apprenant les itemrenderers car pour moi dans ce cas il n'y a pas d'autres manières de faire même si ton code marche. Mon exemple est l'occasion de s'y mettre et c'est peut être une idée de tuto :-). Personnellement, je ne peux pas valider cette implémentation car elle n'est pas bonne. J'ai ajouté une section pré-requis.

Voilà c'est fini, penses bien à nous dire si tu aimes ou pas les critiques, qu'on le sache :)

[AF] La dernière phrase est un peu ambigu. Je n'ai pas de soucis avec les critiques (que je vois plus comme des remarques) et j'en suis désolé si c'est l'impression que je t'ai donné. C'est votre forum et c'est à moi de trouver la forme pour que cela soit conforme à vos attentes.

J'attends tes remarques sur la traduction de l'article de Mickael Chaize :).
Bon week-end.




#13 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 02 April 2011 - 14:52 PM

Hello,

Citation

Citation

Une chose m'a génée pour comprendre les sources, c'est justement l'utilisation d'un itemRenderer. J'ai peu de pratique de flex, mais le tuto s'adresse à des personnes comme moi, donc je te le dis. J'ai trouvé un changement possible qui demande peut-être moins de connaissances pour le comprendre:
Pas d'accord. selon moi, un tutoriel doit donner les bons réflexes aux développeurs.
Tout à fait d'accord là-dessus.

Citation

Les utilisateurs de Flex s'y retrouveront avec mon code et les autres gagneront en apprenant les itemrenderers car pour moi dans ce cas il n'y a pas d'autres manières de faire même si ton code marche. Mon exemple est l'occasion de s'y mettre et c'est peut être une idée de tuto :-). Personnellement, je ne peux pas valider cette implémentation car elle n'est pas bonne. J'ai ajouté une section pré-requis.
Comme je disais j'ai peu d'expérience avec flex, donc si mon code n'est pas satisfaisant (ce qui ne m'étonnes pas) laissons le tien. C'est bien d'avoir mis les pré-requis, il faut toujours essayer de les mettre.

Citation

Citation

Voilà c'est fini, penses bien à nous dire si tu aimes ou pas les critiques, qu'on le sache :)
La dernière phrase est un peu ambigu. Je n'ai pas de soucis avec les critiques (que je vois plus comme des remarques) et j'en suis désolé si c'est l'impression que je t'ai donné. C'est votre forum et c'est à moi de trouver la forme pour que cela soit conforme à vos attentes.
Non non tu ne m'as pas donné d'impression, c'était pour savoir. Parfait, et merci pour les changements :)

#14 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 02 April 2011 - 15:10 PM

Voilà j'ai ajouté le lien vers les sources.



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP