IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flex Discussion :

Canvas addchild dynamique


Sujet :

Flex

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 77
    Points : 41
    Points
    41
    Par défaut Canvas addchild dynamique
    Salut, je me prends la tête sur un problème depuis ce matin.
    J'ai écrit une fonction qui prend comme argument l'id d'un canvas et créé une vidéo dans ce canvas.
    L'id du canvas vient du selectedItem d'une liste, j'ai essayé en faisant un textarea, bref, c'est pas le plus important.
    La fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    private function newvid(num:Canvas):void
    		{
    					trace(childlist.selectedItem);
    					vidnum +=1;
    					var vid:VideoDisplay = new VideoDisplay();
    					vid.id = "vid" + vidnum;
    					vid.width = 320;
    					vid.height = 240;
    					vid.source = "fichier.flv";
    					vid.x = 5;
    					vid.y = 5;
    					num.addChild(vid);
    					vid.play();
    		}
    et le bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <mx:Button id="vidbut" x="161" styleName="bottom" label="New Vid" click="newvid(childlist.selectedItem)"/>
    Le problème : on ne peut pas convertir un truc de type Object vers Canvas XD
    Que faire ?
    Il faut juste récupérer l'id du canvas à partir du bouton.

  2. #2
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    Salut,

    j'ai pas bien compris pourquoi tu voulais un canvas... pourquoi tu ne désignes pas ton arguement à newVid comme étant un entier?

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Points : 894
    Points
    894
    Par défaut
    Salut,

    La question n'est pas très claire...
    Tu dis avoir une fonction qui prend comme argument l'id du Canvas, or ta fonction prend comme argument l'objet Canvas lui-même...

    Pour convertir une instance de type Objet dans son type dérivé il suffit d'écrire :
    var cv : Canvas = Canvas(obj) ;
    ou
    var cv : Canvas = obj as Canvas ;

    Remarque : attention, dans ton code tu vas ajouter un objet VideoDisplay à chaque click. J'imagine que c'est juste un code de test.
    jyl@xx
    "Simplicity does not precede complexity, but follows it." Alan Perlis

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 77
    Points : 41
    Points
    41
    Par défaut
    Oui c'est juste un test. j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var cv : Canvas = obj as Canvas ;
    Erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeError: Error #1034: Echec de la contrainte de type*: conversion de "window1" en mx.containers.Canvas impossible.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Points : 894
    Points
    894
    Par défaut
    Tu as modifié ton interface de fonction ?
    Tu peux indiquer le code complet ?

    Normalement le "as" ne génère pas d'erreur mais renvoie null si l'objet n'est pas compatible avec le type.
    jyl@xx
    "Simplicity does not precede complexity, but follows it." Alan Perlis

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 77
    Points : 41
    Points
    41
    Par défaut
    Voici le code complet :

    la fonction newvid :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    private function newvid(obj:Object, src:String):void
    		{
    				var cv:Canvas = Canvas(obj);
    				trace (cv);
    				vidnum +=1;
    				var vid:VideoDisplay = new VideoDisplay();
    				vid.id = "vid" + vidnum;
    				vid.width = 320;
    				vid.height = 240;
    				vid.source = "http://www.site.fr/" + src;
    				vid.x = 5;
    				vid.y = 28;
    				cv.addChild(vid);
    				vid.play();
    		}
    Je passe l'argument via le selecteditem d'une liste contenant tous les canvas de mon appli.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <mx:Button id="vidbut" x="98" styleName="bottom" label="New Vid" click="newvid(childlist.selectedItem, 'fichier.flv')"/>
    Erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TypeError: Error #1034: Echec de la contrainte de type*: conversion de XML@2ccb461 element <child> en mx.containers.Canvas impossible.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Points : 894
    Points
    894
    Par défaut
    obj n'est pas du tout un Canvas, c'est un élément de la source de données de childlist.
    Quelle est la structure de cette source de données ?
    jyl@xx
    "Simplicity does not precede complexity, but follows it." Alan Perlis

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 77
    Points : 41
    Points
    41
    Par défaut
    XML créée par cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    private function makelist():void
    		{
    			var xm:XML = <children></children>;
    			for each (var child:Object in getChildren())
    				{
    					if(child is Canvas)
    						{
    							var nodeValue:String = child.id;
    							var xmlList:XMLList = XMLList("<child>"+nodeValue+"</child>");
    							xm.appendChild(xmlList);
    						}
    				}
    			childlist.dataProvider = xm.child;		
    		}
    Structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <children>
    <child>window1</child>
    <child>window2</child>
    ...
    ...
    </children>

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Points : 894
    Points
    894
    Par défaut
    ah! ok.
    En utilisant getChildByName avec le id de ton canvas tu obtiendras bien l'objet Canvas correspondant.
    jyl@xx
    "Simplicity does not precede complexity, but follows it." Alan Perlis

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 77
    Points : 41
    Points
    41
    Par défaut
    En faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var cv:Canvas = getChildByName(obj) as Canvas;
    ça plante aussi, peux-tu m'expliquer comment faire ?

    Edit: trouvé =D

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var aa:String = obj.toString();
    var cv:Canvas = getChildByName(aa) as Canvas;
    cv.addChild ....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment effacer dynamiquement un item du Canvas ?
    Par rosie80 dans le forum Tkinter
    Réponses: 4
    Dernier message: 12/09/2009, 12h22
  2. Changement de style dynamique sur un canvas
    Par cocacola0589 dans le forum Flex
    Réponses: 2
    Dernier message: 14/07/2009, 13h58
  3. Resize dynamique d'un canvas (qui en contient un autre)
    Par Kadelka dans le forum Silverlight
    Réponses: 0
    Dernier message: 06/04/2009, 10h01
  4. Canvas sur des Tpanels dynamique
    Par BuzzLeclaire dans le forum Composants VCL
    Réponses: 17
    Dernier message: 02/10/2008, 13h24
  5. Réponses: 2
    Dernier message: 01/09/2008, 07h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo