Accueil > Forum > > > > removeChild
removeChild
mardi 26 juillet 2011 à 13:15:42 |
removeChild

Ariranha
|
Bonjour,
Je suis actuellement en train de travailler sur un site multilingue avec chargement des contenus via xml.
Chaque page contient un mini-menu et comme je ne connais pas les tailles des textes, etc, j'ai 2 fonctions menu();
et sousMenu(); [voir code ci-dessous] dans lesquelles je créé les éléments (TextField, MovieClip, Array) et les
ajoutent à un container.
Quand je change de page je réutilise les fonctions mentionnées ci-dessus pour modifié le contenu sauf que j'ai
l'erreur suivante :
TypeError: Error #2007: Le paramètre text ne doit pas être nul.
Je pensais pouvoir régler cela en faisant tout simplement un removeChild(container);
mais rien n'y fait.
Faut-il faire cette opération pour tous les éléments créés dans "container", à savoir vider les array, et les child
contenus dans "container" ?
Si c'est le cas j'ai certaines variables qui sont créées dans une boucle for donc inaccessibles dans d'autres
fonctions y a-t-il un moyen d'y remédier ?
Merci.
Code ActionScript : var formatTitre:TextFormat = new TextFormat();
formatTitre.font = myFont.fontName;
formatTitre.color = 0xFFFFFF;
formatTitre.size = 16;
formatTitre.align = TextFormatAlign.CENTER;
formatTitre.kerning = true;
var formatSousTitre:TextFormat = new TextFormat();
formatSousTitre.font = myFont.fontName;
formatSousTitre.color = 0xFFFFFF;
formatSousTitre.size = 12;
formatSousTitre.align = TextFormatAlign.CENTER;
formatSousTitre.kerning = true;
var mPosX:Number = 25;
var mPosY:Number = 80;
var mPosW:Number = 203;
var margeMenu:Number = 20;
var margeSousMenuP:Number = 30;
var margeSousMenuG:Number = 50;
var container:Sprite = new Sprite;
container.alpha = 0;
container.x = 640;
var cMenu:MovieClip = new MovieClip;
var cSousMenu:MovieClip = new MovieClip;
var yMenu:Array = new Array();
var aMenu:Array = new Array();
var hMenu:Array = new Array();
var aSousMenu:Array = new Array();
var ySousMenu:Array = new Array();
var aSeparation:Array = new Array();
var mArray:Array = new Array();
var sArray:Array = new Array();
var stockXmlMenu:XML;
var titreList:XMLList;
var nTitre:Number = 0;
var stockXmlSousMenu:XML;
var sousTitreList:XMLList;
var nSousTitre:Number = 0;
var tailleScroll:Number = 82;
var bounds:Rectangle;
var scrolling:Boolean = false;
var menuEnCours:String = new String();
var menuActif:String = "menus-fermes";
var overWatchTheFilm:OverWatchOrigin = new OverWatchOrigin();
var yOverWatch:Number;
var scrollEnCours:Number;
var tween:Number = 60;
var curseur:Cursor = new Cursor();
curseur.alpha = 0;
addChild(curseur);
function xmlContent ():void
{
var loadXml:URLLoader = new URLLoader;
var lienXml:String = new String();
switch (etatNav)
{
case "the-jewel":
lienXml = "xml/content-the_jewel_cosmetic-en.xml";
break;
case "the-line":
lienXml = "xml/content-the_line-en.xml";
break;
case "the-secret":
lienXml = "xml/content-the_secret-en.xml";
break;
}
var xml:URLRequest = new URLRequest(lienXml);
loadXml.addEventListener (Event.COMPLETE,xmlLoadComplete);
loadXml.load (xml);
addChild(container);
}
function xmlLoadComplete (e:Event):void
{
stockXmlMenu = new XML(e.target.data);
titreList = stockXmlMenu.menu.submenu.titre;
sousTitreList = stockXmlMenu.menu.submenu.contenu;
for each (var titre:XML in titreList)
{
nTitre++;
}
for each (var sousTitre:XML in sousTitreList)
{
nSousTitre++;
}
menu();
}
function menu() {
container.addChild(cMenu);
for(var i=0; i<=(nTitre-1); i++)
{
var titreText:TextField = new TextField();
titreText.defaultTextFormat = formatTitre;
titreText.htmlText = titreList[i];
titreText.name = "titre"+i;
titreText.selectable = false;
titreText.wordWrap = true;
titreText.embedFonts = true;
titreText.width = mPosW;
if (titreText.length >= 22)
{
titreText.height = 42;
}
else
{
titreText.height = 20;
}
titreText.y = mPosY;
mPosY = (titreText.y+titreText.height)+margeMenu;
var separation:Shape = new Shape();
separation.graphics.beginFill(0xFFFFFF);
separation.graphics.drawRect(0, 0, 23, 1);
separation.x = (cMenu.width/2)-22;
separation.y = titreText.y - 9;
aSeparation.push(separation);
aMenu.push(titreText);
yMenu.push(titreText.y);
hMenu.push(titreText.height);
cMenu.addChild(separation);
cMenu.addChild(titreText);
}
aSeparation[0].alpha = 0;
cMenu.x = 160;
cMenu.buttonMode = true;
//cMenu.mouseChildren = false;
cMenu.addEventListener(MouseEvent.CLICK, cMenuClick);
cMenu.addEventListener(MouseEvent.MOUSE_OVER, cMenuOver);
cMenu.addEventListener(MouseEvent.MOUSE_OUT, cMenuOut);
sousMenu();
}
function sousMenu():void
{
container.addChildAt(cSousMenu, 0);
for(var j=0; j<=(nSousTitre-1); j++)
{
var sousTitreText:TextField = new TextField();
sousTitreText.defaultTextFormat = formatSousTitre;
sousTitreText.htmlText = sousTitreList[j];
sousTitreText.name = "sousTitre"+j;
sousTitreText.selectable = false;
sousTitreText.mouseWheelEnabled = false;
sousTitreText.wordWrap = true;
sousTitreText.embedFonts = true;
sousTitreText.width = 283;
sousTitreText.height = 102;
aSousMenu.push(sousTitreText);
if (hMenu[j] == 20)
{
sousTitreText.y = yMenu[j]+margeSousMenuP;
}
else
{
sousTitreText.y = yMenu[j]+margeSousMenuG;
}
ySousMenu.push(sousTitreText.y);
var masque:Masque = new Masque();
masque.name = "masque"+j;
mArray.push(masque);
masque.y = sousTitreText.y;
sousTitreText.x = masque.x = -13;
sousTitreText.mask = masque;
mPosY += 125;
var scrollBar:Scroll = new Scroll();
scrollBar.y = sousTitreText.y;
scrollBar.x = (sousTitreText.x + sousTitreText.width);
scrollBar.alpha = 0;
sArray.push(scrollBar);
bounds = new Rectangle(scrollBar.scrollBtn.x, scrollBar.scrollBtn.y, 0, tailleScroll);
cSousMenu.addChild(scrollBar);
cSousMenu.x = ((cMenu.width/2)+(cSousMenu.width/2))-130;
cSousMenu.addChild(sousTitreText);
cSousMenu.addChild(masque);
}
switch(etatNav)
{
case "the-jewel":
overWatchTheFilm.alpha = 0;
overWatchTheFilm.x = cSousMenu.x+65;
overWatchTheFilm.gotoAndStop(1);
cSousMenu.addChild(overWatchTheFilm);
container.y = (((contentJewel.height/2)+(container.height/2))+200);
TweenMax.to(container, 2,{alpha:1, y:(((contentJewel.height/2)+(container.height/2))-55)});
break;
case "the-secret":
overWatchTheFilm.alpha = 0;
overWatchTheFilm.x = cSousMenu.x+65;
overWatchTheFilm.gotoAndStop(2);
cSousMenu.addChild(overWatchTheFilm);
container.y = ((contentJewel.height/2)+(container.height/2));
TweenMax.to(container, 2,{alpha:1, y:(((contentJewel.height/2)+(container.height/2))-145)});
break;
case "the-line":
container.y = (((contentJewel.height/2)+(container.height/2))+200);
TweenMax.to(container, 2,{alpha:1, y:(((contentJewel.height/2)+(container.height/2))-65)});
break;
}
}
|
|
mardi 26 juillet 2011 à 14:05:11 |
Vider contenu sprite

Ariranha
|
Je viens de résoudre le problème concernant l'erreur :
TypeError: Error #2007: Le paramètre text ne doit pas être nul.
En effet j'avais oublié de réinitialiser les valeurs à 0 de nTitre et de nSousTitre avant le code suivant :
Code ActionScript : for each (var titre:XML in titreList)
{
nTitre++;
}
for each (var sousTitre:XML in sousTitreList)
{
nSousTitre++;
}
Ceci dit je me retrouve toujours avec un problème à savoir que "container" ne se vide pas de son contenu et les
différents mini-menus de chaque page se chargent les uns en dessous des autres malgré le fait que je fasse :
Code ActionScript : yMenu.length = 0;
aMenu.length = 0;
hMenu.length = 0;
aSousMenu.length = 0;
ySousMenu.length = 0;
aSeparation.length = 0;
mArray.length = 0;
sArray.length = 0;
removeChild(container);
Est-ce que quelqu’un voit une solution à mon problème ..?
|
|
mardi 26 juillet 2011 à 23:36:37 |
Re : removeChild

aerolyte
|
Réponse acceptée !
Bonjour
Code ActionScript : //tu peux cumuler les valeurs dans une meme egalité
var formatTitre:TextFormat=new TextFormat();
var formatSousTitre:TextFormat=new TextFormat();
formatTitre.font=formatSousTitre.font=myFont.fontName;
formatTitre.color=formatSousTitre.color=0xFFFFFF;
formatTitre.size=16;
formatSousTitre.size=12;
formatTitre.align=formatSousTitre.font=TextFormatAlign.CENTER;
formatTitre.kerning=formatSousTitre.kerning=true;
/*non utilisé dans le bout de code fourni
var menuEnCours:String=new String();
var menuActif:String="menus-fermes";
var scrolling:Boolean=false;
var mPosX:Number=25;
var yOverWatch:Number;
var scrollEnCours:Number;
var tween:Number=60;
/* inutil voir plus loin
var nTitre:int=0;
var nSousTitre:int=0;
var stockXmlSousMenu:XML;
var titreList:XMLList;
var sousTitreList:XMLList;
var yMenu:Array=new Array();
var hMenu:Array=new Array();
var aMenu:Array=new Array();
var aSeparation:Array=new Array();
*/
var mPosW:Number=203;
var mPosY:Number=80;
//si les valeur suivante ne sont pas amenés a tre modifier il est d'usage d'utiliser des constantes et de les typer int.
const margeMenu:int=20;
const margeSousMenuP:int=30;
const margeSousMenuG:int=50;
const tailleScroll:int=82;
//vue la quantité de array, je met ma main au feu que tu ne connais pas les possibillités d'un array surtout si tu l'utilise comme un vector
var aSousMenu:Array=new Array();
var ySousMenu:Array=new Array();
var mArray:Array=new Array();
var sArray:Array=new Array();
var stockXmlMenu:XML;
//il ne faut pas oublier les parenthèses();
var curseur:Cursor=new Cursor();
var container:Sprite=new Sprite();
container.alpha=curseur.alpha=0;
container.x=640;
var cMenu:MovieClip=new MovieClip();
cMenu.x=160;
var cSousMenu:MovieClip=new MovieClip();
var bounds:Rectangle;
var overWatchTheFilm:OverWatchOrigin=new OverWatchOrigin();
addChild(curseur);
container.addChild(cMenu);
addChild(container);
/*
je comprends pas pourquoi tout mettre sur un seul xml pose pb.
<parent>
<ele>le contenu de ton xml the_jewel</ele>
<ele>le contenu de ton xml the_line</ele>
<ele>le contenu de ton xml the_secret</ele>
</parent>
reste qu'a stocker une variable indiquant quel noeud ele est actuellemeny utilisé
par exemple val:int=1;
avec comme ciblage
stockXmlMenu.ele[val].menu.etc....
*/
var val:int=0;
private function xmlContent():void{
var loadXml:URLLoader=new URLLoader();
var xml:URLRequest=new URLRequest("xml_complet");
loadXml.addEventListener(Event.COMPLETE,xmlLoadComplete);
loadXml.load(xml);
}
function xmlLoadComplete(e:Event):void{
//tu peut suppprimer l'eventListener vu que tu peut faire sur un seul xml
stockXmlMenu=new XML(e.target.data);
//pas sur que l'utilsation de xmlList se jusitfie
//titreList=stockXmlMenu.menu.submenu.titre;
//sousTitreList=stockXmlMenu.menu.submenu.contenu;
//alors la tu fais des incrémentations complétement inutile
//un xml a des propriété bien utile pour peu qu'il soit bien construit
//par exemple trace(stockXmlMenu.ele[val].menu.length);
//te donneras directement le nombre total de noeuds
//for each (var titre:XML in titreList){nTitre++;}
//for each (var sousTitre:XML in sousTitreList){nSousTitre++;}
menu();
}
function menu(){
//n'ayant pas l'xml de dispo, je me base uniquement sur ce que tu as ecrit, mais c'est clairement faux car cela signifierai que ta balise menu est inutile
var imax:int=stockXmlMenu.ele[val].menu.submenu.length;
for(var i=0; i<imax; i++){
var titreText:TextField=new TextField();
titreText.defaultTextFormat=formatTitre;
titreText.htmlText=stockXmlMenu.ele[val].menu.submenu[i].titre;
titreText.name="titre"+i;
titreText.selectable=false;
titreText.wordWrap=titreText.embedFonts=true;
titreText.width=mPosW;
// inutile regarde la propriété autosize
//if(titreText.length>=22){titreText.height=42;}else{titreText.height=20;}
titreText.autoSize=TextFieldAutoSize.LEFT;
// la gestion des positions en y peut etre faite très différemment, mais bon
titreText.y=mPosY;
mPosY=(titreText.y+titreText.height)+margeMenu;
var separation:Shape=new Shape();
//il est préféranle de nommer les éléments créer dans une boucle
separation.name="sep"+i;
separation.graphics.beginFill(0xFFFFFF);
separation.graphics.drawRect(0,0,23,1);
separation.x=(cMenu.width/2)-22;
separation.y=titreText.y-9;
/*mort de rire, vive les array inutiles
a t'on avis si l'on fait:
var ptitre:Texfield=aMenu[0] as TextField;
trace(pTitre.y);
on aura pas la meme chose que si on fait
trace(aMenu[0]):
ben si? quand tu construit un tableau d'objet, ils garde leur propriétés
*/
//yMenu.push(titreText.y);
//hMenu.push(titreText.height);
//maintenant quel est l'interet de mettre les éléments titretetxt et separateur dans un array?
// ben a rien non?
//aMenu.push(titreText);
//aSeparation.push(separation);
cMenu.addChild(separation);
cMenu.addChild(titreText);
}
// et oui sa marche
var psep:Shape=cMenu.getChildByName("sep0");
psep.alpha=0;
cMenu.buttonMode=true;
cMenu.addEventListener(MouseEvent.CLICK,cMenuClick);
cMenu.addEventListener(MouseEvent.MOUSE_OVER,cMenuOver);
cMenu.addEventListener(MouseEvent.MOUSE_OUT,cMenuOut);
//a partir de la je te laisse faire mais en gros:
//tu peux gérer tes sousmenu directement dans ta boucle menu au lieu de refaire une fonction
// et tout comme mes correctifs précédent tu peux fiir de faire sauter tout tes arrays et un paquet d'autre chose inutil
sousMenu();
}
function sousMenu():void
{
container.addChildAt(cSousMenu, 0);
for(var j=0; j<=(nSousTitre-1); j++)
{
var sousTitreText:TextField=new TextField();
sousTitreText.defaultTextFormat=formatSousTitre;
sousTitreText.htmlText=sousTitreList[j];
sousTitreText.name="sousTitre"+j;
sousTitreText.selectable=false;
sousTitreText.mouseWheelEnabled=false;
sousTitreText.wordWrap=true;
sousTitreText.embedFonts=true;
sousTitreText.width=283;
sousTitreText.height=102;
aSousMenu.push(sousTitreText);
if (hMenu[j] == 20)
{
sousTitreText.y=yMenu[j]+margeSousMenuP;
}
else
{
sousTitreText.y=yMenu[j]+margeSousMenuG;
}
ySousMenu.push(sousTitreText.y);
var masque:Masque=new Masque();
masque.name="masque"+j;
mArray.push(masque);
masque.y=sousTitreText.y;
sousTitreText.x=masque.x=-13;
sousTitreText.mask=masque;
mPosY += 125;
var scrollBar:Scroll=new Scroll();
scrollBar.y=sousTitreText.y;
scrollBar.x=(sousTitreText.x + sousTitreText.width);
scrollBar.alpha=0;
sArray.push(scrollBar);
bounds=new Rectangle(scrollBar.scrollBtn.x, scrollBar.scrollBtn.y, 0, tailleScroll);
cSousMenu.addChild(scrollBar);
cSousMenu.x=((cMenu.width/2)+(cSousMenu.width/2))-130;
cSousMenu.addChild(sousTitreText);
cSousMenu.addChild(masque);
}
switch(etatNav)
{
case "the-jewel":
overWatchTheFilm.alpha=0;
overWatchTheFilm.x=cSousMenu.x+65;
overWatchTheFilm.gotoAndStop(1);
cSousMenu.addChild(overWatchTheFilm);
container.y=(((contentJewel.height/2)+(container.height/2))+200);
TweenMax.to(container, 2,{alpha:1, y:(((contentJewel.height/2)+(container.height/2))-55)});
break;
case "the-secret":
overWatchTheFilm.alpha=0;
overWatchTheFilm.x=cSousMenu.x+65;
overWatchTheFilm.gotoAndStop(2);
cSousMenu.addChild(overWatchTheFilm);
container.y=((contentJewel.height/2)+(container.height/2));
TweenMax.to(container, 2,{alpha:1, y:(((contentJewel.height/2)+(container.height/2))-145)});
break;
case "the-line":
container.y=(((contentJewel.height/2)+(container.height/2))+200);
TweenMax.to(container, 2,{alpha:1, y:(((contentJewel.height/2)+(container.height/2))-65)});
break;
}
}
Cordialement
|
|
mardi 26 juillet 2011 à 23:38:56 |
Re : removeChild

aerolyte
|
Réponse acceptée !
correction
on aura pas la meme chose que si on fait
trace(yMenu[0]):
|
|
mercredi 27 juillet 2011 à 11:18:47 |
Re : removeChild

Ariranha
|
Bonjour,
Et merci pour les éléments que tu viens de m'apporter.
//si les valeur suivante ne sont pas amenés a tre modifier il est d'usage d'utiliser des constantes et de les typer int.
C'est bon à savoir.
//vue la quantité de array, je met ma main au feu que tu ne connais pas les possibillités d'un array surtout si tu l'utilise comme un vector
Apparement non
//tu peut suppprimer l'eventListener vu que tu peut faire sur un seul xml
Malheureusment non car c'est une demande du client, un fichier xml par page.
Sinon encore un grand merci pour ta réponse.
Je vais tenter d'optimiser le tout avec les éléments que tu m'as donné.
Bonne journée.
|
|
mercredi 27 juillet 2011 à 11:27:27 |
Re : removeChild

Ariranha
|
Sinon j'ai résolu mon problème initial. Je pensais qu'en vidant sprite principal à savoir "container" ce serait bon.
Or si je vide aussi le contenu des objet contenu dans container cela marche à savoir :
Code ActionScript : while(cMenu.numChildren>0)
{
cMenu.removeChildAt(0);
}
while(cSousMenu.numChildren>0)
{
cSousMenu.removeChildAt(0);
}
Encore merci.
|
|
Cette discussion est classée dans : var, array, height, container, soustitretext
Répondre à ce message
Sujets en rapport avec ce message
Chifres aléatoires non répétés [ par n_lefebvre ]
Salut,Je débute un peu dans Flash et ActionS. Je dévelope un clip qui doit attribuer 22 chiffres de maniere aléatoire a dans un liste en Array, mais i
If "valeur" est dans array() .... [ par mattdelavega ]
BonjourJ'ai des tableaux avec tous les départements françaisCeux ci sont répartis en 4 Zones : var Zone_1 = new Array
gallerie image [ par moveslang ]
Bonjour tout le monde, un petit problème avec un tuto que j'ai choppé je ne sais plus où. il s'agit de réaliser une gallerie photo. j'essaie de modifi
Création en manipulation de clip en AS [ par ypauleau ]
J'ai cherché sur le net et j'ai toujours pas compris, Voici mon problème : Je cherche à créer des instances d'un clip que j'ai créer dans la bibliothè
pb de progressbar [ par lespaulz ]
Bonjour,Afin de progresser en AS.Je suis en train d'essayer de mettre en place une galerie photo.Ceci m'a permis de comprendre la manipulation des Mov
affiche_photos aléatoirement [ par kartoon ]
Bonjour,Voilà j'ai un code qui va chercher des photos dans un fichier nommé "images" dans lequel se trouve 11 photos au format jpg, et qui pioche les
array de classes??? [ par Jamesbound ]
Bonjour,J'ai créé une classe disons: PersonneJ'essais maintenant de l'inclure dans une collection de personne (ou autrement dit un Array de Personnes
Assigner une image dynamique à un clip [ par Vano05 ]
Bonjour à tous ! J'ai un petit probleme tout bete, mais qui me rend fou !Je voudrais adapter le code suivant pour assigner des positions bie
Problème de chargement array [ par adramele ]
Bonjour à tous !Je suis face à un soucis... je débute. Ce code va chercher une variable faite d'une séquence avec virgule dans un fichier php pour ens
array [ par kapac ]
bonjour;qui pourrait me renseigner ce qui ne marche pas ds le code suivant:mya = new Array();mya2 = new Array();var st:String;var y:Number=0;for(x=0;x
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|